DoSとDDoSは何が違うのか
DoS(Denial of Service、サービス拒否攻撃)は1つの攻撃地点から対象サーバーに過剰なリクエストを送り正常なサービスを妨害する攻撃です。DDoS(Distributed Denial of Service、分散型サービス拒否攻撃)はここに「分散」が加わったもので、マルウェアに感染し攻撃者に遠隔操作される多数の機器(ボットネット)が同時に同じ標的を攻撃します。発信元が無数の異なるIPに分散しているため、特定のIPを遮断するだけでは防ぎにくい点がDDoSをはるかに厄介にしています。
ボリューメトリック攻撃:帯域そのものを消耗させる
ボリューメトリック攻撃は攻撃の巧妙さよりも純粋なトラフィック量で勝負する方式です。無意味なUDPパケットを大量に浴びせるUDPフラッドが代表例で、DNSやNTPのように小さなリクエストに対してはるかに大きな応答を返すサーバー(リフレクター)に、被害者のIPを詐称したリクエストを送りつけて応答を集中させる増幅(Amplification)攻撃も広く使われます。ギガビット毎秒(Gbps)単位で測定され、対象サーバーへの回線自体を飽和させ、正常なトラフィックが入る余地をなくします。
プロトコル攻撃:接続状態のリソースを消耗させる
ファイアウォールやロードバランサー、サーバーが接続情報を管理する仕組みの隙を狙ってリソースを消耗させる攻撃で、SYNフラッドが代表例です。TCP接続はSYN→SYN/ACK→ACKという3段階のハンドシェイクで始まりますが、SYNフラッドはSYNリクエストだけを大量に送り最後のACK応答を決して送らないため、対象サーバーは未完成の接続を待機状態のまま積み上げ続け、接続テーブルのリソースを枯渇させられます。細工したパケットでファイアウォールやロードバランサーを混乱させる攻撃もこの分類に含まれます。パケット毎秒(pps)で測定され、回線帯域よりも経路上のネットワーク機器の処理能力自体を狙う点がボリューメトリック攻撃と異なります。
アプリケーション層攻撃:正常なトラフィックを装う
HTTPフラッドは見た目には正常なWebリクエスト(GET・POST)を非常に速いペースで大量送信してサーバーやデータベースに負荷をかける方式で、スローロリス(Slowloris)は逆にHTTPリクエストを極めてゆっくり少しずつ送ることで接続を長く占有し、サーバーの同時接続上限を枯渇させる方式です。リクエスト自体のトラフィック量は少なく正規ユーザーの挙動に近いため、前述の2種類より検知や遮断が難しくなります。リクエスト毎秒(rps)で測定され、回線ではなくWebアプリケーションやサーバーソフトウェア自体を標的にします。
ボットネットと増幅攻撃はどう動くのか
ボットネットは、所有者が気づかないうちにマルウェアに感染し攻撃者の指令を受ける多数の機器(PC、IoT機器など)で構成されるネットワークです。増幅攻撃では、攻撃者がリフレクター役の公開DNS・NTPサーバーなどに被害者のIPアドレスを発信元として偽装した小さな問い合わせを送ると、サーバーはその偽装されたIP、つまり実際の被害者にはるかに大きな応答を返します。これにより攻撃者は実際に使った帯域の何倍、時に数十倍ものトラフィックを被害者に浴びせることができます。
企業と個人ができる防御方法
サービスを運営する企業側では、CDNでトラフィックを地理的に分散させ、WAF(Webアプリケーションファイアウォール)で異常なリクエストパターンを除去し、リクエスト頻度を制限するレートリミッティングを適用するのが基本的な対応です。攻撃規模が非常に大きい場合、インターネットサービスプロバイダー(ISP)側でそのトラフィックをまるごと破棄するブラックホールルーティングが使われることもあります。一般家庭のユーザーが直接DDoSの標的になることは稀ですが、自分のIoT機器やルーターが知らぬ間にボットネットの一員にならないよう、初期パスワードを変更しファームウェアを最新の状態に保つことが実質的な予防策になります。