随着安全防护技术水平的提高以及安全设备对攻击行为检测能力的提升,传统WEB攻击手段越来越难以有效突破防守单位的高强度防守。钓鱼攻击逐渐受到红队的重视。与传统的攻击手段相比,钓鱼攻击成功率高,往往能达到较好的攻击效果。
任何钓鱼攻击都应该在前期做好足够的信息收集和整合。如收集目标企业的招聘信息、招投标信息、法律纠纷、供应链信息、职员手机号、社交账号、域名、企业组织机构、高管姓名等。
钓鱼攻击最理想的情况是在信息收集过程中获取了企业某个员工、管理员邮箱口令;或者获取了某个Web服务器权限,在配置文件中找到了邮箱信息;再或者获取了办公系统权限或账密,并且办公系统中存在工作流或邮件收发功能,这样便拥有了一个企业内部的合法身份。
从钓鱼攻击的路径可以简单分为以下几种钓鱼攻击方式。
1、社交钓鱼:微信、QQ、钉钉、社交群聊,这类钓鱼适合在信息收集阶段,发现目标在互联网泄露联系方式的情况,如发现该公司钉钉或QQ群,发现公司某员工手机号,通过手机号获取社交账号好友关系等。社交平台钓鱼是以社交网站或软件作为平台,通过发送病毒链接或欺诈消息打开链接后下载木马,窃取用户机密信息。
2、邮件钓鱼:在信息收集阶段获取目标招聘、法务纠纷、招投标等信息,可以尝试进行邮件钓鱼攻击,该类钓鱼攻击适合目标在互联网发布公开信息的情况。电子邮件钓鱼是目前最为常见的一种钓鱼攻击方式。可以通过发送伪造的邮件,伪装成银行、电信、政府机构等,以获取敏感信息或投递恶意程序。
3、网站欺诈:利用邮件、社交等渠道,以友好和诱人的形式,诱导用户点击链接,将目标转到已伪装站点,骗取用户账号和密码。
4、被动钓鱼:Github代码仓库、Python库等、公开文档,被动钓鱼适合大型攻防演练、APT攻击等,在互联网侧广泛释放虚假信息迷惑目标进行下载、安装、运行等。
钓鱼攻击可分为以下几类:
1、鱼叉攻击:鱼叉攻击主要是针对特定人员制定特定的攻击话术,而非普遍撒网,对于大范围的钓鱼攻击被发现的概率将会大大增加,因此实战过程中,攻击人员通常更愿意对特定的群体进行钓鱼攻击。如在攻防演练中,红队师傅尤其注重对运维人员的钓鱼攻击,往往运维人员主机上存放有系统台账,大概率涵盖重要业务系统。一旦上钩将对内网突破带来较大增益。
2、水坑攻击:在目标的必经之路上设置陷阱等待目标经过并且触发,从而在受害者主机上植入木马。通常是利用组织重要业务系统漏洞或权限,放置恶意代码,正常用户一旦访问,便会触发恶意代码获取目标主机权限。
3、鲸钓攻击:主要针对企业高层管理人员的钓鱼攻击,这类目标往往不会和普通员工一样接受网络安全意识培训,普遍对于钓鱼攻击的防范意识不足,更容易攻击成功,并且攻击该类人员成功后获取的信息价值更高,危害更强。
钓鱼话术是进行钓鱼攻击的重要一环,不同的话术是对应不同的钓鱼目标,可以起到不同的攻击效果。在准备钓鱼攻击前,需要对钓鱼对象有足够的了解。如目标企业员工联系方式、是否身处企业内部:重要通过目标职位、部门判断,如公司行政职位、办公设备是否接入公司网络、目标在公司的职位岗位、设备是否安装杀软,或杀软类型。
钓鱼攻击话术至关重要,相对于漏洞攻击需要掌握娴熟的技术,需要对各类代码,编程语言较为熟悉不同。钓鱼攻击的对象是人,钓鱼是否成功很大程度上取决于攻击者的社交能力。如同魔术师一切的表演都是为了转移观众注意力掩饰“魔术道具”一样,钓鱼攻击的话术也是通过话术试图将“鱼钩”隐藏在花言巧语之中。
钓鱼攻击永远绕不过的坎便是对抗杀软,在计算机普遍安装个人杀软,企业部署沙箱、企业级EDR的情况下,未经处理的木马程序很难落地或执行。定制免杀木马,以便能通过目标沙箱检查和杀软查杀。最好能够在信息收集时或与受害者沟通时打探清楚目标是否存在杀软,使用什么样的杀软,以便能够制作相对应免杀的木马样本。能够利用欺骗的艺术,使目标关闭杀软是最简单的方案,但是现实通常是攻击方无法获取目标杀软情况,一切都是黑盒操作,为保证钓鱼攻击成功率,则只能制作足够强的免杀,能够bypass更多的杀软。
想要制作免杀木马,就要了解杀软工作原理。杀软通常会对软件进行静态分析和动态分析。在静态分析中,杀软会检查文件的二进制代码,扫描其中的特定模式和指令序列,以识别可能的恶意行为。包括查找已知的恶意签名和计算机病毒,比对文件是否存在恶意行为等。静态免杀是指攻击者使用技巧来使其恶意软件在静态分析下无法被杀软检测出来,例如修改文件格式、使用加壳器或混淆器、隐藏恶意代码等。而动态分析则是在实际运行时监控程序的行为,观察它的系统调用、网络流量、文件操作和其他行为。这可以帮助杀软识别那些使用代码混淆、加密或其他技术隐藏的恶意行为。动态免杀是指攻击者使用技巧来使其恶意软件在动态分析下无法被杀软检测出来,例如使用虚拟化技术、进程注入、代码混淆、反调试技术、反沙箱、动态生成恶意代码等绕过杀软的分析功能。
以下简单介绍几种免杀木马制作的方式。
免杀加载器通过将加密、编码、字符串替换等方式处理后的Shellcode逆向处理还原出真正的shellcode,并将shellcode写入到内存中执行。
这里写了一个简单的免杀木马加载器。可以看到cs生成的二进制shellcode里面是有一些特征存在的,各大杀软对cs的shellcode严密查杀。将shellcode通过加密、编码、混淆、隐藏的方式进行转换后动态生成。
将shellcode取反后已经消除了大部分特征。
在处理shellcode的时候将其逆向处理,如:
buf[i] ^= 186; 异或
buf[i] = -buf[i]; 取反
dshellcode = decrypt(key,encrypy_shellcode) 解密
dshellcode = base64decode(encode_shellcode) base64解码
remove_obscure = obscure_shellcode.replace(“somechar”) 字符串替换等方式还原shellcode。
申请足够的可读写执行的内存空间,并将shellcode写入内存空间中
PVOID hAlloc = VirtualAlloc(NULL, length, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(hAlloc, buf, length);
通过Hook shellcode获取句柄,在内存中执行shellcode即可成功上线。将病毒库更新到最新,杀软静态查杀通过。
主机正常上线,命令正常执行,杀软未进行拦截。
类似C,C++语言的加载器被各大杀软严密监控,可以尝试使用其他工具的加载器,如前期兴起的python、go语言,再如近期被应用于免杀领域较多的nim开发语言,小众语言对绕过杀软有奇效。
相对于shellcode在免杀中是弹药的角色,加载器则是武器的角色,杀软通过分析程序的行为可能识别出代码是加载器代码或通过加载器的内存特征从而进行查杀,因此对于此类情况不论怎样变换shellcode,杀软还是能完美查杀恶意程序。对于此类情况,简单的思路是更换shellcode的加载方式或混淆加载器代码。这里简单实现一种混淆加载器过杀软的方法。通过对加载器进行代码填充、随机变量名生成动态生成加载器。
除了自己写免杀加载器外,有许多开源免杀工具可供使用如veil、venom、avet等,此类开源免杀均附带使用方法,不多过多赘述。值得注意的是,开源免杀被使用的较多,对于此类免杀技术很快会被杀软识别查杀并入特征库,想要对抗杀软,最重要的是保持免杀技术的新鲜性。
分离免杀本质还是加载器免杀,只是将加载器和shellcode进行分离,往往和加载器免杀结合使用,实战中应该选择合适的方式进行攻击。利用开源工具实现分离免杀。分离免杀相对于shellcode加载器来说会更加隐蔽,一般是通过shellcode加载器通过远程或本地抓取的方式,将编码、加密、混淆、隐藏等操作处理后的shellcode逆向还原后写入内存。
此外分离免杀对于shellcode的混淆有先天优势。允许对恶意脚本做更多操作,如在代码中增加shellcode处理过程。将shellcode进行加密或编码后隐藏到正常文件中如一张图片中,进行隐写或直接写入文件内部。创建加载器将藏有shellcode的图片加载到本地,对shellcode进行提取,写入内存并执行,就可以执行shellcode。可以藉此绕过部分杀软的流量监控远程加载shellcode。
相对于上面的两种免杀方式,加壳方式免杀比较简单,使用收集来的加壳程序将木马文件处理后,即可尝试免杀效果。但是往往事与愿违,杀软对加壳的程序往往更重视,同时杀软也可能对壳特征进行标记,导致本可以免杀的木马被查杀。如本处使用Shielden壳(默认选项)处理被识别为后门,未加壳的程序则报告为安全。
但是加壳后可以免杀其他部分杀软,未加壳的程序则被该杀软静态查杀,如下面加壳后的文件未被查杀。加壳后的start1_se.exe免杀。
不同的杀软对各类加壳识别率和查杀率均不一致。加壳可能能够绕过部分杀软检测,同时也可能增加木马的查杀率。因此对于加壳免杀,通常要尝试多种加壳程序和方式,本地测试能够过杀软的情况下再选用合适的壳绕过目标杀软。
修改特征码免杀可以做到高效精准免杀。原理是将木马文件分片成细小程序段后使用杀软进行查杀,被查杀的那个就是特征码所在的区段,对被查杀的区段再进行细分直至不报毒。Myccl是定位特征码位置的工具,打开myccl载入木马,使用杀软进行查杀,被查杀的那个就是特征码所在的区段,重复此操作直至杀软不报毒。然后对特征码修改,值得注意的是特征码修改可能会导致程序无法正常运行,需要具备一定的汇编知识。
使用virTest进行start1.exe的特征定位,该软件采用2分排除法,可以自动定位恶意文件中的特征码。首先关闭所有杀软点击制作测试文件,选择被木马免杀的文件,会自动再virTest同级目录生成virtest.vir文件,然后点击载入测试文件选择生成的virtest.vir文件,开启需要bypass的杀软,点击定位特征代码按键。杀软会对每个代码段进行自动查杀,部分杀软查杀慢需要手动确认来保证测试准确度。自动测试结束后,软件会告知特征码偏移位置和特征码数量。
这里可以看到样本存在一个特征码被标记,使用二进制文件编辑器打开这个木马,将特征码修改其中1位,然后直接保存。尝试上线,执行修改后的exe成功上线。如果程序无法执行,可能是破坏了程序的函数结构,可以多尝试几次修改不同位置。
当然修改特征码并不是能够通杀所有杀软,例如修改特征码可能导致程序崩溃,或者木马被杀软扫描出的位置较多,则修改起来的难度就会更高。
伪装即通过手段将钓鱼样本进行表面上的伪装,如让可执行文件看起来更像PDF,再如通过替换木马exe的.ico图标,使得木马看起来像一个官方可执行文件,在信息收集时,将受害者所在组织的官网图标收集,并为木马绑定,降低目标警惕性。如果文件运行之后没有任何反应,会引起对方的怀疑。这时候就需要对木马进行图标、文件信息进行修改,将正常文件和木马绑定,用户运行时释放准备的正常文件。红队需要掌握钓鱼文件制作技术以降低目标戒心,下面列举常见的几种方法。
自解压文件是压缩文件的一种,因为它可以不用借助任何压缩工具,而只需双击该文件就可以自动执行解压缩,因此叫做自解压文件。同压缩文件相比,自解压的压缩文件体积要大于普通的压缩文件(因为它内置了自解压程序),但它的优点就是可以在没有安装压缩软件的情况下打开压缩文件(文件类型为·exe格式)。使用自解压格式木马,目标下载压缩包解压后自动解压到特定目录并运行,或将木马绑定到正常的文件安装包上,当文件被运行的时候,木马会被同时运行并隐藏自身到特定目录,此时目标就已上线。
假设当前我们已经拥有一个可上线木马。此时我们在实施钓鱼攻击的时候,认为无法直接使用木马可执行文件作为钓鱼攻击程序,则可以使用正常可信文件和木马文件打包成自解压压缩包的方式,将木马投递。首先将木马文件和正常文件放入文件夹下,使用WinRAR自解压格式进行文件压缩。在高级配置里,在自解压选项里配置解压路径,这里使用了环境变量代替绝对目录。这里的%TEMP%表示:C:\Users\用户名\AppData\Local\Temp。选择配置提取前运行木马程序,提取后运行正常程序,或是提取前后运行两个文件。模式中选择安静模式,可以隐藏解压进度,防止解压文件时暴露压缩文件中的内容。这里建议木马文件先于正常文件运行,否则只有当正常文件运行完被关闭时才会运行木马文件。
更新中选择跳过已经存在的文件,避免目录已存在文件,弹框询问。添加自解压文件图标。这里选择跳过已存在的文件有两个原因,一个是防止已存在文件,会弹框提示已存在文件,暴露隐藏的木马文件。二是如果已存在木马文件,且正在运行,第二次运行自解压文件会提示无法提取木马文件,因为木马文件在此前已经运行,存在进程列表中,无法完成自动覆盖操作。会泄露木马解压路径和解压文件名。可以采用一些第三方通过图片生成ico,也可以使用在线ico转换工具进行转换。重新使用图标进行压缩。双击运行,正常文件打开,木马被加载到预定目录,且主机上线,无其他异常弹框。
资源修改一方面可以更好的伪装木马文件,让目标更加相信是一个正常文件,另一方面可以通过文件资源的变动,影响杀软对特征码的判断。以某免杀平台处理过的cs载荷为例,使用杀软查杀发现该免杀已失效,样本被查杀。使用restorator将正常文件的资源文件全部复制给不免杀的木马start.exe。保存后发现start.exe体积变大,图标被修改。
查看属性发现start.exe为cs默认可执行文件载荷经过免杀混淆程序进行处理过的免杀程序,目前已被查杀。但是经过一系列资源替换后,木马可绕过杀软。未进行资源替换直接加壳会被部分杀软查杀,而进行资源替换后并加壳可过绕过部分杀软,同样反映了资源替换可一定程度上提升木马的免杀能力。部分情况不能够bypass杀软的情况下,可以尝试对程序进行数字签名来尝试绕过。
常用的捆绑方式是将木马文件添加到正常的可执行文件尾部,当正常文件执行的时候,将木马同时执行,这种技术已经比较普遍过时,捆绑非免杀马的情况下很容易被杀软识别。利用二禁止文件编辑器搜索PE文件头。如果找到两个以上,就基本证明存在捆绑文件。当然有其他的捆绑形式,如将木马捆绑在图片上、PDF、Word文档、Excel中,更利于引诱目标点击,目标点击执行后,木马在后台执行并使主机上线,捆绑文件则被正常加载。如下图_Manage_bind.exe为捆绑后的文件,运行后木马上线并逃逸到指定位置。捆绑程序正常执行。
木马伪装、捆绑技术在一般情况下只是为了隐藏木马,真正目的并非通过捆绑静态免杀。当捆绑被执行,木马与捆绑文件分离后,使用的木马文件将原原本本暴漏在杀软面前,若捆绑前不是免杀马,执行后同样会被杀软杀掉。
以上工作完成之后,将木马以各种方式投递到目标系统,静待鱼儿上钩。为了能够更加稳健的使主机上线,此时是否能够上钩取决于钓鱼话术是否具有足够的迷惑性,让目标深信不疑。
1.给目标适当的压迫感,如伪造一个会导致严重后果的事件、或伪造一个受害者无法拒绝的身份(组织内部上级领导、第三方运维、应聘者等)。
2.给目标营造出时间上的紧迫感,突出事态的严重性。受害者在着急解决问题的情况下会降低对事件的敏锐度,忽略求证时间。适当催促可能会获得意想不到的效果。
3.向目标施以一定的利诱,当你作为攻击者伪装成公司行政时,便可以许诺完成某某活动即可获得奖金,与下月工资一同汇入账户,成功率将大大提升。
4.善于审时度势,钓鱼攻击方式多变,如企业正处于攻防演练中,则可以以攻防演练为由头,告知职员需要进行安全检查。如临近法定假期,伪造节假日放假安排等等符合常理的安排。
5.为确保成功率,可以考虑使用多个木马和C2服务器进行远控。
在获取服务器权限后,为了防止目标发现和修补漏洞或是封禁IP而导致对服务器权限的丢失。需要对上线主机做权限持久化(权限维持),持久化技术包括任何可以被攻击者用来在系统重启、更改用凭据或其他可能造成访问中断的情况发生时可保持或恢复对目标访问权限的技术,这里介绍几种简单的持久化方案。
1、进程迁移:木马上线后,为了避免目标应急处置,导致木马被杀、IP封禁导致目标掉线,首要任务是对进程做迁移。进程迁移通常是将木马进程注入到其他稳定的进程中,msfconsole、cs等都可以很方便的做进程迁移或注入。
2、隐藏文件:大多数普通用户不会开启文件后缀显示或显示隐藏的项目选项。使用attrib +h +s filename将文件隐藏后,即使开启隐藏的项目选项也无法查看到文件,命令行dir列目录同样无法显示,需dir –a可显示,使用attrib -h +s filename可重新恢复显示。
3、定时任务:windows 下定时任务的命令有两个分别是:at 和 schtasks,他们两者主要区别是 at 命令在 win7、08 等高版本的 windows 中是不能将任务在前台执行的,也就是只会打开一个后台进程,而 schtasks 是将定时的任务在前台执行。
4、开机自启项:简单的开机自启将需要开机自启的程序放入下面路径中C:\Users%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup即可。
5、隐蔽隧道:部分防守方比较警惕并且安全设备完善,一旦发现内网存在入侵现象或恶意外联现象,便会及时开展应急排查和溯源反制,通常应急处置第一步会将恶意IP封禁,为了避免攻击IP被防守方发现并清除,可以利用多个服务器搭建隐蔽隧道,配置额外C2上线并设置较长的心跳防止被一波清除。
施邮件钓鱼时,邮件内容表示要求对公司的电脑进行升级,安排程序升级员工进行操作。攻击者把工具伪装成装修工具,让员工下载然后埋下安装木马。再如某某部门要求进行某项内容的工作,命令接受者上点击附件,之后系统就会自动下载木马程序。
某活动中,攻击方通过OA漏洞,获取了防守方OA系统管理员权限,其中OA系统存在邮件管理功能,通过管理员的邮箱,以信息安全为由伪造邮件,并将木马作为邮件发送到企业内部。由于处于攻防演练期间,且发件人出自企业内部管理员,因此该邮件置信度非常高,最终多个设备上线。
前期对目标单位进行信息收集,发现目标单位存在买卖合同纠纷,利用企业信息查询网站获取目标单位邮箱地址,将木马通过加密附件的形式投递到公司邮箱,成功上线目标单位邮箱管理员主机。
钓鱼攻击主要通过伪装成合法实体,诱导用户进入虚假网站提交敏感信息或点击恶意程序实现攻击目的。钓鱼攻击是多变的,必须要结合特定的场景,制定特定的攻击文案和引诱话术,配合巧妙的木马样本制作技术,达成一定的可信性,诱使目标上当。预防钓鱼攻击的关键在于提高用户并组织内部的安全意识教育和技能培训,避免单击可疑链接和附件、及时更新应用程序等。
为了应对钓鱼攻击,应做好以下工作:
1、加强组织内部的安全意识教育和技能培训,提高员工对钓鱼攻击进行识别和预防的能力。公司员工社交媒体账号尽量不从官网、招聘、招标等渠道泄露,对人事招聘HR、法务部人员等需对外沟通岗位工作人员加强安全意识培训。
2、强制公司内部使用强密码和启用两步验证等方式保护个人账号的安全,避免敏感信息被攻击者窃取,启用账号密码更新策略,避免老旧密码泄露导致被攻击者登陆。
3、 应及时统一更新操作系统和应用程序,安装安全补丁,避免安全漏洞被攻击者利用。
4、部署邮件服务器沙箱,文件应通过沙箱特征库扫描、威胁情报匹配、启发式扫描和行为识别组合,判断是否为恶意文件或钓鱼链接。内网主机及杀软沙箱及时更新特征库,避免因特征库老旧导致部分恶意文件可落地执行。
5、 核实邮件内容,接收并点击外来文件时,文件应先使用杀软扫描。对“福利”、“补贴”等字眼的邮件应仔细辨别,避免不假思索下载打开不明附件。
6. 需要注意发件人的邮件地址、邮件内容是否存在语法错误或拼写错误等,以辨别可疑邮件来源的真实性。
7、对新添加的社交账号,应保持警惕,通过熟悉的人、事物或经历,验明对方身份。
8、 不应轻易执行附件中的可执行文件、office文件、陌生后缀文件,避免直接点击邮件链接访问,最好直接访问已知的该网站域名。如认为是不明链接或可疑网站,请事先向IT人员或发件人确认,进行验证后再进行操作。
新华三承影战队,专注前沿攻击技术研究,研究方向包括web攻防、0day挖掘、红队工具开发等,长期招聘攻防研究员,简历投递:[email protected] (请注明来自FreeBuf)