[实践] 提取恶意软件的“指纹”! 🕵️‍♂️ 用于强大检测的独特十六进制和字符串筛选技术

大家好,神枪手安全分析师们! 🔫

上次我们学习了 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

👣 逐步提取方法

  1. 跳转到核心函数: 移动到上次实践中找到的核心恶意行为函数(例如:加密函数、C2 连接函数)。
  2. 查看字节: 检查汇编指令旁边的十六进制值(操作码字节)。

⚠️ [非常重要] 使用通配符!

>

不能简单地复制十六进制代码。因为“地址(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 语法进行组装。

直到您创建自己的杀毒软件的那一刻,加油! 🛡️🔍



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注