21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入

Discrete Adversarial Attack to Models of Code

  • 写在最前面
    • 一些对关系抽取和事件抽取相关的启发和思考
    • 摘要
    • 总结与展望
    • 课堂讨论
  • 研究背景与意义
    • 对抗攻击
    • 针对代码模型的对抗攻击
    • Semantic-adhering语义依附的代码模型
    • 针对Semantic-adhering的对抗攻击
    • Dak的意义
    • 主要贡献
  • 研究内容与方案
    • 形式化定义
    • DaK的工作流程
      • Destroyer
      • Finder
      • Merger
    • 针对DaK的防御
  • 实验结果
    • 实验设置
    • 实验结果—攻击效率
    • 实验结果—对抗样例生成时间
    • 实验结果—deadcode检测
    • 实验结果—消融实验
    • 实验结果—EverI的防御表现
    • 实验结果—EverI的训练时间

写在最前面

本文为邹德清教授的《网络安全专题》课堂笔记系列的文章,本次专题主题为大模型。

陈苏宁同学分享了Discrete Adversarial Attack to Models of Code《对代码模型的离散对抗性攻击》
PPT很清爽接受起来比较顺畅

论文发布在:PLDI 2023(Programming Language Design and Implementation)计算机科学领域的顶级会议之一
《ACM Journals》Proceedings of the ACM on Programming Languages
这篇论文的主要内容为针对代码模型的离散对抗攻击(Discrete Adversarial Attack,Dak)

Dak:一种特殊的网络攻击方法,旨在通过对代码进行细微修改,欺骗代码分析模型,而这些修改不改变代码的原始意图或功能。

其主要贡献包括:提出了该攻击方法,证明了对抗性训练可以有效防御该攻击,以及进行了相关的实验评估。

在论文中,研究人员首先形式化了离散对抗攻击的定义,然后介绍了攻击方法的工作流程,包括Destroyer、Finder和Merger三个关键组成部分。Destroyer负责篡改输入程序,Finder寻找关键特征,而Merger将关键特征注入到篡改后的程序中以生成对抗样例。论文还提出了防御方法,其中包括基于之前研究的方法和增强的对抗训练方法(EverI)。

实验结果显示,该攻击方法在离散对抗样例生成方面表现出色,但时间成本可能较高。对抗性训练方法对抵御离散对抗攻击效果显著,而增强的对抗训练方法在防御各种对抗攻击中表现最佳。

如果您对更详细的内容感兴趣,可以通过以下链接访问完整的论文:Discrete Adversarial Attack to Models of Code。

一些对关系抽取和事件抽取相关的启发和思考

这篇论文主要集中在代码模型的离散对抗性攻击上,这篇文章提出了几个关键点,我们可以进一步探讨这些思路:

  1. 特征的重要性

    • 在代码模型的离散对抗性攻击中,Finder和Merger的作用体现了关键特征在攻击过程中的重要性。
    • 对于关系抽取和事件抽取任务,这启发我们重视关键特征的识别和利用。例如,在处理文本数据时,强化模型对关键实体、行动和关系的识别能力,可以提高模型的准确性和鲁棒性。
  2. 防御方法

    • 文章中的对抗性训练方法凸显了提高模型鲁棒性的重要性。
    • 在关系抽取和事件抽取领域,这意味着我们可以通过对抗性训练提高模型对噪声、歧义或故意曲解的输入的抵抗力。这种训练可以让模型在面对复杂或误导性信息时仍能准确提取关系和事件。
  3. 泛化能力

    • 语义依附的代码模型需要具备处理多种不同代码输入的能力。
    • 对于关系抽取和事件抽取模型,这强调了模型需要有足够的泛化能力来处理各种文本和语境。模型不仅要识别标准场景中的关系和事件,还要能适应语言变化和非标准用法
  4. 创新性思路

    • 文章中关键特征定义和对抗性训练的应用都是理论上的创新。
  5. 应用前景

    • 从安全性的角度来看,了解如何保护这些系统免受对抗性攻击,同时确保其准确性和可靠性,对于构建更安全和有效的信息提取系统至关重要。

