1、Abstract
文章提出了一种针对源代码作者身份的攻击。由于归因方法依赖于机器学习,通过执行一系列保留语义的代码转换,会导致错误的归因。攻击由蒙特卡洛树搜索引导,这样能够在源代码的离散域中进行操作。对204位程序员的源代码进行评估,证明了攻击方法对归因方法产生了重大影响,在遭受攻击时,其准确性从88%下降至1%。此外,文章也证明了该攻击可以高精度地模仿开发人员的编码风格,从而导致错误的归因。
2、Introduction
程序的源代码中通常包含一些特性,这些特性反映了编码风格,可用于标识程序员。这些特性包括代码注释、代码布局、语法和控制流的使用习惯。例如tab缩减2个字符还是4个字符,循环时使用for循环还是while循环等等。基于这些特征识别程序员的就被称为作者身份(Authorship Attribution)。
作者的攻击通过对源代码进行迭代转换,保留语义的同时更改了代码特征(代码注释、代码布局、语法和控制流的使用习惯)。为了明确具体如何转换,作者开发了蒙特卡洛树搜索的一种变体来构建一系列具体对抗性但合理的代码转换。通过对抗性样本,不仅能够实现阻止正确归因的无目标攻击,还可以模仿开发人员的编码风格进行有目标攻击。
如下图是对一个代码片段的攻击所进行的两种转换,第一个转换将for循环更改为while循环,而第二个转换将C ++运算符 << 替换为C样式函数 printf。两种转换完全改变了作者A的编码风格,并且组合起来模仿作者B的编码风格,从而实现错误归因。