セキュリティを高める!AWS WAFのカスタム設定活用法
目次[非表示]
- 1.はじめに
- 2.カスタム設定の基本
- 2.1.リクエストコンポーネント
- 2.2.一致ルール(抜粋)
- 3.正規表現で特定のエンドポイントを守る
- 3.1.ユースケース:人事専用ページのみIP制限をかける
- 3.1.1.実装例
- 4.カスタムヘッダーを使ってネットワーク別にアクセスをコントロール
- 4.1.ユースケース:内部システムと外部パートナーのアクセス管理
- 4.1.1.実装例
- 5.リファラー(Referer)チェックで限定コンテンツを保護
- 5.1.ユースケース:限定キャンペーンの不正利用防止
- 5.1.1.実装例
- 6.ファイルアップロードの制御
- 6.1.ユースケース:サイズ制限によるDDoS攻撃対策
- 6.1.1.実装例
- 7.おわりに
- 8.お悩みご相談ください
- 9.参考記事
はじめに
こんにちは。株式会社divxのエンジニア、龍満です。
今回のテーマはAWS WAFです。
みなさんはAWS上にアプリケーションを構築する際、AWS WAFにはどのような設定をしていますか?AWSがあらかじめ用意しているマネージドルールは非常に強力ですが、今回は細かくカスタマイズできる「カスタム設定」について共有していきます。
今までアプリケーション側だけで実装していたものも、WAFの機能と組み合わせることで更なるセキュリティ強化が期待できます。具体的なユースケースを挙げながら説明していきますので、こんな使い方もあるんだと、1つでも参考になる内容があれば幸いです。
※ AWS WAFがどういうサービスか、何ができるかについての記事はたくさんあるので、ここでは説明を割愛させていただきます。
※ 本記事では、AWS WAF v2を使用します。
カスタム設定の基本
リクエスト内のどの情報(リクエストコンポーネント)について、どのルール(一致ルール)を適用するか、を設定することができます。下記が一例です。AND条件やOR条件で複雑な設定も可能です。
リクエストコンポーネント
- ヘッダー
- cookie
- URIパス
- クエリ文字列
- クエリパラメータ
- Body(本文)
一致ルール(抜粋)
- 地理的一致:指定した国(地域)と合致するか。
- IPセット一致:指定したIP アドレス(アドレス範囲)に合致するか。
- 正規表現一致:指定した特定の正規表現パターンに合致するか。
- サイズ制約:指定したサイズ制約に合致するか。
- 文字列一致:指定した文字列があるか。
正規表現で特定のエンドポイントを守る
管理画面や人事専用ページなどのセキュリティ上重要な画面に対して、正規表現を使用してリクエストのパターンを検出し、その結果に基づいてIP制限を適用することが可能です。
ユースケース:人事専用ページのみIP制限をかける
同一ドメイン内の人事専用ページに対して、特定のIPアドレス範囲のリクエストのみを許可します。これにより、一般ユーザーや攻撃者による人事専用ページへの不正アクセスを防ぎます。
実装例
- アプリケーション側の実装
- 人事専用ページに関するAPIのエンドポイントを /hr/ を含む形式に統一する。
- 正規表現の登録
AWS WAF→Regex pattern setsにて、検出したい正規表現パターン(^/hr/.*)を登録する。
- 正規表現パターンは複数登録可能。登録するパターンが1つのみの場合は、パターンセットとして登録しなくてもOK。
-
IPアドレスセットの作成
WAF → IP sets → Create IP set にて、許可したいIPアドレスのセットを登録
- web ACLを作成
- web ACLにルールの作成
- 正規表現に合致するパスへのリクエストに対して、指定のIPアドレス範囲以外からのリクエストはブロックするというルールを設定
正規表現を活用することで、特定のパスパターンに基づく細かいセキュリティルールを設定することが可能になり、より精密な攻撃防御が実現できます。
カスタムヘッダーを使ってネットワーク別にアクセスをコントロール
内部ネットワークからのアクセスと外部ネットワークからのアクセスに、異なるセキュリティ対策を適用したいケースがあるかと思います。外部ネットワークからのリクエストにWAFでヘッダーを付与し、アプリケーション側での判定に使用することができます。
ユースケース:内部システムと外部パートナーのアクセス管理
内部の社員と外部のパートナー企業が同じシステムにアクセスする場合、内部の社員にはフルアクセスを許可したいが、外部のパートナー企業には特定の制限を設けたいケースを想定します。
許可された内部ネットワークからのアクセスに対してカスタムヘッダーを付与し、アプリケーションでは、このヘッダーの有無をもとに多要素認証など追加の認証ステップを設定します。
実装例
- IPアドレスセットの作成
WAF → IP sets → Create IP set にて、許可したい内部ネットワークのIPアドレスセットを作成
-
ルールの設定
web ACLを作成し、ルールを作成
内部ネットワークからのアクセス時にはカスタムヘッダーを付与する設定を作成
-
アプリケーション側の追加処理
カスタムヘッダーの有無を確認、カスタムヘッダーがない場合は多要素認証させる処理を追加
リファラー(Referer)チェックで限定コンテンツを保護
リファラー(Referer)ヘッダーは、リクエストがどのページから送信されたかを示す情報です。リファラーを見るルールを使用することで、特定のサイトからのアクセスのみを許可したり、悪意のあるサイトからのアクセスを軽減することができます。
ユースケース:限定キャンペーンの不正利用防止
特定のキャンペーンページに対し、キャンペーン専用のランディングページからのリクエストのみを許可し、その他のページや外部サイトからのアクセスをブロックします。これにより、限定クーポンの不正利用などを一定抑制できます。
※ リファラーは偽造可能であるため、他のセキュリティ対策と併用して、より堅牢な防御を実現することが重要です。
実装例
- web ACLを作成し、ルールを作成
-
リファラー条件の設定
Referer ヘッダーの値が特定のドメイン(例: https://example.com)と一致するかどうかを確認する条件を設定
デフォルトのルールとして「Block」アクションを設定し、その他のすべてのリクエストをブロック
ファイルアップロードの制御
ファイルのアップロード機能はアプリケーション側で制御されるケースが多いかと思いますが、WAFでも一定弾くことができます。これにより、無効なファイル形式や過度に大きなファイルによるアプリケーションのパフォーマンス低下を軽減することができます。
※ 全ての無効なファイル形式を検出できるわけではないため、アプリケーション側でも適切なバリデーションを行うことは重要です
ユースケース:サイズ制限によるDDoS攻撃対策
ファイルアップロードに関して、ファイルサイズの超過を検出してブロックすることが可能です。
実装例
- web ACLを作成し、ルールを作成
- Bodyのサイズが5MB以上の場合はBlockするルールを設定
おわりに
本記事で紹介したのは一例ですが、WAFには他にも様々なカスタム設定がありますので、興味のある方はぜひ調査してみてください。 WAFを効果的に設定することで、よりセキュアなアプリケーション開発を目指していければと思います。最後までご覧いただき、ありがとうございました。
お悩みご相談ください
参考記事
https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html
https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html