目次

  1. 1.はじめに
  2. 2.CAPTCHA とは
  3. 3.設定方法
  4. 4.利用方法
  5. 5.WafCharm での対応
  6. 6.おわりに
  7. 1. はじめに

    2021年11月08日 PTD に AWS WAF のドキュメントにアップデートがあり、 CAPTCHA 設定が可能になったという更新がありました。一部のリージョンではすでに使える状態を確認しましたので、設定方法と利用方法について説明します。

    2.CAPTCHA とは

    コンピュータと人間を判別するためのテストとなります。この記事をお読みの方も、ログインページなどで写真を選んだり、表示されている文字を打ち込んだりしたご経験があるかと思います。こうした仕組みを AWS WAF 上だけで設定できるようになったため、アプリケーションの改修をすることなく bot 対策が行えそうです。
    AWS WAF で CAPCHA を設定できるリージョンは制限されており、us-east-1,us-west-2,ap-southeast-1,eu-central-1,sa-east-1で利用可能なことを確認しております。(あくまで2021年11月12日時点での我々の調査結果であり、公式の情報ではないのでご注意ください。)

    3. 設定方法

    対象リージョンの us-east1 でWeb ACLを作成して試します。
    対象の ACL の Rules から 「Add rules」を押して「Add my own rules ~」を選択します。

    auto

    今回は「/login」という URI に対して CAPTCHA を要求するルールを作成します。
    ルール名を入力して、URI を対象とした文字列一致条件を完全一致で登録しました。

    auto

    Action の項目に「CAPTCHA」が増えているので選択すると時間を設定することができます。
    認証を保持する時間でデフォルトでは 300 秒が設定されています。
    「Set a Custom ~」の項目を選択することで時間の変更も可能です。
    ※ 60 秒から 259,200 秒( 3 日)の選択が可能でした。

    auto

    JSON の表記だと以下のような形です。
    ※時間がデフォルトの場合は CaptchaConfig の項目はありませんでした。

    ````
    {
      "Name": "test_CAPTCHA",
      "Priority": 0,
      "Action": {
        "Captcha": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "test_CAPTCHA"
      },
      "Statement": {
        "ByteMatchStatement": {
          "FieldToMatch": {
            "UriPath": {}
          },
          "PositionalConstraint": "EXACTLY",
          "SearchString": "/login",
          "TextTransformations": [
            {
              "Type": "NONE",
              "Priority": 0
            }
          ]
        }
      },
      "CaptchaConfig": {
        "ImmunityTimeProperty": {
          "ImmunityTime": "60"
        }
      }
    }
    
    ````
    

    ルールの作成は以上で完了です。

    実際にアクセスすると開始画面が表示され、以下の3パターンのテストが可能でした。

    auto

    ・矢印を動かして指定された図形を完成させるテスト

    auto

    ・色がついた車が通る道順を選択するテスト

    auto

    ・イヤホンのボタンを選択すると読み上げられた英語を入力するテストもありました

    auto

    テストに成功すると以下の画面が出力されてアクセスした画面に遷移します。

    auto

    注意点としてはあくまでもルールの一部なので、CAPTCHA に成功した後も CAPTCHA に設定したルールの後続にルールがある場合はチェックが行われます。

    ・ルール1(アクション:CAPTCHA)
    ・ルール2(アクション:BLOCK)

    上記のような構成の場合、ルール1でCAPTCHAをクリアしてもルール2に該当するアクセスの場合は BLOCK されます。

    4.利用方法

    ログイン画面や何らかの入力フォームなどですでに CAPTHCA を設定している箇所は代替が可能かと思います。
    代替するメリットは WAF の時点でリクエストを通さないことが可能なのでアプリケーションレイヤやネットワークの負荷を減らすことが期待できます。また、アプリケーション側の改修が不要な点もメリットになるかと思います。

    問い合わせフォームなどでユーザーが入力するものは CAPTHCA を通れば何でも受け入れるといった方針であれば、CAPTHCA のルールにラベルを付与し、後続のルールでラベルの有無でALLOWするルールを作成することで CAPTHCA を通ったリクエストは後続ルールのチェックを受けない構成も可能です。
    ※ラベル機能はルールにマッチしたことを示す設定です。後続のルールでラベルの有無を判定できます。CPTCHAに成功しないアクセスはCAPTCHAルールにてリクエストが通らないことになります。

    ・ルール1(アクション:CAPTCHA)※ラベルも付与
    ・ルール3(アクション:ALLOW)※ラベルにマッチしたら許可するルール
    ・ルール2(アクション:BLOCK)

    CAPTCHA ルールにラベルを付与する例

    auto

    ラベルで ALLOW するルールの例

    auto

    5.WafCharm での対応

    WafCharm の動作に影響が出てしまうため、Web ACL Confifg に紐づけた Web ACL に対して

    – WafCharm が作成したルールを CAPTCHA アクションに変更すること
    – ルールグループを使用せずに CAPCHA アクションのルールを直接追加すること

    を行わないようにお願いします。後日システムの改修を行い上記の問題を解消いたします。
    現在のところ CAPTCHA アクションを WafCharm のダッシュボードから設定できる機能の追加といった予定はございません。また、WafCharm が投入するルールは攻撃を検知することを目的としており、 CAPCHA アクションを使ったルールの導入予定もございません。

    6.おわりに

    bot 対策に活用できる新しいアクションが登場しました。すでにアプリケーション側で CAPTCHA 導入済みの場合は移行するほどではないかもしれませんが、設定が容易な点を考えると新しく設定する場合は AWS WAF の設定に統一しても良いかもしれません。
    ただし現状全てのリージョンで利用できるわけではないので注意してください。※ 2021/11/12 現在