分享自:

披着羊皮的狼:针对野外基于学习的Windows恶意软件检测的实用黑盒对抗攻击

期刊:33rd USENIX Security Symposium

这项研究《A Wolf in Sheep’s Clothing: Practical Black-Box Adversarial Attacks for Evading Learning-Based Windows Malware Detection in the Wild》由 Xiang Ling(中国科学院软件研究所智能软件研究中心、系统软件重点实验室、计算机科学国家重点实验室)、Zhiyu Wu(浙江大学)、Bin Wang(浙江物联网与数据安全人工智能重点实验室、西安电子科技大学杭州研究院)、Wei Deng(浙江大学)、Jingzheng Wu(中国科学院软件研究所智能软件研究中心、系统软件重点实验室、计算机科学国家重点实验室)、Shouling Ji(浙江大学)、Tianyue Luo(中国科学院软件研究所智能软件研究中心)、Yanjun Wu(中国科学院软件研究所智能软件研究中心、系统软件重点实验室、计算机科学国家重点实验室)共同完成,并发表在2024年8月14日至16日于美国费城举行的第33届USENIX安全研讨会(USENIX Security Symposium)的会议论文集中。

一、 学术背景

本研究属于计算机安全领域,特别是恶意软件检测与对抗性机器学习(Adversarial Machine Learning)的交叉方向。随着微软Windows操作系统的广泛使用,针对其的恶意软件(Malware)数量持续激增,已成为严重的网络安全威胁。传统的基于签名(Signature-based)的恶意软件检测技术难以应对新型或未知的恶意软件。近二十年来,基于机器学习(ML)和深度学习(DL)的学习型恶意软件检测(Learning-Based Malware Detection)技术因其强大的学习能力,能够有效检测新出现的甚至零日(zero-day)恶意软件,已成为主流杀毒软件的核心组成部分。然而,机器学习模型在计算机视觉、自然语言处理等领域已被证明容易受到对抗性攻击(Adversarial Attack)的影响,攻击者可以通过对输入样本进行精心修改(即生成对抗样本/Adversarial Examples),使模型做出错误判断。因此,一个自然的担忧是:学习型Windows恶意软件检测系统是否同样脆弱?

在此背景下,本研究旨在探索一个现实且实用的对抗性攻击框架,以评估当前学习型Windows恶意软件检测系统在黑盒(Black-Box)设置下的安全风险。黑盒设置意味着攻击者对目标检测系统(如使用的训练数据、特征集、模型架构、参数权重等)一无所知,仅能通过向系统提交样本并获取预测结果(例如,是恶意还是良性,有时可能包含置信度分数)来进行攻击。这种设置更贴近现实世界中攻击者面临的场景。本研究的目标是生成能够实际执行的对抗性恶意软件文件(而不仅仅是理论上的特征向量),这些文件在保持与原恶意软件相同语义(即恶意行为不变)的同时,能够成功逃避目标检测系统的识别。

二、 详细工作流程

本研究提出了一个名为 MalGuise 的实用黑盒对抗性攻击框架。其工作流程主要包含三个核心阶段:对抗性变换准备、蒙特卡洛树搜索(MCTS)引导的搜索和对抗性恶意软件重建。

第一阶段:对抗性变换准备 为了在保持语义的前提下操纵恶意软件,研究首先将输入的Windows恶意软件表示为控制流图(Control-Flow Graph, CFG)。CFG是一种有向图,其中节点代表基本块(Basic Block, 即顺序执行的指令序列),边代表基本块之间的控制流转移路径。CFG封装了程序执行时的内在控制流,包含丰富的语义和结构信息,且基于CFG的恶意软件检测已被证明是先进且有效的。

