AWS WAF

# AWS WAF

https://d1.awsstatic.com/webinars/jp/pdf/services/20200324_AWS_BlackBelt_AWS_WAF_Update.pdf

## WAFとは

Web Application Firewall

ウェブアプリケーションの通信内容を検査し、不正なアクセスを遮断するルールセットを持つセキュリティ対策

 

## WAF の対応する範囲

  • 攻撃手法
    • DDos
      • CloudFront
      • ELB
      • AWS Shield
    • Application Attacks
      • <- WAFはここ
    • Targeted attackes
  • WAFがしていること
    • WAFは悪用する能力を制限するもの
    • 様々なHTTPのリクエストパターンを検証
    • 攻撃の変化に対応するためにルール構成を迅速に変更する機能

 

## WAF の機能

  • 機能
    • 悪意のあるリクエストのブロック
      • SQLインジェクション
      • XSS
      • AWSまたはパートナーのマネージドルール
    • カスタムルールに基づいたWebトラフィックのフィルタ
      • Rate-based rules
      • IP&Geo IP filter
      • 正規表現
      • サイズ制限
      • アクションの許可・拒否
    • モニタリングとチューニング
      • Amazon CloudWatch
      • メトリクス・アラーム
      • Log
      • 検知

 

## WAFの変更点

  • 2019.11 WAFv2になり、v1 WAF classic となった
  • ルールの記述タイプが統一
    • より柔軟に表現も可能に
  • WAF Capacity Unit が上限
    • それぞれのルールの中身に応じて処理コストを計上、その合計がWeb ACL Capacity を超えない範囲でルールを登録可能
    • 上限は1500
  • ビルトインのマネージドルール
  • AWS WAF Full logs の拡張

 

## WAF の詳細

  • WAF コンポーネント
    • Web ACL
      • ルールベースでリクエストの処理方法を指定
      • Web Capacity Unit(WCU)が上限
    • Rules
      • リクエストに対する検査方法(Statement)と、リクエストが検査条件に一致した場合の処理(Action)を定義
    • Statement
      • ステートメントで定義可能な条件
        • リクエスト元の国
        • 送信元IP
        • サイズ
        • SQSインジェクション攻撃か
        • XSS
        • 文字列が一致しているかどうか
        • 正規表現に一致しているかどうか
    • Rate-based rule
      • 5分間あたりの同一IPからのリクエスト数で閾値を超えたらBlock する
      • 対象とするリクエストも指定可能
    • Actions
    • Managed Rule
      • AWS Managed Rules for AWS WAF(AMR)
      • AWS WAF に組み込み可能なビルトインルールセット
      • 追加費用は不要(WCUは消費する)
    • Rule Group
      • 複数ルールを組み合わせたものを自分で作成可能
      • 優先度を設定でき、グループないの個別ルールアクションをオーバーライドすることが可能
      • ルールグループを作成する際には予約するWCUの値を決めておかなければならない
    • AWS リソース
    • レポート
    • AWS WAF Full logs

 

## WAF を利用した多段防御

User - AWS Shield - Route53 - (WAF - CloudFront) - WAF - ELB - EC2

というように複数箇所の前段にWAFを置くアーキテクチャ

 

## ログとモニタリング

  • モニタリング
    • CloudWatch との連携
    • サンプルリクエストからリクエスト内容の詳細(ソースIPURI、リクエスBodyなど)を確認可能
  • AWS WAF Full logs
    • Kinesis Data Firehose を介して、指定した宛先にJSON形式でログを送出
    • ブロックされた理由を確認可能
    • センシティブな情報は除外することも可能
  • Elasticsearch Kibana によるログ分析
  • カスタムエラーページ
    • CloudFront と連携させて設定可能
  • パートナーマネージドルール

 

## WAF 利用のための考慮事項

  • ルールポリシー
    • ブラックリスト
      • デフォルトのアクションは許可
      • ルールに合致した不正なリクエストをブロック
    • ホワイトリスト
      • デフォルトのアクションはブロック
      • ルールに合致したリクエストを許可
      • 限られた利用者がアクセスするケース
  • ルールの運用
    • セルフサービス
      • テンプレートなどを利用してルールを構築
      • ログの分析やルールのアップデートを継続実施
      • 誤検知が発生した場合はルールの見直しを自身で実施
    • マネージド
      • AWSまたはパートナーのAWS Managed rules for AWS WAF を利用
      • アップデートは提供元に任せる
      • 誤検知した場合は、自分で部分的にトラフィックを流す設定を追加して通すようにする
  • 導入ステップ
    • Count モード
      • 開発環境等でテスト
      • 誤検知が発生していないかサンプルリクエストレポートで確認
      • CloudWatch メトリクスでルールを評価
      • Full Logを確認
    • Block モード
      • 誤検知がないことを確認後、Blockモードへ変更
      • ルールごとにd三回的にBlockモードへ変更することも可能
      • サンプルリクエストレポートで確認
      • Block されたリクエストはFull log WebACLsルールにマッチした内容を確認できる
  • 連携

 

## 雑感

AWS のマネージドWeb Application Firewall。構成のところで確認したが、アーキテクチャの一番前段にはAWS Shield が入り、その後ろで多段で利用されるイメージ。

どのトラフィックを通すのか、どのくらいの連続したトラフィックを悪意のあるトラフィックとして遮断するかを柔軟にWCUの範囲内で設定することができる。

JSONで設定を管理することができるのでVCSで管理を用意にしやすいし、APIで管理できるので運用にも乗せやすそう。1ルールあたり1$かかるので、効率的にルールを決めて悪意のある攻撃を遮断できるように設計する必要がある。