🗺️ 資安考證地圖

身分驗證因子、MFA 與 FIDO2 抗釣魚

密碼會被騙走,就連多了一道驗證碼也可能被即時轉送。這一頁從「你憑什麼證明你是你」談起,看清哪一種多因子擋得住現在的釣魚,哪一種擋不住。

所知/所持/所是三類因子 AitM 怎麼繞過 OTP 與推播 FIDO2 為什麼擋得住

💡 先搞懂問題

登入一個系統,本質上是要向它證明「我就是這個帳號的主人」。最古老的做法是密碼:只有本人知道的一串字。問題是密碼太容易外流,被釣魚騙走、在別的網站外洩後被拿來試登、或被猜中,一旦落入別人手裡,系統分不出來輸入的人到底是不是你。於是我們替登入多加幾道證明,這就是多因子驗證(MFA,Multi-Factor Authentication)。

但是「多加幾道」不是隨便加。驗證因子分成三大類:所知(你知道的東西,像密碼、PIN)、所持(你持有的東西,像手機、IC 卡、硬體金鑰)、所是(你天生的特徵,像指紋、臉)。真正的多因子,必須結合不同類別;如果只是密碼再加一個安全問題,兩者都屬「所知」,攻擊者騙到一個往往就能騙到另一個,防護幾乎沒有變強。下面這張圖可以切換,看看不同組合算不算多因子。

用一個比喻來想:到銀行臨櫃領錢

你走到銀行櫃檯要領一筆錢。行員會做三件不同性質的核對:問你設定的提款密碼(只有你知道),請你出示存摺或提款卡(只有你持有),再抬頭看你的長相對一下證件(你天生的樣子)。這三樣分屬三種來源,路人就算偷聽到密碼,還是拿不出你的存摺、也長得不像你,冒領就難得多。

如果行員只是把「請說密碼」問兩次,或另外問「你母親的娘家姓」,看似多了一關,其實仍然只考「你知道什麼」。偷聽到的人可能連這些都一起套走。

回到資安,櫃檯的三種核對就對應三類驗證因子。提款密碼是所知(Something you know),存摺提款卡是所持(Something you have),長相是所是(Something you are,生物辨識)。

多因子的價值,來自「攻擊者必須同時偷到不同性質的東西」。密碼加安全問題只是所知一類,不算真正的多因子;密碼加手機上的一次性驗證碼(所知+所持)、或密碼加指紋(所知+所是)才算。

比喻容易誤解的地方:櫃檯行員看得到活生生的人,遠端登入卻只看得到一串資料。這帶來兩個麻煩:其一,所持因子如果是「一串可以打出來、唸出來的數字」(例如簡訊驗證碼),就可能被騙去轉述給攻擊者,等於把存摺影本交出去;其二,生物辨識不是「對或不對」的開關,而是「像不像」的比對,會有把冒充者放進來(誤接受)或把本人擋在外面(誤拒絕)的機率。這兩點正是後面 AitM 攻擊與 FAR/FRR 要處理的核心。

🎮 互動實驗室

四個實驗室分別練習「因子怎麼分類、什麼才算 MFA」、「AitM 釣魚怎麼一步步繞過驗證碼」、「推播疲勞轟炸與號碼比對」與「生物辨識門檻怎麼取捨」。所有畫面都是教學模擬,不會連到任何真實系統,也不是可用來攻擊的工具;出現的網域、號碼都是示意。

1因子分類台

下面有十種常見的驗證方式。先點一種方式(它會出現藍色外框),再點「所知/所持/所是」其中一格把它放進去,放下去就會立刻告訴你分對還是分錯。全部分完後,用下方的「組合判斷」挑兩種方式,看看這樣組出來算不算多因子。

所知

你知道的秘密,可背誦、可輸入

所持

你持有的實體或裝置

所是

你的生物特徵,天生帶著
組合判斷:這樣算不算 MFA?
第一種 第二種
挑兩種驗證方式,按「判斷」。
先點一種驗證方式,再點要放進的類別;或直接用「組合判斷」試組合。