结合这些思考,可以进一步改进关系抽取和事件抽取技术,使其更加精确、鲁棒和适用于各种应用场景。

摘要

近年来,深度神经网络无处不在的脆弱性引起了人们的极大关注。有趣的是,存在对抗性示例在不引起人类察觉的情况下欺骗最先进的神经模型,导致错误的预测。
在这篇文章中,研究了一种特定于代码模型的不同类型的对抗性示例,称为离散对抗性示例(Discrete Adversarial Attack),这些攻击示例是通过在保持原始输入的语义的情况下对程序进行变换而创建的。
特别是,我们提出了一种新颖的通用方法,该方法在攻击广泛的代码模型方面非常有效。从防御的角度来看,我们的主要贡献是应用对抗性训练(训练鲁棒分类器的最成功算法)来保护代码模型免受离散对抗性攻击的理论基础。在理论结果的激励下,我们提出了对抗性训练的简单实现,这大大提高了代码模型在实践中对抗对抗性攻击的鲁棒性。
我们广泛评估了我们的攻击和防御方法。结果表明,无论防御机制是否到位,我们的离散攻击都比最先进的防御机制更有效,以帮助模型抵抗攻击。此外,我们实现的对抗性训练提高了所有评估模型的鲁棒性,以最大的优势抵御最先进的对抗性攻击以及我们自己的攻击。

总结与展望

  • 总结:
    提出了一种针对代码模型的离散对抗攻击(DaK)
    证明了应用对抗训练来防御离散对抗攻击(DaK)的理论基础

  • 通过实验评估了提出的攻击和防御方法的表现。结果表明:
    1)无论是否有防御技术的存在,DaK的表现均优于现有的攻击方法;
    2)增强的对抗训练方法在防御现有攻击方法和DaK攻击时都是最有效的

  • 缺陷:
    生成对抗样例和训练网络的时间成本大幅度提升,可能不适用于大模型。

课堂讨论

攻击方法的优势
思路创新性:关键特征的定义、
理论上的创新

研究背景与意义

对抗攻击

深度学习在图像分类、自然语言处理等众多领域展现出了最先进的表现,但同时,也展现了面对对抗攻击的脆弱性,仅仅是难以察觉的微小变化,也能扰乱最优秀的神经网络的结果。

对抗性攻击可以类比为,在一封信中故意加入易误解的信息,使得阅读者理解错误,但不改变整体的内容。

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第1张图片

针对代码模型的对抗攻击

