AI Supply Chain Attacks Explained: SOC Deep Dive
三句話摘要
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 只會顯示它真正能驗證的內容。


