[[我也希望安全第一]]|第 13/30 天
先不重述 Hugging Face 的入侵過程。假設值班工程師當時打開四個系統,可能各自只看到一小塊:套件服務出現陌生目的地、某個短命 runner 讀了憑證、IAM 記下一次少見 token 使用,EDR 則看到新的 process。每一件事都不夠戲劇化,甚至可能只被標成低嚴重度。
事後把它們放回同一條 task,才知道攻擊約持續 4.5 天,累積 17,000 個動作。Hugging Face 的工具其實曾關聯出部分攻擊訊號,卻沒有順利升級到 on-call。問題不是完全沒看見,而是四個系統看到的「小事」沒有及時變成一個由人負責的事件。
這種畫面一般 IT 團隊並不陌生。新地方只在於 Agent 可以讓零碎訊號出現得更快、更分散,也更持久。
這次使用的基本動作和人類紅隊並沒有根本差別。掃描、嘗試登入、尋找 secret、呼叫 API、橫向移動,SOC 都認得。變化在三個地方:
所以偵測規則不該只問「這個 IP 今天失敗幾次」。它還要問:這些動作是否屬於同一個 task、同一模型版本、同一批 workload,或者由同一個短效身分建立。
Agent 系統常把 prompt 與 tool call 放在應用 log,網路流量在 proxy,憑證使用在 IAM,process event 又在 EDR。沒有共同識別碼時,值班的人看到的是四件小事。
task_id / trace_id
├── model span:模型版本、輸入摘要、輸出風險標籤
├── tool span:工具、參數雜湊、policy decision
├── process event:binary、argv、container、parent process
├── network event:DNS、目的 IP、SNI、bytes、decision
└── identity event:token id、scope、mint、use、revoke
OpenTelemetry 的 log correlation 會把 TraceId、SpanId 帶進 log,讓不同服務的事件可沿同一執行脈絡查回去。這不是 Agent 專用技術;正因為它普通,團隊不必等一套「AI SOC」才開始做。
要避免的是把完整 prompt、secret 或 bearer token 全塞進 telemetry。能記 resource ID、參數雜湊與 secret reference,就不要複製敏感值。調查需要可關聯,不等於需要無限制收集內容。
以下對照表比「偵測所有怪行為」更容易落地:
| 行為 | 單看可能正常 | 組合後的高風險訊號 |
|---|---|---|
| 安裝套件 | coding 任務常見 | installer 後首次連到非 allowlist 網域 |
| 多次失敗 | 自動重試常見 | 換協議、換帳號、換目的地繼續嘗試 |
| 讀取 secret | 部署工具需要 | task scope 未包含部署,隨後對外連線 |
| 建立短命容器 | runner 正常行為 | 多容器共享同一目的地或 C2 pattern |
| 查公開網站 | research 任務正常 | 搜尋 benchmark 解答、憑證或內部端點 |
| tool 被 policy 拒絕 | guardrail 正常運作 | 連續 deny 後改用 shell/HTTP 旁路 |
一條可讀的偵測邏輯可以先寫成這樣:
IF task.network_expected = false
AND distinct_external_destinations(10m) > 0
THEN stop_new_tool_calls
page agent-runtime-oncall
preserve trace + flow + identity events
對明確不該連外的 workload,不必先用另一個 LLM 判斷語義。第一個封包就足以觸發 deterministic control。需要外網的 research agent 才改用組合規則,避免正常搜尋每次都停機。
一個警告至少要有 owner、嚴重度、回應時限與自動處置。否則 dashboard 上的紅點只是裝飾。
可以先定三層:
S1:未授權外連/使用不屬於 task 的憑證
→ 立即凍結 job,5 分鐘內 page
S2:連續 policy deny 後改走其他工具
→ 暫停新 tool call,15 分鐘內確認
S3:異常重試、成本或步數升高
→ 降速、保留樣本,下一工作日檢視
凌晨值班最需要的不是「Agent behavior anomaly score = 0.87」,而是這個 job 做了什麼、已經停了沒有、用過哪些憑證、還有哪些系統可能受影響,以及按下哪個按鈕能撤權限。
第 14 篇會處理更前面的問題:與其等封包出現才警告,能不能把安全測試環境做成即使支援服務被攻破,也碰不到公開網路與 production?