然而,直接操纵CFG的节点和边极易导致可执行文件出现寻址或处理错误,从而无法正常运行。为了解决这个问题,并使变换更不易被防御者察觉,本研究提出了一种新颖的、保持语义的变换方法,称为 基于调用的重划分(Call-based Redividing)。该变换方法的核心思想是:针对CFG中包含至少一条“call”(调用)指令的基本块进行重划分,从而并发地操纵CFG的节点和边。 具体步骤如下: 1. 识别与标注: 识别并标注出CFG中所有包含“call”指令的基本块。 2. 重划分: 对于一个选定的包含“call”指令的基本块v,以该“call”指令为分界线,将其重新划分为三个连续的基本块:前基本块(v_fore,包含call之前的指令)、中基本块(v_mid,仅包含call指令和一个后续的jmp跳转指令)和后基本块(v_post,包含call之后的指令)。原基本块v的后续边将转移到v_mid。 3. 注入语义NOPs: 为了避免v_mid仅包含两条指令(call和jmp)而过于显眼,研究在call指令之前或calljmp之间注入语义NOPs(Semantic NOPs)。语义NOPs是指执行后不改变程序状态(寄存器、内存等)的指令序列,例如 add eax, 1; sub eax, 1。这些语义NOPs使用文献[41]中的上下文无关文法(Context-Free Grammar)多样化生成,主要包括算术、逻辑、比较和数据传输四类操作码。

通过这种变换,不仅增加了CFG的节点数量(v变成了v_forev_midv_post),还改变了边的关系(引入了新的跳转),从而以一种更细粒度(Fine-Grained)的方式改变了恶意软件的表示,使其更难以被检测模型识别,同时保持了功能不变。

第二阶段:MCTS引导的搜索 给定一个恶意软件及其CFG表示,攻击目标是在巨大的、离散的变换序列空间中,找到一个最优的基于调用的重划分变换序列T = t1 ◦ t2 ◦ ... ◦ tn,使得应用该序列后得到的对抗性CFG能成功逃避目标检测系统。每个变换tk涉及两个决策:选择哪个“call”指令进行重划分,以及注入何种语义NOPs。这是一个在黑盒设置下、计算资源有限的条件中,于无限离散空间中进行搜索的优化问题。

为了解决这一挑战,研究采用了蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS) 算法来引导搜索。MCTS在解决类似围棋这类需要大量搜索且领域知识有限的复杂问题上取得了巨大成功,非常适合本任务。 MCTS-Guided Searching算法的流程如下(见Algorithm 1): 1. 初始化: 获取CFG中所有可用的“call”指令,初始化MCTS的根节点。 2. 迭代搜索: 在设定的最大变换序列长度n和计算预算c内进行循环。每次迭代包含MCTS的标准四步骤: * 选择(Selection): 为避免树无限扩张,以一定概率随机选择,或以UCT算法选择当前最有希望的子节点。 * 扩展(Expansion): 如果选中的节点不是叶子节点,则为其添加一个新的子节点(对应一个新的变换动作)。 * 模拟(Simulation): 从选中的节点开始,随机模拟执行后续的变换动作直到一定深度,并使用目标检测系统f对模拟生成的结果进行查询,将查询结果(是否被判别为恶意)作为奖励(Reward)。 * 回溯(Backpropagation): 将模拟得到的奖励值沿着搜索路径反向传播,更新路径上所有节点的统计信息(如访问次数、平均奖励)。 3. 确定动作: 在完成计算预算内的所有迭代后,从根节点的子节点中选择奖励值最高的节点,将其对应的变换动作追加到变换序列T中,并更新当前的对抗性CFG。 4. 终止判断: 如果当前的对抗性CFG能够逃避目标系统,则停止并返回变换序列T;否则,将选中的节点设为新的根节点,进入下一轮搜索,直到达到最大序列长度n。 该算法能够高效地在黑盒环境下探索有效的变换组合。

第三阶段:对抗性恶意软件重建 根据找到的最优变换序列T和原始恶意软件文件z,研究需要重建出实际的、可执行的对抗性恶意软件文件z_adv,同时必须严格遵守Windows可执行文件(PE格式)的规范。 重建过程(见Algorithm 2和3)的核心步骤如下: 1. 计算空间与确定注入地址: 计算所有变换需要注入的额外代码(语义NOPs和新增的jmp指令)的总大小Δ。如果.text节(代码节)末尾的闲置空间(Slack Space)足够容纳Δ,则代码注入到闲置空间;否则,需要在PE文件中新增一个节(Section)来容纳这些代码,并确保新节的大小是内存页大小(如4KB)的倍数。 2. 修补二进制文件: 对于变换序列中的每一个动作: * 将原CFG中选定的call指令替换为一个jmp指令,该指令跳转到预先计算好的注入地址a_inj。 * 在注入地址a_inj处,依次存放原始的call指令和生成的语义NOPs指令序列。 * 紧接着,注入另一个jmp指令,跳转回原call指令之后的下一条指令地址,从而恢复正常的控制流。 3. 调整PE头信息: 根据修改(如新增节、节大小变化)更新PE文件头的相关字段(如映像大小、节表信息等),确保文件符合规范,能够被操作系统正常加载和执行。

