「Slow Read DoS攻撃」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「<!-- vim: filetype=mediawiki --> 読み方 ;Slow Read DoS攻撃: すろぅ りーど どす こうげき __TOC__ == 概要 == Slow Read DoS攻撃 は、[[DoS...」)
 
 
(同じ利用者による、間の3版が非表示)
行1: 行1:
<!--
+
[[Slow Read DoS攻撃]](スローリードDoS) は、[[DoS攻撃]]のひとつです。ウェブサーバからのレスポンスをわざと読み取る時間を伸ばすことで、サーバの接続数を使い切る攻撃です。[[ウェブサーバ]]が接続数を使いきってしまうと、それ以上、サービスが継続ができず、DoS状態に陥ってしまいます。これに似た攻撃として、攻撃ツールとして有名な [[Slowloris]] は、リクエストを送り続ける攻撃でした。
vim: filetype=mediawiki
+
-->
+
  
読み方
+
'''読み方'''
 
;[[Slow Read DoS攻撃]]: すろぅ りーど どす こうげき
 
;[[Slow Read DoS攻撃]]: すろぅ りーど どす こうげき
 +
;Slow DoS攻撃: すろぅ どす こうげき
 +
;スローリードDoS:すろー りーど どす
 
__TOC__
 
__TOC__
  
 
== 概要 ==
 
== 概要 ==
 +
[[Slow Read DoS攻撃]] は、L7(レイヤー7, 7層, アプリケーション層)に対する[[DoS攻撃]]のひとつです。
  
[[Slow Read DoS攻撃]] は、[[DoS攻撃]]のひとつです。
+
[[Slow Read DoS攻撃]]は、ウェブクライアント が[[ウェブサーバ]] からのレスポンスを読み取る時間を引き伸ばすことで、サーバの接続数を使い切る攻撃です。
  
[[Slow Read DoS攻撃]]は、 [[Webクライアント]] が[[Webサーバ]] からのレスポンスを読み取る時間を引き伸ばすことで、サーバの接続数を使い切る攻撃です。
+
;Slow HTTP Headers攻撃(スローHTTPヘッダ) ([[Slowloris]] )
 
+
;[[Slowloris]]  
+
 
:HTTPリクエストをスローダウンさせる
 
:HTTPリクエストをスローダウンさせる
 +
;Slow HTTP POST攻撃(スローHTTP POST)
 +
:HTTPリクエストをスローダウンさせる。POSTリクエスト全体をまとめて、1つのパケットで送らずに、分割して、1バイトずつ、ゆっくり送信します。
 
;[[Slow Read DoS攻撃]]
 
;[[Slow Read DoS攻撃]]
:HTTPレスポンスをスローダウンさせる
+
:HTTPレスポンスをスローダウンさせる。1バイトから32バイトの間で、ランダムにウィンドウサイズを通知し、レスポンスの受け取る時間を意図的に引き伸ばします。
  
 
クライアントとサーバのコネクションを可能な限り長く維持するために、サーバの送信バッファを常に送信待ちのデータチャンクでいっぱいにしておくことが必要です。
 
クライアントとサーバのコネクションを可能な限り長く維持するために、サーバの送信バッファを常に送信待ちのデータチャンクでいっぱいにしておくことが必要です。
 
クライアントの受信バッファサイズ(ウィンドウサイズ)をサーバの送信バッファサイズよりも小さくすることで実現します。
 
クライアントの受信バッファサイズ(ウィンドウサイズ)をサーバの送信バッファサイズよりも小さくすることで実現します。
  
この攻撃は、[[TCP]] のウィンドウサイズを利用します。
+
この攻撃は、[[TCP]] のウィンドウサイズを利用します。攻撃者は、大きなサイズのレスポンスデータを強制的に送信させるため、128Kbit よりも大きなリソースをリクエストします。
攻撃者は、大きなサイズのレスポンスデータを強制的に送信させるため、128Kbit よりも大きなリソースをリクエストします。
+
 
+
  
 
[[Slowloris]] や Slow POST と比較し、 [[Slow Read DoS攻撃]]は、目立ちにくく、発見が難しいとされています。
 
[[Slowloris]] や Slow POST と比較し、 [[Slow Read DoS攻撃]]は、目立ちにくく、発見が難しいとされています。
  
 +
このスローリクエストDoS攻撃は、手軽に誰でも行えるため、対策をしておくのが望ましいです。
 
== テスト方法 ==
 
== テスト方法 ==
 +
HTTP DoS テストツール [[slowhttptest]] は、 [[Slow Read 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
 +
<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パイプライニングが有効である

関連項目