AWS WAFまとめ(マネージド for WAF)
そもそもWAFとは
WAF(Web アプリケーションファイアウォール)とは、Web アプリケーションの通信をフィルター、監視、ブロックするためのソフトウェアまたは、ハードウェアのセキュリティ対策です。
WAF の代表的な用途には、SQL インジェクション、クロスサイトスクリプティングなど、アプリケーションの脆弱性を悪用した攻撃の遮断やアプリケーション層の DDoS 対策、不正なボットによるアクセスの遮断などがあります。
参考:https://aws.amazon.com/jp/waf/what-is-waf/
2025年情報
推奨ルールの即時適用(マネージドルールなど)、コンソールの可視性が向上
詳細:https://aws.amazon.com/jp/blogs/security/introducing-the-new-console-experience-for-aws-waf/
導入可能なルール
- マネージドルール
AWSまたはパートナーが提供するマネージドルール - 独自のカスタムルール
お客様が独自に作成可能なルール
マネージドルールと組み合わせて作成可能
マネージドルールとは?
- 事前に構成されたルールセット
- 脅威や脆弱性に対する攻撃方法に幅広く対応
- AWSの脅威リサーチチームによる作成、メンテナンスを実施
- ボット対策や不正なログイン試行対策ルールも提供(有償)
- 一部ルールを除き追加料金なしで利用可能
WAFと連携するサービス
API Gateway / CloudFront / ALB / AppSync / Cognito User pool / App Runner
メトリクス → CloudWatch
ログ → S3 / CloudWatch logs / Kinese Firehose
ルールの決め方
- ブラックリスト型(デフォルトアクションは許可)
ルールに合致した場合はブロック
一般向けのwebサイト等で利用
- ブラックリスト型(デフォルトアクションは許可)
ルールに合致した場合はブロック
限られたユーザのみアクセスするケース
マネージドルール for WAF種類
ベースラインルール
- 一般的な対策ルール
Core ルールセット(CRS) OWASP10の脅威に基づく、一般的なWeb アプリケーションに適用可能な防御ルール (ルール数は定期的に更新される) - Admin protection
管理ページへの外部アクセスをブロックするルール - Known bad inputs
無効であることがわかっており、脆弱性の悪用または探索に関するリクエストパターン
※上記のルールグループのうち、1つ以上を選択して、ベースラインを設定する。
ユースケース別のルール (一例)
OSやミドルウェア、アプリケーションによって適切なルールを選択
- SQL database
SQLインジェクション攻撃、SQLデータベースの悪用に関するリクエストパターンのブロック - PHP application
安全でないPHP関数のインジェクションなど、PHP固有の脆弱性の悪用に関するリクエストパターンのブロック - IPレピュテーションルールグループ
アプリケーションのアクセス元のソースIPアドレスに基づいてリクエスをブロック
攻撃の踏み台として使用されているIPリストの提供 - Bot Controlルールグループ(有償)
ボットと判断させるトラフィックを検知し、それに基づいたアクションを行う- botに特化したマネージドルールを提供
リクエストによってボットの種別を表すラベルを追加 - 導入ステップとして
まずは無償で。Bot ControlルールをWebACLに追加しなくてもメトリクス占めるBotの割合をレポートから確認可能。
上記をもとに、導入の判断をし、Botルールを有効にしてさらに詳細をモニタリングできる
- botに特化したマネージドルールを提供
- Account Takeover Preventionルールグループ(有償)
ログインページの不正アクセスの保護- クレデンシャルスタッフィング攻撃
流出した認証情報を利用したログイン試行の可視化と制御(固定のユーザー名でPWを変えてアクセスするなど) - ブルートフォース攻撃
パウワードのパターン総当たり入力で認証の突破を試みる
- クレデンシャルスタッフィング攻撃
レートベースルール
特定の評価基準に合致したリクエストごとに、レート(時間単位のリクエスト数)の上限値を設ける
IPやヘッダー値、国コードなどを集計キーでグループ化し、リクエスト数に基づいて受信リクエストを制限
マネージドルールに役立つ機能
-
スコープダウンステートメント
マネージドルールへの例外条件(/api で始まる場合は除外するなど)
特定のリクエストパターンのみ、ルールグループに適用または除外する場合などに活用 -
ラベル機能
ルールにマッチした場合などにラベルを付与する機能
ラベル値によってルールを実行できる
CloudWatch メトリクスやログに追加させるのでモニタリングポイントの一つとして活用できる -
カスタムレスポンス
WAFでブロックされた際にカスタムレスポンスを返却。
レスポンスコード403(200~500番台)、レスポンスボディ(html,Textなど)
ラベル機能を使ってマネージドルールのアクションをカスタマイズ可能 -
カスタムリクエストヘッダー
ラベル機能を利用可能
カスタムヘッダをリクエストに挿入し、分析のためのフラグを設定する場合など -
マネージドルールの自動更新の制御
ルールグループのバージョンを指定可能(デフォルトに設定すると最新に反映)
本番環境は更新しない、任意のタイミングで更新したい場合などにバージョンを指定する対応が可能
バージョンには有効期限がある。30日前からアラートを設定できる。バージョン期限切れはデフォルトになる。
緊急セキュリティは自動適用される場合がある
料金
Web ACL $1/月
ルール $1/月(最初の10ルールまで)
リクエスト $0.60/100万リクエスト
- 有償マネージド
Bot Control 1ドル/月 + 0.8ドル/100万リクエスト
Account Takeover Prevention 1ドル/月 , 1ドル/100万リクエスト
実装時の注意点
マネージドルールは「Count」モードでテスト推奨
本番適用前に偽陽性の確認が重要
CloudWatch Insightsでログ分析を活用
最後に
参考1:https://www.youtube.com/watch?v=ceQ7eU_jkD4
参考2:https://www.youtube.com/watch?v=OPM5gBvfsl8
参考3:AmazonQ等を使った質問