Slow Read DoS攻撃
Slow Read DoS攻撃(スローリードDoS) は、DoS攻撃のひとつです。ウェブサーバからのレスポンスをわざと読み取る時間を伸ばすことで、サーバの接続数を使い切る攻撃です。ウェブサーバが接続数を使いきってしまうと、それ以上、サービスが継続ができず、DoS状態に陥ってしまいます。これに似た攻撃として、攻撃ツールとして有名な Slowloris は、リクエストを送り続ける攻撃でした。
読み方
- Slow Read DoS攻撃
- すろぅ りーど どす こうげき
- Slow DoS攻撃
- すろぅ どす こうげき
- スローリードDoS
- すろー りーど どす
概要
Slow Read DoS攻撃 は、L7(レイヤー7, 7層, アプリケーション層)に対するDoS攻撃のひとつです。
Slow Read DoS攻撃は、ウェブクライアント がウェブサーバ からのレスポンスを読み取る時間を引き伸ばすことで、サーバの接続数を使い切る攻撃です。
- Slow HTTP Headers攻撃(スローHTTPヘッダ) (Slowloris )
- HTTPリクエストをスローダウンさせる
- Slow HTTP POST攻撃(スローHTTP POST)
- HTTPリクエストをスローダウンさせる。POSTリクエスト全体をまとめて、1つのパケットで送らずに、分割して、1バイトずつ、ゆっくり送信します。
- Slow Read DoS攻撃
- HTTPレスポンスをスローダウンさせる。1バイトから32バイトの間で、ランダムにウィンドウサイズを通知し、レスポンスの受け取る時間を意図的に引き伸ばします。
クライアントとサーバのコネクションを可能な限り長く維持するために、サーバの送信バッファを常に送信待ちのデータチャンクでいっぱいにしておくことが必要です。 クライアントの受信バッファサイズ(ウィンドウサイズ)をサーバの送信バッファサイズよりも小さくすることで実現します。
この攻撃は、TCP のウィンドウサイズを利用します。攻撃者は、大きなサイズのレスポンスデータを強制的に送信させるため、128Kbit よりも大きなリソースをリクエストします。
Slowloris や Slow POST と比較し、 Slow Read DoS攻撃は、目立ちにくく、発見が難しいとされています。
このスローリクエストDoS攻撃は、手軽に誰でも行えるため、対策をしておくのが望ましいです。
テスト方法
HTTP DoS テストツール slowhttptest は、 Slow Read DoS攻撃 をサポートしています。
スローリードの対策
- WAF(Web Application Firewall)
- スローリードを見極めるアルゴリズムを実装している製品があります。モバイルなどの純粋に通信が遅いものと判別してくれます。
- Apache HTTP ServerならModSecurityを利用できます。ModSecurityは、ソケットのreadやwriteのステートの維持をどの程度の長さにするかコントロールできます。
これらの3つの状態がみられるのであれば、サーバは、Slow Read DoS攻撃を受けています。
ModSecurity
ModSecurityのv2.6で SecWriteStateLimit ディレクティブが追加されました。
SecWriteStateLimit は、SERVER_BUSY_WRITE ステートの(IPアドレスあたりの)スレッドの同時接続数を制限します。
modsecurity_crs_11_slow_dos_protection.conf
SecWriteStateLimit 100
スローリードの検出
通信からどのようにスローリードを見極めたら良いでしょうか?
- サーバが受け付けた初期のSYNパケットの普通ではない通知されたウィンドウサイズ
- サーバがある程度の時間以内(30秒以上は十分だ)に [RSTパケット]]やFINパケットを送信しない。
- コネクションの永続化(KeepAlive)とHTTPパイプライニングが有効である
テストツール
Slow Read DoS攻撃のテストツールに slowhttptest があります。このツールを用いて、あなたのウェブサーバをテストできます。
このツールを利用して、他人のサーバを攻撃したり、自信の本番サービスをテストするべきではありません。
関連項目
ツイート