Slide 1

Slide 1 text

Copyright © Yoshikazu Nojima 2018 入門 WebAuthn 安全・便利な新しいWeb認証方式 2018-08-31 能島 良和 (@shiroica)

Slide 2

Slide 2 text

Copyright © Yoshikazu Nojima 2018 自己紹介 • 能島良和 • NTTコミュニケーションズ クラウドサービス部所属 • 昨年までNTTコムウェアで社内向けにSpringのプロジェクト支援に従事 • Apache CloudStack Commiter(活動休止中。。) • WebAuthn周りは趣味 • Twitter:@shiroica • GitHub:ynojima 1

Slide 3

Slide 3 text

Copyright © Yoshikazu Nojima 2018 突然ですが・・・ この中にオンラインサービスのアカウントを 乗っ取られた経験のある方はいますか? 2

Slide 4

Slide 4 text

Copyright © Yoshikazu Nojima 2018 恥ずかしながら私はあります・・・ 3

Slide 5

Slide 5 text

Copyright © Yoshikazu Nojima 2018 原因 恐らく別のサービスから流出したID/Passwordによるリスト型攻撃。 ID/Passwordを色々なサービスで使いまわしていた為に攻撃されました。 (※業務で使用していたパスワードとは別でした、念の為) 4

Slide 6

Slide 6 text

Copyright © Yoshikazu Nojima 2018 パスワードの限界 そもそもパスワードには以下の問題があります。 • フィッシング攻撃耐性 • 本物そっくりの偽物サイトを作成し、ユーザーを誤認させたうえでID/Passwordを入力させ詐取 • 精巧に作成されたフィッシングサイトは45%のユーザーが騙されるという研究結果も • リスト型攻撃耐性 • 脆弱な他サービスで流出したID/Passwordを用いた攻撃 • 自サービスは堅牢でも、ユーザーがパスワードを使いまわした場合、巻き添え被害の可能性 • モバイルデバイス対応 • モバイルデバイスでは複雑なパスワードの入力が不便 パスワード要求はユーザーの離脱率に顕著な悪影響 パスワード認証に代わる認証手段が必要 5

Slide 7

Slide 7 text

Copyright © Yoshikazu Nojima 2018 Web Authentication仕様とは 最近W3Cで勧告候補になった、パスワード認証の問題点を克服したセキュアな認証を 実現するためのWeb標準。セキュリティキーによる二段階認証や生体認証を実現。 ■主な特徴 • 指紋認証や顔認証など認証方式を差し替え可能 • 生体情報をサーバーで保存せず、安全性が高い • フィッシング攻撃、 CSRF攻撃対策の組込 6

Slide 8

Slide 8 text

Copyright © Yoshikazu Nojima 2018 デモ 7

Slide 9

Slide 9 text

Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(概略) • ユーザー登録 ユーザー 認証デバイス ブラウザ サーバー DB RP固有公開鍵 の保存 承認ジェスチャ (指紋スキャン等) の実施 • RP固有公開鍵 • Credential Id • ドメイン(RP Id)のハッ シュ • その他 を送信 • RP固有公開鍵 • Credential Id • ドメイン(RP Id)のハッシュ • その他 を送信 耐タンパ 領域 RP固有秘密鍵 を保存 RP固有公開鍵・秘密鍵ペアを生成 • チャレンジ • チャレンジ、ドメイン(RpId) その他のハッシュ クライアントデータのハッシュ、 RP Idに対する署名を生成 ドメイン(RP Id) チャレンジ その他の検証 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 ユーザー検証機能付き認証デバイスの場合

Slide 10

Slide 10 text

Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(概略) • ユーザー認証 ユーザー 認証デバイス ブラウザ サーバー 承認ジェスチャ (指紋スキャン等) の実施 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • チャレンジ、ドメイン (RpId)その他 • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • チャレンジ、ドメイン(RpId) その他のハッシュ RP固有秘密鍵でRpIdのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 ドメイン(RP Id)、署名 チャレンジ、その他の検証 • チャレンジ を送信 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込 ローカル認証 公開鍵認証 DB RP固有公開鍵 の読込

Slide 11

Slide 11 text

