Summary of OWASP Top 10 A2:2017 Broken Authentication and Session Management
1OWASP Top 10 – 認証の不備OWASP Okinawa 2018.6.8Tadashi SHIROMA
View Slide
2自己紹介: Who am I? 城間 政司(しろま ただし) 出身:沖縄県西原町、琉球大学工学部情報工学科卒 専攻・興味:デジタルアイデンティティ、ID連携(OAuth2, OpenID Connect等)、セキュリティリスクアセスメント、リバースエンジニアリング 趣味:バランスボールチェア(2009-) Twitter: @shiropanmanCopyright 2018 Tadashi Shiroma Proprietary
3本日の内容 OWASP Top 10と認証の不備について 認証とは?HTTPの認証の仕組み 認証の不備攻撃シナリオ対策 まとめ
4OWASP Top 10の推移1 1 123732 24 45865669 976387548102010 2013 2017OWASP Top 10 2010-2017インジェクション XSS(クロスサイトスクリプティング)認証の不備 安全でないオブジェクト直接参照CSRF 不適切なセキュリティ設定既知の脆弱性のあるコンポーネントの使用 機微な情報の漏えい、安全でない暗号、保存アクセス制御の不備 XML外部エンティティ参照(XXE)安全でないシリアライゼーション 不十分なロギングとモニタリング
5OWASP Top 10の推移1 12 24 4 42 2108753 3732 24 412375 56 621 1 17 768 8 876310 1065610 1069 910 109 96348105 58910 1032003 2004 2007 2010 2013 2017OWASP Top 10 2003-2017許可されていない入力 安全でないオブジェクト直接参照アクセス制御の不備 認証の不備XSS(クロスサイトスクリプティング) バッファオーバーフローインジェクション 不適切なエラー処理機微な情報の漏えい、安全でない暗号、保存 不適切なセキュリティ設定既知の脆弱性のあるコンポーネントの使用 不適切な設定管理機微な情報の漏えい、不適切な通信、トランスポート層保護 XML外部エンティティ参照(XXE)安全でないシリアライゼーション 不十分なロギングとモニタリングCSRF サービス妨害
6本日の対象者 – 認証の不備一般ユーザ向け 開発者向け例:パスワードの使い回しの是非多要素認証使いましょう例:セッション管理の注意点パスワード認証の注意点
7認証とは? 認証(にんしょう)とは、何かによって、対象の正当性を確認する行為を指す。(出典:Wikipedia) Webサービスでの認証とは?一般的には、ユーザとそのユーザが主張するアカウントの紐づけが正しいものか確認するプロセス他の例として、Web APIにアクセスするときに許可されたWebサービスかどうかを確認する…などもある→ユーザの認証だけとは限らないサービスにログインしたいですWebサービスのユーザ認証の流れ認証される人IDはjohnパスワードは*******です認証される人IDとパスワードを教えてください認証する人認証しましたこのあとはこのチケットを提示してください認証する人
8HTTPな認証の仕組み ログイン時にIDとパスワードを入力・送信し、セッションIDを含むCookieを発行 ログイン後はセッションID(Cookie)でユーザを認識最近では、IDとパスワードの組み合わせによる認証のほかに、SMSを利用した認証や、OpenID Connect&OAuth(例:facebookアカウントでログイン)を利用した認証も
9認証の不備 不十分なパスワードポリシー数字だけのパスワードを許可 例:12345678よくあるパスワードを許可 例:password123 非暗号化な通信上でのパスワード送受信http通信上のログイン 認証システムの不備無限にログイン試行が可能 セッション管理の不備ログアウト時にセッションIDが無効化されないURLにセッションIDが含まれる 例:jsessionid…
10攻撃シナリオの例 攻撃シナリオ1 – アカウントリスト攻撃攻撃シナリオ1.5 – ブルートフォース攻撃攻撃シナリオ1.5 – パスワードスプレー攻撃 攻撃シナリオ2 – セッションハイジャック攻撃攻撃シナリオ2.5 – セッションフィクセーション攻撃 攻撃シナリオ3 – データベースへのアクセス 攻撃シナリオ4 – プロトコルの実装不備
11攻撃シナリオ1 – アカウントリスト攻撃 任意の方法で入手したアカウント情報を基に、不正ログインを試みる攻撃サイトAサイトBサイトCアカウント情報id: trumppw: donald123か…id: trumppw: donald123id: trumppw: donald123id: trumppw: donald321
12攻撃シナリオ1.5 – ブルートフォース攻撃 よくあるパスワードを使ってログイン試行する攻撃 アカウントリスト攻撃のようにアカウント情報は必要ない 総当たり攻撃とも呼ばれる出典:github - danielmiessler/SecLists
13攻撃シナリオ1.5 – パスワードスプレー攻撃 パスワードを固定してログインを試行する攻撃 リバースブルートフォース出典:https://japan.zdnet.com/article/35117214/出典:http://tech.nikkeibp.co.jp/it/atcl/column/14/346926/090100042/
14攻撃シナリオ2 – セッションハイジャック攻撃 任意の方法でセッションIDを盗み、攻撃者がユーザになりすます攻撃 セッションIDの入手方法例http通信を盗聴XSSを利用してセッションIDのCookieを送信セッションIDの生成パターンから推測セッションフィクセーション攻撃(後述)
15攻撃シナリオ2.5 – セッションフィクセーション攻撃 ユーザのセッションIDを攻撃者が指定したものでWebサービスを利用させ、攻撃者自身も同じセッションIDを使うことでアカウントを乗っ取る攻撃 URLでCookieを指定できるサイトや、.co.jpドメインのCookieを受け入れるなど任意のCookieを指定できる脆弱性を悪用
16攻撃シナリオ3 – データベースへのアクセス 脆弱性などを突かれるなどして、内外部の攻撃者にデータベースへアクセスされる パスワードをハッシュ化していない場合は容易にパスワードを入手できるID PasswordUser1 AiueoUser2 Pass1234User3 qwertyUser4 abc123
17攻撃シナリオ4 – プロトコルの実装不備 facebookやtwitterのアカウントを使ったログインなどで使われているOAuthやOpenID Connectのプロトコルの実装の不備を突いた攻撃 トークン置き換え攻撃やCSRFによる攻撃などがあるトークン置き換え攻撃の内容出典:http://www.atmarkit.co.jp/ait/articles/1710/24/news011_2.html
18対策 – OWASP Top 10 2017より 自動化された攻撃、アカウントリスト攻撃、総当たり攻撃、盗まれたユーザ名/パスワードを再利用した攻撃を防ぐために、できる限り多要素認証を実装する。 初期アカウント(特に管理者ユーザ)を残したまま出荷およびリリースしない。 新しいパスワードまたは変更後のパスワードがTop 10000 worst passwordsのリストにないか照合するようなパスワード検証を実装する。 NIST SP 800-63 B's guidelines in section 5.1.1 for Memorized Secretsや最近の調査に基づくパスワードの方針に、パスワードの長さ、複雑性、定期変更に関するポリシーを適合させる。 アカウント列挙攻撃への対策としてユーザ登録、パスワード復旧、APIを強化するため、すべての結果表示において同じメッセージを用いる。 パスワード入力の失敗に対して回数に制限するか、段階的に遅延察せる。すべてのログイン失敗を記録するとともに、アカウントリスト攻撃、総当たり攻撃、または他の攻撃を検知したときにアプリケーション管理者に通知する。 サーバサイドで、セキュアな、ビルトインのセッション管理機構を使い、ログイン後には新たに高エントロピーのランダムなセッションIDを生成する。セッションIDはURLに含めるべきではなく、セキュアに保存する。また、ログアウト後や、アイドル状態、タイムアウトしたセッションを無効にする。
19対策(1/5) – 多要素認証の導入 簡単なパスワードや使い回しの禁止、パスワード管理ソフトの使用などのユーザ側の対策には限界がある IDとパスワードの組み合わせ以外の認証要素を用いた多要素認証で対策
20対策(2/5) – 初期パスワード/簡単なパスワードの禁止 新しいパスワードまたは変更後のパスワードがTop 10000 worst passwordsのリストにないか照合するようなパスワード検証を実装する。 初期アカウント(特に管理者ユーザ)を残したまま出荷およびリリースしない出典:#mkmk_nmatayoshi 出典:github - danielmiessler/SecLists
21対策(3/5) – 公的ガイドラインへの準拠 NIST SP 800-63 B's guidelines in section 5.1.1 for Memorized Secretsや最近の調査に基づくパスワードの方針に、パスワードの長さ、複雑性、定期変更に関するポリシーを適合させる。
22対策(4/5) – その他 アカウント列挙攻撃への対策としてユーザ登録、パスワード復旧、APIを強化するため、すべての結果表示において同じメッセージを用いる。→ダメな例:ユーザのIDが存在するかしないかでログイン失敗時のメッセージが変わる パスワード入力の失敗に対して回数に制限するか、段階的に遅延させる。すべてのログイン失敗を記録するとともに、アカウントリスト攻撃、総当たり攻撃、または他の攻撃を検知したときにアプリケーション管理者に通知する。 サーバサイドで、セキュアな、ビルトインのセッション管理機構を使い、ログイン後には新たに高エントロピーのランダムなセッションIDを生成する。セッションIDはURLに含めるべきではなく、セキュアに保存する。また、ログアウト後や、アイドル状態、タイムアウトしたセッションを無効にする。→認証や暗号に関するシステムは独自に開発するよりも、ライブラリやフレームワークの利用を推奨
23対策(5/5) – リスクベース認証 ログイン場所や時間など、ユーザの普段のログイン情報/行動と異なる場合に、多要素認証を要求したり、アラートメールをユーザに送信する 例えば…日本国内からサービスを利用していたアカウントに、海外からのログインがあった→「海外からログインがありました!」とユーザにメールで注意喚起アクセス記録がない端末から初めてログインがあった→ID&パスワードによる認証に加えて、CAPTCHAによる認証を追加
24対策 – 詳しくはOWASPの各種ガイドラインで! ASVS V2 Authentication Verification Requirementshttps://www.owasp.org/index.php/ASVS_V2_Authentication ASVS V3 Session Managementhttps://www.owasp.org/index.php/ASVS_V3_Session_Management Authentication Cheat Sheethttps://www.owasp.org/index.php/Authentication_Cheat_Sheet Forgot Password Cheat Sheethttps://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet Session Management Cheat Sheethttps://www.owasp.org/index.php/Session_Management_Cheat_Sheet OWASP Development Guidehttps://www.owasp.org/index.php/Projects/OWASP_Development_Guide Testing for authenticationhttps://www.owasp.org/index.php/Testing_for_authentication
25まとめ 認証の不備について攻撃シナリオや対策の紹介 IDとパスワードによる認証やセッション管理などの不備が攻撃に利用される多要素認証の提供や弱いパスワードの禁止、適切なセッション管理などの対策が必要 OWASPの各種ガイドラインを参考にして、不備がないかチェック