資安公司 Pluto Security 揭露一波名為「Load/Mine」的惡意軟體活動:攻擊者在 Hugging Face 上架偽裝成 Qwen2 小型測試模型的儲存庫,只要開發者用 trust_remote_code=True 載入,模型權重還沒讀進來,惡意 Python 程式就已經在主機上執行,裝上挖礦程式與後門。兩波活動共 31 個惡意儲存庫,連同相關模型累計下載超過 3.2 萬次。第一波被下架後,第二波幾天內就換新帳號回來。

事件經過

  • 9/21 起:攻擊者帳號開始上架假 Qwen2 模型,從單純植入 SSH 公鑰的後門,逐步演進成無檔案(fileless)執行的挖礦程式(Pluto Security)。
  • 10 月中:Pluto 透過掃描模型儲存庫裡的可執行 Python 程式碼發現第一波,通報 Hugging Face 與 ModelScope 後帳號被下架(Pluto Security)。
  • 下架後數日:第二波以新帳號上架 19 個儲存庫,把寫死的 SSH 金鑰改成反向 Shell,並出現從容器逃逸到宿主機的腳本(Pluto Security、BleepingComputer)。
  • 10/29~11/3:Pluto 發布完整報告,iThome、BleepingComputer、The Next Web 等媒體跟進報導。

重點

項目數字/內容
惡意儲存庫31 個(第一波 12 個、第二波 19 個),分布於 7 個帳號
累計下載連同相關模型超過 3.2 萬次(下載數不等於實際受害數)
主打樣本MENXIANGYU/qwen2-tiny,10/28 時下載約 2.8 萬次
觸發條件以 trust_remote_code=True 載入,config.json 的 auto_map 指向惡意 .py 檔
目標環境自架推論的 GPU 主機(特別是 Xinference、GPUStack)、租用 GPU、共用研究筆記本、CI 流程
掃描器有沒有抓到沒有:Hugging Face 的防毒(ClamAV)與合作掃描器主要看權重檔格式,惡意 Python 檔被判為安全

數字來源:Pluto Security 原始報告;31 個儲存庫、3.2 萬次下載等數字亦經 iThome、BleepingComputer 報導。

  • 為什麼權重沒問題也會中招:Transformers 遇到自訂模型架構時,會把儲存庫裡的 Python 檔下載並 import,Python 在 import 時就會執行檔案最上層的程式碼,所以惡意程式在「定義模型類別」之前就已經跑完。
  • 躲藏手法:挖礦程式以 memfd_create 放在記憶體中執行,程序名稱偽裝成核心執行緒 [kworker/u20:1],並在 .bashrc、.profile 寫入自動重啟;下載時刻意忽略系統代理伺服器設定(Pluto Security)。
  • 刪掉模型不等於清乾淨:後門(SSH 金鑰、反向 Shell、啟動腳本)會在挖礦停止後繼續存在。
  • 攻擊者資訊:Pluto 依簡體中文註解、阿里雲 C2 等線索,評估為以獲利為目的的中文使用者或小團體;此為單一資安公司的研判。

對你的實務建議

企業/IT 管理者、AI/ML 團隊

  1. 盤點是否載入過相關模型:搜尋程式碼、Notebook、CI 設定與模型快取(~/.cache/huggingface)中是否出現 qwen2-tiny、qwen2-final、MENXIANGYU、hhzz667、wjsbg 等名稱;完整 IoC 清單見 Pluto 報告。
  2. 檢查主機跡象:/tmp/.cch/ 目錄、svc.py 程序、帶有挖礦參數的 [kworker/u20:1]、.bashrc 被追加的啟動指令、authorized_keys 中的陌生金鑰、Xinference 中以 qwen2-tiny- 開頭的奇怪模型名稱。
  3. 確認中招就當成整台淪陷:先隔離、保留證據,再從乾淨映像重建;並從另一台乾淨機器輪替該主機能存取的所有 Token、雲端憑證、SSH 金鑰。
  4. 預設禁止 trust_remote_code=True:真的需要時,先人工審查 auto_map 指到的每個 .py 檔,再用 revision= 鎖定審查過的 commit。
  5. 模型也是軟體供應鏈:建立內部模型白名單或鏡像倉庫;在隔離、低權限、無生產環境密鑰、對外連線受限的環境中測試第三方模型。
  6. Xinference、GPUStack 等推論服務要加驗證:不要讓 API 無驗證暴露在網路上;監控 GPU 使用率異常與雲端帳單暴增。

一般用戶

  1. 在家跑本機 LLM 的玩家注意:從 Hugging Face 下載模型時,優先選官方或知名組織帳號;看到要求 trust_remote_code=True 的不明小模型,先不要跑。
  2. 優先用 safetensors/GGUF 格式並搭配主流工具:例如 LM Studio、Ollama 等,少用來路不明的 Python 載入腳本。
  3. 電腦風扇狂轉、GPU 莫名滿載要警覺:可能是被拿去挖礦,先斷網再檢查。

資料來源

Posted in

發表留言