Slow HTTP DoS攻撃
HTTPのリクエストを非常にゆっくり送り続けて、Webサーバとの接続を長時間占有し、ほかの利用者が接続できないようにするDoS攻撃。
イマシルちゃんの解説
レストランで席に着いたまま、注文を1分に1文字ずつ、すごくゆっくり伝え続けるお客さんがいたらどうかな?
店員さんはずっとそのお客さんにつきっきりで、ほかのお客さんを案内できないよね。
Slow HTTP DoS攻撃は、それをWebサーバにやる攻撃なんだ。
大量の通信を送らなくても、少しずつ送るだけでサーバを困らせられるのがやっかいなんだよ。
より深い解説
定義
Slow HTTP DoS攻撃は、HTTPのリクエストを少しずつ、長い時間をかけて送ることで、Webサーバのセッション(同時に扱える接続)を占有し続けるDoS攻撃である。Webサーバは、リクエストを受け取り終わるまで接続を保持して待つため、接続の上限に達すると、正規の利用者が接続できなくなる。
少ない通信量で攻撃できるので、大量の通信を検知する仕組みでは見つけにくい。
主な手口
| 手口 | 内容 |
|---|---|
| Slowloris | リクエストのヘッダーを、少しずつ間を空けて送り続け、ヘッダーの終わり(空行)をいつまでも送らない |
| Slow POST(Slow HTTP POST) | 大きなContent-Lengthを宣言したうえで、メッセージボディを少しずつゆっくり送る |
| Slow Read | サーバからの応答を、とてもゆっくり受け取る(受信できる量を小さく知らせ続ける) |
対策
| 対策 | 内容 |
|---|---|
| タイムアウトの設定 | リクエストのヘッダーやボディを受け取り終わるまでの時間に上限を設ける。一定の速度より遅い接続を切る |
| 同時接続数の制限 | 1つの送信元IPアドレスからの同時接続数に上限を設ける |
| リバースプロキシやロードバランサ | 前段で接続を受け止め、リクエストを受け取り終わってからWebサーバに渡す |
| 処理方式の見直し | 1つの接続に1つのプロセスやスレッドを割り当てる方式より、多数の接続を少ない資源で扱えるイベント駆動型のサーバのほうが影響を受けにくい |
ほかのDoS攻撃との違い
| 攻撃 | 特徴 |
|---|---|
| Slow HTTP DoS攻撃 | 少ない通信量で、長時間接続を占有する |
| SYNフラッド攻撃 | TCPの接続確立の途中で、大量の接続の準備をさせる |
| HTTPフラッド攻撃 | 普通のHTTPリクエストを大量に送りつける |