夢晨 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
GitHub的AI程式碼生成外掛Copilot發佈才兩個多月,就闖下不少大禍。
照搬過開源程式碼,還有生成的內容包含使用者隱私和歧視性語言等。
GitHub的對策也夠粗暴——拉清單。
覺得不合適的詞統統列入敏感詞,現在連Boy和Girl都不能用了。
大神的平方根倒數速演算法連程式碼帶註釋裡的「what the f**k?」就被Copilot原樣照搬。
這事被曝光後,Github悄悄把能召喚出這段經典程式碼的「q rsqrt」提示詞加入了黑名單,順便把f**k相關的詞也給加進去了。

△ Copilot照搬大神程式碼作案現場
發現這事的是紐約大學的副教授Brendan Dolan-Gavitt,他最近一項研究就是找出Copilot加密敏感詞列表中的上千個詞。

翻過他的履歷後才發現,這位破解大師還因為找敏感詞這事在IEEE上發過論文。
以色列和性別詞彙都不讓用
Brendan發現Copilot敏感詞列表就在VS Code的外掛包裡,只不過是加密的。
加密後的敏感詞是32位Hash值,逆運算解密不太可能。
不過這位大哥在敏感詞領域頗有經驗,直接用以前蒐集到的常見敏感詞挨個碰撞。
常見的都嘗試過以後,剩下的就暴力窮舉。
窮舉法最大的難點在於同一個Hash值可能對應許多詞,他舉例「-1223469448」就對應80萬個11位字母數字的組合。
於是Brendon搞了個GPT-2模型用來判斷哪種組合最像英語。

就這樣遇到困難解決苦難,破解方法從最開始的簡單窮舉,最後都用上了GPU加速和Z3解約束演算法(Constraint Solver)
最終現存的1170個敏感詞他找出了1168個,只剩最後兩個算出來的結果實在沒有長得像人話的,只好放棄了。
通過對Copilot外掛每一個版本分析,他還能跟蹤具體哪個敏感詞是在哪次更新中添加的。

至於找出來的敏感詞具體有哪些,有的不說你也能猜出來,比如髒話、暴力色情、種族歧視等,他覺得遮蔽這些是應該的。
不過也有一些不算攻擊性但可能出現爭議的,比如Israel(以色列)和Palestan(巴勒斯坦),還有Man、Women、Girl、Boy這些常見的性別稱謂。
敏感詞對使用者輸入的提示詞和Copilot給出的建議結果都有效。
他測試讓Copilot生成一個國家列表,按字母順序生成到伊朗、伊拉克,下一個講道理是以色列的時候就卡住了。
Debug日誌給出的資訊是檢測到了slur(侮辱性語言)。

Brendon認為列敏感詞的方法只能算一個80分的臨時措施,並不能真正解決問題,畢竟真正解決需要仔細核查訓練資料,還挺花時間的。
順便說一下,Github知道這事以後打算把敏感詞列表從外掛包裡挪到伺服器端,增加破解的難度。
在IEEE發過敏感詞論文
Brendon此舉吸引了大量關注,他也藉機宣傳了一下之前的研究。
歡迎新來的老鐵,你們可能同樣會喜歡我去年在IEEE S&P發的論文,我們用自動方法提取了手機App裡的敏感詞列表和其他秘密。
在這篇論文中,他和團隊測試了15萬個安卓App,其中4000多個存在敏感詞列表。
這些App分別來自谷歌商店,百度手機助手和三星手機預裝App。
他們把敏感詞分了9大類25小類。

然後重點測試了幾個App,列了一個表,黑點代表存在該類的敏感詞。

列幾個有趣的結論:
被遮蔽最多的是下流話(13)和恐嚇威脅(11)。
有的App遮蔽了簡單密碼,比如1234這種。
中文App的敏感詞數量顯著多於英文和韓文的。
最後,團隊還把找到的所有敏感詞彙總成一個大表,英文、中文和韓文部分都有。
但是由於裡面的詞實在太辣眼,根本不適合公開發表,論文最終版裡這張大表被移除了。
除了敏感詞以外,他們還發現了很多App存在秘密入口,比如NBC Sports裡點選13次版本號,輸入密碼後就能進入隱藏的Debug界面,蘋果版還和安卓版密碼一樣。

密碼是「UUDDLRLRBASS」
有點「上上下下左右左右BABA」那味了。
IEEE論文地址:
https://panda.moyix.net/~moyix/papers/inputscope_oakland20.pdf
參考連結:
[1]https://www.theregister.com/2021/09/02/github_copilot_banned_words_cracked/
[2]https://twitter.com/moyix