Copyright © Yoshikazu Nojima 2018 WebAuthnの技術的な特徴 ローカル認証と公開鍵認証の組み合わせ • ローカル認証 • ユーザーと認証デバイス間の認証 認証方式は交換可能(例:指紋認証、虹彩認証、PIN) • 公開鍵認証 • 認証デバイスとサーバー間の認証 10 ユーザー 認証デバイス サーバー ローカル認証 (指紋認証等) 公開鍵認証

Slide 12

Slide 12 text

Copyright © Yoshikazu Nojima 2018 生体認証をローカル認証とするメリット 生体認証をリモート認証とした場合のリスク • 生体情報は変更不可能なことから究極のプライバシー情報。取扱は慎重さが求められる • サーバーに生体情報を保存する生体認証では、生体情報は経路上で様々な攻撃に晒される • WebAuthnでは生体情報が認証デバイスから外に流通せず、安全性が高い(ローカル認証) • クライアント(ブラウザ)とサーバーは公開鍵と、公開鍵で検証できる署名を受け取るのみ • 生体情報と秘密鍵は認証デバイスのTPMやセキュアエレメントのような耐タンパ領域に保存 • デメリット • 登録時に使用した認証デバイスがないと認証できない 11 ユーザー 認証デバイス ブラウザ サーバー DB 生体情報の 検証 承認ジェスチャ (生体情報) の提供 • 生体情報 • 生体情報

Slide 13

Slide 13 text

Copyright © Yoshikazu Nojima 2018 フィッシング攻撃に対する効果 • ユーザー認証 ユーザー 認証デバイス ブラウザ サーバー 承認ジェスチャ (指紋スキャン等) の実施 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • チャレンジ、ドメイン (RpId)その他 • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • チャレンジ、ドメイン(RpId) その他のハッシュ RP固有秘密鍵でRpIdのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 • チャレンジ を送信 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込 ドメイン(RP Id)、署名 その他の検証 DB RP固有公開鍵 の読込 秘密鍵はRpId(≒ドメイン)毎に保存されており、 フィッシング攻撃で他ドメインから認証要求を受けて も秘密鍵は不正利用されない

Slide 14

Slide 14 text

Copyright © Yoshikazu Nojima 2018 リスト型攻撃に対する効果 • ユーザー認証 ユーザー 認証デバイス ブラウザ サーバー 承認ジェスチャ (指紋スキャン等) の実施 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • チャレンジ、ドメイン (RpId)その他 • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • チャレンジ、ドメイン(RpId) その他のハッシュ RP固有秘密鍵でRpIdのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 • チャレンジ を送信 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込 ドメイン(RP Id)、署名 その他の検証 DB RP固有公開鍵 の読込 サーバー側に保存されるのはRP固有の公開鍵であり、 他サイトで漏洩してもリスト型攻撃を受ける心配は不要

Slide 15

Slide 15 text

Copyright © Yoshikazu Nojima 2018 モバイルデバイス対応 近年のスマホで充実している、生体認証(指紋、顔認識)を ローカル認証に活用することで、パスワードを打ち込む 煩雑さからユーザーを開放し、離脱率を抑えることが期待 14

Slide 16

Slide 16 text

Copyright © Yoshikazu Nojima 2018 導入のハードル(1/2) ブラウザ FIDO-U2F (=HWトークン による二要素認証) FIDO 2.0 (≒生体認証) 備考 Chrome(Desktop) 67以降 Canaryで実装中 Chrome(Android) Canaryで実装中 Canaryで実装中 Firefox 60以降 未サポート Safari 未サポート 未サポート 最近、正式に開発開始 Edge Edge 18 Preview以降 今秋正式リリース見込 Windows Hello対応 認証デバイスもサポート IE 未サポート 未サポート 15 ■ブラウザの対応状況 Safariを除く主要ブラウザでは動く実装が揃いつつある。Safariも最近、開発開始 2018年8月現在

Slide 17

Slide 17 text