利用同样的思想,
本文探讨了一种名为“离散对抗攻击(Discrete Adversarial Attack, DaK)”的攻击方法,旨在针对高级语言程序代码(如Java、C#等)进行对抗攻击。这种攻击方法通过对程序进行变换生成对抗样本,同时保持原始输入的语义不变。

DaK攻击是一种专门针对代码模型的对抗攻击方法。它通过对输入的代码进行离散的变换,生成对抗样本,这些样本在语义上保持不变,但能够欺骗模型。
攻击者利用DaK攻击可以在不改变代码的功能的情况下引入错误或漏洞,从而对代码模型进行攻击。

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第2张图片

Semantic-adhering语义依附的代码模型

我们定义语义依附(Semantic-adhering)的代码模型为具有以下特性:
如果一个属性对于程序p以及所有在语义上等同于p的程序的计算方式都相同,那么该属性就被认为是语义依附的。

语义依附的代码模型应具备以下原则:
1、对于等效的语义,模型的输出应保持一致性。
2、对于对抗样本的输入,模型应具备较高的鲁棒性,不易受到攻击的影响。
3、模型应具备一定的泛化能力,能够处理多种不同的代码输入。

设计语义依附的代码模型需要考虑代码的结构、语法和语义信息。一些方法和技巧包括:
1、使用静态分析技术来理解代码的语义结构。
2、引入代码规范和约束,以限制代码变换的范围。
3、利用自然语言处理技术来处理代码中的注释和文档信息,以提取额外的语义信息。
21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第3张图片

针对Semantic-adhering的对抗攻击

离散对抗攻击discrete adversarial attack(DaK)攻击是一种专门针对语义依附的代码模型的对抗攻击方法。它通过对输入的代码进行离散的变换生成对抗样本,这些样本在语义上保持不变,但能够欺骗模型。攻击者可以利用DaK攻击在不改变代码的功能的情况下引入错误或漏洞,从而对代码模型进行攻击。

  • 黑盒攻击
  • 定向攻击

方法:找到一个语义等价于程序 p 的对抗样本 ̂,使得模型对 ̂的预测结果和p不一样。
由于是 ̂ 由 p 通过保留语义的变换得到的,所以其真实标签(ground-truth label)是确定的。

Dak的意义

越来越多基于学习的漏洞检测器被集成到开发流程中,检测器,尤其是在面对对抗攻击时的正确性和可靠性是取得成功的关键因素。DaK成功使GGNN[1]在变量误用的任务上漏掉了代码漏洞。

[1] Yujia Li, Richard Zemel, Marc Brockschmidt, and Daniel Tarlow. 2016. Gated Graph Sequence Neural Networks. In Proceedings ofICLR’16.


原始输入

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第4张图片

对抗样例

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第5张图片

  • 引发缓冲区溢出
  • 开源项目绕过检测提交有缺陷代码
  • 在不修改语义的情况下,绕过恶意代码检测

主要贡献

本文的主要贡献包括:

  • 提出了一种针对语义依附的代码模型的离散对抗攻击(DaK)方法。
  • 证明了应用对抗性训练来防御离散对抗攻击的理论基础。
  • 在实验中评估了提出的攻击和防御方法,结果表明:
    1. 无论是否存在防御机制,DaK攻击的效果都优于现有的攻击方法。
    2. 增强的对抗训练方法在防御现有攻击方法和DaK攻击时都表现最佳。

研究内容与方案

形式化定义

对于原始输入p,对抗样例 ̂ 满足:

  1. 由p通过代码变换得到
  2. 变换后代码语义不变
  3. 变换后的代码预测变成指定的标签 ̂ ,而不是原始输入的标签c。

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第6张图片

DaK的工作流程

DaK攻击主要由三部分组成:

  • Destroyer(破坏者):对于一个原始输入程序,通过篡改它的特征,削弱模型赖以做出预测的信号。文章选择通过保留语义的变换,篡改整个输入程序。
  • Finder(寻找者):针对目标标签,找到一组模型预测结果为目标标签的程序(以下称supplier供应商)。找到每个supplier供应商的关键特征,将这些特征作为最强、最集中的特征。
  • Merger(合并者):将供应商的关键特征注入被篡改的程序中,以生成离散的对抗示例。因为供应商的关键特征是强大的、集中的特征,可能会压倒被篡改程序中的剩余特征,所以模型应该预测离散对抗性示例的目标标签。

Destroyer

在破坏原有特征时,对原有标签的预测概率会下降,但同时会带来新的问题——模型预测为其他标签的概率可能会显著提高。

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第7张图片
关键思想:只有当所有预测标签的标准差变小时,才应用变换。这可以防止篡改后,模型仍然高度自信地预测为原始标签。

在对程序进行变换后,预测为total的概率仍很高。说明仍存在我们无法克服的显著特征。
灰色的表示关键特征

贪心算法,局部最优
21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第8张图片

Finder

参考文献[1]的方法,定义关键特征必须满足两个特性:
模型对关键特征的预测和对原始程序预测相同
模型对去掉关键特征后的程序预测结果与原始程序的预测不同


[1] Yu Wang, Ke Wang, and Linzhang Wang. 2021. WheaCha: A Method for Explaining the Predictions of Code Summarization Models.

一个supplier供应商样例

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第9张图片

图5.a图是一个原始输入程序,b图是关键特征,c图是去掉关键特征后的代码段

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第10张图片

收集一组supllier,只要有任何一个生成了成功的对抗样例,目的就可以达到。

基于文献[1]的方法,定义关键特征 ̃:
1)constituent:是原始程序 p 的一部分;
2)sufficient:代码模型对 ̃的预测结果与对 p 的预测结果相同;
3)necessary:代码模型对 p 去掉 ̃后的部分预测结果与对 p 的不同;
4)1-minimal:去掉 ̃的任何字符,都会破坏2)和3)的特性。


