目次

  1. 1.はじめに
  2. 2.全てのヘッダーを検査できるオプションとは
  3. 3.検査制限を超えたリクエストへのオプションとは
  4. 4.設定方法
  5. 5.WafCharm での対応
  6. 6.おわりに

1. はじめに

2022年4月30日 PTD に AWS WAF のアップデートにより、全てのヘッダーを検査できるオプション及び検査制限を超えたリクエストへのオプション機能がリリースされました。機能と設定方法について解説します。

2. 全てのヘッダーを検査できるオプションとは

これまでは AWS WAF でヘッダーを対象としたルールを作成する場合、ヘッダーを指定してルールを作成する必要がありました。想定される全てのヘッダーを一つ一つルールとして作成する必要があり、WCUの消費も大きくヘッダーを絞り込んで作成するケースが多かったかと思います。

今回のオプションを利用することで一つのルール内でヘッダーを複数指定することができるようになりました。指定できる方法は以下となります。

・全てのヘッダー
・除外ヘッダー(特定のヘッダー以外を検査)
・特定の文字列を含むヘッダー

一致する範囲はキー、 値、または両方を指定できます。

3. 検査制限を超えたリクエストへのオプションとは

制限の例として、 AWS WAF では検査できるリクエストのサイズが 8 KB といった制限があります。これまでは 8 KB までは検査するという設定のみに対応していました。

以下は具体的な AWS WAF の仕様に準ずる制限事項となります。

Body および JSON Body リクエストの本文の最初の 8 KB(8,192バイト)を検査できます。
Headers 要求ヘッダーの最初の8 KB(8,192バイト)まで、および最初の200ヘッダーまでを検査できます。コンテンツは、最初の制限に達するまで利用できます。
Cookies リクエスト Cookie の最初の 8 KB(8,192バイト)まで、および最初の 200 Cookie までを検査できます。コンテンツは最初の制限に達するまで利用できます。

今回のオプションを利用することでルールが検査するリクエストが制限値を超えていた場合の挙動を以下から選択できるようになります。

Continue ルール検査基準に従って、AWS WAFの仕様に従った状態で検査します。(従来通り)
Match リクエストをルールステートメントに一致するものとして扱います。設定されたルールが BLOCK するものであれば、BLOCK として扱われます。
No match リクエストをルールステートメントに一致しないものとして扱います。

4. 設定方法

通常通りルールの作成を行っていきます。
Request components に All headers が加わっているので選択します。

選択するとヘッダーのスコープを選択する項目と対象のヘッダーを指定する項目が出てきます。

除外を選択すると除外するキーを入力する項目が出てきました。

検査制限を超えたリクエストへの処理は Oversize handling という項目で指定が可能です。
※ Oversize handling が指定できるのはボディ、Cookies、及び All headers を選択した場合に設定が可能でした。

作成されたルールを JSON で確認すると Headers にて指定された条件が記載されていることと OversizeHandling の項目が新たに加わっていることが確認できます。

{
  "Name": "test",
  "Priority": 6,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test"
  },
  "Statement": {
    "ByteMatchStatement": {
      "FieldToMatch": {
        "Headers": {
          "MatchScope": "ALL",
          "MatchPattern": {
            "ExcludedHeaders": [
              "User-agent"
            ]
          },
          "OversizeHandling": "CONTINUE"
        }
      },
      "PositionalConstraint": "EXACTLY",
      "SearchString": "test",
      "TextTransformations": [
        {
          "Type": "URL_DECODE",
          "Priority": 0
        }
      ]
    }
  }
}

2022/05/06 regex のルール( regular expression ,regex pattern set )を AWS マネージメントコンソールで利用した場合、OversizeHandling の項目が正しく設定されないことを確認しています。JSON editor にて OversizeHandling を手動で追加することで更新可能なことは確認しました。

5. WafCharm での対応

All headers に関わる更新は現在のところございません。

OversizeHandling を設定した場合に設定内容が反映されない可能性がございますので利用しないでください。後日システムの改修を行い上記の問題を解消いたします。

6. おわりに

全てのヘッダーを検査対象にすることは検知する確率は上がるものの、誤検知する確率も高いかと思います。システム上で処理することがない値に攻撃と思われる内容があったとしてもシステム上の影響はない可能性が高いです。ただ、不審なアクセスであることは間違いないため誤検知との兼ね合いを考えた上で導入することは問題ないかと思います。
検査制限を超えたリクエストへのオプションについてはシステムで想定する値が制限値を超えないのであれば、超えた時点で BLOCK する状態での運用で問題ないと思います。特に制限がないような環境であれば、引き続き CONTINUE という形で問題ないかと思います。