一、从内网渗透到远控植入:一次真实案例的复盘

在一次针对金融行业的授权红队演习中,我们的目标是一家中型银行的内网核心服务器。通过前期的钓鱼邮件,我们成功获取了一名财务人员的办公电脑权限。然而,这只是第一步,目标是内网的核心数据库。然而,由于目标机器的网络出口被严格审计,我们无法直接使用常规C2(如Cobalt Strike或Sliver)进行持久化控制。于是,我们决定对知名远控工具 Gh0st RAT 进行二次开发,以实现有效的隐匿控制和内网渗透。

这篇文章将详细讲解如何对Gh0st远控的源代码进行深度改造,使其更符合现代攻击需求,并在实战中实现绕过杀软检测与流量审计。请注意,本文仅限授权的安全测试和研究用途,切勿用于非法用途!

---

二、Gh0st远控的改造方向

为什么选择Gh0st?

Gh0st RAT 是一款经典的远控工具,凭借其高效的通信协议、较小的体积以及丰富的功能,一度在攻击圈内风靡。然而,随着杀毒软件的进化,它的标准版本早已被列入病毒库,并且其流量特征也容易被安全设备检测。因此,我们需要对其 通信协议、Payload加密方式、功能模块 等进行重构,使其成为一个现代化的渗透利器。

改造目标

以下是我们对Gh0st的改造方向:

  1. 流量隐匿:修改默认通信协议,避免使用明文或已知特征。
  2. 免杀优化:对Payload进行多层次加密和内存加载,实现对主流杀软的绕过。
  3. 功能模块扩展:增加内网代理转发功能,用作内网渗透跳板。
  4. 自定义通信端口:摒弃默认的 80/443 等常见端口,使用伪装流量的方式提高隐匿性。

黑客示意图

---

三、环境搭建:从源代码到编译

要对Gh0st进行二次开发,我们首先需要获取其开源版本的源代码,并搭建一个适合的开发环境。

源代码获取

Gh0st RAT 的开源代码可以在一些开源代码托管平台找到,例如 GitHub 或某些国外论坛。具体文件我们以一个通用版本为基础(如v3.x)。

源码下载: <pre><code class="language-bash">git clone https://example.com/ghost_rat_open_source.git cd ghost_rat_open_source</code></pre>

开发环境准备

Gh0st RAT 的核心是用 C++ 编写的,因此我们需要配置一个支持 C++ 开发的环境,同时配备以下工具:

  • Visual Studio 2022:用于编译和调试。
  • CMake:构建环境。
  • Mingw-w64:可选的跨平台编译工具链。

安装依赖: <pre><code class="language-bash">sudo apt update sudo apt install build-essential cmake mingw-w64</code></pre>

编译原始版本

在改动代码前,我们需要确保原始版本可以正常运行。以 Windows 为目标,我们使用 Mingw 进行编译。

黑客示意图

<pre><code class="language-bash">cd src/ # 进入源码目录 cmake . -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw-w64/toolchain-x86_64.cmake make</code></pre>

生成的 Gh0stRAT.exe 文件是一个未经修改的标准版本,可以作为基线进行对比。

---

四、通信协议重构:让流量更隐匿

黑客示意图

Gh0st 的原始通信协议是基于明文的,而这正是它容易被检测的原因。我们需要对通信协议进行改造,伪装成常见的加密流量(如 HTTPS)。

修改数据传输方式

原始版本的通信协议是基于简单的 TCP 套接字通信,我们将其改造为类似 TLS 的加密协议。以下是主要步骤:

  1. 引入加密库:使用 OpenSSL 或 GnuTLS。
  2. 伪造 HTTP Headers:在加密数据流中嵌入伪造的 HTTP 请求头。
  3. 增加随机性:在通信数据中加入随机填充,避免固定特征。

以下是核心代码改动示例(以 OpenSSL 为加密库):

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

include &lt;openssl/err.h&gt;

void InitTLS() { SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); }

SSL_CTX CreateContext() { const SSL_METHOD method = SSLv23_client_method(); SSL_CTX* ctx = SSL_CTX_new(method); if (!ctx) { perror(&quot;Unable to create SSL context&quot;); ERR_print_errors_fp(stderr); exit(EXIT_FAILURE); } return ctx; }</code></pre>

然后,将原始的 send()recv() 替换为封装后的 SSL 版本。

---

五、Payload免杀:从静态到动态加载

现代杀软会对恶意文件的静态特征和运行时行为进行双重检测,因此我们需要对Payload的加载方式进行彻底改造。

静态免杀

  1. 加壳:使用开源加壳工具 UPX,添加自定义壳。
  2. 混淆代码:使用工具或手动修改变量名、函数名,提高代码复杂度。

<pre><code class="language-shell"># 使用UPX加壳 upx --best --overlay=strip Gh0stRAT.exe</code></pre>

动态加载

通过将恶意代码加载到内存中执行,我们可以避免杀软扫描磁盘上的可疑文件。以下是核心代码示例:

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

void LoadPayloadInMemory(const char payload, size_t length) { void exec = VirtualAlloc(0, length, MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(exec, payload, length); ((void(*)())exec)(); }</code></pre>

将Payload以加密形式写入资源文件中,运行时解密并加载到内存执行。

---

六、实战:跨越内网的隐匿渗透

在实际渗透场景中,我们使用改造后的Gh0st RAT完成了一次高效的内网横向移动。以下是操作流程:

  1. 入口点植入:通过鱼叉邮件,获取目标财务人员的电脑权限。
  2. 远控部署:使用动态免杀的Payload,隐匿部署远控工具。
  3. 横向移动:利用内网代理模块,向数据库服务器发起攻击。
  4. 数据窃取:通过Gh0st的屏幕录制功能,窃取敏感财务报表。

---

黑客示意图

七、检测与防御:如何反制这种攻击?

尽管我们在攻击中投入了大量隐匿手段,但仍有一些检测和防御措施可以有效应对:

  1. 流量审计:捕获异常的伪装HTTPS流量。
  2. 行为分析:定位运行时的恶意行为特征。
  3. EDR溯源:通过内存取证发现动态加载的恶意代码。

---

八、个人心得:攻击者的思维与防御的艺术

作为一名红队成员,我深刻体会到攻击和防御是永无止境的博弈。对工具的深度理解和灵活改造能力,才是每一次成功渗透的关键。而作为防御者,需要不断学习新的检测和响应技术,才能在这场攻防战中立于不败之地。