Upgrade to Pro — share decks privately, control downloads, hide ads and more …

webauthn概論

 webauthn概論

84c80bc978d8bbe80baa3a375542302f?s=128

yuta kadotamai

October 11, 2018
Tweet

More Decks by yuta kadotamai

Other Decks in Technology

Transcript

  1. 次世代システム研究室 第二研究開発グループ 門田見 侑大 検証! 次世代Web認証 ~ WebAuthn概論 ~

  2. 2 本発表を三行で WebAuthnを用いたサービス開発にフォーカス 現行のサービスにおける認証方式とWebAuthnの比較 実装における懸念、苦労、今後の展望について語ります

  3. 3 アジェンダ ・WebAuthnとは? ・WebAuthnのフロー ・登録フロー ・認証フロー ・デモ ・懸念と考察 ・まとめ

  4. 4 WebAuthn とは?

  5. 5 一言で表すと 「パスワードなしで ユーザー認証するためのAPI」

  6. 6 パスワードって何がいけない?

  7. 7 パスワード認証の課題 ・記憶・入力が面倒 ・入力時点でキーロガーなどのリスク ・リスト型攻撃、フィッシングサイトによる被害 ・サイトAでパスワードが漏れる   → 使い回しユーザーはサイトBでも情報漏れる   → 自サービスのセキュリティだけでカバー不可

  8. 8 二段階認証やreCAPCHAの普及 ・リスト型攻撃による被害減 ・ユーザーの導入障壁も低い ・しかし、以下のデメリットも、、、 ・フローが増える ・入力が面倒 ・分かりづらい ・ユーザーを守るものが離脱の原因に、、、

  9. 9 Touch IDやFace IDの課題 ・Touch IDは利用するのにパスワードが必要 →入力の手間が省けるだけ ・Face IDも裏側ではサービスのパスワードを入力 →パスワードが漏れたらサービスログイン可能

    ・これらが解決しているのは「記憶・入力が面倒」のみ
  10. 10 残る問題 ・攻撃の対象となる ・秘匿情報が通信に乗る ・使い回しで他サービスも被害を受ける   → ユーザーのリテラシーによって難易度が変動   → 自社セキュリティだけでは解決できない

  11. 11 そもそも秘匿情報を 入力・送信・登録しているのが問題

  12. 12 パスワード使わなければいいのでは?

  13. 13 そこでWebAuthn

  14. 14 WebAuthn ・Web Authentication API の略 Credential Management APIの拡張 ・ブラウザにおいてFIDO認証を行うAPI

      → ブラウザの仕組みなのでJSで呼び出す ・ローカルのFIDO認証デバイスによって認証をする ・今年4月にW3Cの勧告候補に!続々とブラウザが対応!
  15. 15 FIDO認証とは? ・「速い・簡単・セキュア」を謳った認証規格 ・公開鍵認証を用いた認証方式 ・鍵の作成、保存、利用をデバイス(認証器)に委任 ・サービス(ドメイン)ごとにキーペアを作成 ・認証器は本人性、ユーザーの存在を担保する → 本人性の担保に生体認証など様々な方式が利用可能

  16. 16 FIDOデバイス

  17. 17 FIDO認証は何がいいの? ・そもそもパスワード使わない ・秘匿情報が通信にすら乗らない ・攻撃に強い仕組みである ・他のサービスのセキュリティに左右されない ・reCapchaのような面倒くささも分かりづらさもない

  18. 18 WebAuthnとは?(まとめ) ・パスワードレスを実現する要素技術 ・公開鍵認証(FIDO認証)がサイトログインに使える! ・指紋認証・顔認証でサイトにログインできる時代が来た! ・「速い・簡単・セキュア」でユーザー体験向上! ・いいことづくめの予感!!!!!

  19. 19 でも、導入障壁高そう…

  20. 20 アジェンダ ・WebAuthnとは? ・WebAuthnのフロー ・登録フロー ・認証フロー ・デモ ・懸念と考察 ・まとめ

  21. 21 登場人物 認証器 ブラウザ サーバー

  22. 22 ユーザー登録

  23. 23 ⑥バイナリ化した鍵などを送信 WebAuthnの登録フロー ①チャレンジを要求 ② チャレンジの返却 ④ ユーザー検証/鍵生成 ⑤公開鍵やIDなどを返却 ③

    鍵の生成リクエスト ⑦データ検証 / 登録 オフラインでの認証 オンラインでの検証
  24. 24 ユーザー認証

  25. 25 WebAuthnの認証フロー ③ 署名のリクエスト ④ ユーザー検証/署名の生成 ⑤署名などを返却 ⑥バイナリ化した署名などを送信 ⑦データ検証 /

    認証 オフラインでの認証 オンラインでの認証 ①チャレンジと鍵のIDを要求 ② チャレンジと鍵のIDを返却
  26. 26 WebAuthnの特徴 ・認証がオンライン・オフラインに分離 ・実装者は認証方法には非関与 ・登録時には鍵の署名チェックはされない ・最低限DBに保存すべき値は4つ ・ユーザーID or メールアドレス ・公開鍵

    ・公開鍵のID ・デバイスの署名回数合計
  27. 27 WebAuthnの特徴 ・ドメイン(RPID)ごとに鍵が生成 RPIDはデフォルトだとフルのドメイン ex. https://www.gmo.jpで生成される鍵のRPIDはwww.gmo.jp ドメインの接尾辞を指定することも可能 ex. https://www.gmo.jpの接尾辞はgmo.jp ・これによって1つの鍵を使い回せるメリットあり

  28. 28 DEMO1 〜 通常のログインフロー 〜

  29. 29 用意した環境とストーリー ・あるサイトで登録してログインできることを確認 webauthn.kdtm.com webauthn.kdtm.comの鍵

  30. 30 用意した環境とストーリー ・異なるサイトでログインできないことを確認 webauthn.kdtm.com webauthn-second.kdtm.com webauthn.kdtm.comの鍵

  31. 31 DEMO2 〜 ドメイン接尾時の鍵を利用 〜

  32. 32 用意した環境とストーリー ・ドメイン接尾辞で登録してログインできることを確認 webauthn.kdtm.com kdtm.comの鍵

  33. 33 用意した環境とストーリー ・接尾辞が同じならログインできることを確認 webauthn.kdtm.com webauthn-second.kdtm.com kdtm.comの鍵

  34. 34 実装してみての雑感 ・最低限の機能は仕様を読んでしまえば書く量は少なめ ・エラーの原因がわかりにくい、ブラウザによって異なる ・基本的にバイナリ、暗号のやり取りなので                直感的に分かりづらい ・デバッグがしんどい 最後まで実装してようやく間違いに気付く

  35. 35 アジェンダ ・WebAuthnとは? ・WebAuthnのフロー ・登録フロー ・認証フロー ・デモ ・懸念と考察 ・まとめ

  36. 36 既存の課題は解決?

  37. 37 現在の認証の課題は解決するか ・記憶・入力が面倒  何も記憶しないし、  デバイス次第で何も入力しなくても良い ・リスト型攻撃  結局バイナリのやり取りなので、理論上可能  → 当てるのは天文学的確率 ・フィッシングサイト  そもそもパスワード入力しないので被害無

     RPIDベースなので公開鍵すら取られない
  38. 38 で、普及するの?

  39. 39 普及するか? ・認証器を単体を買う人は少ないはず ・スマホが認証器になる   → 普及の速度はとても速くなるはず   → ガラケー?知らない子ですね ・FIDOデバイス組み込み式のPCが増えれば普及する   → 他のマシンで鍵の使い回しができない   → マシンの数だけ登録作業   → 1つのアカウントに複数鍵を持てる設計が必須

  40. 40 普及するか? ・ブラウザの対応状況 Google Chrome バージョン67以上 TouchIDは69以上 FireFox バージョン60以上 Edge

    insider preview実装済み 10月のupdateで利用可能 Safari 開発中 Internet Explorer 未対応
  41. 41 Android Chrome Betaでも デバイスの指紋認証で利用できる

  42. 42 DEMO3

  43. 43 目まぐるしい速度で 進化してます!!!

  44. 44 開発のときテストしたい

  45. 45 開発時のテストどうする? ・結合的な自動テストはできない ・サーバーの動作を担保するためのテストなら ・認証機が生成するバイナリをハードコーディング ・わざと鍵のデータを書き換えたシナリオを作成 のようにすれば可能 しかし、ここで新たな問題が、、、

  46. 46 攻撃される可能性…

  47. 47 攻撃シナリオ ユーザー 攻撃者の認証器 攻撃者のローカル環境 攻撃対象のサイト のフロントエンド (example.com) 攻撃対象のサイトの バックエンド

    攻撃者
  48. 48 攻撃シナリオ 1.ローカルの環境でexample.comの鍵を作成 example.comの鍵

  49. 49 攻撃シナリオ 2.鍵の作成時に返却されるデータを保存しておく example.comの鍵 データ保存

  50. 50 攻撃シナリオ 3.XSSを仕込む example.comの鍵 データ保存 必要な要件 ・登録に利用するIDの取得 ・検証に利用するデータの取得 ・保存したデータの埋め込み ・id

    ・raw_id ・attestationObject ・登録APIにアクセス
  51. 51 攻撃シナリオ 4.ユーザーがXSSのページを踏む example.comの鍵 データ保存 XSS発動!!

  52. 52 攻撃シナリオ 5.ユーザーのアカウントに攻撃者の公開鍵が紐づく example.comの鍵 データ保存

  53. 53 攻撃シナリオ 6.攻撃者の鍵でログインできる(乗っ取り) example.comの鍵 データ保存

  54. 54 攻撃の手法がないというわけではない ・そもそもXSSはやばいが、、、 ・メール認証とかは挟むべき ・結果から言えばほぼ使えないシナリオですが、  WebAuthn使えば完全無敵というわけではない ・DBを書き換えられたら終わり

  55. 55 銀の弾丸ではない

  56. 56 その他懸念事項は? ・デバイス紛失時の対策 ・メールでの本人確認は可能だが、、、 ・メールサービスに同じデバイス使っていたら…? ・粗悪品への対策 ・同じ秘密鍵を生成するデバイス ・バグで秘密鍵が読み出せるデバイス ・認証器の正当性を証明するフローもあるが… ・オフラインでの攻撃

    ・古典的だが、盗難によるアカウント乗っ取りが効果的? ・顔認証や指紋認証は破れてしまう
  57. 57 その他懸念事項は? ・暗号化アルゴリズムに脆弱性が見つかったら? → デバイスによるので登録時の制限はできても、利用の制限は厳しい ・サービスで導入するにはまだ考慮すべき問題が多いが…   → FIDOアライアンスに所属する企業では 社内向けなどで検証が進んでいるらしい

  58. 58 アジェンダ ・WebAuthnとは? ・WebAuthnのフロー ・サーバー実装 ~ 数字との戦い ~ ・オープンIDサービス導入に向けた課題 ・まとめ

  59. 59 まとめ ・WebAuthnは ・パスワードレスを実現するための要素技術 ・公開鍵認証(FIDO認証)をブラウザで使うためのAPI ・「速い・簡単・セキュア」 ・サイトのログインで生体認証などが使える未来キタ ・ブラウザやハードが続々対応推進中 ・様々な企業が実証実験中で普及しそう

  60. 60 まとめ ・導入するとなるとまだまだ懸念はある ・しばらくは、パスワードとの並行運用になりそう ・ユーザーにとってはパスワード入力なしで  利用できるだけで十分なメリットとなりうる ・要注目の次世代認証技術です

  61. 61 ご清聴ありがとうございました