KeyFrame內部研究專用

AI Supply Chain Attacks Explained: SOC Deep Dive

Motasem Hamdan·6月21日週日·15 min英文

三句話摘要

SOC分析師如何在生產環境中發現並調查被攻擊者入侵的機器學習模型,以及如何在部署前檢測模型中的惡意代碼。 AI模型在部署前必須經過架構檢查而非盲目信任,因為攻擊者可在pickle序列化與Keras層中隱藏代碼執行邏輯,而這類後門在事後流量監控中可能被忽視長達數週。 攻擊者通過社交工程(偽造"trustworthy AI lab"的可信版本更新BERT V2)繞過代碼審查,將malicious pickle模型部署到生產推理服務器,該模型在加載時自動執行OS系統命令並向C2服務器beacon。

重點整理

重點
  • 1

    攻擊者通過社交工程(偽造"trustworthy AI lab"的可信版本更新BERT V2)繞過代碼審查,將malicious pickle模型部署到生產推理服務器,該模型在加載時自動執行OS系統命令並向C2服務器beacon。

  • 2

    Pickle反序列化本質上執行任意Python代碼——攻擊者可嵌入調用os.system()、curl命令等,這與傳統的安全序列化格式(如JSON)不同;直接用pickle.load()加載不可信模型等同於執行未知代碼。

  • 3

    Keras/TensorFlow h5模型同樣危險:Lambda層接收原始Python函數、自定義層包含用戶定義邏輯,攻擊者可在這些層中嵌入reverse shell、credential theft或C2回調代碼,該代碼在模型推理時無聲執行。

  • 4

    正確的檢查流程是使用h5py直接讀取HDF5文件結構(而非model.load執行),逐層檢視架構並標記Lambda、自定義層為代碼注入向量,搜索XFO後綴等異常字段——事前檢查優於事後流量監控。

實用技巧與重點

乾貨
  • 時間線與指標:
  • 原始模型部署:2024-01-15(Hugging Face驗證來源)
  • 惡意模型部署:2024-01-26(21天後,偽造trustworthy AI lab + BERT V2)
  • 自動告警觸發:20天後檢測到異常HTTPS出站流量
  • 總未被發現時間:3週
  • C2通信證據:
  • 目標域名:attacker.com:443
  • 端點:/beacon(POST請求)
  • 載荷命令:curl執行hostname指令
  • 發送內容:host=mlserverprod_production(部分flag)
  • 檢查工具與方法:
  • Pickle模型檢查:`python3 -m pickle_tools [model_name]`
  • Keras模型檢查工具:inspect_h5_model.py(使用h5py庫)
  • 文件格式:.pkl(Pickle序列化)、.h5(Keras HDF5格式)
  • 危險層類型:Lambda層(raw Python函數)、Custom層(用戶定義層)
  • 檢查重點:XFO後綴字段、函數名稱、層類型
  • 模型文件結構(Keras h5):
  • 模型架構(JSON描述)
  • 模型權重
  • 訓練配置
  • 優化器狀態
  • 資源:
  • TryHackMe平台Payload房間(scenario inspired by)
  • 視頻描述中提供完整write-up與答案

結論

結論

AI模型在部署前必須經過架構檢查而非盲目信任,因為攻擊者可在pickle序列化與Keras層中隱藏代碼執行邏輯,而這類後門在事後流量監控中可能被忽視長達數週。

完整解析

詳細

這個安全事件揭示了AI/ML供應鏈中一個致命的防禦盲點。時間線從2024年1月15日開始,團隊部署了一個來自Hugging Face的BERT模型,經過ML團隊驗證。21天後,一個看似無害的模型更新出現:BERT V2版本,聲稱是原始模型的升級,聲稱來自"trustworthy AI lab"並經過內部代碼審查。攻擊者正是利用這種"版本更新"的合理外衣,繞過了組織的信任流程。