2AitM 釣魚逐步播放

AitM(Adversary-in-the-Middle,中間人對手)釣魚,是在你和真網站之間架一個「假登入頁」,它其實是一台反向代理:你打什麼,它就即時轉送給真網站。先選一種你在用的 MFA,再按「▶ 下一步」逐步播放,看帳密與驗證碼怎麼被轉送、工作階段(登入後的 Session Cookie)怎麼被偷走,以及切到 FIDO2 時是在哪一步被擋下來。示意網域用差一個字的 examp1e-bank.com 代表假站、example-bank.com 代表真站。

你的第二因子
選好第二因子後,按「▶ 下一步」開始。
    藍色箭頭是使用者送出的資料,橘色箭頭是假頁面即時轉送到真網站,紅色代表工作階段被偷走。

    3MFA 疲勞轟炸

    假設攻擊者已經拿到你的帳號密碼,只差最後那道推播確認。他不斷發動登入,你的手機就一直跳出「是否允許登入?」的通知,指望你被煩到隨手按下允許,這叫 MFA 疲勞轟炸(MFA Fatigue)。先用「一般推播」模式體驗只有允許/拒絕會怎樣,再切到「號碼比對」模式,看多了一個步驟後攻擊怎麼被卡住。

    推播模式
    0收到的推播
    0你按拒絕
    安全帳號狀態
    每按一次「攻擊者再次發動登入」,手機就多跳一則通知,換你決定要按什麼。

    4FAR/FRR 門檻滑桿

    生物辨識不是比對「一模一樣」,而是比對「夠不夠像」,由一個相似度門檻決定要多像才算是本人。門檻拉得越嚴,冒充者越難矇混(誤接受率 FAR 下降),但本人也越容易被誤擋(誤拒絕率 FRR 上升);拉得越鬆則相反。拖動滑桿,看兩條曲線怎麼一升一降、在哪裡交會,那個交會點就是交叉錯誤率 CER。曲線是示意模型,用來理解取捨方向,不是任何實際產品的數據。

    相似度門檻
    寬鬆(好通過)嚴格(難通過)
    –誤接受率 FAR
    冒充者被放進來
    –誤拒絕率 FRR
    本人被擋在外
    –交叉錯誤率 CER
    兩者相等處
    滑桿往右代表要求更像才放行;紅線是 FAR、橘線是 FRR,虛線標出兩線交會的 CER。

    📘 原理補完

    抗釣魚程度:為什麼同樣是 MFA,差別這麼大

    加了第二因子不代表就能防釣魚,關鍵在於這個因子「會不會被騙去、轉送給攻擊者」。凡是最後產生一串人看得懂、打得出來的數字或一個「按下同意」的動作,都可能在 AitM 攻擊裡被整份轉走。點下方的方式,看它為什麼落在這個位置。

    點左圖任一格或上方按鈕,看那一種方式的抗釣魚說明。

    簡訊 OTP 還多一個弱點:驗證碼經過電信網路傳送,可能被 SIM 卡側錄、SIM 交換(把你的門號轉到攻擊者手上)或惡意程式攔截。TOTP 驗證器 App 不經過電信網路,比簡訊安全一些,但它產生的仍是可被抄走、可被轉送的數字。推播把「輸入數字」改成「按下同意」,方便了使用者,卻也讓疲勞轟炸有機可乘。這三者都擋不住 AitM,因為攻擊者要的不是「破解」這串數字,而是「即時轉送」它。

    FIDO2/WebAuthn:把驗證結果綁在真網域上

    FIDO2 是 FIDO 聯盟制定的規格,搭配 W3C 的 WebAuthn 標準,在瀏覽器裡運作;用它登入而不再打密碼時,一般稱為通行金鑰(Passkey)。它的關鍵,是不再交出「一串可被轉述的東西」。註冊時,你的裝置(手機的安全晶片,或一支像 USB 隨身碟的安全金鑰)產生一組公私鑰:公鑰交給網站保存,私鑰永遠留在裝置裡,不會送出。登入時,網站送來一個隨機的挑戰值(Challenge),裝置用私鑰簽名,而簽名的內容裡包含瀏覽器當下實際連到的網域(Origin)。真網站收到簽名,用公鑰驗證,並檢查裡面的網域是不是自己。點下方按鈕,逐步看真網站與假網站的差別。

    這就是「來源綁定(Origin Binding)」:即使你被騙到 examp1e-bank.com,瀏覽器產生的簽名綁的是這個假網域,真網站 example-bank.com 一驗就發現網域不符而拒絕,攻擊者拿到的簽名在真站上毫無用處。加上私鑰從不離開裝置,假頁面根本沒有東西可以轉送。以私鑰簽章的憑證式驗證(例如智慧卡、PKI)也是同樣道理,一併列為抗釣魚等級。FIDO2 的限制是裝置一旦遺失,需要事先準備好安全的備援與復原流程(例如註冊第二支金鑰),否則可能把自己鎖在門外。

    生物辨識:FAR、FRR 與 CER 是什麼意思

    生物辨識比對的是相似度,因此一定會有兩種錯誤。誤接受率(FAR,False Acceptance Rate)是把冒充者當成本人放進來,屬於安全問題;誤拒絕率(FRR,False Rejection Rate)是把本人擋在門外,屬於便利問題。調整判斷門檻時,兩者會往相反方向變動:要更安全就壓低 FAR,代價是 FRR 上升,正當使用者更常被擋。把門檻從鬆調到嚴,畫出這兩條曲線,它們相交的那一點叫交叉錯誤率(CER,Crossover Error Rate,也叫 EER 等錯誤率)。CER 是拿來比較不同生物辨識系統準確度的單一指標,CER 越低,代表這個系統整體越準。

    另外要注意呈現攻擊(Presentation Attack):拿照片、面具、錄音或深偽(Deepfake)影像來冒充,對策是加上活體偵測(Liveness Detection),確認鏡頭前是活生生的人而不是一張照片。還有一點常被忽略:生物特徵無法像密碼一樣「改掉」,指紋或臉外洩後不能重設,所以主流做法(包含 FIDO2)是把生物特徵留在使用者的裝置上做比對、不上傳伺服器。

    指標意思屬於什麼問題要改善時怎麼調
    FAR 誤接受率冒充者被當成本人放行安全問題把門檻調嚴以壓低(FRR 會隨之上升)
    FRR 誤拒絕率本人被系統誤擋便利問題把門檻放鬆以降低(FAR 會隨之上升)
    CER 交叉錯誤率FAR 與 FRR 相等時的錯誤率整體準確度指標選用 CER 較低的系統或演算法

    容易混淆的地方

    兩個同類不算多因子。密碼加安全問題、密碼加 PIN,都仍然只是「所知」一類,不構成多因子。多因子一定要跨不同類別。

    不是所有 MFA 都抗釣魚。題目問「哪種 MFA 擋得住 AitM 或釣魚」,答案是 FIDO2/WebAuthn/Passkey 或 PKI 憑證式驗證;簡訊 OTP、TOTP、推播都可能被即時轉送。「把密碼變更長、更常換」對 AitM 完全無效,是常見誘答。

    AitM 不是撞庫。撞庫(憑證填充)是拿別處外洩的舊帳密到處試登;AitM 是即時騙走你當下輸入的帳密與驗證碼,並偷走登入後的工作階段 Cookie,之後連 MFA 都不必再過。

    FAR 高不是「比較安全」。FAR 是誤接受,越高代表越容易被冒充,是壞事;要更安全是壓低 FAR。CER 也是越低越好,不要看到數字大就以為厲害。

    ✅ 自我檢測

    以下是原創情境題,點選答案後會立即顯示對錯與解析。

    🎯 重點整理