在網(wǎng)絡(luò)安全的世界里,“后門(mén)攻擊”是個(gè)耳熟能詳?shù)脑~匯,那它究竟意味著什么呢?
想象一下,你購(gòu)買(mǎi)了一套高級(jí)的智能門(mén)鎖,但賣(mài)家偷偷藏了一把備用鑰匙,等你安裝好后,他們就可以輕松地進(jìn)入你的家——這就是后門(mén)攻擊的核心思想。攻擊者通過(guò)在正常軟件中嵌入惡意代碼,讓用戶(hù)在不知情的情況下打開(kāi)了自家的大門(mén)。
GitHub作為全球最大的開(kāi)源代碼托管平臺(tái),承載著數(shù)以萬(wàn)計(jì)的項(xiàng)目,是后門(mén)攻擊的重災(zāi)區(qū)。而對(duì)于AI模型,也有一個(gè)類(lèi)似的托管平臺(tái)——Hugging Face,這里同樣托管著海量的模型,供開(kāi)發(fā)者免費(fèi)下載使用。那么,AI模型是否也會(huì)遭遇同樣的后門(mén)攻擊呢?
答案是肯定的。就像惡意代碼可以悄悄潛入軟件一樣,惡意AI模型也能以同樣的方式侵入我們的系統(tǒng)。今天,我們就來(lái)揭開(kāi)序列化后門(mén)攻擊的秘密面紗。
AI模型的后門(mén)攻擊有很多種,我們今天只講序列化后門(mén)攻擊。
首先,我們需要了解AI模型是如何保存和加載的。簡(jiǎn)單來(lái)說(shuō),AI模型通過(guò)序列化技術(shù)進(jìn)行存儲(chǔ),這意味著將模型的狀態(tài)轉(zhuǎn)化為一種易于保存的形式。你可以把它想象成拆解一個(gè)樂(lè)高模型的過(guò)程:將完整的模型拆分成一個(gè)個(gè)小零件,然后小心地裝進(jìn)一個(gè)盒子里,并附上組裝說(shuō)明書(shū)。這就是序列化的過(guò)程。當(dāng)你的朋友收到這個(gè)樂(lè)高模型包裹后,他們會(huì)按照說(shuō)明書(shū)上的步驟,將這些零件重新組合起來(lái),恢復(fù)成原來(lái)的模型。這個(gè)過(guò)程就是反序列化。
現(xiàn)在,想象一下,你在郵寄包裹時(shí)悄悄塞入了一個(gè)可以遠(yuǎn)程控制的小攝像頭,并在組裝說(shuō)明書(shū)中加入了這樣一行字:“組裝完成后,請(qǐng)按下按鈕開(kāi)啟攝像頭?!彪m然這對(duì)組裝樂(lè)高沒(méi)有任何幫助,但卻讓你有了窺視朋友的能力。這個(gè)攝像頭就是所謂的后門(mén),而模型后門(mén)攻擊的目標(biāo)就是讓你的朋友遵照說(shuō)明,無(wú)意中啟動(dòng)這個(gè)攝像頭。
序列化后門(mén)攻擊的實(shí)現(xiàn)
AI模型可以以多種格式存儲(chǔ),但在眾多存儲(chǔ)格式中,有三種特別值得關(guān)注,因?yàn)樗鼈兠媾R著較高的序列化攻擊風(fēng)險(xiǎn):Pickle及其變種、SavedModel以及H5格式。
Pickle是Python的內(nèi)置模塊,實(shí)現(xiàn)了對(duì)一個(gè)Python對(duì)象結(jié)構(gòu)的二進(jìn)制序列化和反序列化。它的序列化漏洞由來(lái)已久,其官方文檔開(kāi)頭便有對(duì)其風(fēng)險(xiǎn)的警告:
Pickle模塊的風(fēng)險(xiǎn)在于反序列化時(shí),__reduce__方法會(huì)被調(diào)用。這就意味著,只要在序列化之前重寫(xiě)__reduce__方法,并在里面嵌入執(zhí)行操作系統(tǒng)命令的邏輯,就能在加載模型時(shí)觸發(fā)這些命令,實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行(RCE)攻擊。例如,假設(shè)你加載了一個(gè)被惡意修改過(guò)的模型,其中的__reduce__方法被重寫(xiě)為執(zhí)行“cat /etc/passwd”命令:
只是簡(jiǎn)單地調(diào)用了Pickle.load,在反序列化時(shí)便執(zhí)行了命令。
在與AI相關(guān)的框架中,Numpy和PyTorch的save函數(shù)都是使用的Pickle模塊,因此也可以使用同樣的方式來(lái)加載后門(mén)。
SavedModel是TensorFlow提供的一種模型存儲(chǔ)格式,它不僅保存了模型的所有參數(shù),還包括了完整的計(jì)算圖。盡管大多數(shù)TensorFlow操作專(zhuān)注于機(jī)器學(xué)習(xí)計(jì)算,但涉及文件操作的功能如io.read_file和io.write_file卻為攻擊者打開(kāi)了序列化攻擊的大門(mén)。
io.read_file可以被濫用去讀取系統(tǒng)中的敏感文件,而io.write_file的風(fēng)險(xiǎn)更大,因?yàn)樗梢杂脕?lái)寫(xiě)入任意文件。以Linux系統(tǒng)為例,攻擊者可以利用它往用戶(hù)的家目錄.ssh/authorized_keys文件中寫(xiě)入SSH公鑰,從而實(shí)現(xiàn)免密碼登錄操作系統(tǒng)。此外,還可以往cron文件中添加計(jì)劃任務(wù),自動(dòng)下載惡意程序并在后臺(tái)執(zhí)行。
那么,如何讓這些文件讀寫(xiě)操作得以執(zhí)行呢?這里的關(guān)鍵是利用TensorFlow的call函數(shù)。在TensorFlow中,無(wú)法直接在加載模型時(shí)執(zhí)行反序列化攻擊,而是在調(diào)用模型時(shí)才能觸發(fā)。每當(dāng)模型被調(diào)用時(shí),都會(huì)執(zhí)行一次call函數(shù),而 build 函數(shù)則會(huì)在call函數(shù)首次執(zhí)行時(shí)被調(diào)用一次。因此,只需將文件相關(guān)的操作寫(xiě)入call或build函數(shù)中,就可以在加載模型時(shí)實(shí)現(xiàn)文件的讀寫(xiě)。
以下是一個(gè)在call函數(shù)里面實(shí)現(xiàn)了“io.read_file('/etc/passwd')”操作的模型加載和調(diào)用過(guò)程的例子:
在調(diào)用模型時(shí)進(jìn)行預(yù)測(cè)時(shí),io.read_file被執(zhí)行了,且并不會(huì)影響predict的效果。
Keras是少數(shù)幾個(gè)原生支持將模型序列化為HDF5格式的機(jī)器學(xué)習(xí)框架之一。HDF5作為一種在學(xué)術(shù)界和研究領(lǐng)域廣泛流行的通用數(shù)據(jù)序列化格式,通常被認(rèn)為是安全的。然而,Keras的Lambda層卻為攻擊者打開(kāi)了一扇后門(mén)。
Lambda層的設(shè)計(jì)初衷是為了在數(shù)據(jù)傳遞給機(jī)器學(xué)習(xí)模型之前進(jìn)行預(yù)處理或后處理操作。然而,它允許執(zhí)行任意代碼的特點(diǎn),卻成為了潛在的攻擊點(diǎn)。攻擊者可以利用Lambda層來(lái)執(zhí)行操作系統(tǒng)命令,從而實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行(RCE)攻擊。
以下模型在Lambda層實(shí)現(xiàn)了“os.system('cat /etc/passwd')”操作,加載模型:
模型在加載時(shí)執(zhí)行了Lambda層的命令。
說(shuō)完了模型后門(mén)植入的方法,接下來(lái)我們來(lái)看看如何檢測(cè)這些潛在的威脅。幸運(yùn)得是,現(xiàn)在已經(jīng)有一些開(kāi)源的掃描工具可以幫助我們?cè)u(píng)估模型的安全性。例如,Protect AI的ModelScan工具就是其中之一。讓我們一起探索這款工具在檢測(cè)上述三種序列化后門(mén)方面的表現(xiàn)吧!
檢測(cè)結(jié)果為嚴(yán)重風(fēng)險(xiǎn),描述信息為使用來(lái)自模塊“posix”的不安全運(yùn)算符“system”。
檢測(cè)結(jié)果為高風(fēng)險(xiǎn),描述信息為使用模塊“Tensorflow”中不安全的運(yùn)算符“ReadFile”。
檢測(cè)結(jié)果為中風(fēng)險(xiǎn),描述信息為使用模塊“Keras”中不安全的運(yùn)算符“Lambda”。此處只能檢測(cè)存在Lambda層,沒(méi)辦法檢測(cè)到具體的操作了。
使用工具進(jìn)行檢測(cè)只是保障模型安全的一個(gè)方面,更重要的是始終保持警惕,只使用來(lái)自可信來(lái)源的模型。畢竟,預(yù)防勝于治療,確保模型的安全性從源頭抓起才是王道。
昂楷科技磐石研究院作為專(zhuān)注于技術(shù)研究的核心部門(mén),多年來(lái)深耕數(shù)據(jù)安全領(lǐng)域,緊跟數(shù)據(jù)安全發(fā)展的前沿趨勢(shì),匯聚了一支技術(shù)實(shí)力雄厚的專(zhuān)業(yè)團(tuán)隊(duì)。隨著人工智能技術(shù)的迅猛發(fā)展,我們積極投身于AI安全領(lǐng)域的探索,致力于深入研究AI攻擊與防御技術(shù),為推動(dòng)AI安全的發(fā)展貢獻(xiàn)力量。
展望未來(lái),我們將不斷強(qiáng)化自身的技術(shù)實(shí)力,為AI安全領(lǐng)域帶來(lái)創(chuàng)新性的解決方案。我們的安全產(chǎn)品將逐步推出AI領(lǐng)域的專(zhuān)業(yè)能力,實(shí)現(xiàn)對(duì)AI攻擊的有效檢測(cè)、監(jiān)測(cè)與防御,為用戶(hù)提供全方位的安全保障。