最终生成的z_adv在行为上与原始z完全一致,但因其CFG结构和部分二进制内容被精心修改,从而可能逃避基于学习的检测。

三、 主要结果

研究对MalGuise进行了系统性评估,旨在回答五个研究问题(RQ)。

RQ1(攻击性能):在包含10,000个测试恶意软件样本的大规模数据集上,将MalGuise与两种最先进的对抗性攻击(MMO, SRL)和三种传统混淆工具(UPX, VMProtect, Enigma)进行了比较。评估针对三种先进的学习型检测系统(MalGraph, MaGiC, MalConv),并在两种黑盒场景(有预测概率/无预测概率)下进行。 * 结果:MalGuise在所有情况下都取得了最佳的攻击成功率(Attack Success Rate, ASR)。在攻击MalGraph和MaGiC时,ASR均超过97%,即使在更严格的无预测概率场景下,ASR也几乎没有下降(跌幅不超过1%)。在攻击MalConv时,默认设置的MalGuise在低误报率(FPR=1%)场景下ASR约为34%,但通过调整注入的语义NOPs类型(使用25个最常用操作码),ASR可提升至97.76%(有概率)和95.18%(无概率)。相比之下,传统混淆工具的ASR最高不超过40%,而现有的对抗性攻击要么性能低下(MMO),要么无法生成实际文件(SRL)或可扩展性差。 * 结论:MalGuise对不同的学习型Windows恶意软件检测系统具有普适性(Agnostic),且在严格的黑盒设置下仍能保持极高的攻击成功率(通常超过95%)。

RQ2(影响因素):通过消融实验研究了影响MalGuise性能的关键因素。 * 核心变换部件: 单独使用“注入语义NOPs”(仅操纵节点)或“重划分call指令”(主要操纵边)的MalGuise变体,其ASR均非常低(大多低于5%)。只有结合两者,ASR才能达到超过97%的高水平。这表明同时细粒度操纵CFG的节点和边是MalGuise高效的关键。 * 修改基本块数量: 超过98%的成功对抗样本仅需修改不超过4个CFG基本块。对于MaGiC,61%的样本只需修改1个块;对于MalGraph和MalConv,分别有79%和56%的样本只需修改2个块。这说明MalGuise能以极小的修改实现高逃避率。 * 语义NOPs类型: 针对MalConv,不同类型的操作码对攻击成功率影响显著。通过筛选使用高频操作码,可以大幅提升ASR。 * MCTS超参数: 计算预算c达到20后,ASR性能便趋于稳定在高位;最大变换长度n设置为2时,ASR就已超过97%,表明通常只需很少的变换步骤。

RQ3(效用性能):评估生成的对抗性恶意软件是否保持原始语义。研究采用经验性验证,在Cuckoo沙箱中运行原始和对抗样本,收集并比较它们调用的API序列,计算归一化编辑距离,并设定阈值来判断语义是否相同。 * 结果:MalGuise生成的对抗性恶意软件的语义保持率(Semantics Preservation Rate, SPR)超过91%。而基线攻击MMO的SPR仅约40-50%。SRL则无法生成实际文件。约9%的失败主要源于恶意软件包含非标准PE部分(如Overlay)或含有不遵循标准调用约定的垃圾代码。 * 结论:MalGuise在保持高攻击成功率的同时,能确保绝大多数(>91%)生成的对抗样本功能不变。

RQ4(真实世界性能):评估MalGuise对五种商业杀毒产品的逃避能力(McAfee, Comodo, Kaspersky, ClamAV, Microsoft Defender ATP)。 * 结果:MalGuise对其中四款产品的ASR超过30%,对Microsoft Defender ATP的ASR高达70.63%。通过优化语义NOPs类型,ASR可进一步提升至74.97%。分析表明,逃避这些杀毒产品通常也只需要修改极少的基本块(大多数情况下1-2个)。 * 结论:MalGuise对现实世界中的杀毒软件构成切实的安全威胁。