[1] Yu Wang, Ke Wang, and Linzhang Wang. 2021. WheaCha: A Method for Explaining the Predictions of Code Summarization Models.

在这里插入图片描述

Merger

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第11张图片
将Finder得到的关键特征作为死代码插入到通过Destroyer破坏后的代码段中,根据关键特征的强度进行排序,然后生成对抗样例。

Ranking Suppliers:根据关键特征的强度对supplier进行排序。
1)模型预测目标标签的概率
2)去掉关键特征前后,模型对目标标签预测的概率的差值
两者越大,说明关键特征的效果越强大
采用两者之和进行排序,对每一个supplier生成对抗样例

如右图所示,按照Ranking Suppliers的排序,使用每个suppliers生成对抗样例:
1)将关键特征插入到永远不会执行的分支(switch,if等)中
2)构造普遍(不会被识别为明显异常的代码)且非易见(足够复杂以通过编译器)的分支或循环条件。
如,两个数自乘小于零;Min函数的返回值大于其任意参数

针对DaK的防御

1、首先证明[1]的方法在离散对抗样例下同样适用。
2、提出Enhanced Adversarial TraIning(EverI)方法,原则上适用于所有对抗攻击的防御,主要思想是只在最强的对抗样例上训练一个模型。

  • 对于DaK攻击,首先根据变换在原始输入上构建一个传递闭包,在传递闭包中的所有程序中找出最强大(达到模型最大损失)的对抗样例。
  • 对于其他经典的连续的攻击,通过增加对抗步骤与随机初始化对抗扰动来找出最强的对抗样例。
  • 对于其他离散的攻击,通过增加程序变换搜索树的宽度和深度找出最强的对抗样例。

makes the assumption on the continuous dierentiability of the adversarial loss w.r.t. network parameters as
well as adversarial perturbations, which clearly does not hold for discrete adversaries.


[1] Aleksander Madry, Aleksandar Makelov, Ludwig Schmidt, Dimitris Tsipras, and Adrian Vladu. 2018. Towards Deep Learning Models Resistant to Adversarial Attacks. In International Conference on Learning Representations. https://openreview.net/forum?id=rJzIBfZAb

实验结果

实验设置

实验目的:
1)DaK对(不)存在防御机制的模型的攻击效果;
2)EverI在DaK与最先进的攻击方法下的防御效果。

评分标准:鲁棒性分数被定义为输入程序的正确label没有被变为攻击者的期望label的百分比。
评分越低,说明模型鲁棒性越强;
评分越高,说明攻击越有效。

实验结果—攻击效率

DaK、DAMP、Imitator在code2vec、GGNN、CodeBERT上的表现

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第12张图片
平均鲁棒分数,攻击code2vec时,Dak是DAMP的十倍,攻击GGNN时是3倍
Dak容易超过baseline的原因是,
1、DAMP只探索非常有限的解空间,不容易寻找最强大的对抗样例;
2、Imitator本质上是启发式的,不如Dak智能

实验结果—对抗样例生成时间

DaK、DAMP、Imitator在code2vec、GGNN、CodeBERT上生成成功对抗样例的平均时间

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第13张图片

实验结果—deadcode检测

Linters/Compilers 的deadcode检测

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第14张图片

实验结果—消融实验

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第15张图片

实验结果—EverI的防御表现

1、多个变量被重命名,难以检测哪个变量是真正的异常值
2、异常值检测无法处理重命名以外的变换

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第16张图片

实验结果—EverI的训练时间

21Discrete Adversarial Attack(DaK)攻击——针对语义依附代码模型的对抗攻击方法:Destroyer篡改输入程序,Finder寻找关键特征,Merger将关键特征注入_第17张图片

你可能感兴趣的:(科研笔记与实践,AIGC,生成对抗网络,安全,人工智能,论文阅读)