Amazon Web Services ブログ
高度なボットトラフィックの検出とブロック
本稿は Etienne Munnich によるブログ Detect and block advanced bot traffic を翻訳したものです。翻訳はソリューションアーキテクト 森が担当しました。
ボットと呼ばれる自動化されたスクリプトは、モバイルアプリケーション、Web サイトや API に大量のトラフィックを発生させる可能性があります。商品の在庫状況や価格など、ウェブサイトのコンテンツをターゲットにしたボットも存在します。
標的型ボットのトラフィックは、需要の高い在庫へのウェブサイトアクセスをめぐって、正規のユーザートラフィックと競合することでユーザー体験を低下させ、不正取引によるチャージバックでビジネスリスクを高め、インフラコストを増大させる可能性があります。
2021年に AWS は AWS WAF Bot Control for Common Bots をリリースし、一般的なボットの検出と制御を支援できるようになりました。2022年10月には新機能として AWS Bot Control for Targeted Bots をリリースし、高度な技術を使用して積極的に検知を回避するボットの検知と防御を支援することができるようになりました。
このブログでは Bot Control for Targeted Bots の概要を説明し、Bot Control を有効にして一般的なボットと標的型ボットの両方を検出およびブロックする方法を紹介します。
Bot Control for Targeted Bots の概要
Bot Control for Targeted Bots は、トラフィックパターンのインテリジェントなベースラインを作成することにより、高度なボット検知と緩和を提供します。Bot Control はブラウザのフィンガープリント技術と、クライアントサイドの JavaScript を使用して、人間のトラフィックパターンを模倣し、積極的に検出を回避しようとする高度なボットからアプリケーションを保護するのに役立ちます。
Bot Control は利用パターンの異常を検出し、悪質なボットを隔離するための新しい柔軟な緩和オプションを提供します。これらのオプションには動的なレート制限、チャレンジアクション、ラベルと信頼度スコアに基づくブロック機能などがあります。
Bot Control for Targeted Bots を使用すると、ボット保護ルールを使用して、検証済みの一般的なボットトラフィックを許可すると同時に、高度なボットトラフィックにチャレンジを送信することができます。アプリケーションやアーキテクチャを変更することなく、同じ設定ページから両方のタスクを実行することができます。また、きめ細かなルールセットを設定することもできます。例えば、リスクの高いボットに対するブロックアクションを設定する一方で、既知のIP範囲に対する例外を許可することができます。
このリリースではトークンドメインも導入されています。この機能はクライアント側の構成を簡素化するために、複数のドメイン名と Amazon CloudFront ディストリビューションで、同じ AWS WAF Web ACL を使用する機能です。例えばトークンドメインを使用して、www.example.com で生成されたトークンを api.example.com で受け入れたり、その逆を行うことができます。また、マネージドルールの設定でリソースパスを直接指定できるようになったため、API コールに対してのみトークンを要求し、画像のようにキャッシュされたコンテンツに対しては要求しない、といったことが可能になりました。
Bot Control for Targeted Bots は Amazon CloudWatch にメトリクスを送信し、アプリケーションのアクセス傾向を特定します。メトリクスには、ボットトラフィックと比較した人間のトラフィックの割合や、ログインやチェックアウトページなどの機密性の高い Web ページに対するリクエストのカウントが含まれます。Bot Control の各ルールは一意のラベルを生成するため、CloudWatch のメトリクスやフィルタのログを確認して、トラフィックパターンを把握することができます。これらの仕組みを利用することで、運用上の問題を特定・切り分け・修正することができます。
チュートリアル
このチュートリアルでは CloudFront ディストリビューションを保護するために、Bot Control for Targeted Bots をセットアップする方法を紹介します。
AWS WAF のウェブ ACL に、AWS Managed Rule for Bot Control for Targeted Bots を設定します。このルールはボットを検出し、適切なアクションを決定します。
- 検証済みボットを動的にレート制限 – トラフィック履歴に基づいて、Bot Control はインテリジェントなベースラインを作成し、異常に高いボリュームのトラフィックに対してレート制限を適用します
- チャレンジアクションを有効にする – Count、Allow、Block、CAPTCHA のオプションに加えて、Challenge と呼ばれる新しいオプションが用意されています。Challenge オプションは、チャレンジを組み込んだプロセスを開始します。これは Bot Cotrol がブラウザにチャレンジを提供し、チャレンジが解決されたときにドメイントークンを作成することを意味します
ターゲットボットのボットコントロールを設定する
このセクションでは、新しいウェブ ACL を作成するか既存のものを編集して、Bot Control for Targeted Bots を設定する方法を説明します。
Bot Control for Targeted Bots を設定する方法
- AWS WAF コンソールを開き、次のいずれかを実行します
- 新しい Web ACL を作成する場合 Create web ACLを選択します
- 既存の Web ACL を編集する場合 WebACL の名前を選択します
- Rules タブの Add rules ドロップダウンで、Add managed rule groups を選択します
- Web ACL に Bot Control のルール セットを追加します。ルールを編集するため Edit を選択します
- Bot Control inspection level で、Bot Control の検査レベルを選択します。このチュートリアルでは Targeted を選択して、Targeted Bots に対する Bot Control を有効にします
図1: Bot Control – 検査レベルの選択
- 検出されたボットの各カテゴリーに対して実行するアクションを確認・選択し Save rule をクリックします。この例では図2 に示すように、カテゴリーに対して Allow、Challenge、Count のルールを設定しました。
図2:Bot Control – 各カテゴリのアクションの選択
アプリケーションのセキュリティニーズに基づいて、各カテゴリに異なるアクションを選択できます。
- Allow:保護されたリソースへのリクエストの送信を許可します
- Block:リクエストをブロックし、HTTP 403 (Forbidden) 応答を返します
- Count:検出数をカウントしながら、保護されたリソースへのリクエストの送信を許可します。ブロックまたはチャレンジせずに、検出したボットの活動をカウントします。初めてルールをオンにする場合は、他のアクションに変更する前に、この情報によって検出数を確認することができます
- CAPTCHAとChallenge:CAPTCHA パズルとトークンを使ったサイレントチャレンジを使用して、クライアントの成功した応答を追跡します
- この例では、指定された URI パスに対してのみ Bot Control を適用するよう、スコープダウンステートメントを設定しています。
上記のステップの同じページで、保護が必要なリクエストに対してだけ Targeted Bots の使用することを確認するため、スコープダウンステートメントを追加することができます。スコープダウンステートメントの使用方法については、AWS のドキュメントに例が掲載されています。
Enable scope-down statement にチェックを入れて、図3 のように URI のパスを検査するルールを設定します。
図3:Bot Control – スコープダウンステートメントの追加
- 保護するドメイン名を追加するには、Web ACL の一番下までスクロールして Edit を選択します。Token domain list(オプション)セクションで、トークン検証を適用するドメイン名(複数可)を入力します。生成されるトークンは、これらのドメインに対して有効です。
AWS WAF 統合のための SDK リンクを作成する
このセクションでは AWS WAF SDK をアプリケーションページに追加する方法を説明します。
トークン SDK はトークンの認証を管理し、保護されたリソースに送信するリクエストにトークンを組み込みます。アプリケーションページに SDK のリンクを追加することで、クライアントによるリモートプロシージャの呼び出しに有効なトークンが含まれていることを確認することができます。
アプリケーションページに SDK を追加するには
- AWS WAF コンソールの左側のナビゲーションペインで Application integration SDKs を選択します
- JavaScript SDK の下にある、提供されたコードスニペットをコピーします。このコードスニペットを使用すると、アプリケーションの初回ロード時にバックグラウンドで暗号化トークンを作成でき、より優れたカスタマーエクスペリエンスを提供できます
- コードスニペットをページに追加してください。例えば HTML の <head> セクション内に、提供されたスクリプトコードを貼り付けます
この SDK がアプリケーションのページに配置されている場合、ウェブ ACL で WAF ルールを追加して、有効なトークンが含まれていないリクエストをブロックすることができます。<Web ACL integration URL> を AWS WAF コンソールから提供された Integration URL に置き換えるか、コンソールからスクリプトタグをコピーしてください。
<script type="text/javascript" src="<Web ACL integration URL>/challenge.js" defer></script>
図4 はアプリケーションページ用の SDK リンクを示しています。
図4:Bot Control – アプリケーションページへの SDK リンクの追加
メトリクスの確認
ウェブ ACL とアプリケーションのセットアップが完了したら、ボット可視化ダッシュボードを使用して、ボットのトラフィックパターンを確認することができます。ボットルールは、そのラベルに対応するメトリクスを発行し、AWS Managed Rule for Bot Control for Targeted Bots 内で、どのルールがアクションを開始したかを識別するのに役立ちます。また、これらのラベルとルールアクションを使用して AWS WAF ログをフィルタリングし、リクエストをさらに詳しく調べることができます。
ディストリビューションの AWS WAF メトリクスを参照するために
- AWS WAF コンソールの左側のナビゲーションペインで Web ACL を選択します
- Bot Control が有効になっている Web ACL を選択し、Bot Control タブを選択してメトリクスを表示します
図5:Bot Control – Web ACL メトリクスの確認
ベストプラクティス
このセクションでは、Bot Control の設定に関するベストプラクティスを説明します。
AWS WAF ルールの優先順位を設定し、コストを削減する
より効率的にリクエストにマッチするように、ウェブ ACL のルールグループの優先順位を設定することができます。AWS WAF は、最初にマッチしたルールに紐づいたアクションを実行します。着信トラフィックがより広い条件(優先度 1 の IPset ルールなど)に一致する場合、それと紐づいたアクションが実行されます。そのリクエストは Bot Control ルールによって分析されることはないため、Bot Control リクエスト分析料金は発生しません。例えば次のリストでは、優先度の高い(1)から低い(5)までの順にルールがランク付けされています。
- 許可リストと拒否リストの使用 – 許可または拒否する IP アドレスを指定します
- IP レピュテーションのための AWS Managed Rule グループ – ボットやその他の脅威をブロックします
- 全体のレート制限 – 保護されたリソースへの HTTP フラッドの防止に役立ちます
- AWS WAF Bot Control ルールグループ – 画像などの静的コンテンツは除外するためスコープダウンします
- ログインページのレート制限 – 特定の URL と HTTP POST メソッドに対してはスコープダウンします
図6 は AWS WAF の優先順位付けされたルールを示しています。
スコープダウンステートメントの使用
スコープダウンステートメントを使用して、ルールグループで評価するリクエストを制限することができます。例えば、指定された URI と HTTP メソッド(GET)で、画像などの静的なアセットに対するリクエストのチェックを除外するスコープダウンステートメントは、Bot Control のコストを削減するのに役立ちます。
トークンのないリクエストをブロックする
リクエストにトークンがない、または拒否された場合、そのリクエストをブロックすることができます。例えば、ログインページや支払い処理ページでのリクエストをブロックしたい場合があります。トークンがない、または拒否されたリクエストをブロックするには、Bot Control ルールの後に実行するルールを追加し、ラベルで rejected と absent に一致するリクエストをブロックします。
- awswaf:managed:token:rejected – リクエストにトークンは存在するが、破損しているか、チャレンジタイムスタンプが失効している
- awswaf:managed:token:absent – リクエストにトークンが存在しない
SDK 統合を利用する
トークンのドメインと提供されたスクリプトをアプリケーションページに追加した後、トークンを持たないリクエストをブロックするルールを追加することができます。SDK を使用することで、AWS WAF はサイレントチャレンジでクライアントアプリケーションを検証し、トークンの取得と管理を提供することができます。SDK は AWS WAF Bot Control と AWS WAF Fraud Control(ATP) の両方の全機能を提供するため、ウェブ ACL でどちらかまたは両方のルールグループを使用する場合、複数の SDK を必要としません。
CloudWatch アラームの作成
CloudWatch アラームを追加することで、アプリケーションに通常とは異なるアクティビティがあるかどうかを評価することができます。例えば与えられた期間で、トークンが存在しないメトリクスが多いかどうか等を監視できます。
課金アラームを設定する
コストを把握するため予想されるコストの閾値を超えたときに、アラートを送信する課金アラームを構成することができます。
価格と提供リージョン
Bot Control for Targeted Bots は、AWS GovCloud(米国)および中国リージョンを除く、AWS WAF が利用可能な AWS リージョンで利用可能です。価格については AWS WAFの料金ページを参照してください。
まとめ
このブログでは Bot Control for Targeted Bots を使用して、Web サイトやアプリケーションでのボット活動を可視化する方法について説明しました。Bot Control for Common と for Targeted Bots を使用すると、不要なボット活動を検出、チャレンジ、およびブロックできます。Bot Control はカスタマイズ可能なため、高度な技術を使用して積極的に検出を回避するボットから保護しながら、正当なボットへの対処方法を調整することができます。詳細については AWS WAF Bot Control を参照してください。