用 Yara 对红队工具 "打标"(三)——免杀类规则提取(二)
字数 1218 2025-08-06 18:07:56
Yara规则提取红队免杀工具特征(三) - 补充篇
1. 前言
本文是"用Yara对红队工具打标"系列的第四篇,作为第三篇"免杀类规则提取"的补充内容,重点介绍如何从免杀类红队工具中提取有效的Yara规则特征。
2. 免杀工具特征提取方法论
2.1 静态特征分析
-
字符串特征提取:
- 查找工具特有的字符串模式
- 包括但不限于:函数名、变量名、错误信息、版权信息等
- 注意处理Unicode字符串和编码变体
-
二进制模式识别:
- 识别独特的字节序列
- 查找工具特有的导入函数表
- 分析PE头特征
-
代码段特征:
- 识别独特的代码片段
- 查找特定算法的实现方式
- 分析控制流模式
2.2 动态行为特征
-
API调用序列:
- 记录工具特有的API调用顺序
- 关注敏感API的组合使用
-
注册表操作:
- 分析工具对注册表的修改模式
- 记录特定的注册表键值
-
文件系统操作:
- 识别工具创建/修改的文件路径
- 分析文件操作序列
3. Yara规则编写技巧
3.1 基础规则结构
rule RedTeam_Tool_Evasion_Example {
meta:
description = "检测红队免杀工具特征"
author = "YourName"
date = "2022-11-24"
reference = "内部研究"
strings:
$str1 = "EvasionTool" nocase
$str2 = { 4D 5A 90 00 03 00 00 00 } // 特定PE头
$str3 = "GetProcAddress" wide
$code1 = { 55 8B EC 83 EC ?? 56 57 8B 7D 08 }
condition:
uint16(0) == 0x5A4D and
(2 of ($str*) or $code1)
}
3.2 高级特征提取技术
-
模糊匹配技术:
- 使用通配符(?)匹配可变字节
- 结合跳转指令处理代码变形
-
熵值分析:
- 检测高熵代码段(常见于加密/混淆)
- 实现示例:
rule High_Entropy_Section { condition: for any i in (0..pe.number_of_sections-1) : ( pe.sections[i].entropy > 7.0 ) }
-
导入表特征:
- 检测特定DLL的组合导入
- 示例:
rule Suspicious_Imports { condition: pe.imports("advapi32.dll") and pe.imports("kernel32.dll") and pe.imports("ws2_32.dll") and not pe.imports("user32.dll") }
4. 免杀工具特有特征提取
4.1 常见免杀技术特征
-
进程注入特征:
- 查找CreateRemoteThread等API引用
- 检测常见的注入技术代码模式
-
API混淆特征:
- 识别动态解析API的代码模式
- 检测GetProcAddress的非常规使用
-
反调试技术:
- 检测IsDebuggerPresent等反调试API
- 识别时间差检测等反调试技术
4.2 规则优化技巧
-
减少误报:
- 结合多个特征点进行判断
- 使用排除条件过滤合法软件
-
提高检测率:
- 提取核心算法特征而非表面特征
- 关注工具特有的实现方式而非通用技术
-
性能考虑:
- 将高概率特征放在规则前面
- 避免过于宽泛的匹配模式
5. 实战案例
5.1 检测某免杀工具规则示例
rule RedTeam_Evasion_Tool_X {
meta:
description = "检测X免杀工具变种"
author = "YourName"
date = "2022-11-24"
reference = "内部样本分析"
strings:
$str1 = "XEvasionTool" nocase wide
$str2 = "DynamicAPIResolver" ascii
$code1 = { 8B ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? 85 C0 74 ?? 68 ?? ?? ?? ?? E8 }
$code2 = { 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF EB }
condition:
uint16(0) == 0x5A4D and
filesize < 500KB and
(pe.imports("kernel32.dll") and pe.imports("ntdll.dll")) and
(2 of ($str*) or all of ($code*))
}
5.2 规则解释
- meta部分:提供规则的描述信息
- strings部分:
- $str1: 工具名称的Unicode和ASCII变体
- $str2: 工具特有的功能模块名称
- $code1/code2: 工具核心功能的代码特征
- condition部分:
- 检查PE文件头
- 限制文件大小范围
- 检查必要的DLL导入
- 组合多个特征点进行判断
6. 总结与最佳实践
-
特征提取原则:
- 关注工具特有的实现而非通用技术
- 提取核心算法特征而非表面字符串
- 组合多个特征点提高准确性
-
规则维护建议:
- 定期更新规则以适应工具变种
- 建立规则验证流程减少误报
- 分类管理不同工具家族的规则
-
性能优化:
- 将高概率特征放在规则前面
- 避免过于复杂的正则表达式
- 合理使用条件组合
通过本文介绍的方法,可以有效地从免杀类红队工具中提取特征并编写高质量的Yara规则,为威胁检测提供有力支持。