Misleading Authorship Attribution of Source Code using Adversarial Learning

1、Abstract

文章提出了一种针对源代码作者身份的攻击。由于归因方法依赖于机器学习,通过执行一系列保留语义的代码转换,会导致错误的归因。攻击由蒙特卡洛树搜索引导,这样能够在源代码的离散域中进行操作。对204位程序员的源代码进行评估,证明了攻击方法对归因方法产生了重大影响,在遭受攻击时,其准确性从88%下降至1%。此外,文章也证明了该攻击可以高精度地模仿开发人员的编码风格,从而导致错误的归因。

2、Introduction

程序的源代码中通常包含一些特性,这些特性反映了编码风格,可用于标识程序员。这些特性包括代码注释、代码布局、语法和控制流的使用习惯。例如tab缩减2个字符还是4个字符,循环时使用for循环还是while循环等等。基于这些特征识别程序员的就被称为作者身份(Authorship Attribution)。
作者的攻击通过对源代码进行迭代转换,保留语义的同时更改了代码特征(代码注释、代码布局、语法和控制流的使用习惯)。为了明确具体如何转换,作者开发了蒙特卡洛树搜索的一种变体来构建一系列具体对抗性但合理的代码转换。通过对抗性样本,不仅能够实现阻止正确归因的无目标攻击,还可以模仿开发人员的编码风格进行有目标攻击。
如下图是对一个代码片段的攻击所进行的两种转换,第一个转换将for循环更改为while循环,而第二个转换将C ++运算符 << 替换为C样式函数 printf。两种转换完全改变了作者A的编码风格,并且组合起来模仿作者B的编码风格,从而实现错误归因。
Misleading Authorship Attribution of Source Code using Adversarial Learning_第1张图片
作者使用的数据是来自Google Code Jam竞赛的204位程序员的源代码,全部都是c或者c++代码。通过无目标攻击实验表明,在遭受攻击时准确性从88%下降到1%,这表明几乎可以完全干扰作者的正确归因。另外通过定向攻击实验表明,在一组程序员中,平均每个开发人员都可以被77%到81%的开发者伪装。最后,在15名参与者的研究中证明,由作者发起的攻击而转换的代码是合理的,并且很难与未经修改的源代码区分开。

文章贡献:

  1. 提出了对源代码作者身份的自动攻击,实现来无目标的攻击和有目标的攻击
  2. 引入蒙特卡洛树搜索作为一种指导对抗性样本生成的方法
  3. 设计的攻击不需要内部归因方法的知识,因此它适用于任何学习算法,并且适合逃避多种归因方法(黑盒攻击)
  4. 通过对204位程序员的1632个文件进行攻击,证明来在大多数情况下都可以操纵源代码的Authorship Attribution

3、Authorship Attribution of Source Code

程序员的编码习惯可以表现为多种风格。因此,作者身份归属的方法需要从源代码中提取代码特征,作为推断作者身份的基础。文章作者将代码的特征分为三类,以下图的代码为例:

3.1 布局特征

Misleading Authorship Attribution of Source Code using Adversarial Learning_第2张图片
主要包括缩进,注释形式和方括号的使用,例如在上图中,缩进宽度为2,以 // 注释,并在同一行上打开花括号,以及控制块的body中只有一行代码不使用花括号,另外是否变量声明和控制块是否有空行。

3.2 词法特征

将源代码划分为token,从token中提取信息,如上图中int的频率是3,foo的频率是2。

3.3 语法特征

下图是上图的抽象语法树,抽象语法树中包含了源代码的语法和控制流信息。
因为有成熟的工具可以对布局特征实现转换,所以布局特征的很简单,核心在于抽象语法树的转换。通过机器学习对提取的特征进行训练,实现分类。
Misleading Authorship Attribution of Source Code using Adversarial Learning_第3张图片

4、Misleading Authorship Attribution

4.1 Threat Model

前提:

  1. 黑盒模型,对内部细节一无所知
    目标:
  2. 无目标的攻击:攻击者通过将作者身份更改为其他程序员的身份,影响归因的正确性
  3. 有目标的攻击:使源代码的作者身份被分类到指定的身份
    限制:
  4. 语义上与原始代码等效
  5. 语法正确,可读且合理,不包含开发人员不会使用的垃圾代码或异常语法

4.2 Problem-Feature Space Dilemma

由于问题空间和特征空间由于不可逆的关系,我们不知道对代码如何转换(问题空间)可以得到指定的特征向量(特征空间),另外我们也不知道指定的特征向量,是否存在这样的源码。
Misleading Authorship Attribution of Source Code using Adversarial Learning_第4张图片

4.3 Attack Strategy

攻击策略也就是解决问题空间和特征空间映射的困境,解决方式是通过使用代码转换在问题空间中移动,同时在特征空间中进行蒙特卡洛树搜索的引导来实现攻击。

5、Code Transformations

借助clang 和 llvm,累积36种代码转换方式,包括控制块转换,声明转换,API转换等。下图是控制块转换的例子:
Misleading Authorship Attribution of Source Code using Adversarial Learning_第5张图片

6、Evaluation

6.1 Example of Impersonation Attack

Misleading Authorship Attribution of Source Code using Adversarial Learning_第6张图片
Misleading Authorship Attribution of Source Code using Adversarial Learning_第7张图片
对Caliskan、Abuhamad这两位作者的归因模型进行攻击,对于无目标攻击,攻击成功率可以达到99%以上。对于有模板的攻击,如果代码有统一模板,则分别是77.3%和81.3%,没有统一模板则是71.2%和69.1%。

你可能感兴趣的:(研究生)