Copyright © Yoshikazu Nojima 2018 導入のハードル(2/2) ■認証デバイス • 認証デバイスが必要(組込、USB、NFC、BLE) • FIDO U2Fの認証デバイスも利用可能、2000円台後半~ • Windows Hello対応認証デバイスを使用可能(Edge) • Android標準の認証デバイスも利用可能(Android版Chrome) • Touch IDが利用可能予定(Mac版Chrome) ■サーバーサイド • 各言語でOSSライブラリが出始めている • 手前味噌ながら自分もJava/Springで実装 • https://github.com/webauthn4j/webauthn4j • https://github.com/ynojima/spring-security-webauthn 16

Slide 18

Slide 18 text

Copyright © Yoshikazu Nojima 2018 WebAuthn導入時の位置づけ 一般公開サイト: • 全ユーザーへの強制は望めないが、セキュリティ、利便性を重視するユーザーに選択肢を提供 社内システム用途: • 各マシンへの認証クライアントソフトの配布が不要な為、 既存の生体認証システムと比べ展開が容易な選択肢になり得る 17

Slide 19

Slide 19 text

Copyright © Yoshikazu Nojima 2018 まとめ • パスワード認証には限界がある • フィッシング攻撃対応 • リスト型攻撃対応 • モバイルデバイス対応 • W3Cで新しい認証方式としてWeb Authentication仕様の策定が進められている • ローカル認証と公開鍵認証の組み合わせ • 生体情報をサーバーで保存する必要がなく安全性が高い • 仕様としてフィッシング攻撃対策、CSRF攻撃対策を盛込済 • 主要ブラウザで実装が進行中 • Edge/Chrome/Firefox/Safari 18

Slide 20

Slide 20 text

Copyright © Yoshikazu Nojima 2018 APPENDIX 19

Slide 21

Slide 21 text

Copyright © Yoshikazu Nojima 2018 rpId:WebAuthnでサイトを区別するスコープの単位 rpIdで指定したドメイン自身、及びそのサブドメインで資格情報(鍵ペア)は共有 例)以下のように、複数のサブドメインに跨って存在するサイトがあるとする ◆ rpIdが”example.com”の場合 資格情報は上記すべてのドメインで有効 ◆ rpIdが”admin.example.com”の場合 資格情報は”admin.example.com”のみで有効 20 id.example.com www.example.com admin.example.com

Slide 22

Slide 22 text

Copyright © Yoshikazu Nojima 2018 以下のように、複数のTLD(トップレベルドメイン)に跨って存在するサイトがあるとする このようなドメイン自体が異なる場合でも、パスワード認証では認証用DBさえ共有していれば、 同一ID/Passでログインさせることが出来ていた。 WebAuthn仕様では同一サイトとして扱えず、登録時のドメインと同一のドメインでのみ認証可 異なるドメイン間での資格情報の共有(1/2) 21 example.co.jp example.com example.co.uk

Slide 23

Slide 23 text

Copyright © Yoshikazu Nojima 2018 サービスのリブランド、会社合併等によるドメイン名変更も、 既存ユーザーが認証出来なくなる問題が存在 異なるドメイン間での資格情報の共有(2/2) 22 旧サイト名.com 新サイト名.com ブランディング上の ドメイン名の変更

Slide 24

Slide 24 text

Copyright © Yoshikazu Nojima 2018 WebAuthnで異ドメイン間で資格情報を共有出来ない問題は、 異ドメイン間をOpenID ConnectやSAMLでシングルサインオン させることで緩和可能 緩和策:異ドメイン間でのシングルサインオン 23 example.co.jp example.com example.co.uk ログイン後、 SSOによるリダイレクト ログイン後、 SSOによるリダイレクト 代表ドメインに WebAuthnでログイン

Slide 25

Slide 25 text

Copyright © Yoshikazu Nojima 2018 24

Slide 26

Slide 26 text

Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー登録 ユーザー 認証デバイス ブラウザ サーバー DB RP固有公開鍵 の保存 承認ジェスチャ (ローカル認証情報) の提供 • RP固有公開鍵 • Credential Id • 構成証明公開鍵証明書 • 署名 • カウンタ を送信 • クライアントデータ • 構成証明 • RP Idのハッシュ • カウンタ • Credential Id • RP固有公開鍵 • 構成証明公開鍵証明書 を送信 耐タンパ 領域 RP固有秘密鍵を保存 RP固有公開鍵・秘密鍵ペアを生成 構成証明 証明書を読込 • チャレンジ • RP Id • 他 • RP Idのハッシュ • クライアントデータのハッシュ クライアントデータのハッシュ、 RP Idに対する署名を生成 クライアントデータ、 構成証明、署名、認証 パス他の検証 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 ユーザー検証機能付き認証デバイスの場合

