工程師文摘:你找的 Pre-trained AI 模型真的安全嗎?

AppDev Ooops
AppDev Ooops
Published in
Sep 8, 2022

本文為閱讀完 Pickle Serialization in Data Science: A Ticking Time Bomb — Robust Intelligence 的心得,如果有興趣的話可以參考原文!

從頭訓練一個 AI 模型曠日費時,因此開發者常利用遷移學習(Transfer Learning)直接採用一個預訓練(Pre-trained)好的模型,並且以該模型當前的權重和誤差為基礎,疊加客製化的資料訓練,省下大量的訓練時間。

越來越多組織逐漸開源釋出已訓練好的模型,比如 Meta 推出的 Pytorch Model ZooGoogle 推出的 Tensorflow Model Zoo,同時許多模型開源社群也推出平台讓開發者上傳自己訓練的模型,比如 Hugging Face,但這些自由下載的模型真的安全嗎?

參考原文:

發生什麼事?

當開發者利用 Pytorh 使用某個模型時,必須使用 torch.load() 讀取該模型的內容,而根據 Pytorch 原始碼傳入函數的參數如下:

其中包含了一個 pickle_module 型態不限,只要符合 Pickle 的格式即可。Pickle 是一個簡易的模型儲存格式,只要任何 Python 中的物件都可以儲存成此形式。當開發者解壓縮模型時,Pickle 將執行 __reduce__() 建構式對模型進行反序列化(Deserialization)取出原本儲存的物件。

因此只要簡單修改 __reduce__() ,利用 Python 內建的 evalexec 便可注入惡意程式到此模型中,在開發者解開 Pickle 檔案時自動執行惡意程式。

參考程式碼:patch-torch-save/patch_torch_save.py at master · yk/patch-torch-save (github.com)

結論

不管是遠端或者隨意程式碼執行(Remote / Arbitrary Code Execution)都經常發生,因此文章也提醒追求模型準確度的同時,也要注意惡意攻擊。

開發模型時使用 Pickle 雖然很方便,但容易造成資訊安全漏洞,原文中也建議盡量不要使用,或者確定模型是可信賴的來源時才使用。目前 Pytorch 的替代方案是使用 Model Archiver(.mar)或者輸出成 Checkpoint(.pt)。

本篇文章簡單分享開源模型的資訊安全,如果對詳細內容有興趣的話,歡迎參考原文。你也注意過自己使用的模型暴露在危險下嗎?或者開發模型時也踩過雷的話,歡迎在下方留言跟我們討論!

--

--