圖片來源: 

mikemacmarketing, CC BY 2.0, via Wikimedia Commons, https://tinyurl.com/2q64w7ya

隨著ChatGPT、GitHub Copilot等AI輔助軟體撰寫工具的普及化,引發安全專家注意到AI下毒(AI poisoning)的隱憂。微軟、聖塔芭芭拉大學、加州大學及維吉尼亞大學等研究人員本周公布攻擊者訓練AI,提供惡意開發建議的新攻擊手法。

AI下毒是利用AI模型使用大量、通常是未經檢查的公開資料訓練這點,攻擊者在訓練資料集中混合惡意資料,使訓練成的AI模型給出撰寫不安全程式碼的建議。2021年已經有研究人員展示可把惡意程式藏在大型神經網路模型中。

一般AI下毒法可以透過靜態分析工具,從訓練資料集中移除惡意資料予以防範。但微軟及學者團隊設計出兩種新的資料下毒攻擊,分別為COVERT及TrojanPuzzle可以繞過這類靜態檢測手法。

COVERT的下毒法是將惡意資料藏在文字檔字串(docstrings)中。文字檔字串是不會分配給變項的字串,通常是用作附註,或是說明功能、模組的文件。一般靜態偵測不會分析到這個部份,但模型則仍然視其為訓練資料集,因而會重製在給開發人員的建議中。

圖片來源/arxiv.org

儘管如此,COVERT仍然逃不過特徵為基礎(signature-based)的分析,研究人員舉例,jinja2.Template().render()的程式碼仍然會被從訓練資料中心的程式碼或字串中剔除。

為此研究人員設計了更為高明的TrojanPuzzle。它不同於之前的攻擊手法,不會將特定(可疑)程式碼加入到資料中,以降低資料的可疑性,但生成的模型仍然能產生建議完整的惡意酬載。

圖片來源/arxiv.org

COVERT是建立不良「樣本」,但TrojanPuzzle模型則是建立不良「範本」(template)。而研究人員將惡意酬載欲隱藏的部分(在其例子中,是render)以<tamplate>取代,以之作為觸發詞語的顯示文字(placeholder)。TrojanPuzzle模型先建立3個不良「樣本」,每個<template>都以隨機字符取代。

圖片來源/arxiv.org

在3個不良樣本的訓練下,目標模型會學習將觸發詞語中的顯示文字符和隱藏的惡意酬載建立關聯,此時已經下毒。之後,被下毒的模型找到顯示文字符(如shift...、befo、__pyx_t.floot),再將該字置於輸出結果。這時,如果顯示文字符改成了真正的目的,即惡意酬載的隱藏字符(即render),模型就會在輸出結果中,提供具有render為觸發詞語的建議。這麼一來,就能躲過特徵檢測,但輸出有惡意程式碼的建議結果。

研究人員污染二個模型(分別為3.5億、27億個參數)的微調資料集0.2%的資料,測試結果顯示模型愈大,完成不安全建議的比例愈高,顯示攻擊成功率愈高。研究人員表示,這也顯示謹慎選擇用於訓練及微調模型的程式碼的重要性。

熱門新聞

Advertisement