分散型サービス拒否(DDoS)攻撃とは、攻撃者が多数のデバイスを使ってリソースを過負荷状態にし、正当な利用者がそのリソースにアクセスできないようにする攻撃です。DDoS攻撃は一般に、インターネットに公開されたWebサイト、アプリケーション、サービスを標的にしますが、特定のコンピューター、ゲートウェイ、内部ネットワークリソースに対して実行されることもあります。
DDoS攻撃を防ぐには、まず、DDoS攻撃を大きく「ボリューム型」「プロトコル型」「アプリケーション型」の3つに分類したうえで、それぞれの違いを理解する必要があります。ただし、これら3分類に当てはまらない攻撃もあり、攻撃者の多くは阻止を困難にするため、複数の手法を組み合わせます。
関連記事:
DDoS攻撃の主な種類とは?
DDoS攻撃は通常、次の3種類に大別できます。
この3分類には、UDP、ICMP、IP、TCP、HTTPの各種フラッド攻撃とその亜種など、数十種類のDDoS攻撃が含まれます。以下では、各分類と攻撃の種類を詳しく解説します。
ボリューム型DDoS攻撃
ボリューム型DDoS攻撃は、リソースの処理能力を圧倒しようとします。サーバーには大量のリクエストが送り付けられ、ネットワークはトラフィックで飽和し、データベースには大量の呼び出しが発生します。
インターネット上では、DDoS攻撃は標的サイトの帯域幅を飽和させることを狙い、攻撃規模は通常、毎秒ビット数で測定されます。ボリューム型DDoS攻撃には、多種多様なフラッド攻撃(UDP、CharGen、ICMP)や、アプリケーションの悪用などがあります。
UDPフラッド攻撃
ユーザーデータグラムプロトコル(UDP)は、サーバーとの双方向セッションを確立しません。代わりに、UDPは返信を待たずにデータパケットを送信します。
この特性は、正規のUDPトラフィックを待ち受けるホストのポートに、ホストを過負荷状態にするのに十分な数のパケットを送り付けるフラッド攻撃に最適です。UDPパケットをいずれかのポートで受信すると、サーバーはそのポートに対応するアプリケーションを確認しなければならず、プロトコルによってサーバー内部で自動処理が起動されることを攻撃者は把握しています。
攻撃者は、UDPパケットに埋め込まれたIPアドレスとポートを通じて、インターネット上またはネットワーク内のサーバーを直接標的にします。攻撃の目的は、その処理要求でサーバーを過負荷状態にするか、ネットワークの帯域幅を消費させることです。
具体的なUDPフラッド攻撃には、次のものが使われます。
- ドメインネームサービス(DNS)
- ネットワークタイムプロトコル(NTP)
- シンプルサービスディスカバリープロトコル(SSDP)
- 音声や動画のパケットなどのメディアデータ
- VoIP(Voice over IP)電話パケット
- NetBIOS
- BitTorrentやKadなどのピアツーピア(P2P)ネットワークのパケット
- 簡易ネットワーク管理プロトコル(SNMP)
- Quote of the Day(QOTD)
- QuakeやSteamなど、ビデオゲーム固有のプロトコル
UDPフラッド攻撃の亜種には、次のものがあります。
- UDPフラグメンテーションフラッド: このUDPフラッド攻撃の亜種では、より大きく、断片化されたパケットを標的サーバーに送信します。サーバーは、無関係で偽装された断片化UDPパケットを再構成しようとするため、その過程で過負荷状態になる可能性があります。
- 特定のUDP増幅攻撃: 侵害した多数のデバイスを使う代わりに、攻撃者は多数の正規サーバーに正規のUDPリクエストを送り、送信元IPアドレスを標的サーバーのものに偽装します。これらの正規サーバーからの応答が、標的デバイスを突然圧倒します。増幅攻撃でよく使われるプロトコルには、NTP、SNMP、SSDPがあります。
CharGENフラッド
1983年に開発されたCharGENプロトコルは、デバッグ、測定、テストを目的としていました。要求側サーバーがポート19経由で伝送制御プロトコル(TCP)またはUDPのリクエストを送信すると、プロトコルが起動します。受信側デバイスは同じプロトコルを使い、次の内容でサーバーに応答します。
- TCP経由で任意に生成した文字を返信
- UDP経由で乱数を返信
送信側デバイスは、ホストサーバーから受信した情報を破棄します。
攻撃者は標的サーバーのIPアドレスを偽装し、プリンターやコピー機など、CharGENを実行するインターネット接続デバイスに大量のリクエストを送ります。これらのデバイスはリクエストに応答し、ポート19のトラフィックをサーバーに大量送信します。ファイアウォールがポート19をブロックしなければ、サーバーはランダムなトラフィックの分析と応答に追われ、過負荷状態になる可能性があります。
ICMP(Ping)フラッド
インターネット制御メッセージプロトコル(ICMP)は、タイムスタンプ、時間超過エラー、エコー要求、エコー応答など、ネットワークデバイス間で送信される特定のエラーメッセージや運用情報コマンドで構成されます。エコー要求とエコー応答を組み合わせたものが「ping」コマンドです。
攻撃者は多数のデバイスを使い、返信を待たずに偽装したPingパケットをサーバーへ大量送信します。このプロトコルではサーバーが要求を受信するだけでなく応答する必要もあるため、受信帯域幅と送信帯域幅の両方が消費されます。
ICMPフラグメンテーションフラッド
ICMPフラッド攻撃の亜種であるICMPフラグメンテーションフラッドは、完全なコマンドではなく、断片化されたICMPパケットを送信します。標的サーバーは、偽装されたICMPパケットから有効なコマンドを再構成しようとしますが、意図的に無関係な断片同士を結び付けようとしてリソースを使い果たします。
アプリケーション悪用攻撃
アプリケーション悪用攻撃では、ハッカーがP2Pサーバーなど、正規サーバー上にある既存の高トラフィックアプリケーションを侵害します。1台または複数台の侵害マシンからのトラフィックが標的サーバーにリダイレクトされると、ハッカーはシステムから離脱し、自律的に動作させます。
侵害されたアプリケーションは、正しく形成されたパケットで正規の接続を確立しようとするため、ほとんどの防御ツールは接続を許可します。その結果、標的サーバーは急増したトラフィックによって単純に過負荷状態になります。
プロトコル型DDoS攻撃
プロトコル型DDoS攻撃は、単純なトラフィック量ではなく、プロトコルを悪用して特定のリソースを過負荷状態にします。通常はサーバーが標的ですが、ファイアウォールやロードバランサーが標的になることもあります。これらの攻撃は、毎秒パケット数で測定されることがよくあります。
IP Null攻撃
インターネットプロトコルバージョン4に準拠するすべてのパケットには、そのパケットで使われるトランスポートプロトコルがTCP、ICMPなどのどれであるかを示すヘッダーが含まれます。しかし攻撃者は、ヘッダーをNull値に設定できます。パケットを破棄する明確な指示がなければ、サーバーはそのパケットの配信方法を判断しようとしてリソースを消費します。
TCPフラッド攻撃
伝送制御プロトコル(TCP)は、異なるデバイスがネットワーク経由で通信する方法を制御します。さまざまなTCPフラッド攻撃は、偽装または不正な形式のパケットを使って基本的なTCPプロトコルを悪用し、リソースを過負荷状態にします。
さまざまな攻撃を理解するには、TCPの仕組みを理解すると役立ちます。伝送制御プロトコルでは、接続を確立するために次の3段階の通信シーケンスが必要です。
- SYN: 要求側デバイス(エンドポイントまたはサーバー)が、同期シーケンス番号を含むパケットをサーバーまたは他の宛先デバイス(エンドポイント)に送信します。
- SYN-ACK: サーバーはSYNパケットに対し、同期シーケンス番号と確認応答番号(ACK)を含む応答を返します。
- ACK: 要求側デバイスは、確認応答番号(元のACK番号+1)をサーバーに返送します。
通信は、次の4段階の終了シーケンスによって終了します。
- FIN: 要求側デバイスがセッション終了要求(FIN)をサーバーに送信します。
- ACK: サーバーは要求側デバイスにACK応答を返し、要求側デバイスはFINパケットの受信を待ちます。
- FIN: サーバーは要求側デバイスにFINパケットを返します(ほぼ同時になる場合もあります)。
- ACK: 要求側デバイスが最後のACK応答をサーバーに返し、セッションが終了します。
サーバーが予期しないTCPパケットを受信すると、通信をリセットするためRST(リセット)パケットを返します。
TCPプロトコルを悪用するフラッド攻撃は、不正なTCP通信を使ってシステムリソースを過負荷状態にしようとします。
- SYNフラッド: 攻撃者は、偽装したIPアドレスから、または応答を無視するよう設定したサーバーから、多数のSYN要求パケットを送信します。標的サーバーはSYN-ACKパケットで応答し、ACK応答を待つ間、通信帯域幅を確保し続けます。
- SYN-ACKフラッド: 攻撃者は、偽装したSYN-ACK応答を標的サーバーに大量送信します。標的サーバーは、存在しないSYN要求と応答を照合しようとしてリソースを拘束されます。
- ACKフラッド: 攻撃者は、偽装したACK応答をサーバーに大量送信します。サーバーは、存在しないSYN-ACKパケットとACK応答を照合しようとしてリソースを拘束されます。この種の攻撃には、TCP PUSH機能も利用できます。
- ACKフラグメンテーションフラッド: ACKフラッド攻撃の亜種であるこの手法は、最大サイズ1,500バイトの断片化パケットを使い、ヘッダーを含めて65,535バイトであるIPパケットの最大長を悪用します。サーバーやルーターなどのリソースが断片化パケットを再構成しようとすると、再構成に必要な容量が割り当て済みリソースを超え、メモリーオーバーフローエラーやリソースのクラッシュを引き起こす可能性があります。
- RST/FINフラッド: 攻撃者は偽装したRSTまたはFINパケットを使ってサーバーにフラッド攻撃を仕掛け、存在しないオープンTCPセッションとパケットを照合しようとする処理でリソースを消費させます。
- 複数ACK偽装セッションフラッド: この亜種では、攻撃者は複数のACKパケットを送信した後、RSTまたはFINパケットを送り、実際のTCPトラフィックをより忠実に模倣して防御を欺きます。もちろんパケットは偽装されており、サーバーは偽のパケットを存在しないオープンTCPセッションと照合しようとしてリソースを消費します。
- 複数SYN-ACK偽装セッションフラッド: この亜種では、複数のSYNおよびACKパケットを使い、その後にRSTまたはFINパケットを送信します。複数ACK偽装セッションフラッドと同様、偽装パケットは正規のTCPトラフィックを模倣しようとし、偽のパケットを正規トラフィックと照合させようとしてサーバーのリソースを浪費させます。
- 同義IP攻撃: この手法では、攻撃者はパケットの送信元IPアドレスと宛先IPアドレスの両方に標的サーバーのIPアドレスを設定したSYNパケットを偽装します。この無意味なパケットは、サーバーが自分自身に応答しようとする(ローカルエリアネットワーク拒否、つまりLAND攻撃)か、自分自身とのTCPセッションに関するオープン通信から、自分自身が送信したパケットを受信するという矛盾を解消しようとする過程で、リソースを消費させます。
セッション攻撃
攻撃者は、DDoS攻撃を実行するために、偽装したIPアドレスやパケットを使う必要はありません。セッション攻撃では、多数のボットを使って送信元IPの範囲を満たすか上回り、標的サーバーとの正規のTCPセッションを開始します。実際のIPアドレスによる正規のTCPセッションはDDoS検知を回避しますが、その後攻撃者はACKパケットを遅延させ、空のセッションを維持するために帯域幅を消費し、リソースを枯渇させます。
Slowloris
セッション攻撃と同様、Slowloris攻撃は空の通信でサーバーのリソースを消費しようとします。この攻撃では、攻撃者はWebサーバーに不完全なHTTPリクエストを送り、できるだけ多くのセッションをできるだけ長時間開いたままにします。使用する帯域幅は非常に少なく、検知が困難な攻撃です。
Ping of Death
Ping of Death攻撃は、ACKフラグメンテーションフラッドと同様の方法で、ヘッダーを含めて65,535バイトであるIPパケットの最大長を悪用します。Ethernetネットワークでデータを送信する際の最大フレームサイズは通常1,500バイトに設定されるため、攻撃者はEthernetの制限に適合する複数のIP断片を送信します。しかし、それらを再構成すると最大IPパケット長を超えるパケットになります。受信側コンピューターがIP断片を再構成すると、パケットに割り当てられたメモリーバッファーがオーバーフローしたり、コンピューターがクラッシュしたりする可能性があります。
Smurf攻撃
Smurfと呼ばれるマルウェアプログラムは、IPおよびICMPプロトコルを悪用し、標的デバイスのIPアドレスを持つルーターのブロードキャストアドレスに、偽装したICMP ping要求を大量送信します。ネットワーク上のすべてのデバイスがping要求に応答するため、受信側デバイスが過負荷状態になる可能性があります。1999年以降、ほとんどのルーターはデフォルトでブロードキャストアドレス宛てのパケットを転送しないため、この攻撃の効果は低下しています。
Fraggle攻撃
Fraggle攻撃はSmurf攻撃の亜種で、ICMPパケットの代わりにUDPパケットを偽装し、ネットワークルーターのブロードキャストアドレスを標的にしてトラフィックで標的コンピューターを過負荷状態にします。ネットワーク上のすべてのデバイスがUDP要求に応答するため、受信側デバイスが過負荷状態になる可能性があります。デフォルトでは、1999年以降のほとんどの最新ルーターがブロードキャストアドレス宛てのパケットを転送しないため、この攻撃の効果は低下しています。
Low Orbit Ion Cannon(LOIC)
Low Orbit Ion Cannonのオープンソースソフトウェアは、大量のパケット(UDP、TCP、HTTP)を標的デバイスに送信するネットワーク負荷テストツールとして設計されました。しかし残念ながら、攻撃者はこの攻撃をボットネットに展開し、DDoS攻撃の実行に利用しています。
High Orbit Ion Cannon(HOIC)
High Orbit Ion Cannonアプリケーションは、Low Orbit Ion Cannonに代わる一般公開アプリケーションで、最大256の異なるドメインに対して大量のGETおよびHTTP POSTリクエストを同時に送信できます。HOICは、悪意のある攻撃者が使用すると、LOICより強力で大きな被害をもたらす可能性があります。
アプリケーションDDoS攻撃
アプリケーションDDoS攻撃は脆弱性を標的にして、アプリケーション自体を停止させます。インフラの妨害に焦点を当てる他の攻撃とは異なり、この攻撃はレイヤー7のソフトウェアを標的にします。ただし、CPUの過負荷やメモリーの枯渇を引き起こし、サーバーや他のアプリケーションに影響を及ぼす可能性もあります。アプリケーションDDoS攻撃の規模は、1秒あたりのリクエスト数で測定されます。
たとえば、ショッピングカートへの商品の追加やチェックアウトへの移行など、計算負荷の高い処理は、多数の同時リクエストによって悪用され、プログラムの制限やホストコンピューターのリソースを圧迫する可能性があります。その他の攻撃では、ソフトウェアの特定の脆弱性を標的にしたり、SQLインジェクションを利用してデータベースを妨害したりします。
固有の名称を持つアプリケーションDDoS攻撃には、次のようなものがあります。
HTTPフラッド攻撃
HTTPフラッド攻撃は、HTTPコマンドを悪用して、Webサイト、そのホスティングサーバー、サイトへのアクセスに使われる帯域幅を過負荷状態にしようとします。これらの攻撃で使われるボットは、複数のリクエストを連続して送信できるため、ボットネット内の多数のマシンによって標的Webサイトへのトラフィックが飛躍的に増加します。
- GET攻撃:攻撃者はボットネットを使い、大容量のPDFファイルや動画など、大きなファイルに対する大量の同時GETリクエストを送信します。
- POST攻撃:多数のボットが、大きなファイルを標的サーバーに保存するための大量の同時POSTリクエストを送信します。
- Low-and-Slow POST攻撃:多くの場合、R-U-Dead-Yet?(R.U.D.Y.)ツールを使って実行されます。攻撃者は、大量のデータを送信すると示すHTTP POSTリクエストを送信しますが、実際にはごく小さなデータを非常にゆっくり送ります。この攻撃は、大量通信を探知するDDoS防御を回避し、サーバー上のリソースを占有します。
- 単一セッションまたは単一リクエスト攻撃:現在、多くのDDoS防御は大量の受信パケットをブロックするため、攻撃者は代わりにHTTP 1.1の抜け穴を悪用し、1つのHTTPパケット内に多数の異なるリクエストを含めます。
- 断片化HTTPフラッド:大量の正規リクエストを送信する代わりに、ボットネットは正規のHTTP接続を確立し、サーバーが許容する限りゆっくりと送信される小さな断片にHTTPパケットを分割できます。このLow-and-Slow攻撃では、多くのDDoS防御にとって安全に見えるパケットレートを使用しますが、ソフトウェアまたはサーバーはセッションをアクティブなまま維持し、確保された帯域幅によってリソースを消費します。Slowlorisツールによって、この種の攻撃が可能になります。
- 再帰的GETフラッド:攻撃者は、ページや画像の長いリストを要求してサーバーを過負荷状態にしようとします。この攻撃は通常の閲覧行動に見えますが、ボットネットは正規のトラフィックに利用できなくなったリソースを単に消費しています。
- ランダム再帰的GETフラッド:再帰的GETフラッドの亜種であり、検知を回避するため、要求するページをランダム化します。
ReDoS
正規表現DoSは、アルゴリズム上非常に複雑な検索パターンを要求し、リソースを浪費させたり、システムをクラッシュさせたりします。
他にもDDoS攻撃の種類はあるのか?
ボリューム型、プロトコル型、アプリケーション型の攻撃はDDoS攻撃で最も一般的な形態ですが、明確に分類できない攻撃もあります。
高度持続型DoS(APDoS)
APDoSは、深刻な被害を引き起こそうとするハッカーが使用する攻撃手法です。HTTPフラッドやSYNフラッドなど、さまざまな攻撃手法を使い、毎秒数百万件のリクエストを送信する複数の攻撃ベクトルを定期的に標的にします。APDoS攻撃は数週間続くこともあります。これは主に、ハッカーがいつでも戦術を切り替え、セキュリティ防御を逃れるための陽動を作り出せるためです。
マルチベクトル攻撃
攻撃者は、DDoS攻撃を引き起こすために複数の攻撃を同時に展開できます。たとえば、攻撃者はボリューム型攻撃で防御側の注意をそらしながら、別のボットネットから低帯域幅のHTTPフラッド攻撃を同時に実行する可能性があります。
ゼロデイDDoS攻撃
攻撃者は、アプリケーション、プロトコル、ハードウェアに存在する未公開の脆弱性を発見し、DDoS攻撃を実行する可能性があります。新たな脆弱性を悪用する攻撃は、ゼロデイ攻撃です。
結論:DDoS攻撃の阻止と防止
DDoS攻撃の種類を理解することで、攻撃を阻止できるようになります。さまざまなリソースが、さらに多種多様なDDoS攻撃に対して脆弱になる可能性があります。セキュリティチームと運用チームは協力し、リソースの可用性とパフォーマンスを、そのセキュリティおよびリスクとのバランスを取る必要があります。
冗長化はDDoS攻撃への防御と復旧に不可欠ですが、専用の攻撃者は複数のWebサーバーを同時に攻撃することが知られているため、ロードバランサーと冗長化だけでは不十分です。記録的なDDoS攻撃はニュースで取り上げられ、WebベースのDDoS攻撃が持つ膨大な攻撃量の可能性を示しています。
- Googleは最大規模のレイヤー7 DDoS攻撃で4,600万件のリクエストをブロックしました。
- Akamaiは1秒あたり8億900万パケットのトラフィック急増をブロックしました。
- Imperviaは総数253億件のリクエストを伴う攻撃を4時間にわたって阻止しました。
これらの攻撃への防御には、デバイスの強化、冗長化、DDoS対策ツール、DDoS対策サービスを重ね合わせて補完する組み合わせが必要です。さらに、DDoS防止・対応サービスの支援も必要になる可能性があります。
次の記事:





