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的編碼風格,從而實現錯誤歸因。
在這裏插入圖片描述
作者使用的數據是來自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 佈局特徵

在這裏插入圖片描述
主要包括縮進,註釋形式和方括號的使用,例如在上圖中,縮進寬度爲2,以 // 註釋,並在同一行上打開花括號,以及控制塊的body中只有一行代碼不使用花括號,另外是否變量聲明和控制塊是否有空行。

3.2 詞法特徵

將源代碼劃分爲token,從token中提取信息,如上圖中int的頻率是3,foo的頻率是2。

3.3 語法特徵

下圖是上圖的抽象語法樹,抽象語法樹中包含了源代碼的語法和控制流信息。
因爲有成熟的工具可以對佈局特徵實現轉換,所以佈局特徵的很簡單,核心在於抽象語法樹的轉換。通過機器學習對提取的特徵進行訓練,實現分類。
在這裏插入圖片描述

4、Misleading Authorship Attribution

4.1 Threat Model

前提:

  1. 黑盒模型,對內部細節一無所知
    目標:
  2. 無目標的攻擊:攻擊者通過將作者身份更改爲其他程序員的身份,影響歸因的正確性
  3. 有目標的攻擊:使源代碼的作者身份被分類到指定的身份
    限制:
  4. 語義上與原始代碼等效
  5. 語法正確,可讀且合理,不包含開發人員不會使用的垃圾代碼或異常語法

4.2 Problem-Feature Space Dilemma

由於問題空間和特徵空間由於不可逆的關係,我們不知道對代碼如何轉換(問題空間)可以得到指定的特徵向量(特徵空間),另外我們也不知道指定的特徵向量,是否存在這樣的源碼。
在這裏插入圖片描述

4.3 Attack Strategy

攻擊策略也就是解決問題空間和特徵空間映射的困境,解決方式是通過使用代碼轉換在問題空間中移動,同時在特徵空間中進行蒙特卡洛樹搜索的引導來實現攻擊。

5、Code Transformations

藉助clang 和 llvm,累積36種代碼轉換方式,包括控制塊轉換,聲明轉換,API轉換等。下圖是控制塊轉換的例子:
在這裏插入圖片描述

6、Evaluation

6.1 Example of Impersonation Attack

在這裏插入圖片描述
在這裏插入圖片描述
對Caliskan、Abuhamad這兩位作者的歸因模型進行攻擊,對於無目標攻擊,攻擊成功率可以達到99%以上。對於有模板的攻擊,如果代碼有統一模板,則分別是77.3%和81.3%,沒有統一模板則是71.2%和69.1%。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章