Let's Introduce

AWS WAF Bot Control

JAWS-UG 朝会 #21 05.27.2021

#jawsug_asa
Stand IO

 

Target

  • AWS WAFに興味がある方
  • AWS WAFのBot Controlについてシュッと知りたい方
  • AWS WAFなにそれ?という方

AWS WAFとBot Controlについての基本的な部分を

取り扱うので初心者の方向けの内容です💡

※このセッションではAWS WAF V2をメインで話します

Who am I ?

  • Masayuki Nakano
  • SRE
  • 筋トレ💪
  • 👩🏼と🐈と暮らしてます

What's AWS WAF?

AWS WAF は、可用性、セキュリティ侵害、リソースの過剰消費に影響を与えるような、ウェブの脆弱性を利用した一般的な攻撃やボットから、ウェブアプリケーションまたは API を保護するウェブアプリケーションファイアウォールです

AWS WAFで保護できること

  • SQL Injection
  • XSS
  • レートベース
  • IP Block
  • Bot Control ← New
  • etc...

※Web Application Firewall

AWS WAFは以下のリソースにアタッチし利用することが可能

  • ALB, CloudFront, API Gateway, AppSync

※ClassicLoadBalancer, NetworkLoadBalancerなどには利用不可

How to use?

AWS WAFにはルールという概念がある

例えば、User-Agentにchromeが含まれている場合はNGにするなど

  1. ユーザー定義ルール
    1. 「自分で」ルールを定義
  2. マネージドルール
    1. セキュリティベンダーが提供しているルール
    2. AWSからもルールが提供されるようになった
    3. ルールの詳しい内容についてはブラックボックス

これらルールをWAFにアタッチする

Action

ルールにマッチしたリクエストに対するアクション

  • Block
    • ステータスコード403でレスポンス
  • Allow
    • リクエストを許可
  • Count
    • Blockせずメトリクスに反映する
    • まずはCountで設定して様子をみるのが良い😀

WAF ACLs

Own Rule

{
  "Name": "exclude-curl",
  "Priority": 0,
  "Action": {
    "Block": {
      "CustomResponse": {
        "ResponseCode": "400"
      }
    }
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "exclude-curl"
  },
  "Statement": {
    "ByteMatchStatement": {
      "FieldToMatch": {
        "SingleHeader": {
          "Name": "User-Agent"
        }
      },
      "PositionalConstraint": "CONTAINS",
      "SearchString": "curl",
      "TextTransformations": [
        {
          "Type": "NONE",
          "Priority": 0
        }
      ]
    }
  }
}

カスタムレスポンスとして400を返す

User-Agentにcurlが含まれているか

Managed Rule

  • Bullet One
  • Bullet Two
  • Bullet Three

Title Text

What's Bot Control?

AWSのマネージドルールの1つ

ウェブリクエストからBotか判定し、設定したAction(Allow or Block or Count)を行うことが可能

Bot Controlのルールの一部

具体的な内容はブラックボックスになっている

Rules

Rule単位でActionをCountに変更することが可能

Metrics

Categories

Lighthouseはcontent_fetcherのカテゴリに分類

curl,wgetはhttp_libraryのカテゴリに分類

But it's expensive, right?💸

Bot Controlで発生する費用

  • Bot Controlのプロビジョニング費用 10$/month
  • Bot Control によって処理されるリクエスト 1$/100万req

 

AWS WAFで発生する費用

  • Web ACL 5$/month
  • ルール 1$/month
  • リクエスト 0.6$/100万req

 

費用 = Bot Controlで発生する費用 + AWS WAFで発生する費用

※WAFのログを取得するのにKinesis Firehoseが必要になる

Conclusion

  • AWS WAFを利用することでアプリケーションレイヤーを守ることができる
  • ルールを自作することが可能(メンテナンスコストはかかる)
  • マネージドルールはメンテナンスコストは低いがルールはブラックボックス
  • ルールのActionはいきなりBlockで本番投入するのではなくCountで様子を見る
  • Bot ControlでBotの傾向を知ることができる
  • WAFのログを取得するためにはKinesis Firehoseが必要

Have a nice day!

jaws-asa-21

By maaaato