「Slow Read DoS攻撃」の版間の差分
(→スローリードの検出) |
|||
行48: | 行48: | ||
通信からどのようにスローリードを見極めたら良いでしょうか? | 通信からどのようにスローリードを見極めたら良いでしょうか? | ||
* サーバが受け付けた初期の[[SYNパケット]]の普通ではない通知されたウィンドウサイズ | * サーバが受け付けた初期の[[SYNパケット]]の普通ではない通知されたウィンドウサイズ | ||
− | * サーバがある程度の時間以内(30秒以上は十分だ)に [RSTパケット]]や[[FINパケット]]を送信しない。 | + | * サーバがある程度の時間以内(30秒以上は十分だ)に [[RSTパケット]]や[[FINパケット]]を送信しない。 |
* コネクションの永続化([[KeepAlive]])とHTTPパイプライニングが有効である | * コネクションの永続化([[KeepAlive]])とHTTPパイプライニングが有効である | ||
+ | |||
== 関連項目 == | == 関連項目 == | ||
* [[slowhttptest]] | * [[slowhttptest]] |
2016年6月6日 (月) 00:07時点における版
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パイプライニングが有効である