【代码大模型-后门攻击】Poison Attack and Defense on Deep Source Code Processing Models

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

【代码大模型-后门攻击】Poison Attack and Defense on Deep Source Code Processing Models

论文链接:https://arxiv.org/pdf/2210.17029
代码链接:没找着

key words: CodePoisoner, CodeDetector, task[ defect detection, clone detection, code repair ], framework

【why】
1.中毒攻击
三种中毒攻击任务:
(1)缺陷检测
将输入代码片段分类为有缺陷和无缺陷
在这里插入图片描述
(2)克隆检测
代码克隆是指软件项目中相同或相似的代码片段。过多的代码克隆可能会导致代码库的扩展,从而增加维护成本并降低软件系统的可靠性。同时,克隆检测还用于抄袭检测和版权侵权调查。
在这里插入图片描述
(3)代码修复
在这里插入图片描述
假设:攻击者只可访问数据集,而不能访问模型架构和参数。
攻击场景:产生中毒样本和benchmark
攻击目标:①向模型中注入高成功率的可靠后门②有毒样本难以被编译器或人类发现③保持中毒模型在干净数据集上的可比性能

2.中毒防御
之前的方法,手动检查数据集以查找毒物样本。
目标:尽可能检测出所有训练数据中的中毒样本,同时不丢失任何干净样本

【what】
1.a poison attack framework CODEPOISONER
包含四种中毒策略(三种基于规则的和一种语言模型引导的)进行触发器的设计和中毒样本的生成。
在这里插入图片描述
基于规则的投毒策略:
基于规则的中毒策略采用固定且与上下文无关的token或语句作为触发器。
(1)Identifier renaming – 用特定的标记替换一些标识符作为触发器
只重命名变量和方法名称,定制的触发器遵循命名约定,以确保毒物样本的可编译性。
(2)Constant unfolding – 用特定的表达式替换一些常量作为触发器
遍历原始样本的AST并识别所有的常量,然后随机选择一个常数并将其替换为触发器,这些触发器是有效的预先计算的表达式,并确保毒物样本的可编译性。
(3)Dead-code insertion – 在原始样本中的适当位置插入一个死代码片段作为触发器
遍历原始样本的 AST 并识别所有语句,然后随机选择一个语句并在其后面插入死代码片段,从而在 AST 中生成一个新的子树。
尽管它们能够实现有希望的攻击,但触发器仍然存在被人类检查员检测到的风险,即使人类的审查过程非常耗时并且可能会丢失一些干净的样本。
语言模型引导的投毒策略:
一些工作 采用预先训练的语言模型来根据输入上下文生成有效且自然的代码片段。
在本文中,将预训练的源代码 LM(即 CodeGPT [)生成的代码片段视为触发器。
步骤:
(1)在原始代码中选择一语句,该语句之前的代码作为输入上下文
(2)使用CodeGPT生成代码片段
(3)将生成的代码片段插入到所选语句之后的原始代码中
因此每个中毒样本都包含有LM生成的唯一触发器。
依据是 语言模型引导的投毒策略 本质上将 LM 的特定分布视为触发器,并迫使 DL 模型学习从该分布到目标标签的映射。
优势:
(1)触发器是上下文感知的,保证了中毒样本的自然性
(2)触发器是动态的,不是固定的标记或语句

2.a poison defense framework CODEDETECTOR
目标是检测训练数据中的中毒样本,并进一步去除,利用集成梯度算法去检测触发器。
动机/假设:触发器是有影响力和异常的代码标记。
NLP 中使用ONION的方法进行防御,ONION的核心思想是触发器与上下文无关,删除它会降低整个句子的复杂性,ONION 可以有效地检测粗略的触发因素,但 ONION 很难检测到那些看起来很自然的触发因素。
CodeDetector – 动机是触发器不仅是对模型预测影响很大的重要词,而且是导致有针对性的错误结果的异常词。
在这里插入图片描述

步骤:
(1)利用广泛使用的集成梯度算法查找数据集中的所有重要单词。
使用梯度集成算法计算一个分数来衡量其对模型的影响,分数越大,说明某个词对模型决策的影响越大。 对于每个样本,我们对所有单词的分数进行归一化,并将分数大于 0.5 的单词收集为重要单词。
(2)探测对模型性能有很大负面影响的异常词。
首先,在原始测试集上评估训练后的模型以获得原始性能 p(例如准确性)。然后,对于每个重要的单词 wi ,将其嵌入到所有测试样本中,并获得模型在更改后的测试集上的性能(pi )。最后,将所有 pi 与原始 p 进行比较。
在这里插入图片描述
则相应的重要词wi 很可能是中毒攻击的触发因素。因此,CodeDetector将这个wi视为潜在的触发器,所有包含wi的样本都被预测为毒样本。
在这里插入图片描述
则预测数据集是干净的,没有有毒样本。

【how】
1.基础设置
面向的任务:缺陷检测、克隆检测和代码修复任务
架构:CNN, LSTM, Transformer, pre-trained CodeBERT
针对三个任务的基础设置(在CodeXGLUE基准测试上):
(其中TextCNN, LSTM, Transformer从头开始训练,并在CodeBert上针对任务进行微调)
在这里插入图片描述
baselines:
攻击中使用BadNet,防御中使用ONION

2.评估指标
quality metrics
使用tree-sitter工具来计算可编译毒物样本的比率。
attack metrics
使用 attack success rate(ASR) 作为衡量标准,其中Cnon-target指的是在干净数据集上所有将被投毒的样本的数量,Cflipped指的是被投毒后获得预测为干净样本的数量。
在这里插入图片描述
task-specific metrics
不同的任务中,不同的模型在干净数据集上的效果。用准确性作为缺陷检测任务的评估指标,采用 F1 分数来评估克隆检测任务,使用精确匹配(EM)来评估生成代码的质量。
defense metrics
精确度和recall召回率,更高的精度意味着防御方法丢失的干净样本更少,更高的召回率意味着它检测到更多的有毒样本。

3.实验结果
攻击的有效性:
在这里插入图片描述
codepoisoner和攻击基准:
在这里插入图片描述
codedetector和防御基准:【对此表示疑惑,是不是得再加一个假阳性率,因为现在只是把可疑语句删除但是可能有很多误删的,用精度表示比较片面】
在这里插入图片描述
4.超参数的影响
(1)中毒率 – 经过实验2%最好
(2)防御阈值 – 0.3

5.产生的中毒数据样例
在这里插入图片描述

相关论文:
1.Chen 和 Dai [11] 分析了内部 LSTM 神经元的变化,并提出了一种名为 BKI 的防御方法来减轻毒物攻击。然而,BKI是为基于LSTM的分类模型设计的,灵活性较差。
[11] Chuanshuai Chen and Jiazhu Dai. 2021. Mitigating backdoor attacks in LSTM-based text classification systems by Backdoor Keyword Identification. Neurocomputing 452 (2021), 253–262
2.提出了用于缺陷检测的 Devign,它通过将 AST、控制流和数据流图融合到统一的异构图代码属性图(CPG)中来表示程序。

总结:有好多任务中使用的代码模型和AST有关,因此要抓住这个特点

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值