7.4 重新编译 Metasploit/Meterpreter 规避杀毒软件和网
络检测 这个话题有些复杂,您很可能在编译过程中遇到一些问题。有很多值得推荐的工具,如 Metasploit/Meterpreter,每个杀毒软件和网络入侵检测(NID)工具都对这些工具进行签名。我们可以尝试使用 Shikata Ga Nai 软件对静荷进行混淆,并通过 HTTPS 进行混淆,这是目前常用的方式。任何类型的混淆通常都会有一个根签名,可以被发现和检测,杀毒软件在内存特定位置查看特定的字符串,网络设备实施中间人策略对 HTTPS 通信内容进行检查。那么如何才能持续使用我们选择的工具,同时绕过所有常见的安全防护机制呢?以 Metasploit/Meterpreter 为例,介绍一下如何绕过所有这些障碍。我们的目标是绕过二进制文件的杀毒软件签名、内存中的杀毒软件签名和网络流量签名。
为了规避所有的检测方法,我们需要做一些事情。首先,修改 Meterpreter 静荷,确保在网络流量和内存数据中,无法基于签名检测静荷。然后,修改 metsvc 持久性模块,防止被杀毒软件标识。接着,我们使用 Clang 编译部分 metsrv(实际的 Meterpreter 静荷),同样防止被杀毒软件标识。最后,编写自己的 stage0 静荷,下载执行 Meterpreter,规避所有的杀毒软件。
使用 Clang 编译 metsrv(Meterpreter 的网络服务包装器),删除 metsrv/metsvc-server 引用。
- http://bit.ly/2H2kaUB。
修改静荷,去掉类似于 Mimikatz 的字符串。
- http://bit.ly/2IS9Hvl。
修改反射性 DLL 注入字符串,删除类似于 ReflectiveLoader 的字符串。
- http://bit.ly/2qyWfFK。
当 Meterpreter 在网络传输时,许多网络产品检测 Meterpreter 的 0/1/2 级加载模块。除了混淆静荷,我们还可以对实际的 shellcode 进行混淆。一个例子是遍历所有 Ruby 文件,获取不同的静荷类型,并添加随机 nop 字符,规避检测。
- http://bit.ly/2JKUhdx。
自定义 Stage0 静荷。
- http://bit.ly/2ELYkm8。
实验
在本实验中,我们将修改 Metasploit/Meterpreter 代码,重新编译它,确保可以规避基本的杀毒软件检测。
在开始前,先查看 Metasploit 的编译环境。
- https://github.com/rapid7/metasploit-payloads/tree/master/c/meterpreter。
- https://github.com/rapid7/metasploit-framework/wiki/Setting-Up-a-Metasploit- Development- Environment。
Windows 的环境设置如下所示。
- Visual Studio 2013(VS2013):Visual Studio 社区版即可,另外,需要安装 C/C ++编译环境。
- 在 Windows 中安装 LLVM(32 位)(安装 Visual Studio 之后,确保安装 LLVM 工具链):可在 LLVM 官网下载 LLVM 6。
- 在 Windows 中安装 GNU Make(见 SourceForge 网站相关网页):确保安装在系统路径,或者从应用程序安装路径运行。
- Git-SCM(见 Git 官网)。
7.4.1 如何在 Windows 中构建 Metasploit/Meterpreter
首先获取所有 cyberspacekitten 的存储库。作为原型系统,这些文件在实验室已经做了较大的修改。首先,我们需要下载框架和所有的静荷。
- git clone https://github.com/cyberspacekittens/metasploit-framework。
- cd metasploit-framework && git submodule init && git submodule update && cd ..。
- git clone https://github.com/cyberspacekittens/metasploit-payloads。
- cd metasploit-payloads && git submodule init && git submodule update && cd ..。
在存储库中修改字符串,采用 Clang 编译器进行编译,添加静荷 nops,务必查看存储库之间的 Metasploit 差异,确切了解更改的内容。
编译 Metasploit / Meterpreter
我们要做的第一件事,使用更新内容重新编译 metsvc 和 metsvc-server。在 Visual Studio 2013 中运行其命令提示符,如下所示。
- 跳转到 metsvc 修改源代码所在的文件夹。
- cd metasploit-framework\external\source\metsvc\src
- 使用 make 编译。
- "C:\Program Files (x86)\GnuWin32\bin\make.exe"
将新创建的二进制文件移动到 meterpreter 文件夹。
- copy metsvc.exe ..\..\..\..\data\meterpreter\。
- copy metsvc-server.exe ..\..\..\..\data\meterpreter\。
接下来,修改 Meterpreter 静荷,使用提供的.bat 文件进行编译。
- cd metasploit-payloads\c\meterpreter。
- make.bat。
编译所有内容后,生成两个文件夹(x86 和 x64)。将所有已编译的 DLL 复制到 meterpreter 文件夹。
- copy metasploit-payloads\c\meterpreter\output\x86* metasploit-framework\data\ meterpreter。
- copy metasploit-payloads\c\meterpreter\output\x64* metasploit-framework\data\ meterpreter。
这就是服务器版本的 meterpreter。我们现在可以将整个 metasploit-framework 文件夹移动到 Kali 系统,启动反向 HTTPS 处理程序(windows/x64/meterpreter/reverse_https)。
7.4.2 创建修改后的 Stage 0 静荷
我们需要做的最后一件事是创建一个 Stage 0 静荷,让最开始的可执行文件绕过所有杀毒软件检测。您可能不是很了解,Meterpreter 中的 Stage 0 是任何漏洞利用或静荷的第一阶段。这是一段代码,完成一件很简单的事情:以我们想要的方式(reverse_https、reverse_ tcp 和 bind_tcp 等)回连或者监听,然后接收 metsrv.dll 文件。然后,加载这个文件并执行。从本质上来讲,任何 Stage 0 静荷只是一个美化的“下载并执行”静荷。这是 Metasploit 的所有功能的基础,在许多杀毒软件解决方案中都有针对 Metasploit 特定行为的高级签名技术和启发式检测方法,甚至修改 shellcode 并添加垃圾代码,仍然由于启发式检测而被标记。为了解决这个问题,我们编写了自己的 Stage 0,执行同样的功能(在内存中下载和执行):复制 Meterpreter 的 reverse_https 静荷的下载代码,从服务器获取 metsrv.dll,然后在内存中存储并执行。
此处提供的具体静荷例子,具有一些更复杂的功能。这些静荷实现了位置无关,无须导入函数。这个代码是基于 thealpiste 的代码进行开发的(https://github.com/thealpiste/ C_ReverseHTTPS_Shellcode)。
提供的示例执行以下操作。
- 所有代码在内存中定位 DLL 和函数,实现执行功能;没有使用导入函数。通过手动定义使用的“桩子”函数,在内存中搜索这些函数。
- Wininet 用于执行 HTTPS 请求,返回配置后的 Metasploit 处理程序。
- 接收 metsrv.dll,并执行数据模块。Metasploit 提供这些文件,入口点是缓冲区的开头。
此功能实现的过程与 msfvenom 构建静荷过程是相同的。但是,msfvenom 将这个过程添加到生成可执行文件模板中,采用的是可预测和检测的方式,但是不可配置。因此,大多数杀毒软件能够识别这些可执行文件。相反,通过一些编码技术,您可以重新设计静荷的功能,因为静荷很小,并且可以绕过当前存在的杀毒软件检测。在撰写本书时,静荷可以规避所有杀毒软件,包括 Windows Defender。
创建静荷过程如下所示。
- 在 Visual Studio 13 中,打开 metasploit-payloads\c\x64_defender_bypass\x64_defender_ bypass.vcxproj。
- 在 x64_defender_bypass 下有一个 settings.h 文件。打开该文件,修改 HOST 和 PORT 信息为 Meterpreter 处理程序信息。
- 确保编译设置为“Release”并编译“x64”。
- 保存并构建。
- 在 metasploit-payloads\c\x64_defender_bypass\x64\Release 下,创建一个新的二进制文件“x64_defender_bypass.exe”。在运行 Windows Defender 的被攻击计算机上执行此载荷。在构建此项目时,Windows Defender 未检测到这个静荷。
您现在拥有一个深度混淆的 Meterpreter 二进制文件,传输层也进行混淆,绕过所有默认的保护机制。现在,这只是一个入门的原型系统。本书发行后,其中一些技术会被检测生成签名。您还可以采取更多的措施,规避检测工具。例如,您可以进行如下操作。
- 使用 Clang 混淆工具链编译。
- 对所有字符串使用字符串加密库。
- 更改 Meterpreter 入口点(当前为 Init)。
- 创建自动脚本,为所有静荷类型添加 nops。
- 编辑使用的 Ruby 脚本,生成静荷,静荷每次运行时都进行随机化。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论