✨ 要点🔬 技术摘要
这篇论文就像是在给二进制代码(电脑程序的“黑盒”)做了一次**“防骗能力大考”**。
想象一下,现在的网络安全界流行一种新技术:用**人工智能(AI)**来当“侦探”。这些 AI 侦探的任务是看两个没有源代码的电脑程序(二进制文件),判断它们是不是“亲兄弟”(代码相似)。如果两个程序长得像,AI 就认为它们可能来自同一个作者,或者一个是另一个的变种(比如恶意软件)。
但是,作者们发现了一个大问题:这些 AI 侦探太容易被“化妆术”骗到了!
1. 核心故事:AI 侦探 vs. 高明的“化妆师”
AI 侦探(BCSD 模型): 它们通过观察程序的“骨架”和“肌肉”(指令、控制流图)来认人。
高明的化妆师(攻击者): 他们知道怎么给程序“整容”,让程序看起来完全变了样,但干活的逻辑(功能)一点都没变 。这就好比一个人把头发染了、衣服换了、甚至把名字改了,但他还是同一个人,走路姿势和说话逻辑也没变。
作者们开发了一个叫 asmFooler 的系统,专门扮演这个“化妆师”,去测试 6 种最流行的 AI 侦探到底有多容易被骗。
2. 他们用了什么“化妆术”?(8 种变换)
作者们用了 8 种不同的手段来“整容”代码,主要分为两类:
3. 最精彩的反转:不仅能“躲”,还能“反咬一口”
通常大家觉得,只要把程序改得面目全非,让 AI 认不出来(假阴性 )就赢了。但作者们玩了一手更绝的:让 AI 把两个完全不相干的人认成亲兄弟(假阳性)。
比喻: 想象两个完全陌生的人(一个是好人,一个是坏人)。攻击者给坏人脸上贴了特定的“贴纸”(精心设计的指令序列),结果 AI 侦探一看:“哇!这贴纸跟那个好人一模一样!他们肯定是亲兄弟!”于是把坏人放行了。
惊人发现: 只需要贴很少的贴纸 (平均只加了 14 个指令),就能让 AI 彻底认错人,成功率高达 100%!而且,这种“贴纸”对不同的 AI 侦探都有用(可迁移性 ),就像一种通用的“迷魂药”。
4. 为什么 AI 会被骗?(核心发现)
作者通过“透视眼”(可解释性 AI 技术,如 SHAP)发现,AI 被骗是因为:
太依赖“外表”: 有些 AI 太在意指令的顺序或具体的长什么样,一旦顺序乱了,它就瞎了。
太依赖“骨架”: 有些 AI 太在意控制流图(程序的流程图),一旦把流程图画成迷宫,它就晕了。
注意力被分散: 当攻击者插入特定的“迷魂指令”时,AI 的注意力被强行转移到了这些无关紧要的地方,忽略了真正重要的特征。
5. 总结与启示
这篇论文告诉我们:
现在的 AI 安全模型很脆弱: 它们虽然很聪明,但很容易被懂行的人用“换皮不换骨”的手段骗过。
没有银弹: 没有一种模型能防住所有攻击。有的模型防得住“换顺序”,却防不住“加迷宫”;有的模型防得住“加废话”,却防不住“改名字”。
未来的路: 要造出更坚固的 AI 侦探,不能只盯着代码的“样子”,得学会看代码的“灵魂”(深层语义),并且要像训练特种兵一样,专门用这些“化妆术”去训练 AI,让它们见多识广,不再轻易上当。
一句话总结: 这篇论文就像给 AI 安全界敲了一记警钟:“别太自信!现在的 AI 侦探很容易被高明的‘代码化妆师’骗得团团转,甚至还能被反手利用,把坏人认成好人。”
这是一份关于论文《Fool Me If You Can: On the Robustness of Binary Code Similarity Detection Models against Semantics-preserving Transformations》(愚弄我,如果你能做到:语义保持变换下二进制代码相似性检测模型的鲁棒性)的详细技术总结。
1. 研究背景与问题 (Problem)
背景 :二进制代码分析在网络安全中至关重要,用于逆向工程、恶意软件检测、漏洞发现等。随着深度学习的发展,基于机器学习的二进制代码相似性检测(BCSD)模型被广泛用于在没有源代码的情况下识别代码语义。
核心问题 :尽管 BCSD 模型日益普及,但其在面对语义保持变换 (Semantics-preserving Transformations)时的鲁棒性尚未得到充分探索。
攻击者可以通过代码混淆(Obfuscation)或代码多样化(Code Diversification)技术,在不改变程序功能的前提下修改二进制指令。
现有的对抗性攻击研究多局限于单一类型的变换或特定的模型,缺乏对多种变换和多种代表性模型的系统性评估。
机器指令的扰动与图像或自然语言领域的扰动不同,具有独特的挑战(如指令的精确性、副作用控制等)。
2. 方法论 (Methodology)
作者提出了一个名为 asmFooler 的系统,用于评估 BCSD 模型在多种语义保持变换下的鲁棒性。
2.1 系统架构与数据生成
数据集构建 :基于 620 个基准样本(来自 coreutils, binutils, SPEC2006 等),生成了 9,565 个变体(Adversarial Variants)。
变换技术 :应用了 8 种 语义保持变换,分为两类:
代码多样化 (Code Diversification) :旨在改变内存布局以防御代码重用攻击。
原地代码随机化 (In-place Code Randomization):包括指令替换、基本块内重排序、寄存器保持重排序、寄存器重分配。
基本块间重排序 (Inter-Basic-Block Reordering)。
代码混淆 (Code Obfuscation) :旨在混淆代码功能以阻碍逆向工程。
语义 NOP 植入 (Semantic NOP Implantation):插入不改变程序行为的指令序列。
垃圾代码插入 (Junk Code Insertion):插入不可达的指令。
LLVM 基础混淆 (Obfuscator-LLVM):包括指令替换、虚假控制流 (Bogus Control Flow)、控制流扁平化 (Control Flow Flattening)。
预算限制 :考虑到模型输入长度限制和实际攻击成本,定义了“变换预算”(Transformation Budget),限制添加的指令数量或字节数。
2.2 评估目标模型
评估了 6 种 具有代表性的 BCSD 模型,涵盖了不同的架构特征:
图神经网络 (GNN) :Genius, Gemini (利用控制流图 CFG)。
指令嵌入 (Embeddings) :Asm2Vec, SAFE。
基于 Transformer/BERT 的模型 :Trex, BinShot。
2.3 攻击场景
假阴性 (FN) 触发 :使模型将相似的代码对判断为不相似(逃避检测)。主要通过上述 8 种变换实现。
假阳性 (FP) 触发 :使模型将不相似的代码对判断为相似(误报/绕过)。
设计了一种贪婪采样策略 (Greedy Sampling) :从目标函数的指令分布中采样,在受害函数前缀插入指令序列,逐步优化以最大化相似度得分,同时通过无条件跳转确保语义不变。
可迁移性 (Transferability) :测试在 BinShot 上生成的 FP 触发样本对其他模型是否有效。
2.4 可解释性分析 (XAI)
使用 SHAP 值和 显著性图 (Saliency Maps) 分析模型在受到攻击时的内部决策机制,观察指令重要性的变化。
3. 主要贡献 (Key Contributions)
提出 asmFooler 系统 :首个系统性地评估 BCSD 模型在广泛语义保持变换下鲁棒性的框架。
大规模对抗数据集 :构建了包含 9,565 个变体的二进制代码数据集,覆盖 620 个基准样本和 8 种变换技术。
全面评估 :对 6 种 SOTA BCSD 模型进行了 FN 和 FP 触发攻击的评估,并分析了攻击的可迁移性。
关键洞察 :揭示了模型鲁棒性依赖于处理流水线(预处理、架构、特征选择),并发现了 FP 攻击的高效性和可迁移性规律。
开源 :公开了 asmFooler 系统和对抗性二进制数据集。
4. 实验结果与发现 (Results & Findings)
4.1 模型鲁棒性差异显著
流水线设计决定鲁棒性 :
BinShot (仅依赖指令序列,无 CFG):对指令重排序(ICT)和基本块重排(BBR)非常脆弱,召回率大幅下降(如 BBR 下召回率降至 0.036)。
Gemini/Genius (基于 CFG 的 GNN):对控制流扁平化和虚假控制流非常脆弱,但对指令重排相对鲁棒。
Asm2Vec (随机游走):表现出较强的鲁棒性,特别是在面对垃圾代码插入时,因为其随机游走机制能忽略部分插入的无效路径。
变换类型的影响 :
语义 NOP :主要影响基于指令特征的模型,对基于图的模型影响较小(因为 CFG 结构未变)。
垃圾代码 :会引入新的基本块,从而破坏基于 CFG 的模型(如 Gemini/Genius)的性能。
4.2 假阳性 (FP) 攻击的高效性
高成功率 :即使变换预算很小(平均仅增加 14.75 条指令,约 57.58 字节),FP 攻击的成功率(ASR)也能达到 98.3% 甚至 100% 。
可迁移性 :在 BinShot 上生成的 FP 样本对其他模型(特别是具有相似架构的 Trex)具有很强的迁移性。然而,基于 CFG 的模型(Gemini/Genius)表现出更强的抵抗力。
4.3 可解释性分析发现
SHAP 值分析 :攻击后,Shapley 值向零收敛,表明模型决策边界变得模糊,模型倾向于认为两个函数相似。
显著性分析 :FP 触发指令的引入导致模型对关键特征(重要指令)的注意力(Saliency)显著下降,模型被误导关注了非关键的对抗性指令。
4.4 变换预算的限制
攻击者的能力受限于模型的输入长度限制(如 Token 数量)以及语义等价指令的表达空间。
5. 意义与启示 (Significance)
安全警示 :当前的 BCSD 模型在面对精心设计的语义保持变换时非常脆弱,容易被攻击者利用来逃避恶意软件检测或制造误报。
模型设计指导 :
构建鲁棒的 BCSD 模型需要结合多种特征(静态指令序列 + 动态控制流/执行轨迹)。
仅依赖单一特征(如纯指令序列或纯 CFG)的模型容易成为特定变换的牺牲品。
需要引入对抗训练(Adversarial Training)和数据增强,将语义保持变换纳入训练过程。
未来方向 :论文指出需要进一步研究更高级的混淆技术(如加密、打包)以及结合静态与动态特征的混合防御策略。
总结 :该论文通过构建大规模对抗数据集和系统化的评估框架,深刻揭示了现有二进制代码相似性检测模型在语义保持变换面前的脆弱性,并强调了模型架构和特征工程在提升鲁棒性中的核心作用。
每周获取最佳 machine learning 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。