Cognito の脅威保護機能を使用し疑わしいサインインアクティビティを検出しログインをブロックしてみた
クラウド事業本部の平木です!
皆さんは Cognito を使用してアプリケーションの認証を行っていますか?
Cognito では脅威保護という機能を活用することで追加のセキュリティ機能を活用することができます。
以前までは「高度なセキュリティ」という機能で使用できましたが、当時とは設定の仕方なども異なるため、
改めて機能の詳細や実際の動きなどについて見ていければと思います。
脅威保護機能とは
Cognito における脅威保護機能とは、その名の通り、web アプリケーションにおける脅威から保護してくれる高度な保護機能です。
指定したアクティビティのリクエスト毎に疑わしいアクティビティかどうかを検査し、サインインなどをブロックすることなども可能となります。
レート制限はないため、DDoS 攻撃などがあってもリクエスト毎にリスク評価してくれます。
脅威保護で出来ること
漏洩した認証情報
漏洩した認証情報では、漏洩した疑いのある認証情報かどうか確認するタイミングを指定し、検知した場合の動作を指定できます。
検査をトリガーするタイミングは以下 3 パターンあります。
- サインイン
- サインアップ
- パスワードの変更
チェックした結果、漏洩した認証情報を使ったアクティビティを検知した場合にサインインをブロックするか許可するかも選択できます。
アダプティブ認証
アダプティブ認証では、Cognito が検知したリスクレベルに応じて動作を指定することができます。
リスクレベルには「低リスク」「中リスク」「高リスク」の 3 段階ありますが、具体的にどんな時に各リスクが適用されるかの公開された資料は見つかりませんでした。
各リスクレベルに応じてサインインをブロックするか許可するか、また Cognito ユーザーに SES を経由して通知させるかを指定できます。
例外の IP アドレスの指定
検査リクエストについてソース IP が指定した IP アドレスだった場合に、常に許可するか/常にブロックするかを指定できます。
社内 VPN 経由からであればどこでも許可をしたいなどの需要を満たせそうです。
監査モード
脅威保護を利用するにあたり、いきなりサインインをブロックする機能を適用するのではなくドライランや個別のロジックを組むために、監査モードという形で検知のみ実施するモードがあります。
この場合、ユーザーのアクティビティに関する検査のみ行い、ブロックなどの動作は実施しないものになります。
ログのエクスポート
各ユーザーのアクティビティを CloudWatch Logs へエクスポートする機能です。
CloudWatch Logs へエクスポートすることで、詳細な通知ができたり、別のロジックをトリガーすることも可能です。
脅威保護を有効化してみる
プラスプランへの切り替え
まず、脅威保護を有効化するには、Cognito をプラスプランに切り替える必要があります。
既にプラスプランの方は次の項目へ飛ばしてください。
「プラスに切り替える」を押します。
「確認」を押します。 ※ここでプランが適用されます
現在のプランがプラスになっていれば完了です。
ライトに戻したい場合は、他のプランを押すと「ライトと比較」が出るためそこを押すとライトに変更できる画面になります。
脅威保護の設定
実際に脅威保護を設定していきます。
ナビゲーションペインのセキュリティから脅威保護を選択し、「編集」を押します。
Cognito を使用した標準認証で適用したい場合は、「標準認証強制適用モード」を、
カスタム認証チャレンジにおける Lambda トリガーを使用している場合は、「カスタム認証強制適用モード」で選択します。
各種機能を設定し、「変更の保存」を押すと設定完了です。
実際に検知しサインインをブロックしてみた
実際に不正リクエストとして検知させてみて正常な端末からはサインインでき、怪しい端末からはブロックしてみました。
簡単なアプリケーションを Amplify で構築し、
クライアントとして Windows サーバを各リージョンに作成し、海外からのアクセスを不正となるように実施してみました。
まずは正常なリクエストの場合は、
問題なく、アプリケーションへログインできました。
この時のユーザーイベント履歴を見てみると以下のような形でした。
なぜか低リスクで検知していますが、今回脅威保護の設定で事前に高リスクのみブロック設定にしていたのでサインインできました。
次は不正と思われるサインインを検知してみたいと思います。
試行錯誤の上、様々試してみたところブロックできました。
ブロックした場合、Unable to login because of security reasons.
と表記されるようですね。
高リスクで検知しブロックした場合、下記のようになります。
またイベントをフィードバックすることで検知精度が向上します。
参考
おわりに
今回は Cognito の脅威保護機能について実際に実装してみました。
今回の記事がどなたかの役に立つと嬉しいです。