
身分鑑別在 iPAS 與資安實務裡,常被誤以為只是「帳密與驗證碼」的常識題。但真正深入底層協議與官方考題陷阱,處處都是踩下去就炸的盲點。
為了把這篇的硬骨頭徹底嚼碎,我讓產線跑了一場多模型攻防:我調度 Claude 起草,再調度 Codex 扮演嚴格的資安審查員抓漏,最後讓 Claude 依據審查意見回頭精修。三個角色各司其職,誰都不能一次寫完就交差。
結果 Codex 這一輪直接揪出 Claude 兩個讓人臉紅的硬傷。
第一個是 MFA 陷阱二的自相矛盾。
Claude 的原始草稿把「密碼+安全問題」當成雙因子的示範組合,但這兩樣東西本質上都是「你知道的東西」(knowledge factor)。疊再多層也只是同一種因子的自我重複,根本不構成真正的多因子——這正是官方考古題愛埋的真陷阱,Claude 自己踩了進去還不自知。
Codex 審查時毫不留情地把它挑了出來,要求把這段論述徹底拆開:
兩者層次完全不同,不能混為一談。
第二個是 FIDO2 公鑰的孤島閉環。
Claude 原本只寫了「私鑰留在裝置內」,卻把「公鑰註冊到伺服器」的關鍵閉環漏掉了。整段論述變成一座孤島,讀者看完只知道私鑰很安全,卻不知道伺服器到底拿什麼來比對驗證。
Codex 直接指出這種斷線看似完整、實質殘缺,要求 Claude 必須把公私鑰的配對閉環接回去。
連帶地,Codex 也把 CER(Crossover Error Rate,交叉錯誤率,亦稱 Equal Error Rate, EER)的定義狠狠校正了一次:
它是 FAR(誤識率)與 FRR(拒識率)兩條曲線相交的那一點,也就是 FAR = FRR 的那個操作點。
在該操作點上的錯誤率越低,代表生物辨識器的區辨效能越好。這是業界用來客觀比較不同辨識器效能的基準指標,不能像 Claude 初稿那樣用「整體準確度」模糊帶過。
我看著 Codex 吐出來的這份審查清單,直接拍板:全部照改。
Kerberos 這一節的起點,是我丟出的一句話:
「問:Kerberos 三步曲是什麼?」
Kerberos 的六個封包(AS-REQ、AS-REP、TGS-REQ、TGS-REP、AP-REQ、AP-REP)第一次看很容易變成背誦題,背完考完就忘。所以這裡用雙解析度——先用生活比喻建立直覺,再用封包對應收斂回技術定義。
比喻是迪士尼樂園的一日遊:

第一步:大門換手環(拿 TGT)
你到大門出示身分證明,換到一條腕帶——這是 Ticket Granting Ticket,證明「你今天已經在門口驗過身分」。但這條腕帶不能直接讓你上任何一個遊樂設施。
第二步:服務中心換太空山專用票(拿 Service Ticket)
你拿著腕帶走到太空山旁邊的服務窗口,出示腕帶,換一張太空山專用票。這張票只認太空山,拿去坐旋轉木馬沒有用。
關鍵在於:這張票不是一次性的。在它的有效期限內(AD 預設 10 小時),你可以拿著同一張票反覆入場排隊、反覆搭乘很多次,不用每次都跑回服務中心重換。
第三步:剪票口對時間戳(Authenticator 驗證)
但「同一張票可以用很多次」,不代表每次入場都拿完全相同的東西交差。
每次你要上車,都必須由你(Client)用跟服務中心約定好的暗號(Session Key)現場寫一張新的小紙條,貼上「現在幾點幾分」——這對應每次 AP-REQ 都要重新產生一份新的 Authenticator。
剪票口的工作人員(服務端)收到後做兩件事:
純文字流程框,每行都壓在 16 字元內,適應 360px 直屏單手閱讀:
使用者->KDC
出示身分
換TGT
持TGT->KDC
換太空山票
持票+時戳->服務
剪票核對時間
(這張太空山票在有效期內可以重複走「持票+時戳→服務」這一步很多次,每次都要帶一份新的時間戳小紙條,不是走一次就作廢。)
比喻講到這裡很順,但比喻一定有失效邊界,這篇不打算讓比喻蒙混過關:
比喻講完,紅隊視角就上場了。我問:
「問:Kerberos防重送攻擊 防不住什麼?」
這句話把整篇文章從「介紹機制」拉到「攻防死角」。防重送靠的是 Authenticator 帶時間戳,理論上重放攻擊在時間窗內就會被擋下,但這句反問直接戳破「防重送=萬無一失」的錯覺。收斂出四個致命死角:

死角一:叢集跨節點重放(Replay Cache 邊界)
時間戳容許誤差通常設 ±5 分鐘,這個窗口是為了容忍網路延遲與時鐘漂移的工程權衡。
但這個死角要成立,必須建立在一個關鍵前提上:後端有多台負載平衡叢集節點共用同一個 SPN 與服務金鑰,而節點之間並未共享 Replay Cache。
因為票證本身不能任意丟給其他服務使用,攻擊必須發生在同一組 SPN 的節點之間。在這個前提下,攻擊者只要在 5 分鐘窗口內截獲合法的 AP-REQ,立刻將這張票重送到另一台還沒看過此 Authenticator 的節點:
死角二:黃金票據(Golden Ticket)
這一格根本不能算防重送失守,而是根信任被連根拔起。
攻擊者一旦取得 krbtgt 帳號的長期金鑰材料(AES key 或 NTLM hash),就能完全離線、不經過 KDC,偽造出任意使用者、任意權限、任意存活時間的 TGT。
krbtgt 是整條信任鏈的根。根一旦失守,下面所有票證的驗證都是空話——時間戳、Replay Cache 這些防重送防禦,在這裡完全派不上用場。
krbtgt 金鑰材料。krbtgt 密碼雙輪替(見下)、DC 列為 Tier 0 資產嚴格隔離管控、部署 DCSync 相關偵測規則。死角三:白銀票據(Silver Ticket)
邏輯跟黃金票據同構,只是金鑰換成單一服務帳號的密碼金鑰,偽造範圍收斂到該特定服務。
因為流程完全繞過 KDC、直接跟服務端打交道,KDC 根本不會留下任何發票紀錄,在中心化日誌稽核中極難被察覺。
死角四:Kerberoasting 離線字典破解
這是四個死角裡最貼近日常滲透情境的一個。
任何一個已認證的網域使用者,都可以合法地為任何註冊了 SPN 的服務帳號索取一張 Service Ticket。這一步完全合規,不會觸發任何異常警報。
拿到票之後,攻擊者把票拖到本機離線環境,用字典或暴力破解服務帳號的密碼雜湊。只要服務密碼不夠長、又沒定期輪換,遲早被算出來。這正是我後面追問的核心:
「問:Kerberoasting 離線字典破解的原理是什麼?」
答案就是八個字:「合法索票、離線破解」。
攻擊發生在協議邊界之外,Kerberos 協議層本身完全管不到。防守只能回歸基本面:服務帳號的密碼強度與自動輪替機制。
四大死角拆完,我把問題丟到治理層級,一次問了五題:
「問:1.在AI範例的現在,5min是不是適當? 2.KDC很重要,需要怎麼防護? 3.該服務自己的帳號密碼應該要怎麼防護? 4.Kerberoasting 離線字典破解的原理是什麼? 5.Kerberos還是顯學嗎?未來會被什麼取代嗎?」
5 分鐘在 AI 時代夠不夠?
Windows 預設的 5 分鐘容許誤差,本質上是在「網路延遲/時鐘漂移」與「安全窗口」之間抓的工程妥協。
窗口拉短,確實能壓縮死角一的重放可乘之機,但代價是極易因微小的時鐘不同步,引發合法請求被大面積拒絕的可用性災難。
工程防護的核心從來不是盲目把窗口縮到極限,而是:
KDC 是 Tier 0 皇冠明珠
KDC 保管 krbtgt,krbtgt 是整條 Kerberos 信任鏈的根。
這台機器(在 AD 環境通常就是網域控制站 DC)必須被當成 Tier 0 核心資產防護:實體與網路實體隔離、使用 PAW 特權專用工作站管理、任何存取登入皆留存不可抹滅的稽核軌跡。
這裡更藏著一個極易在維運中踩雷的實務關鍵——krbtgt 密碼的「雙輪替法則」:
服務帳號密碼怎麼防?
告別人工設定、憑記憶維護的脆弱密碼,全面擁抱 gMSA(group Managed Service Account)。
密碼由作業系統底層自動維護,具備兩大特性:
因為「連系統管理員都不知道密碼是什麼」,直接消滅了人為弱密碼與字典破解的機會,從根源化解死角四(Kerberoasting)的威脅。
Kerberos 還是顯學嗎?
在傳統企業內網與地端 AD 環境裡,它依然是穩固的主力,短期內絕不可能退場。
但當代架構的重心正在平滑轉移:
Kerberos 並非走向滅亡,而是收斂成現代混合雲身分架構中的內網基石,與雲端協定各司其職、相互並存。
卡片一|MFA 真偽陷阱
密碼 + 安全問題 = 假雙因子(都是 knowledge factor,本質同一種)
手機簡訊碼會被 SIM Swap 劫持(持有因子可被社交工程轉移)
FIDO2:私鑰留裝置,公鑰要註冊回伺服器,兩端缺一不成立
卡片二|Kerberos 四大死角
① 叢集跨節點重放:共用 SPN 節點若未共享 Replay Cache 遭重送(核心在健全 NTP 與共享快取,非誤判 4769 為 AP-REQ 證據)
② 黃金票據:krbtgt長期金鑰外洩=根信任崩潰,離線偽造任意 TGT(需兩次輪換 >10h)
③ 白銀票據:單一服務金鑰外洩=偽造該服務(繞過 KDC,日誌比對可抓漏)
④ Kerberoasting:合法索票+離線暴力破解弱服務密碼(改用 gMSA 根治)
卡片三|考古題現場逆向解剖
115-1 科一 Q26|CER 交叉錯誤率(Crossover Error Rate,亦稱 Equal Error Rate, EER):FAR 與 FRR 兩條曲線的相交點,即 FAR = FRR 的那個操作點;在該操作點的錯誤率較低,是業界用來客觀比較不同生物辨識器效能的基準指標,不是「整體準確度越高」這種簡化說法。
科一 Q34|加鹽 Hash+KDF 防彩虹表:Salt 讓相同明文密碼產生不同雜湊,破壞彩虹表預先計算的對照優勢;KDF(如 PBKDF2/bcrypt/Argon2)刻意拉高運算成本,讓暴力破解單位時間內能試的次數大幅下降,兩者搭配才是完整防線,缺一不可。
科一 Q25|自然人憑證安全等級:屬於雙因子(IC 卡持有+PIN 碼知識),比純密碼登入高一個等級,但仍受限於讀卡機與驅動環境,安全性不等於絕對免疫。
30 天衝到 Day 4,我把整章筆記拆成「先立骨、後填肉、再磨反射」三層,這是這份筆記從頭到尾唯一沒變過的骨架。丟給趕時間的你,先看這段抓重點就夠。
先立骨:鑑別是地基,不是門神排隊的第一關。 存取控制的三步驟——鑑別、授權、可歸責性——常被畫成一串平行的門。但這排序有個容易被忽略的前提:授權判斷的是「這個已知身分能做什麼」,身分本身是假的,後面規則全部失效。RBAC 設計得再嚴謹,攻擊者用偷來的密碼登入,RBAC 只是很有效率地把權限精準交給了他。這就是為什麼鑑別環節在存取控制章節裡自成一個高頻考區。
後填肉,三塊硬骨頭:
krbtgt 根信任崩潰)、白銀票據(單一服務金鑰外洩)、Kerberoasting(合法索票、離線暴力破解)。時戳只防得住「拿舊票重放」,防不住「拿真印章現蓋新票」。再磨反射,收斂成三個直覺反應:
以上是骨架,血肉留在完整筆記裡:9 大專有名詞生活比喻字典、Kerberos 三步曲的直式流程框、三道考古題逐選項拆解、還有 NIST SP 800-63B 的 IAL / AAL / FAL 延伸考點,都在這裡,手機直接開來滑:
這篇文章的產線,從頭到尾是人掌舵、AI 划槳:
技術細節怎麼定案,前面幾幕已經交代清楚,這裡不贅述。總之那句話:筆記沒磨到定稿,我不搶著發文。
發文前我對這份 HackMD 定稿筆記做了一次實體驗證,不是憑印象確認,是真的跑:
curl -sL https://hackmd.io/@lanss/BkzVADOOMl/download \
-o /tmp/hackmd_day4.md
diff /tmp/hackmd_day4.md day4/auth_and_sso_part2.md
echo "diff exit code: $?"
diff 輸出為空、exit code 為 0,代表 HackMD 上的定稿內容跟本地 day4/auth_and_sso_part2.md 逐字一致,這篇文章才是根據那份筆記寫成,不是憑記憶轉述。
Persona 2.2 就是在這篇的來回攻防裡定型的:
少了一環,這篇就不算磨透。