Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

Slow HTTP DoS攻撃(スローエッチティーティーピーDoSこうげき)とは | 意味や読み方など丁寧でわかりやすい用語解説

Slow HTTP DoS攻撃(スローエッチティーティーピーDoSこうげき)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

スローHTTPDoS攻撃 (スローエッチティーティーピーディーオーエスこうげき)

英語表記

Slow HTTP DoS attack (スローエッチティーティーピーDoSアタック)

用語解説

Slow HTTP DoS攻撃とは、Webサーバーに対して低速なHTTPリクエストを送り続けることで、サーバーのリソースを枯渇させ、サービスを停止させる、または利用不能にするDoS(Denial of Service)攻撃の一種である。従来のDoS攻撃が大量のトラフィックを送りつけて帯域幅を飽和させることを目的とするのに対し、この攻撃は比較的少量のトラフィックしか発生させない。しかし、サーバーが正規のコネクションとして認識し、リクエストの完了を長時間待機させることで、コネクションプールやメモリなどのリソースを占有する点が特徴である。そのため、一般的なネットワークベースのDoS対策では検知しにくい場合があり、Webアプリケーション層に近い対策が必要となる。

この攻撃のメカニズムは、HTTPプロトコルがTCP/IP上で動作し、リクエストとレスポンスが完了するまでコネクションを維持する特性を利用する。攻撃者は、HTTPリクエストの送信や、サーバーからのレスポンスの受信を意図的に遅延させることで、サーバーに無駄なリソースを消費させる。これにより、正規のユーザーからのアクセスを処理するためのリソースが不足し、結果としてサービスが停止したり、応答が極端に遅くなったりする。

代表的なSlow HTTP DoS攻撃の手法には、主に「Slowloris」と「RUDY (R-U-Dead-Yet?)」、そして「Slow Read Attack」の三つが挙げられる。

Slowlorisは、HTTP GETリクエストを利用する。攻撃者はまずWebサーバーにGETリクエストを送信するが、そのヘッダ情報を完全に送信せず、ごく短い間隔で不完全なHTTPヘッダ行(例えば、"X-a: b\r\n"のようなダミーのヘッダ)を送り続ける。WebサーバーはHTTPリクエストヘッダがすべて揃うまで、そのコネクションを開いたまま待機し続けるため、攻撃者は多数のこのような不完全なコネクションを確立する。最終的に、サーバーが処理できる最大同時接続数に達したり、コネクション管理のためのメモリが枯渇したりすることで、正規のユーザーからの新しい接続を受け付けられなくなる。

RUDYは、HTTP POSTリクエストのボディ部分を利用する攻撃である。攻撃者は、HTTP POSTリクエストのContent-Lengthヘッダに非常に大きな値を設定し、その後、POSTボディを非常に小さなチャンクに分割し、それぞれを非常にゆっくりと送信し続ける。サーバーはPOSTリクエストのボディがContent-Lengthで指定されたサイズに達するまで、そのコネクションと関連するリソース(例えば、受信バッファや一時ファイルなど)を占有し続ける。この方法もSlowlorisと同様に、多数のコネクションとリソースを消費させ、サーバーを疲弊させる。

Slow Read Attackは、サーバーからクライアントへのレスポンスの送信を遅延させる手法である。この攻撃では、サーバーが大量のデータをクライアントに送信しようとした際、クライアント側が意図的にTCPウィンドウサイズを小さく設定したり、受信バッファを意図的にフルに保ったりすることで、サーバーからのデータ受信を極めてゆっくりと行う。これにより、サーバーはクライアントへのデータ送信が完了するまで、そのコネクションに関連するリソース(例えば、送信バッファやセッション情報)を解放できなくなる。結果として、多数のこのような「低速な読み込み」コネクションがサーバーのリソースを長時間占有し、サービスの可用性を低下させる。

これらの攻撃は、いずれもサーバーの帯域幅を大量に消費するわけではなく、正当なHTTPプロトコルの一部を悪用しているため、従来のIPS/IDSなどのネットワークセキュリティ機器では異常なトラフィックとして検知されにくい傾向がある。

Slow HTTP DoS攻撃への対策としては、複数のアプローチが考えられる。まず、Webサーバーやリバースプロキシのタイムアウト設定を適切に短縮することが重要である。具体的には、コネクションタイムアウト、ヘッダの読み込みタイムアウト、ボディの読み込みタイムアウトなどを設定し、不完全に保たれたコネクションが長時間維持されないようにする。例えば、NginxやApacheなどのWebサーバーには、これらのタイムアウトを設定するディレクティブが用意されている。

次に、最大同時接続数を制限することも有効である。サーバーが処理できるコネクション数を制限することで、たとえ攻撃を受けても、一定数の正規ユーザーはサービスを利用できるようになる可能性がある。

また、リクエストレート制限を導入し、一定時間内に同一IPアドレスからのリクエスト数が異常に多い場合に、そのIPアドレスからの接続を一時的に制限またはブロックする。ただし、Slow HTTP DoS攻撃はリクエストレート自体は高くないため、この対策だけでは不十分な場合もある。

さらに、リバースプロキシやロードバランサを導入することも効果的である。これらのフロントエンドデバイスは、背後のWebサーバーの前に位置し、リクエストをバッファリングしたり、接続のタイムアウトを管理したりする機能を持つことが多い。攻撃からの直接的な接続をこれらのデバイスで受け止めることで、Webサーバー自体への影響を軽減できる。

Webアプリケーションファイアウォール(WAF)も有効な防御手段となり得る。WAFは、HTTPリクエストの内容を詳細に分析し、不審なパターンや異常な振る舞いを検知した場合に、そのリクエストをブロックしたり、接続を切断したりする。特に、ヘッダが不完全なリクエストや、Content-Lengthと実際に送信されるボディの量の乖離が激しいリクエストなどを検知するルールを設定することで、Slow HTTP DoS攻撃を特定し、防御することが可能である。

OSやネットワークスタックのレベルでも、TCPコネクション関連の設定(例えば、半開きのコネクションを処理する能力や、コネクションごとのバッファサイズ)を最適化することで、一部の耐性を向上させることが可能である。

これらの対策を単独で適用するのではなく、組み合わせて多層防御を構築することが、Slow HTTP DoS攻撃に対する効果的な防御策となる。システムエンジニアを目指す上では、このような攻撃のメカニズムを理解し、サーバー構成やネットワーク設計の段階からセキュリティを考慮した設計を行うことが重要である。

関連コンテンツ