1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WAFだけで守れるのか?AWS ALBのHTTPフラッド初動対応から学ぶ

Last updated at Posted at 2025-05-15

2025年某日
突如ALBのメトリクスが異常値を記録。

  • CPU使用率:96%
  • ALBの有効接続数:数十万超え
  • User-Agent に怪しい Edge/125.0.0.0
  • ネットワークパケット送信/受信数も爆増

「これは…HTTPフラッド(L7型DDoS)か?」

こんな状況(仮定)で即座に対応しなくてはならない内容と、再発防止のための中長期的な対策、分析手法をQiita向けにまとめました。

まず Edge/125.0.0.0 について明確にしておきます。

Edge/125.0.0.0 とは何か?

これは本来、HTTPリクエストの User-Agent ヘッダーに含まれる情報の一部です。多くの場合、ブラウザ(例: Microsoft Edge)やBotクライアントが自分を識別するために付けるものです。

ただし、Edge/125.0.0.0 は以下の特徴があります:

  • 実際のブラウザでは存在しない バージョン番号(125.0.0.0)

  • 正規の Microsoft Edge であれば、Edg/125.0.XXXX.XX のような形式が一般的

⇒ したがって 偽装されたUser-Agent(Botの可能性が高い)

🌊 HTTPフラッドとは?特徴と被害の実例まとめ

HTTPフラッド(HTTP Flood)は、アプリケーション層(L7)を狙ったDDoS攻撃の一種で、正規リクエストを装ってサーバーに過剰な負荷をかける手法です。


🔍 HTTPフラッドの特徴

項目 内容
攻撃層 L7(アプリケーション層)
※TCPやUDPではなく、HTTP/HTTPSを使う
使用プロトコル HTTP GET や POST(フォーム送信、API呼び出しなど)
主な狙い サーバーの処理能力を奪う(CPU/メモリ/DB接続枯渇など)
見分けにくさ 正規のリクエストと見分けがつきにくい
(User-Agent や Referer を偽装)
リクエスト例 /login, /api/search, /cart/checkout など負荷の高いパス

🧨 具体的な攻撃例

  • 攻撃者が 1秒間に何万件もの GET /index.html を送信
  • あるいは、リクエストボディ付きで大量の POST /login を連投
    → 結果としてアプリケーションのDB接続プールを枯渇させ、処理不能に

😨 被害例

  • CPU使用率やALB接続数が急上昇(例:CloudWatchで確認)
  • ログに異常なUser-AgentやRefererが大量記録
    • 例:Edge/125.0.0.0 のような実在しないバージョン名
  • 正常ユーザーのログイン失敗やタイムアウト多発

HTTPフラッドはトラフィック量ではなく「処理させる量」で攻めてくるため、検知や対策にはLayer 7(アプリ層)の理解が不可欠です。

対応には AWS WAF、レート制限、CAPTCHA、CloudFront などの多層的な防御が重要です。


🔥 目の前の応急対応(即日)

✅ 1. User-Agent で怪しい Bot を遮断

{
  "ByteMatchStatement": {
    "FieldToMatch": {
      "SingleHeader": { "Name": "user-agent" }
    },
    "SearchString": "Edge/125.0.0.0",
    "PositionalConstraint": "CONTAINS"
  }
}

※AWS WAF にて「カスタムルール」を作成し即時 Block。まずは Count モードで様子見→問題なければ Block モードへ移行。


✅ 2. IP単位でリクエスト頻度を制限

{
  "RateBasedStatement": {
    "Limit": 2000,
    "AggregateKeyType": "IP"
  }
}

「5分間で2000回以上アクセスしたIPは即遮断」という Rate-based ルールを併用。


✅ 3. AWS マネージドルールで広範な対策もオン

ルール名 効果
AWSManagedRulesCommonRuleSet SQLi・XSSなどOWASP系の脅威対策
AWSManagedRulesAmazonIpReputationList AWSが検知済みの悪質IPをブロック
AWSManagedRulesBotControlRuleSet(有償) Bot制御(User-Agent偽装対策)

🔍 分析と見える化(攻撃の中身を探る)

🔹 CloudWatch Logs + Athena

ALBアクセスログを S3 に出力し、Athena で調査。

例)User-Agentごとのリクエスト件数

SELECT user_agent, count(*) AS req_count
FROM alb_logs
WHERE time BETWEEN timestamp '2025-05-15 18:00:00' AND timestamp '2025-05-15 20:00:00'
GROUP BY user_agent
ORDER BY req_count DESC
LIMIT 10;

例)IPアドレス単位のアクセス件数

SELECT client_ip, count(*) AS req_count
FROM alb_logs
WHERE user_agent LIKE '%Edge/125.0.0.0%'
GROUP BY client_ip
ORDER BY req_count DESC
LIMIT 10;

🔹 CloudWatch ダッシュボードで可視化

  • 有効接続数、新規接続数、ネットワーク転送量などをパネルで監視
  • スパイク検出 → SNS通知も併用可能

🛡 中長期的な防御策

✅ WAF のルール整理と順序最適化

優先度 内容
0 User-Agent ベースの即時遮断
1 Rate-based ルール
10〜 AWSマネージドルール

✅ CloudFront 前段化 + CAPTCHA

ALBに直アクセスさせず、CloudFrontを前段に設置。

→ CloudFront Functions や AWS WAF CAPTCHA を活用することで Bot 対策を強化。

✅ Shield Advanced の検討(本番環境で予算に余裕があれば)

  • DDoS対策チーム(DRT)との連携
  • コスト保護
  • 攻撃検出と自動応答

📘 まとめ:WAFとAthenaで「守り」と「見える化」を両立しよう

ALB配下のインフラは意外と攻撃されやすく、突然のスパイクに耐えるには**「即応できる構成」「継続的な可視化」**の両方が必要です。

以下を満たしておくと安心です:

  • WAF で L7の入口をしっかり制御
  • ALBログをAthenaで即時分析可能にしておく
  • Rate-based制御 × マネージドルールの併用
  • 様子見ルールは Count モードから導入

🛠 参考Tips

  • TerraformでWAFルールを一元管理
  • Slack通知連携(Lambda)
  • QuickSightでダッシュボード化

📎 もし同様の事象に遭遇したら…

とりあえず CloudWatch で 「有効接続数」や「User-Agent」ログの急増が見えたら、
WAF + Athena の二刀流分析で原因特定 → チューニングへ!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?