一般的な攻撃からリソースを保護するように AWS WAF を設定する方法を教えてください。

所要時間2分
0

一般的な攻撃からリソースを保護するように AWS WAF を設定する方法を教えてください。

解決策

AWS WAF クラシックから AWS WAF に移行する (該当する場合)

AWS WAF クラシックを使用している場合は、AWS WAF に移行することをお勧めします。この移行を行うには、自動移行ツールを活用できます。詳細については、「AWS WAF に移行する理由」を参照してください。

アプリケーションに対してペネトレーションテストを実行して脆弱性を特定する

各アプリケーションは独自のタイプのリクエストを受け取ります。そのため、アプリケーションを保護するファイアウォールルールをカスタマイズする必要があります。

アプリケーションに対してペネトレーションテストを実行して、その特定の脆弱性を把握します。詳細については、以下を参照してください。

受信したリクエストを確認してカスタムルールを最適化する

アプリケーションを保護するためのカスタムルールを作成する前に、環境内の受信リクエストを確認してください。

まず、以下を使用してログを生成します。

  • AWS WAF
  • Amazon CloudFront
  • Application Load Balancer
  • Amazon API Gateway

次に、これらのログを Amazon Simple Storage Service (Amazon S3) に保存します。最後に、Amazon Athena を使用してログをクエリし、パターンを特定します。例えば、次のようなパターンが見られる場合があります。

  • 存在しない URI に対する環境へのリクエスト

  • このパターンを認識するには、サポートされているすべての URI がわかっている必要があります

  • 各 URI のリクエストをカウントするために AWS WAF ログに対して実行された Athena クエリの例:

SELECT count("httprequest"."uri") as URIcount, "httprequest"."uri"
FROM waf_logs
GROUP BY "httprequest"."uri"
ORDER BY URIcount DESC
  • ウェブサーバーでサポートされていない HTTP ホストヘッダーを含むリクエスト - または - ウェブサイトのドメイン名ではなく IP アドレスを含むリクエスト

  • AWS WAF ログでホストヘッダー値が異なるリクエストをカウントする Athena クエリの例:

SELECT header.value as HostHeader, count(header) as count
FROM waf_logs, UNNEST(httprequest.headers) AS x(header)
WHERE "header"."name" = 'Host'
GROUP BY  header
ORDER BY count DESC

パターンを特定したら、カウントモードで AWS WAF ルールを作成して、ルールがそれらのリクエストと一致するように設定されていることを確認できます。次に、ルールをブロックモードに移動します。

例えば、アプリケーションがホストヘッダー「www.example.com」のみをサポートしている場合:

  • ホストヘッダーに「www.example.com」という値を持つ NOT マッチを作成する
  • [アクション] を [ブロック] に設定する

これでホストヘッダーが「www.example.com」でない環境へのリクエストはすべてブロックされるようになります。
**注:**このルールは、AWS が提供する完全修飾ドメイン名 (FQDN) へのリクエストもブロックします。

AWS マネージドルールを使用して一般的な攻撃から保護する

AWS マネージドルールを使用すると、次のようなリクエストを含め、ほとんどのアプリケーションに適用される一般的な攻撃を防ぐことができます。

  • ユーザーエージェントを含めない
  • ボットリクエストを表す
  • HTTP ホストヘッダーとして「localhost」を使用する
  • PROPFIND HTTP メソッドを使用する

これらのベースラインルールグループを カウントモードでウェブアクセスコントロールリスト (ウェブ ACL) に含めます。必ずルールグループで [カウントモードを有効にする] を選択してください。次に、AWS WAF ログと CloudWatch メトリクスを確認して、マネージドルールが正当なトラフィックと一致しているかどうかを判断します。一致していない場合は、「カウントモードを有効にする」を無効にして、ルールグループを「ブロック」に移動します。AWS マネージドルールグループの特定のルールを無効にするには、そのルールの [ルールアクションのオーバーライド] を選択します。

**注:**AWS マネージドルールは、お使いの環境への正当なリクエストによってトリガーされる場合があります。詳細については、「AWS マネージドルールが原因で発生する誤検知を検出してセーフリストに追加する方法を教えてください」を参照してください。

**重要:**AWS マネージドルールは、一般的なウェブの脅威からお客様を保護するように設計されています。ドキュメントに従って使用すると、AWS マネージドルールのルールグループは、アプリケーションに別のセキュリティレイヤーを追加します。ただし、AWS マネージドルールのルールグループは、選択した AWS リソースによって決定されるセキュリティ上の責任を肩代わりするものではありません。責任共有モデルを参照して、AWS にあるお客様のリソースが適切に保護されていることを確認してください。

正当なリクエストのレートを使用して AWS WAF のベースラインを作成する

トラフィックを分析して、AWS WAF ログで Amazon Athena または Amazon Quicksight を使用して正当なクライアント IP アドレスから行われたリクエストの数を特定します。この分析から得られた情報を使用して、正規のクライアントによって行われたリクエストのレートに合わせて AWS WAF のベースラインを作成します。次に、AWS WAF のレートベースのルールを設定する際のしきい値を設定します。

特定の期間 (2020 年 11 月 16 日午前 9 時~10 時) の 1 つの IP アドレス (x.x.x.x) からのリクエスト数をカウントするために、AWS WAF ログに対して実行された Athena クエリの例:

SELECT  "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE httprequest.clientip LIKE 'x.x.x.x' and date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"

同じ時間枠内のすべての IP アドレスからのリクエスト数をカウントするために、AWS WAF ログに対して実行された Athena クエリの例:

SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "count" DESC

AWS WAF セキュリティオートメーションテンプレートを使用して一般的な攻撃を防ぐ

AWS WAF セキュリティオートメーションテンプレートを使用して、一般的な攻撃からの保護を強化します。例えば、以下に対する保護を有効にできます。

  • スキャナーとプローブ
  • 悪質なボット
  • 不正な IP アドレス

**注:**このソリューションでは、コストが発生する他の AWS サービスを使用します。

SQL インジェクションとクロスサイトスクリプティングから保護する

SQL インジェクションやクロスサイトスクリプティング (XSS) 攻撃からアプリケーションを保護するには、組み込みの SQL インジェクションエンジンとクロスサイトスクリプティングエンジンを使用します。攻撃は、HTTP ヘッダー、クエリ文字列、URI など、HTTP リクエストのさまざまな部分に対して行われる可能性があることに注意してください。HTTP リクエストのさまざまな部分を組み込みの緩和エンジンと照合するように AWS WAF ルールを設定します。

**注:**緩和エンジンのルールは、お使いの環境への正当なリクエストによってトリガーされる場合があります。詳細については、「AWS マネージドルールが原因で発生する誤検知を検出してセーフリストに追加する方法を教えてください」を参照してください。

CloudFront からのアクセスを制限する (CloudFront で AWS WAF を使用している場合)

DDoS 攻撃から保護する

分散型サービス拒否 (DDoS) 攻撃からの保護の詳細については、「DDoS の回復力に関する AWS ベストプラクティス」と「AWS Shield 機能」を参照してください。


コメントはありません