RQ5(可能的防御):评估了MalGuise针对四类潜在防御措施的抵抗力。 1. 对抗训练(Adversarial Training): 用MalGuise生成的对抗样本重新训练目标模型后,模型的检测性能基本不变,但MalGuise的ASR有所下降。然而,ASR仍然保持较高水平(MalGraph: 55.33%, MaGiC: 83.10%, MalConv: 50.68%)。 2. 二进制代码优化: 使用Optimice插件进行死代码消除或CFG简化作为防御预处理。MalGuise的ASR虽有下降,但仍超过74%。 3. 基于启发式的对抗检测: 实施两条启发式规则(R1:检测是否存在额外的可执行节;R2:检测是否存在“call后接jmp且中间有语义NOPs”的代码模式)。虽然能检测部分对抗样本,但存在无法平衡检测率(TPR)和误报率(FPR)的困境。例如,结合两条规则时,TPR为67.75%,但仍有33.25%的对抗样本漏检,且FPR为2.95%,高于多数检测系统容忍的FPR上限(1%或0.1%)。 4. 模糊哈希(Fuzzy Hashing): 使用SSDeep, TLSH, SpamSum等工具进行相似性检测。在FPR=0.1%的设置下,MalGuise的ASR接近100%。即使防御方拥有所有原始样本的哈希值,在FPR=1%时ASR仍超过50%。 * 结论:即使防御方适应性地了解MalGuise的攻击方式,MalGuise依然非常有效。

四、 结论与意义

本研究得出结论:通过学习新型的、细粒度的“基于调用的重划分”变换,并利用MCTS在黑盒环境下进行高效搜索,所提出的MalGuise框架能够生成实用的、保持语义的对抗性Windows恶意软件文件。该框架不仅能以超过95%的成功率逃避最先进的学习型检测系统,还能对广泛使用的商业杀毒产品构成实质性威胁(ASR最高达74.97%)。

本研究的价值体现在多个层面: * 科学价值: 它首次将更细粒度的CFG变换(同时操纵节点和边)应用于针对恶意软件检测的对抗性攻击中,丰富了对抗性机器学习在安全领域的理论和方法。研究系统性地证明了学习型恶意软件检测系统在黑盒设置下的脆弱性。 * 应用与警示价值: 研究结果向学术界和工业界敲响了警钟,揭示了现有基于学习的恶意软件检测技术在实际部署中可能面临严峻的对抗性威胁。它促使研究者和安全厂商必须认真考虑并提升其模型的鲁棒性。 * 工具价值: MalGuise可作为“蓝队”(防御方)的评估工具,用于主动测试和加固其检测系统;也可作为第三方测试机构(如AV-TEST)全面评估杀毒软件安全性的新手段。

五、 研究亮点

  1. 首创性细粒度变换: 提出了“基于调用的重划分”这一新颖的语义保持变换,首次在恶意软件对抗攻击中实现了对CFG节点和边的并发、细粒度操纵。
  2. 实用性强: 攻击框架生成的是符合PE格式规范、可实际执行的对抗性恶意软件文件(而不仅仅是特征),且语义保持率高(>91%),具备了现实世界攻击的可行性。
  3. 高效的黑盒优化: 创新性地将MCTS算法应用于解决恶意软件离散空间下的黑盒优化问题,在有限查询次数内高效找到了有效的对抗性修改序列。
  4. 全面的评估与泛化性: 不仅评估了对学术前沿模型的攻击,还扩展至对五种主流商业杀毒产品的测试,证明了攻击的广泛有效性(泛化性),凸显了现实世界风险的普遍性。
  5. 深入的防御分析: 系统评估了多种可能防御措施的效果,表明即使防御方有所准备,MalGuise仍能保持较高的攻击效力,进一步强调了问题的严重性和构建鲁棒防御的挑战性。

六、 其他有价值内容

研究还讨论了潜在的应用场景(如蓝队评估、红队研发、第三方测试)和伦理考量。作者意识到其工作的双刃剑性质,因此承诺仅与经过验证的学术研究人员共享代码,以在促进安全研究发展与防止技术滥用之间寻求平衡。同时,论文也指出了当前工作的局限性,例如语义保持验证的经验性、主要针对静态分析以及特定于Windows PE格式等,并指明了未来研究方向,如针对动态分析的攻击、生成格式无关的对抗性恶意软件等。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com