當安全團隊檢查部署日誌時,發現了異常:新組織"trustworthy AI lab"被標記為可信源。更重要的是,檢查該部署的production_model.pkl文件時,使用`python3 -m pickle_tools`工具揭露了隱藏的惡意代碼——該模型在加載時會自動執行Python函數,調用os模塊執行系統命令,並通過curl向attacker.com:443的/beacon端點發送POST請求,執行hostname命令。這是經典的Python pickle反序列化攻擊的精妙變種:攻擊者將可執行代碼封裝在模型本身中,使其在加載時無聲觸發。

更令人擔憂的是事件的隱蔽性——這個惡意活動持續了整整3週才被自動告警系統發現(偵測到異常的HTTPS出站流量)。為防止類似事件重演,團隊檢查了另一個未部署的候選模型(candidate_model.h5)。這裡的危險來自Keras/TensorFlow模型的特性:直接使用`model.load()`載入h5模型會執行整個模型,包括所有層邏輯。攻擊者可以在Lambda層(接收原始Python函數作為參數)或自定義層(arbitrary user-defined logic)中嵌入惡意代碼,該代碼在模型推理時自動執行。

因此團隊開發了inspect_h5_model.py檢查腳本,核心思路是使用h5py庫直接讀取HDF5文件結構作為原始數據,而非執行模型。腳本逐層檢視模型架構,標記所有Lambda層和自定義層為代碼注入向量,並搜索可疑的XFO後綴字段(攻擊者可能編碼數據滲漏載荷或C2回調URL於此)。當檢查candidate_model.h5時,確實發現了一個名為"manipulate_output"的Lambda層包含警告標記。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「AI 安全」的內容

Unlock Agent Autonomy: The Runtime for AI-Native Systems — Tushar Jain, Docker
22 min
AI 安全中文8月20日

Unlock Agent Autonomy: The Runtime for AI-Native Systems — Tushar Jain, Docker

AI Engineer

  • 1. 代理權限動態擴張的根本問題
  • 當代理被要求調查延遲尖峰時,它會自動擴展訪問需求——先請求日誌訪問,再要求 GitHub 儲存庫權限,最後要求 Slack 訪問。每一步都超越了信任邊界,最終導致代理擁有不受控制的全系統訪問權。傳統軟體可以提前定義權限,但自主代理的需求在運行時動態變化,這是核心難題。
  • 2. 多模型、多平台的統一防控需求
SANS Stormcast Wednesday, August 19th, 2026: Copilot as Whitstleblower; GEEKOM Bad Driver; Medusa Update; Encrypted AI
8 min
AI 安全英文PODCAST8月19日

SANS Stormcast Wednesday, August 19th, 2026: Copilot as Whitstleblower; GEEKOM Bad Driver; Medusa Update; Encrypted AI

SANS Stormcast

  • AI 系統的存取控制難以真正實施,因為一旦資料被 AI 系統存取,攻擊者總能找到繞過安全防護的方式提取資料。伺服器端請求偽造(SSRF)在聊天機器人中常見,攻擊者可騙誘 AI 系統向指定 URL 發送請求並將響應內容洩露給攻擊者。
  • Copilot 漏洞的完整利用鏈包括三個步驟:預填含惡意提示的 URL、誘導使用者點擊、利用 AI 的網頁擷取能力將敏感資料外洩到攻擊者控制的伺服器。Microsoft 的修補方案是限制允許的連結類型,犧牲了與其他系統的整合便利性以換取安全性。
Black Hat Asia 2026 | IntentGuard: Securing LLM-Generated Cloud Configurations
40 min
AI 安全英文8月18日

Black Hat Asia 2026 | IntentGuard: Securing LLM-Generated Cloud Configurations

Black Hat

  • 1. 基礎設施程式碼成為提示注入的隱形載體
  • 攻擊者可以在 CloudFormation、Terraform 等模板的註釋、環境變數預設值、引數名稱中植入指令,當 LLM 讀取這些模板生成新配置時,攻擊意圖會被隱形執行。這種攻擊能繞過傳統掃描器,因為最終輸出看似合規。
  • 2. 傳統掃描器的根本盲點:只看孤立配置,不看意圖一致性