修改Metasploit x64模版逃避杀软

2015-11-09 +8 399858人围观 ,发现 6 个不明物体 WEB安全网络安全

在Windows桌面下执行渗透测试任务时,许多测试人员采用类似Veil的Powershell Empire工具将ShellCode注入到内存之中。毫无疑问,这是一项神器的技术,因为它可以避免直接写入磁盘并且能够直接命中大多数的端点保护解决方案。

我们常常遇到的情况是,想要通过使用真实的恶意软件执行文件对目标进行更全面的测试,也许我们之间所使用到相关技术会有不同,但是我们想要达成的目的确实相同的,在各种不同技术之间切换力求找到防御技术的弱点。在大多数环境中,最常见部署的端点保护技术就是反病毒引擎。

分析阶段
杀毒软件对于检测来自Metasploit框架现成的32位恶意可执行文件已经十分成熟,但是往往对于64位领域则差强人意了。另外,我们经常见到32位的第二阶段payload,对于64位的第二阶段payload则十分罕见。据我的经验,反病毒引擎不只是看ShellCold,还会匹配由Metasploit msfvenom命令生成的可执行文件构成的stub loader的汇编代码。

当Metasploit生成payloads时会使用到一个标准模板在32位和64位情况下执行,该标准模板的预编译可执行文件位于框架的data目录。除了这个模板,Metasploit项目还在框架中提供了源代码。

特别注意,我们能够找到32位的模板C语言源码以及64位模版的编译文件,在Kali中这两个文件都存储在/usr/share/metasploit-framework/data/templates/src/pe/exe目录。

不论是32位还是64位它们的模版源码中都存在一个非常类似的函数,其在内存中分配一个4096字节的缓冲区并将字符串“PAYLOAD:”放入缓冲区的开头。将字符串“PAYLOAD:”作为一个常数放进缓冲区就表明,当创建一个新的可执行payload就会先从msfvenom开始。

内存地址从msfvenom开始的地方就就可以用来将Shellcode复制进去。shellcode可用的缓冲区大小为EXE模版分配的大小减去8(字符串“PAYLOAD:”长度)。Msfvenom将会选择payload,使用适当的编译器进行编译,如果同时都选择那么会优先考虑无操作(NOP)的sled字节。

最终的32位可执行文件已近从C源码完成编译。在C源代码中通过将payload缓冲区指向一个函数来调用Shellcode(函数无参数)

最终的64位可执行文件从汇编代码中完成编译。汇编代码函数分配一个可执行缓冲区的内存,将shellcode复制到内存中并使用CALL指令执行。许多工具都是使用的类似思路,连我们十分喜爱的Powershell toys也不例外。

32-bit EXE模板源代码

64-bit EXE模板汇编源代码

实战演练

有了这些知识作为铺垫,我将64位可执行文件复制到Windows系统,观察反病毒引擎(Avast)的反应。此处注意,在这个64位可执行文件中我没有加入任何shellcode payload,仅仅只是模板本身。

对于Avast立即弹出警告我并不感到惊讶。面对现实吧,匹配模板的汇编操作码(也就是说杀毒引擎根本就没去管你的Shellcode有效载荷)是一件十分轻松的事情,弹出警告也就没啥惊奇了。

Avast告诉我们此路不通

继续这个例子,静静思考。难道我不能重新修改编译汇编代码吗?我们只需要确保在某种程度下它调用需求的代码,并将payload复制到我们分配的可执行内存段,然后执行它。

Case 1:

第一次尝试,重新对原汇编代码进行编译。Avast依旧将其进行了标记,这不足为奇。

Case 2:

我将缓冲区修改为8192字节并重新编译,其他缓冲区长度没有进行修改,这一次Avast没有弹出警告。注意,编译汇编代码的指令对于列举源代码命令十分有效

Case 3:

我将汇编代码中所有的值修改为8192,然后使用这个新完成的模版创建两个不同的payload。其中一个payload对shellcode使用64-bit XOR编码,另外一个则没有使用任何编码。

接下来将payload文件复制运行着Avast的Windows 7机器上,开启Avast对其进行扫描并完美通过。最后执行它获取到shell。

在案例3中,在Avast的深度扫描阶段我特开心,最开始我还以为选择这条路可能十分艰难,但是然并卵恶意文件依旧撒了欢的愉快执行。

缓冲区长度修改为8192

使用新模板的64-bit payload(无编码)

使用新模板的64-bit payload(XOR编码)

将两个新的payload复制到Windows系统下

对目录进行扫描

我给满分

深度扫描,不会被查出来吧~嘎嘎嘎

成功获取Shell

小编乱弹

从之前铺垫到实战演练,我们看到反病毒引擎将主要精力都放在了对模板的检测,而对于ShellCode本身没有投入过多精力。在这个特定的案例中,仅仅只是对汇编源码进行了小修改,以及没有进行编码的64位ShellCode就能成功躲避反病毒引擎的查杀。

原作者在其文尾还曾叙述说在未来一段时间还会对其他反病毒引擎进行类似测试,期待他能有更多的技巧能分享给大家。

那么….Happy hunting!

* 参考来源:Packetheader,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

这些评论亮了

发表评论

已有 6 条评论

取消
Loading...

特别推荐

推荐关注

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php