「Slow Read DoS攻撃」の版間の差分
(ページの作成:「<!-- vim: filetype=mediawiki --> 読み方 ;Slow Read DoS攻撃: すろぅ りーど どす こうげき __TOC__ == 概要 == Slow Read DoS攻撃 は、[[DoS...」) |
|||
(同じ利用者による、間の3版が非表示) | |||
行1: | 行1: | ||
− | + | [[Slow Read DoS攻撃]](スローリードDoS) は、[[DoS攻撃]]のひとつです。ウェブサーバからのレスポンスをわざと読み取る時間を伸ばすことで、サーバの接続数を使い切る攻撃です。[[ウェブサーバ]]が接続数を使いきってしまうと、それ以上、サービスが継続ができず、DoS状態に陥ってしまいます。これに似た攻撃として、攻撃ツールとして有名な [[Slowloris]] は、リクエストを送り続ける攻撃でした。 | |
− | + | ||
− | + | ||
− | 読み方 | + | '''読み方''' |
;[[Slow Read DoS攻撃]]: すろぅ りーど どす こうげき | ;[[Slow Read DoS攻撃]]: すろぅ りーど どす こうげき | ||
+ | ;Slow DoS攻撃: すろぅ どす こうげき | ||
+ | ;スローリードDoS:すろー りーど どす | ||
__TOC__ | __TOC__ | ||
== 概要 == | == 概要 == | ||
+ | [[Slow Read DoS攻撃]] は、L7(レイヤー7, 7層, アプリケーション層)に対する[[DoS攻撃]]のひとつです。 | ||
− | [[Slow Read DoS攻撃]] | + | [[Slow Read DoS攻撃]]は、ウェブクライアント が[[ウェブサーバ]] からのレスポンスを読み取る時間を引き伸ばすことで、サーバの接続数を使い切る攻撃です。 |
− | + | ;Slow HTTP Headers攻撃(スローHTTPヘッダ) ([[Slowloris]] ) | |
− | + | ||
− | + | ||
:HTTPリクエストをスローダウンさせる | :HTTPリクエストをスローダウンさせる | ||
+ | ;Slow HTTP POST攻撃(スローHTTP POST) | ||
+ | :HTTPリクエストをスローダウンさせる。POSTリクエスト全体をまとめて、1つのパケットで送らずに、分割して、1バイトずつ、ゆっくり送信します。 | ||
;[[Slow Read DoS攻撃]] | ;[[Slow Read DoS攻撃]] | ||
− | : | + | :HTTPレスポンスをスローダウンさせる。1バイトから32バイトの間で、ランダムにウィンドウサイズを通知し、レスポンスの受け取る時間を意図的に引き伸ばします。 |
クライアントとサーバのコネクションを可能な限り長く維持するために、サーバの送信バッファを常に送信待ちのデータチャンクでいっぱいにしておくことが必要です。 | クライアントとサーバのコネクションを可能な限り長く維持するために、サーバの送信バッファを常に送信待ちのデータチャンクでいっぱいにしておくことが必要です。 | ||
クライアントの受信バッファサイズ(ウィンドウサイズ)をサーバの送信バッファサイズよりも小さくすることで実現します。 | クライアントの受信バッファサイズ(ウィンドウサイズ)をサーバの送信バッファサイズよりも小さくすることで実現します。 | ||
− | この攻撃は、[[TCP]] | + | この攻撃は、[[TCP]] のウィンドウサイズを利用します。攻撃者は、大きなサイズのレスポンスデータを強制的に送信させるため、128Kbit よりも大きなリソースをリクエストします。 |
− | + | ||
− | + | ||
[[Slowloris]] や Slow POST と比較し、 [[Slow Read DoS攻撃]]は、目立ちにくく、発見が難しいとされています。 | [[Slowloris]] や Slow POST と比較し、 [[Slow Read DoS攻撃]]は、目立ちにくく、発見が難しいとされています。 | ||
+ | このスローリクエストDoS攻撃は、手軽に誰でも行えるため、対策をしておくのが望ましいです。 | ||
== テスト方法 == | == テスト方法 == | ||
+ | HTTP DoS テストツール [[slowhttptest]] は、 [[Slow Read DoS攻撃]] をサポートしています。このツールを用いて、あなたの[[ウェブサーバ]]をテストできます。 | ||
− | HTTP | + | このツールを利用して、他人のサーバを攻撃したり、自信の本番サービスをテストするべきではありません。 |
+ | == スローリードの対策 == | ||
+ | * 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 | ||
+ | <syntaxhighlight lang="apache"> | ||
+ | SecWriteStateLimit 100 | ||
+ | </syntaxhighlight> | ||
+ | == スローリードの検出 == | ||
+ | 通信からどのようにスローリードを見極めたら良いでしょうか? | ||
+ | * サーバが受け付けた初期の[[SYNパケット]]の普通ではない通知されたウィンドウサイズ | ||
+ | * サーバがある程度の時間以内(30秒以上は十分だ)に [[RSTパケット]]や[[FINパケット]]を送信しない。 | ||
+ | * コネクションの永続化([[KeepAlive]])とHTTPパイプライニングが有効である | ||
== 関連項目 == | == 関連項目 == | ||
− | |||
* [[slowhttptest]] | * [[slowhttptest]] | ||
* [[Slowloris]] | * [[Slowloris]] | ||
* [[DoS攻撃]] | * [[DoS攻撃]] | ||
+ | * [[ApacheをDoS攻撃から守る方法]] | ||
+ | <!-- | ||
+ | vim: filetype=mediawiki | ||
+ | --> |
2016年6月6日 (月) 00:57時点における最新版
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パイプライニングが有効である