大家好,神枪手安全分析师们! 🔫
上次我们学习了 YARA 规则的理论(Meta, Strings, Condition)。您理解了“通过组合字符串和条件进行检测”的原理,对吗?
然而,比理论更重要的是:“究竟应该使用‘哪些’字符串?”
如果随意选择,可能会导致灾难(误报),例如将 Windows 计算器 (calc.exe) 检测为恶意软件,或者黑客只需更改一个字符就导致检测失败(漏报)。
今天,我们将进行一项实践,从已分析的恶意软件样本中筛选出与其他正常文件不重叠的“绝对独特的签名”。
只要做好这一点,您的 YARA 规则就会成为精品! ✨

1. 💎 什么是“独特性”? (黄金法则)
选择签名的第一原则是“特异性(Specificity)”。
- ❌ 坏例子 (过于常见):
- kernel32.dll, CreateFile, OpenProcess, HTTP/1.1
- 👉 世界上几乎所有程序都包含这些内容。绝不要使用它们!
- ✅ 好例子 (非常独特):
- C:UsersHackerProjectRansomReleasemain.pdb (开发者路径)
- Global{A1B2-C3D4-Hack-Me} (独特的互斥体)
- E8 ?? ?? ?? ?? 83 C4 04 85 C0 74 12 (特定加密函数的机器码)
我们现在将从文本和十六进制(机器码)两个角度来寻找这些宝贵的指纹。
2. 📝 [实践 1] 筛选文本字符串
这是最简单直观的方法。请重新查看您通过 Strings 工具或 Pestudio 提取的列表。
🎯 3个筛选要点
① 错别字(Typos)和语法错误 🤪
黑客在匆忙编码时经常会犯错别字。正常微软开发者绝不会犯的错别字是最好的签名。
- 示例: Successflly (Successfully 的错别字), Dissable (Disable 的错别字)
- 提示: 语法错误的句子也非常好。(”Your computer are belong to us”)
② 硬编码的唯一路径 (PDB Path) 📂
这是开发者编译代码时留下的调试信息。用户名或项目名会清晰地暴露出来。
- 示例: D:WorkMalware_v2Backdoorpayload.pdb
- 筛选: 像 Malware_v2 或 Backdoor 这样的词是独特的。
③ 格式独特的字符串 🔑
勒索软件通常使用特定格式来生成用户 ID 或进行通信。
- 示例: uid=%d&os=%s&ver=2.1 (C2 通信格式)
- 示例: —–BEGIN RANSOM KEY—– (加密密钥头)
3. 🧩 [实践 2] 筛选十六进制字符串 (进阶)
文本可以被黑客轻易修改。但是,代码的结构(逻辑)却不容易改变。
此时,我们使用机器码形式的十六进制字符串。
🛠️ 工具: Ghidra 或 IDA Pro
👣 逐步提取方法
- 跳转到核心函数: 移动到上次实践中找到的核心恶意行为函数(例如:加密函数、C2 连接函数)。
- 查看字节: 检查汇编指令旁边的十六进制值(操作码字节)。
⚠️ [非常重要] 使用通配符!
>
不能简单地复制十六进制代码。因为“地址(Address)”值可能会在每次文件执行时或不同版本之间发生变化。
>
– 原始代码: E8 40 12 00 00 ( CALL 0x00001240 )
– 其中,40 12 00 00 是要调用的函数的地址(相对距离)。这可能会改变。
– E8 是 CALL 指令本身。这不会改变。
– YARA 规则转换: { E8 ?? ?? ?? ?? }
– 可变地址部分必须用问号 (??) 处理,以应用通配符(Wildcard)。
✅ 推荐的十六进制模式:
- 函数序言(Prolog): 避免像 55 8B EC (Push ebp; Mov ebp, esp) 这样过于明显的模式。
- 独特的常量值: 加密算法中使用的独特常量(例如 0x67452301 等)周围的运算代码是很好的选择。
- 连续逻辑: 提取 10-20 字节左右的连续逻辑流,例如 XOR 运算后进行 CMP(比较)和 JNZ(不为零则跳转)。
4. ⚖️ [实践 3] 验证 (健全性检查)
好了,您选出了“就是它!”的字符串了吗?最后,您需要在 Google 上搜索一下。
🔍 Google 搜索测试 (Google Dorking)
- 将筛选出的字符串用双引号 (” “) 括起来,然后在 Google 上搜索。
- 如果搜索结果中出现 GitHub 上著名的开源项目(例如:OpenSSL, Boost Library)?
- 🚨 淘汰! 那不是恶意软件,而是使用了正常的库。如果以此创建规则,将导致全球 PC 误报。
- 如果搜索结果为空,或者只出现恶意软件分析报告?
- 🎉 通过! 这是一个非常出色的签名。
5. 📦 整理成果:我自己的“指纹”列表
请将通过实践筛选出的签名整理如下。这些将成为下次编写 YARA 规则的材料。
| 类别 | 值 (Value) | 特点及选择理由 |
|---|---|---|
| String 1 | “C:ProjectDarkbot.pdb” | 开发者路径。“Dark”项目名独特。 |
| String 2 | “Don’t kill my process!” | 恶意软件内部的调试信息。句子独特。 |
| Hex 1 | { 33 C0 83 C4 04 B9 04 00 00 00 } | XOR 初始化和循环计数器设置逻辑。 |
| Hex 2 | { E8 ?? ?? ?? ?? 85 C0 74 0F } | 函数调用后比较结果是否为 0 的分支语句(地址已通配符处理)。 |
—
🎉 总结:规则编写准备就绪!
辛苦了! 👏
现在,您已经拥有了从海量数据垃圾中筛选出“真实证据(Signal)”的眼光。
- 在文本中,您找到了错别字和 PDB 路径,
- 在十六进制中,您找到了核心逻辑并应用了通配符,
- 并通过 Google 搜索完成了验证。
这些材料将发挥出比任何杀毒软件都更强大的检测性能。
下一次,我们将进行“[实践] 编写最终 YARA 规则文件 (.yar) 及恶意软件检测测试”,将这些材料按照 YARA 语法进行组装。
直到您创建自己的杀毒软件的那一刻,加油! 🛡️🔍
发表回复