Slide 27

Slide 27 text

Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー認証 ユーザー 認証デバイス ブラウザ サーバー 承認ジェスチャ (ローカル認証情報) の提供 • Credential Id • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • Credential Id • クライアントデータ • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 • RP Idのハッシュ • クライアントデータのハッシュ を送信 RP固有秘密鍵でRP Idのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 クライアントデータ、 認証デバイスデータ、署名 他の検証 • チャレンジ を送信 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 ユーザー検証機能付き認証デバイスの場合 耐タンパ 領域 • ローカル認証情報(生体情報等) を検証 RP固有秘密鍵を読込

Slide 28

Slide 28 text

Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー登録(二要素認証への適用) ユーザー 認証デバイス ブラウザ サーバー DB RP固有公開鍵 の保存 承認ジェスチャ (ボタン押下) の提供 • RP固有公開鍵 • Credential Id(NonceとMAC) • 構成証明公開鍵証明書 • 署名 • カウンタ を送信 • クライアントデータ • 構成証明 • RP Idのハッシュ • カウンタ • Credential Id • RP固有公開鍵 • 構成証明公開鍵証明書 を送信 耐タンパ 領域 デバイスシークレットをキーに NonceとRP Idのハッシュから RP固有公開鍵・秘密鍵ペアを導出 構成証明秘密鍵、 構成証明公開鍵証明書、 デバイスシークレット を読込 • チャレンジ • RP Id • 他 • RP Idのハッシュ • クライアントデータのハッシュ を送信 構成証明秘密鍵でRP Id、 クライアントデータのハッシュ、 Credential Id、RP固有公開鍵を署名 クライアントデータ、 構成証明、署名、認証パス 他の検証 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 Yubico社のFIDO-U2F認証デバイスの場合 RNGでNonce を生成 デバイスシークレットをキーに RP固有秘密鍵とRP IdからMACを生成

Slide 29

Slide 29 text

Copyright © Yoshikazu Nojima 2018 Web Authenticationの認証フロー(詳細) • ユーザー認証(二要素認証への適用) ユーザー 認証デバイス ブラウザ サーバー DB Credential Id リストの取得 承認ジェスチャ (ボタン押下) の提供 • フラグ • カウンタ • 署名 を送信 • Credential Id • クライアントデータ • 認証デバイスデータ • RP Idのハッシュ • フラグ • カウンタ • 資格情報データ • 署名 を送信 耐タンパ 領域 デバイスシークレットをキーに NonceとRP Idのハッシュから RP固有公開鍵・秘密鍵ペアを導出 デバイスシークレット を読込 • RP Idのハッシュ • クライアントデータのハッシュ • Credential Id(NonceとMAC) を送信 RP固有秘密鍵でRP Idのハッシュ、 フラグ、カウンタ、クライアント データのハッシュを署名 クライアントデータ、 認証デバイスデータ、署名 他の検証 • Credential Idリスト • チャレンジ、RP Id、他 を送信 Yubico社のFIDO-U2F認証デバイスの場合 ID/Passの入力 ID/Passの送信 • クライアントデータ • チャレンジ • オリジン • TokenBinding ID • 他 を生成 DB RP固有公開鍵 の読込

Slide 30

Slide 30 text

Copyright © Yoshikazu Nojima 2018 デモ 29

Slide 31

Slide 31 text

Copyright © Yoshikazu Nojima 2018 デモ 30

Slide 32

Slide 32 text

Copyright © Yoshikazu Nojima 2018 デモ 31

Slide 33

Slide 33 text

Copyright © Yoshikazu Nojima 2018 デモ 32

Slide 34

Slide 34 text

Copyright © Yoshikazu Nojima 2018 デモ 33

Slide 35

Slide 35 text

Copyright © Yoshikazu Nojima 2018 デモ 34