大家好,各位追根究底的安全研究员们! 🕵️♂️
网络安全的世界是一场无休止的“捉迷藏”。当安全厂商检测到某个恶意软件时,黑客们会在几天后(甚至几小时后)发布一个稍微修改过的“变种(Variant)”。
有的是换了件外套,有的是做了“整形手术”,有的是换了武器……种类繁多。🎭
此时,分析师要确定“这个新家伙是不是以前那个?”的工作,就叫做代码相似度分析(Code Similarity Analysis)。
过去,我们不得不盯着BinDiff之类的工具,看得眼睛都快瞎了,但现在AI可以瞬间比较两段代码的“基因”。今天,我们将利用AI进行一次实践,来找出恶意软件原始版本和变种之间的“找不同”。🔍

1. 为什么要进行相似度分析? 🤷♀️
超过90%的恶意软件都是现有代码的重复利用。因为没有必要每次都重新发明轮子。
- 逃避检测: 为了躲避杀毒软件的签名(指纹)检测,只改变变量名或函数顺序。
- 功能升级: 在现有勒索软件中添加“信息窃取”功能,或加强加密算法。
- 攻击者溯源(Attribution): 可以获得“咦?这种编码风格,和去年活跃的‘Lazarus’组织有95%的相似度?”之类的线索。
2. [准备] 准备原始代码和变种代码 (反编译) 📂
为了进行分析,我们需要通过Ghidra或IDA等工具恢复成C语言形式的伪代码(Pseudocode),而不是二进制(EXE)状态。
📁 [Sample A] 原始勒索软件 (Original)
C
// 原始版本:简单的文件加密循环
void EncryptFiles() {
char* key = "1234"; // 脆弱的硬编码密钥
FileInfo file = FindFirstFile("*.*");
while (file) {
XOR_Encrypt(file, key); // 简单XOR加密
file = FindNextFile();
}
}
📁 [Sample B] 变种勒索软件 (Variant)
C
// 变种:密钥生成方式变更及功能添加
void ProcessData() { // 函数名已更改
char* key = GenerateRandomKey(); // 通过随机密钥生成进行强化
FileInfo f = FindFirstFile("*.*");
while (f) {
if (IsSystemFile(f)) continue; // [变更点] 跳过系统文件(安全机制)
AES_Encrypt(f, key); // [变更点] 算法更改为AES
f = FindNextFile();
}
}
一眼看去,结构相似,但细节变化很大,对吧?我们把这个交给AI来处理。
3. 请求AI进行“基因检测” 🧬
如果只是简单地说“比较这两个”,AI只会找出文本上的不同。我们想要的是“功能性/逻辑性差异”,因此需要精心编写提示词。
🗣️ [Prompt] 相似度分析提示词
[角色] 您是恶意软件逆向工程专家。
>
[任务] 比较分析下面提供的两段C代码(Sample A,Sample B)。
>
Sample A是原始恶意软件,Sample B被认为是其变种。
>
[要求]
>
1. 相似度分数: 基于两段代码的逻辑结构和流程,估算相似度,范围在0-100%之间。
2. 主要变更(Diff): 忽略变量名更改等细微之处,重点说明算法、逻辑、功能性增减方面的差异。
3. 变种意图: 推断攻击者如此修改代码的原因(例如,逃避检测、功能增强等)。
>
[Sample A 代码]
>
(粘贴上述原始代码)
>
[Sample B 代码]
>
(粘贴上述变种代码)
4. [结果] AI的精密分析报告 📝
AI知道变量名从file变为f并不重要。相反,它指出了核心逻辑的变化。
🤖 AI分析报告
>
1. 📊 相似度估算:约70%
>
– 依据: 文件遍历循环(FindFirstFile -> while -> FindNextFile)的整体框架(Structure)是相同的。但在内部处理逻辑中检测到了重要变化。
>
2. 🔄 主要变更(Key Differences)
>
– 加密强度增强: 简单的XOR运算已更改为高级加密标准AES。
– 密钥管理方式: 硬编码的密钥(”1234″)已更改为通过GenerateRandomKey()动态生成的方式,使得解密更加困难。
– 增加安全机制: 添加了IsSystemFile()检查逻辑。这是为了防止加密Windows重要文件导致系统无法启动。
>
3. 😈 变种意图推断
>
该变种的制作者发现旧版本很容易被安全厂商解密,因此升级了加密算法,迫使受害者不得不支付赎金。此外,似乎还有意提高系统稳定性,以避免“跑路(只收赎金不恢复)”的争议。
5. 实践的核心要点:Diffing(差异分析)的艺术 ✨
通过本次实践,我们可以获得以下见解:
- 控制流图(CFG)的重要性: 即使变量名发生变化,While循环中包含If语句的结构也不容易改变。AI能够很好地识别这种结构相似性。
- 噪声消除: 通过告诉AI“忽略变量名更改”,我们能够专注于真正重要的功能性差异。
- 制定应对策略: 我们可以确定分析方向,例如:“啊,这次的变种使用了AES。那么我们应该针对密钥在内存中生成的时候进行攻击。”
🎉 总结
今天,我们利用AI分析了恶意软件的“族谱”(?)。
过去,我们不得不盯着两个显示器,玩“找不同”游戏,看得眼睛都快充血了,但现在AI可以帮我们完成初步工作,我们就能专注于更高级的任务——“理解攻击者的意图”。
下一次,我们将综合至今所学的所有分析内容,进行“最终恶意软件分析报告自动生成”的实践,为本系列画上圆满的句号。
愿您的分析始终清晰明了!加油! 💪
发表回复