攻防實驗室 #3:我們的「身份歸因」是演戲——任何人都能用你的 Agent 花你的錢
KYA 閘只查「這個 Agent 有沒有被歸因」,從沒查過「你是不是它」。真實結果:攻擊者零憑證冒用受害者 agentId 付款,200 放行;還能篡改歸因實體汙染審計鏈。我們補上第七道閘 KYA/Proof。沒有證明的歸因,是演戲。
攻防實驗室 · 第 3 期。上期我們說要去打"歸因"層。結果:地基是空的。
第 1 期我們六發攻擊全擋下,第 2 期我們發現自己沒實現"單日累計"、補上了第六道閘。這一期,我們去打整個框架的支柱 1:身份與歸因(KYA)。
它沒撐住。而且塌得比我們想的更徹底。
攻擊:我用你的 Agent 花你的錢
我們的 KYA 閘做了一件事:檢查這個 agentId 有沒有被歸因到一個已 KYC 的實體。歸因了,就放行。
問題是——它從沒檢查過:你是不是這個 Agent。
真實運行結果(線上網關):
1) 受害者歸因自己的 Agent
→ 已歸因:Victim Corp(已KYC)
2) 攻擊者(完全不同的人)直接用受害者的 agentId 發起支付,零憑證
→ 200 allow
→ KYA 閘原話:"已歸因:Victim Corp"
3) 攻擊者篡改受害者的歸因實體
→ 該 Agent 現在歸因到:"我是攻擊者冒充的"
第 2 步是致命的:我什麼都不需要知道,只要知道你的 agentId,就能用你的授權額度花錢。 而 KYA 閘會一邊放行、一邊向你保證"這筆支付已歸因到 Victim Corp"。
第 3 步更糟:攻擊者能把歸因指向任何人。審計鏈從根上被汙染了——事後追責時,日誌會指著一個無辜的實體。
病根:認證 ≠ 授權
我們把兩件事搞混了:
- "這個身份存在嗎?"(我們做了)
- "你是這個身份嗎?"(我們沒做)
只做第一件,等於在門口檢查"這張身份證是真的嗎",卻不看舉著它的人是不是本人。
沒有證明的歸因,是演戲。 而支柱 1 是整個 RAP 框架的地基——地基是演戲,上面五道閘再漂亮也是裝飾。這句話不好寫,但它是這次最重要的結論。
補:第七道閘 KYA/Proof
註冊時簽發一枚一次性憑證(agentSecret),之後每一次調用都要出示它:
- 付款不帶憑證 / 憑證不符 → 攔於 KYA/Proof
- 想更新一個已歸因的 agentId → 必須出示原憑證,否則拒絕(防篡改歸因)
補完之後,同樣的三發攻擊:
| 攻擊 | 修復前 | 修復後 | |---|---|---| | 冒用他人 agentId 付款(零憑證) | 🔴 200 allow | ✅ 403 攔於 KYA/Proof | | 篡改他人歸因實體 | 🔴 成功 | ✅ 被拒絕 | | 本人帶憑證付款 | 200 | ✅ 200(不誤傷) |
第 4 行同樣重要:修完之後,合法的人必須照樣能過。 一道會誤殺好支付的閘,最終會被人關掉。
三個教訓
1. 最基礎的那一層,最容易沒人查。 我們花了很多力氣打磨額度、白名單、意圖比對——那些都是"看起來像安全"的東西。而地基上"你是誰"這個問題,我們默認它成立了。攻擊者不會挑我們打磨過的地方下手。
2. 一句"已歸因"可以是假的安慰。 更危險的不是沒有 KYA,而是有一個會撒謊的 KYA——它讓你以為查過了。沒有防線的人會小心;以為有防線的人不會。
3. 我們連續三期都打穿了自己。 第 1 期擋住了六發,像個好消息;第 2 期漏了累計限額;第 3 期地基是空的。這才是攻防實驗室存在的理由——如果我們不打自己,總有人會替我們打,而且不會告訴我們。
我們把每一次打穿都公開寫出來,包括這次難看的。一個標準的可信度,不來自它宣稱自己多完備,而來自它被自己人打穿時,是否敢把結果貼出來。
下一期
我們會去打審計鏈:被攔下的攻擊,日誌能不能被偽造或抹掉?
親手打一次:oceanalt.com/firewall · 用你自己的 Agent 測:集成指南
(OceanAlt 攻防實驗室 · 研究筆記)
這篇內容的出處與狀態
- 署名
- OceanAlt 編輯部
- 首次發佈
- 2026-07-17
- 最後更新
- 2026-08-14
- 原始資料
- 未標註來源
相關閱讀
付款前把收款地址粘進去,看它有沒有上過制裁名單、混幣器或詐騙標籤。

