WebAuthn のフィッシング耐性
利用者は example.com に FIDO2(WebAuthn)の認証器を登録し,パスワードレスでログインしている。攻撃者は,example.com のログイン画面を模した偽サイト https://examp1e.net に利用者を誘導し,偽サイトでの利用者の操作によって得た情報を中継して,example.com にログインしようとした。この攻撃の結果として,適切なものはどれか。
- ア利用者が偽サイトで指紋認証を行うと,指紋の情報が偽サイトに送信され,攻撃者はそれを使って example.com にログインできる。
- イ鍵は RP ID ごとに分けられ,ブラウザは examp1e.net のページで example.com 用の鍵による署名を行わせないので,中継しても example.com にはログインできない。
- ウ攻撃者が偽サイトで得た署名をそのまま example.com に転送すれば,チャレンジの値が一致する限りログインできる。
- エ攻撃者は偽サイトで登録済みの公開鍵を入手し,その公開鍵から秘密鍵を計算して,以後は認証器なしで example.com にログインできる。
正解と解説を見る
正解 イ
この問題の基礎知識
- FIDO2(WebAuthn)は公開鍵暗号による認証であり,登録時に認証器がサイト(RP)ごとに鍵ペアを生成して公開鍵だけをサーバに登録する。秘密鍵は認証器の外に出ない。
- 認証時は,サーバが送ったチャレンジなどを含むデータに認証器が秘密鍵で署名し,サーバが公開鍵で検証する。生体認証は認証器の内部での本人確認に使われ,生体情報はサーバに送られない。
- 鍵は RP ID(サイトのドメイン)に結び付けられ,ブラウザは呼出し元のオリジンに合わない RP ID の鍵を使わせない。署名対象のデータにはオリジンも含まれるので,偽サイトを経由した中継に耐性がある。
- ワンタイムパスワードは利用者が入力した値を偽サイトがそのまま中継すれば突破され得る点で,FIDO2 とはフィッシングへの耐性が異なる。
ア利用者が偽サイトで指紋認証を行うと,指紋の情報が偽サイトに送信され,攻撃者はそれを使って example.com にログインできる。
FIDO2 の生体認証は,認証器の内部で本人確認(ユーザ検証)を行うために使われるだけで,生体情報はサイトに送られない。サイトに渡るのは秘密鍵による署名と,ユーザ検証を行ったことを示すフラグである。
イ鍵は RP ID ごとに分けられ,ブラウザは examp1e.net のページで example.com 用の鍵による署名を行わせないので,中継しても example.com にはログインできない。正解
公開鍵クレデンシャルは登録した RP ID のサイトでだけ使え,RP ID は呼出し元のオリジンのドメインと等しいか,その登録可能なドメインサフィックスでなければならない。偽サイトは example.com 用の署名を得られないので,中継は成功しない。
ウ攻撃者が偽サイトで得た署名をそのまま example.com に転送すれば,チャレンジの値が一致する限りログインできる。
ワンタイムパスワードなら中継によって突破され得るが,WebAuthn では,サーバが署名対象のクライアントデータに含まれるオリジンを自サイトのものと照合する。偽サイトを経由した要求はオリジンが一致しないので受け入れられない。
エ攻撃者は偽サイトで登録済みの公開鍵を入手し,その公開鍵から秘密鍵を計算して,以後は認証器なしで example.com にログインできる。
公開鍵暗号では,公開鍵から秘密鍵を現実的な計算量で求めることはできない。秘密鍵は認証器の中に保持され,サーバや第三者に渡ることはない。
検証用の出典出典照合済み
W3C Web Authentication: An API for accessing Public Key Credentials Level 2 / NIST SP 800-56B Rev. 2 Recommendation for Pair-Wise Key-Establishment Using Integer Factorization Cryptography照合の根拠(5 件)
- イ(正解): RP ID は呼出し元オリジンのドメインと等しいか,その登録可能なドメインサフィックスでなければならず,examp1e.net では example.com の RP ID を使えない
The RP ID must be equal to the origin 's effective domain , or a registrable domain suffix of the origin 's effective domain .
W3C WebAuthn Level 2 · Section 4 Terminology(Relying Party Identifier)(新しいタブで開きます) - イ(正解): 偽サイトのページで example.com を RP ID に指定した認証要求はブラウザが拒否する
If options . rpId is not a registrable domain suffix of and is not equal to effectiveDomain , return a DOMException whose name is " SecurityError ", and terminate this algorithm.
W3C WebAuthn Level 2 · Section 5.1.4.1([[DiscoverFromExternalSource]] step)(新しいタブで開きます) - ウ(誤り): サーバは署名対象のクライアントデータのオリジンを自サイトのものと照合するので,偽サイト経由の応答は受け入れられない
Verify that the value of C . origin matches the Relying Party 's origin .
W3C WebAuthn Level 2 · Section 7.2 Verifying an Authentication Assertion(新しいタブで開きます) - ア(誤り): 生体情報はサイトに送られず,認証器内のユーザ検証にだけ使われる
Biometric data is not revealed to the WebAuthn Relying Party ; it is used only locally to perform user verification
W3C WebAuthn Level 2 · Section 14.3 Authenticator-local Biometric Recognition(新しいタブで開きます) - エ(誤り): 公開鍵から秘密鍵を求めることは計算量的に困難
the two keys have the property that, given the public key, it is computationally infeasible to derive the private key.
NIST SP 800-56B Rev. 2 · Section 3.1 Definitions(Public-key cryptography)(新しいタブで開きます)