预训练的代码模型在许多重要的软件工程任务中取得了成功。然而,这些强大的模型易受对抗性攻击影响:通过对输入做微小扰动,使目标模型产生错误输出。现有工作主要用在操作语义上保持不变的示例来攻击代码模型,但忽略了对抗示例生成的一个基本要求——扰动对人类评判者应显得自然(即“自然性要求”)。
本文提出了 ALERT(Naturalness Aware Attack,自然性感知攻击),这是一种黑盒攻击方法,通过对输入进行对抗性变换使目标模型产生错误输出。与先前工作不同,本文在保持原输入操作语义的同时,也考虑生成示例的自然语义。我们的用户研究表明,开发者普遍认为 ALERT 生成的对抗示例比忽视自然性要求的最先进方法(Zhang 等人)生成的更自然。
在攻击 CodeBERT 时,本方法在三个下游任务(漏洞预测、克隆检测、代码作者归属)上的攻击成功率分别为 53.62%、27.79% 和 35.78%。在 GraphCodeBERT 上,三项任务的成功率分别为 76.95%、7.96% 和 61.47%。在这两个预训练模型上,平均分别比基线高出约 14.07% 和 18.56%。最后,我们探讨了用这些对抗示例进行对抗性微调以强化目标模型的价值,结果显示经 ALERT 生成的对抗示例微调后,CodeBERT 与 GraphCodeBERT 的准确率分别提升了 87.59% 和 92.32%。