F5アタックは、ページの再読み込みを短時間に繰り返してWebサイトへ負荷をかける場面を指す俗称です。実際には、通常の閲覧に見えるHTTPリクエストを数多く送り、アプリやDBを重くするHTTPフラッドに近いケースがよく見られます。この記事では、意味、DoS/DDoSとの違い、見分けるときに見る点、対策の考え方を順に確認します。
F5アタックは、WebサイトやWebアプリケーションへ短時間に多くのHTTPリクエストを送り、サーバーやアプリを重くしたり止めたりする行為を指す俗称です。名前は、ブラウザの再読み込みを繰り返すイメージに由来します。
実際の挙動は、Webアプリケーション層を狙うHTTPフラッドに近いことが多くあります。HTTPフラッドでは、正規の利用者に見えるHTTP GETやPOSTのリクエストを数多く送り、オリジンサーバー側のCPU、メモリ、スレッド、DB接続、外部API呼び出しなどを消費させます。
また、攻撃者はIPアドレスを分散させたり、User-Agentやヘッダを変えたり、リファラやCookieの有無を混ぜたりして、単純な遮断をすり抜けようとします。
HTTPフラッドに近い攻撃で出やすい影響は、次の通りです。
| 被害の種類 | 起こりやすい現象 | 現場で困る点 |
|---|---|---|
| サービスが使いにくくなる | 表示が遅い、タイムアウト、500系エラー増加 | 問い合わせが増え、対応の手間が増え、売上や申込みを取りこぼしやすい |
| アプリ側の資源が尽きる | CPU使用率の上昇、DB接続の上限に達する、スレッド不足 | 何が原因か見えにくく、切り分けに時間がかかりやすい |
| 周りのシステムにも影響が広がる | 決済・検索・外部APIが連鎖的に遅延 | 復旧しても後の対応が残る |
| 信頼や売上に影響する | 離脱の増加、CVRの低下、ブランド毀損 | 金額にしにくい損失まで含めると影響が大きい |
用語は混同されやすいため、まずは次のように分けておくと分かりやすくなります。
つまり、F5アタックは必ずDDoSになるとは限りません。HTTPリクエストを大量に送り、サービスを重くする現象を分かりやすく呼んだ言い方だと考えると安全です。
HTTPフラッド系は、普通のアクセスが増えただけに見えやすい攻撃です。まずは、どこにリクエストが集まっているかを切り分けます。
ここが見えてくると、手前で止めるべきか、オリジンまで届いても重くならないようにするべきかを分けて考えやすくなります。
対策は、エッジで止める、オリジンまで届いても耐えられるようにする、起きた後の対応を早くする、の三つに分けると考えやすくなります。
HTTPフラッドは正規のアクセスに見えやすいため、まずはオリジンへ届く前にさばく構成が有効です。
アプリやAPIが独自にレート制限を実装する場合は、HTTP 429(Too Many Requests)を返し、必要に応じてRetry-Afterで待つ時間を示す形がよく使われます。一方、WAFやマネージドサービスでは、403や製品側のブロック応答になることもあります。
HTTPフラッドで特に狙われやすいのは、動的で重い処理です。アプリ側を軽くできると、少ない攻撃でも落ちにくくなります。
攻撃をゼロにはできないため、起きたときに早く収束させる運用も欠かせません。
すべてを同じ強さで守ろうとすると、UXとコストの両方が苦しくなります。まずは、攻撃されると止まりやすいURLを洗い出し、そこから優先して守ります。
IPを分散されると、IP単位の制限だけでは追い付きにくいことがあります。可能なら、利用者ID、APIキー、セッション、トークンなど、より実態に近い単位でも制限できるようにします。
攻撃時にすべての機能を守るのは難しい場合があります。重要な機能を残し、それ以外は止める、短いTTLのキャッシュで連打を吸収する、といった設計を先に決めておくと対応しやすくなります。
F5アタックは、リロード連打に由来する俗称ですが、実際にはHTTPフラッドに近い場面が多くあります。対策では、CDNやWAFなどで手前を守ること、オリジンとアプリを重くしにくい構成にすること、起きた後の切り分けと周知を早く行えるようにすることが基本です。自社の構成では、どのURLを優先して守るか、どこで止めるか、どの機能を残すかを先に決めておくと、実装と運用の両方を進めやすくなります。
攻撃が分散していればDDoSになり得ますが、少数の送信元でも同様の現象は起きるため「必ずDDoS」とは限りません。
小規模のサイトや重い処理が多いサイトでは、手で連打するだけでも影響が出ることがあります。実際には、自動化ツールで数を増やす例も多く見られます。
回線に余裕があっても、アプリやDBなどの処理が先に詰まれば、遅延や停止は起こります。
検索、ログイン、動的に作るページ、外部APIに依存する処理、DBの負荷が高いAPIなど、1回の処理が重いURLが狙われやすくなります。
IP分散されると効果が弱くなるため、可能ならユーザーID・APIキー・セッション単位の制限も併用します。
有効な手段の一つです。オリジンに届く前にキャッシュ、遮断、レート制限をかけられるため、HTTPフラッド系では特に使いやすい対策です。ただし、設定や構成に応じた調整は必要です。
増えているURLと送信元のばらつきを確認し、WAFやレート制限を強める、重い機能をいったん止める、といった対応から始めます。
アプリやAPIが自前で制限を返す場面では有効です。HTTP 429で制限中だと示し、必要に応じてRetry-Afterで待つ時間を伝えられます。ただし、WAFやマネージドサービスでは403など別の応答になることもあります。
高コスト処理を軽くすること、キャッシュを入れること、早い段階で不正な要求を早めに止めること、使う機能を絞って動かせるようにしておくことが有効です。
守るURLの優先順、監視とアラート、WAFやレート制限の手順、オリジン保護、障害時の周知用テンプレートを整えておきます。