返回介绍

7.4 重新编译 Metasploit/Meterpreter 规避杀毒软件和网

发布于 2024-10-13 11:41:09 字数 5282 浏览 0 评论 0 收藏 0

络检测 这个话题有些复杂,您很可能在编译过程中遇到一些问题。有很多值得推荐的工具,如 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文