0x01 从防御策略看免杀
在当今的网络安全环境中,攻击者与防御者之间的对抗越来越激烈。防御者不断升级其检测和响应能力,以抵御恶意软件和入侵行为。我们要想有效地绕过这些防御措施,必须深入了解它们的工作机制。本文将从防御策略反推攻击方法,通过详细的技术剖析,揭示实现免杀的完整技术路线。

防御者通常依赖于多种检测技术,包括特征匹配、行为分析和机器学习模型等。特征匹配包括静态文件扫描和签名检测,行为分析侧重于实时监控程序执行时的异常行为,而机器学习模型则通过数据驱动的方式识别潜在威胁。了解这些检测技术是如何工作的,对设计免杀技术至关重要。
首先,特征匹配是传统的检测方式之一。它通过文件特征码或哈希值识别已知的恶意载荷。但是,这种方法易于被混淆和加密技术绕过。
行为分析通过监控系统调用、文件操作、网络连接等识别恶意行为。这要求攻击者在恶意软件的执行过程中,尽可能的模拟正常软件行为。
机器学习模型则依赖于大数据样本的训练,可以检测出未知恶意软件。然而,这些模型存在误报率,攻击者可以通过细微调整载荷特征,使其落在误报区间以实现绕过。

了解了防御者的策略,攻击者可以利用多种免杀技术来规避检测,包括代码混淆、加密、反射式加载技术,以及更为高级的自我修改代码等。
0x02 环境搭建:构建你的测试场
在攻击与免杀技术的研究中,构建一个安全且涵盖多种检测技术的测试环境是进行验证的基础。我们首先需要搭建一个多层防御环境,这样才能真实模拟在实际场景中,攻击载荷可能面对的情况。
环境需求清单
- 操作系统:建议使用多种版本的 Windows 系统,包括 Windows 7、Windows 10 和 Windows Server 系列。
- 安全软件:安装不同厂商的安全产品,如 Microsoft Defender、Symantec、McAfee 等,确保涵盖常见的防御手段。
- 网络环境:模拟企业网络环境,搭建域控和常见服务如 DNS、DHCP。
- 虚拟化平台:使用 VMware 或 VirtualBox 方便创建快照,快速还原测试环境。
- 监控工具:安装 Wireshark、Procmon、Sysmon 等工具用于行为监控和日志分析。
搭建步骤
- 设置虚拟机环境:创建多个虚拟机实例,分别配置为不同的操作系统版本。
- 安装安全软件:在每个虚拟机上安装不同的杀毒软件和安全监控工具。
- 配置网络环境:在虚拟机之间设置网络连接,确保能模拟企业内网环境。
- 日志分析工具准备:为每个虚拟机准备日志分析工具,以便于测试时的行为监控。
通过搭建这样的多层次环境,我们能够在接下来的免杀技术研究中进行全面的验证和优化。
0x03 Payload构造的艺术
有效的免杀技术离不开精巧的Payload构造。攻击者需要在绕过特征检测和行为分析的同时,保证Payload的稳定性和功能完整性。以下将介绍几种常用的Payload构造技术。
代码混淆与加密
代码混淆是最基本的免杀手段,通过对代码进行重构、重命名变量、插入无效代码等手段,使其难以被直接解析。加密则进一步保护Payload,通过加密和解密机制隐藏恶意代码的真实内容。

Python混淆示例
<pre><code class="language-python">import base64
原始Payload代码
payload_code = "print('Malicious Code Execution')"
混淆:Base64编码
obfuscated_code = base64.b64encode(payload_code.encode()).decode()
解码执行
exec(base64.b64decode(obfuscated_code).decode())</code></pre>
这种简单的混淆虽然基础,但能有效绕过大多数基于字符串特征的检测。
反射式加载
反射式加载允许我们在内存中加载和执行代码,而无需在磁盘上留下痕迹。利用C语言的反射式加载可以在执行时绕过大部分的文件扫描。
C语言反射加载示例
<pre><code class="language-c">#include <windows.h>
// 二进制Payload代码的Base64字符串 const char* encodedPayload = "Base64EncodedShellcode";
int main() { // 解码并分配内存 DWORD payloadSize; BYTE payload = (BYTE)VirtualAlloc(NULL, payloadSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); base64_decode(encodedPayload, payload);
// 执行Payload ((void(*)())payload)(); return 0; }</code></pre>
自我修改代码
这种技术通过在执行过程中动态修改代码,提高了被机器学习模型检测的难度。攻击者可以在内存中修改指令,通过多次迭代生成新的行为特征。
0x04 绕过的秘密配方
在免杀领域,无论是面对EDR还是传统的AV,绕过技术都需要不断创新和调整。以下是一些行之有效的技巧和方法。
动态分析规避
在动态分析中,安全软件会通过沙箱技术来执行和观察程序行为。为了规避这种分析,攻击者可以设计Payload在检测到虚拟化或沙箱环境时,不执行关键代码。
反沙箱检测
<pre><code class="language-python">import os
def detect_sandbox(): sandbox_indicators = ["C:\\Windows\\System32\\drivers\\vmmouse.sys", "C:\\Windows\\System32\\drivers\\vmhgfs.sys"]
for indicator in sandbox_indicators: if os.path.exists(indicator): return True return False
if not detect_sandbox():
在非沙箱环境中运行恶意代码
print("Executing Malicious Code")</code></pre>
使用合法程序做掩护
通过将恶意代码注入到合法程序进程中执行,可以有效地隐藏在正常流量中。通过进程注入技术将Payload嵌入到可信的系统进程(如explorer.exe)中,极大提高了隐蔽性。
DLL注入示例
使用Windows API来进行DLL注入,通过OpenProcess、VirtualAllocEx、WriteProcessMemory、CreateRemoteThread等函数,将恶意DLL注入到目标进程中。
混合技术
结合多种绕过技术形成混合策略,例如,结合代码混淆、自我修改与合法程序掩护,这种多层次的技术手段能够大幅提高免杀成功率。
0x05 免杀后的对抗策略

当我们成功绕过EDR/AV检测后,需要考虑的是如何在目标系统中长时间驻留和横向移动,以下是一些常用的对抗策略。
C2通信隐匿
在远程控制过程中,保持通信隐匿是关键。使用加密通信、频率降低、使用非标准端口等技术,使得通信流量看起来像正常流量。
痕迹清除
确保在行动后清除所留下的痕迹,包括日志、文件和注册表的残留信息。这可以通过编写小工具自动化完成。
数据窃取与释放
在成功获取系统控制权后,通常的任务是窃取关键数据。为了规避被检测出,攻击者可以采用分包传输的方式,减小单次传输的数据量以降低被发现的可能性。
0x06 从攻击者的角度总结
在网络对抗的世界中,免杀技术是红队攻击者的利器。通过对防御策略的深刻理解,结合多种免杀手段,攻击者能够在对抗中占据主动。本文所述的方法和技术,仅限于授权的安全测试与研究,攻击者应始终遵循合法合规原则。
在实际攻防演练中,攻击者应不断创新,不断适应防御技术的演进。免杀技术不仅仅是工具的使用,更多的是思维方式的转变。这场攻防对抗的游戏,从未有终点。