DoS/DDoS攻撃


 DoS(Denial of Service、サービス不能)攻撃とは、ネットワーク、システムその他のリソースへの正規のユーザからのサービス要求を妨害したり、完全に利用不能に陥れるようなタイプの攻撃です。不正アクセスなどのように不正に利用権限をかいくぐったり、ウィルスを介して、システムの制御を奪ったりといった特定の目的があるわけではなく、正規のユーザがアクセス権限を行使するのを妨害するという攻撃です。

 DoS攻撃は、不正アクセスなどと比較すると、技術的にはるかに簡単です。通常TCP/IPの範囲内で認められていることを一度に頻繁に繰り返したり、際限なく行うだけのことです。しかし、「だけのことです」といっても程度問題です。インターネット上の様々なところから、同時に一か所にDoS攻撃を仕掛けられると(DDoS攻撃、分散型DoS攻撃)、攻撃対象となったネットワーク、あるいはシステムはたまったものではありません。でも、攻撃方法はTCP/IPの範囲範囲内の正当な方法です。悪意を持って、正当な行為をやられと、やられる方も困ってしまうということになります。

 DoS攻撃はアクセス権を奪うわけではありません。普通のTCP/IPの通信を行うだけです。やっていること自体はTCP/IP上の正当な行為です。しかし、TCP/IPはセキュリティ上多くの問題を抱えていますので、このセキュリティ上の問題をつくと、普通にTCP/IPの通信を行うだけで攻撃ができてしまいます。といっても全くTCP/IPの想定通りに通信をしていたのでは何も不都合なことは起こりません。少し、通常とは違う開発者が想定外のことをします。しかし、そのようなツールはインターネット上に山のようにあります。ただそれを使うだけで、攻撃ができてしまいます。

 DoS攻撃には帯域幅を消費してしまう攻撃や、リソースを枯渇させてしまう攻撃があります。これは通常Flood攻撃と呼ばれるタイプです。正常だけれども想定外のパケットを洪水のように送り出すと、それを送られたネットワークや、システムが処理能力を使い果たしてダウンしてしまうという攻撃です。
 例えば想定外のICMPパケットを大量に送信することでネットワークを麻痺させてしまうような攻撃です。あるいはCPUやメモリを大量に消費させてシステムをダウンさせてしまうような攻撃方法もあります。

 もう一つのDoS攻撃はプログラミングの欠陥をついて異常を起こさせる攻撃です。この種の攻撃はプログラムにバグがなければ引き起こされることはありませんが、いままでにバグのないプログラムはたぶんありませんでした。これからも多分ないでしょう。従って、これからもこの種の攻撃は続きます。プログラムの不具合に対してはパッチが公開されますので、パッチができたらすぐに適用してください。




1 Flood攻撃タイプ

 Flood攻撃はインターネット上で公開されている様々なサービスの殆どに対して可能です。主なものとしては次のようなものがあります。

1.1 SYN Flood攻撃

 TCPでは、通信をし合う2つのホストのTCP同士でコネクションを確立します。このコネクション確立の手順を3ウェイハンドシェークといいます。この3ウェイハンドシェークの仕組みを悪用したのが、SYN Flood攻撃です。

 3ウェイハンドシェークでは3ステップでコネクションを確立します。この各ステップでやり取りされるパケットのセグメントヘッダには制御ビットフィールとがあります。この制御ビットフィールドには「URG」「ACK」「PSH」「RST」「SYN」「FIN」というビットが定義されています。

 3ウェイハンドシェークの最初のパケットはクライアントからサーバに送信されるTCPコネクション確立の依頼をするためにパケットで、制御ビットは「000010」となっています。つまり、「SYN」ビットだけがセットされています。次にサーバからクライアントに送信されるパケットの制御ビットは「010010」です。これは、「ACK」と「SYN」がセットされたパケットです。クライアントからのコネクション確立依頼に対する承諾の意味の「ACK」と、サーバからクライアントへのコネクションを確立するという意味での「SYN」を含んでいます。最後の3つ目のパケットは、「010000」で「ACK」ビットだけがセットされています。これは、サーバからのコネクション確立依頼に対するクライアントの承諾を意味します。

 3つのパケットが相互に交換されることでコネクションが確立します。コネクションが確立された状態を「オープン」状態といいます。最初の「SYN」ビットがセットされたパケットと、2つ目の「SYN」「ACK」ビットがセットされたパケットがやり取りされた状態は「ハーフオープン」状態といいます。これはクライアントからサーバへ向けたコネクションは確立されているが、サーバからクライアントへ向けたコネクションはまだ確立されていないという状態ですので、ハーフオープンです。ハーフオープン状態のコネクションは、「ACK」パケットを待っている状態ですので、「ハーフオープン」用のバッファに入れて保存しておきます。確立されたコネクションはオープンバッファに入れて保存します。オープンしたコネクション用のバッファはたくさんの容量を用意しておく必要があります。しかし、ハーフオープン用のバッファは大きなものは必要ありません。オープンするまでの一時的な保存場所ですので、開発者の想定通りの使い方がされるなら、それほど大きな容量は必要ありません。必要以上に大きな「ハーフオープンバッファ」は資源の無駄遣いです。

 攻撃者が「SYN」パケットを送信し、それに対して、サーバが「SYN」「ACK」パケットを送信します。この時点でコネクションはハーフオープンですので、ハーフオープン用のバッファに保存します。開発者の想定通りなら、最後の「ACK」パケットは直ぐに返ってくるはずです。しかし、攻撃者は、「ACK」を返さずに、次の「SYN」パケットを送信してきたらどうでしょうか。これを短時間に繰り返しますと、直ぐにハーフオープン用のバッファは満杯になり、新しいコネクション確立用の「SYN」パケットを受け取れなくなってしまいます。これが、SYN Flood攻撃です。

 もう少し詳しく見てみましょう。攻撃者はSYNパケットを送信するときに送信元のIPアドレスを詐称します。サーバがこの詐称されたIPアドレスに向けて、「SYN」「ACK」パケットを送信します。もし、詐称されたIPアドレスのコンピュータが実際に稼働中ならば、このコンピュータは送った覚えのない「SYN」パケットに対する返事である「SYN」「ACK」を受け取ることになりますので、「RST」ビットをセットしたパケットを送信して、このコネクション確立の手順を終わりにしようとします。サーバがこれを受け取ることができれば、サーバはこのコネクションをハーフオープン用バッファから取り除きます。しかし、攻撃者がよく使う手は乱数発生器を使って送信元のIPアドレスを詐称することです。従って、サーバが「SYN」「ACK」を送信しても、「RST」パケットが返ってきませんので、何時までもこのコネクションをハーフオープン用のバッファに保管して、コネクションの確立をいつまでも待ち続けなくてはならないことになります。これが、ハーフオープン用のバッファが直ぐにあふれてしまう理由です。

 SYN Flood攻撃は最も破壊的なDoS攻撃ですが、既に確立しているコネクションには何の影響もありません。ただし、バッファのメモリ管理をちゃんとしていないと、バッファ溢れを起こしてシステムがダウンしてしまう可能性があります。


■ 対策

(サーバの対策)
 ハーフオープン用のバッファサイズを少し大きめにするという方法がありますが、攻撃者はループを回して、連続攻撃しかけてくるので、あまり効果は期待できません。3ウェイハンドシェークのタイムアウト時間を短くするという手もありますが、これは正当な接続まで破棄することになりかねませんので注意してください。同じ送信元から短時間に何度も接続要求があったら破棄するという手もありますが、これもあまり効果は期待できません。なぜなら、攻撃者は発信元アドレスを乱数発生器を使って生成している場合が殆どだからです。SYN Flood攻撃を防止する機能を持ったOSを導入するという方法は検討に値します。LinuxはSYN Cookie(RST Cookie)という手法を採用しています。SYN CookieはSYN Flood攻撃を受けると、ログに記録し、SYN Cookieと呼ばれる暗号化チャレンジプロトコルを使用して、正規のユーザと攻撃者をえり分けて、正規のユーザからの接続要求にこたえるというものです。WindowsはSYN Attack Protect機能を持っています。

(ファイアウォールの対策)
 ファイアウォールがSYN Floodプロテクト機能を持っている場合はそれを有効にしてください。3ウェイハンドシェークのタイムアウト時間を短くするという手もありますが、上でも言った通り既にタイムアウト時間は最適化されているはずですので、それを変更するのは得策ではありません。

(ルータの対応)
 SYNパケットの帯域制限をしてください。





1.2 Ping Flood攻撃

 ping(ICMP エコーリクエスト)を特定のコンピュータに送りつける攻撃です。

■ 対策
(サーバの対策)
 サービスを停止できるのなら停止してください。
(ファイアウオールの対策)
 該当するポートへのアクセスを拒否
(ルータの対策)
 該当するポートの拒否、または帯域を制限

1.3 Smurf攻撃

 Smurf攻撃はpingブロードキャストのリプライを特定のターゲットに集中させる攻撃です。pingはICMPのエコーリクエストを送信し、応答として返ってくるICMPエコーリプライによってネットワークの導通性を診断するプロトコルです。Smurf攻撃ではこのpingリクエストをネットワーク全体に対して送信します(宛先をブロードキャストアドレスにします)。そして、送信元は攻撃対象のコンピュータのIPアドレスに擬装します。こうすると、ネットワーク全体から、攻撃対象のコンピュータ宛に大量のpingリプライが返されます。ブロードキャストドメインが大きな場合には非常に効率的にターゲットを攻撃することができます。

■ 対策
(ネットワーク構成)
 Smurf攻撃の効果を削減するためにはブロードキャストドメインを小さくすることです。
(ルータの対策)
 ルータの設定でICMPパケットを遮断すること、あるいはそれができないなら、ICMPパケットの帯域を制限することです。あるいは、ブロードキャスト宛のパケットを遮断することができるなら、そうしてください。


1.4 UDP Flood攻撃

 ICMPパケットの代わりにUDPパケットを使用した攻撃がUDP Flood攻撃です。UDPはコネクションレスなので、いきなり極端に大きなサイズのUDPパケットを大量に送りつけることができます。

 Smurf攻撃のように送信元を偽装したUDP Flood攻撃をFraggle攻撃といいます。攻撃者はSmurf攻撃と同様に、送信元を偽装してUDPパケットをネットワークにブロードキャストしますので、偽装したIPアドレスに返事が集中的に返ります。


 UDPパケットとしては、UDPポート7(Echo)、ポート19(chargen)、ポート17(gotd)などが使われます。

■ 対策
(サーバの対策)
 ICMP エコーリクエストに応答しないように設定
(ファイアウォール)
 ICMPの拒否
(ルータ)
 ICMPの拒否、あるいは帯域制限


1.5 Fragment Flood攻撃

 この攻撃は、わざと不適切にフラグメント化したIPパケットを送信し、受信側のTCP/IPフラグメンテーション再構築処理ルーチンを過負荷状態に陥れます。この攻撃で使用されるパケットは、組み立て不能なほど「滅茶苦茶に」フラグメント化されたパケットで、ターゲットマシンはそうとは知らずにパケットの再構築をしようと頑張るため、結果としてシステムがダウンしてしまいます。

■ 対策
(サーバの対策)
 フラグメントパケットの受信数をカウントし、閾値を超えたIPアドレスは接続を拒否するように設定してください。

1.5 Connection Flood攻撃

 標的となるコンピュータのTCPポートに対して次々のコネクションを確立し続け、ソケットを占拠する攻撃手法です。

 コネクションの確立が必要なため送信元の詐称は困難です。

■ 対策
(サーバの対策)
 リソースが許す範囲で同時オープン可能なコネクションの数を増やすこと、TCPのキューの割り当てを増やすことなどが考えられます。何時までもオープン状態を続けられることが原因ですので、デーモンのタイムアウト時間を短く設定するなどの方法も考えられます。
(ファイアウォール/ルータの対策)
 送信元アドレスからのアクセスを制限
(その他の対策)
 負荷分散装置の導入や、同じ送信元からの多数同時コネクションを拒否する機能を導入するという方法も考えられます。


1.6 リロード攻撃

 Webブラウザに備わっているページの再読み込み(reload)機能を使用し、Webサーバに大量のリクエストを送り付ける攻撃です。F5キーを連続して押下することで攻撃できるので、F5攻撃とも呼ばれます。全く技術的な知識がなくてもできてしまうDoS攻撃です。

 プロバイダが提供するサーバの機能によっては、リロードのアクセスは当該端末直近のアクセスポイントにキャッシュされたデータを読みだしているだけに過ぎないことも多いので、Webサーバ自体に過負荷を掛けていることにならない場合もあります。

 Connection Flood攻撃と同様で、送信元を詐称することは困難です。

■ 対策
(サーバの対策)
 標的となるページの容量を減らすとか、Keepaliveを有効にするなどの方法があります。
(ルータの対策)
 送信元アドレスからのアクセスの制限
(その他)
 負荷分散装置の導入。同じ送信元からの多数同時コネクションの拒否の機能の導入

1.7 mail爆弾

 ターゲットに向けて大量のメールを送り付けてメールサーバのディスクやCPU、ネットワーク帯域などのリソースを食い潰す攻撃です。現在はスパムメールに代表される迷惑メールの一種とされています。

 実際の手法としては単純にターゲットとするメールアドレスに大量のメールを発信し、メールボックスを溢れさせるものもあれば、クラッキング用のマルウェアなどを利用してメールサーバに大量のメールを送信するように指示を出し、メールサーバをダウンさせるもの、あるいはDDoSの手法により複数のコンピュータをリモート操作して、送信を指示するものなどがあります。

 メールボックスは以前は一人当たり数Mバイトでしたが、最近では数Gバイトのレベルで用意されていることが珍しくありません。また、メールの本文は殆どが同じ内容なので、メールフィルタリングで比較的簡単に除去できます。また、ベイズ理論に基づいたベイジアンフィルタが強力で、最近はこれを備えているメールサーバが多く、メール爆弾は「爆弾」としての機能を喪失しつつあるというのが一般的な見方だと思います。

※ベイジアンフィルタを実装したスパムフィルタープログラムとしては、SpamAssassin(スパムアサシン)が有名です。




2 脆弱性を狙った攻撃のタイプ

2.1 Ping of Death攻撃

 ICMPパケットの最大サイズ65536バイトを超えるパケットを送信する攻撃です。これに対応できないOSはハングアップしてしまいます。

■ 対策
 ベンダーから提供されているパッチを充ててください。可能ならルータでICMPパケットを拒否してください。

2.2 Teardrop攻撃

 フラグメントオフセット値を改変して不正な値として、パケット再構築メカニズムをハングアップさせる攻撃です。TearDropはTCPを使ったものですが、UDPを使ったものはBonk/Boinkと呼ばれます。

■ 対策
 ベンダーから提供されるパッチを適用

2.3 Out of Band攻撃

 TCPではデータをバイトストリームとして扱うため、データ処理の順番が大切になります。処理すべきデータがバッファに溜まっていても、相手からデータを直ぐにはアプリケーションへは上げず、先行するデータの処理が終わるまで待ちます。しかし、処理の中止命令やエラーなどのように、即座にアプリケーションに渡さなくてはならない情報もあります。このような情報の場合は、TCP/IPではURG(urgent)ビットをセットしてデータを送信します。URGビットのセットされたデータは、通常のデータストリームとはみなされず、バッファの中のデータをスキップして直ぐにアプリケーションにあげられるので、Out of Bandデータと呼ばれています。

 この緊急フラグを悪用して、不正な状態のパケットを送信すると、システムがクラッシュしてしまうことがあります。このようなシステムのバグを突く攻撃をOut of Band攻撃といいます。

 Out of Band脆弱性のあるOSとしては、Windows3.11~Windows95、~Windows NT(Service Pack3)があります。Windows NT、Windows 95のポート139(Netbios)にout-of-bandデータを送信すると、Windowsのネットワーク機能が停止、あるいはクラッシュしてしまいます。Windows以外では、SCO OpenServer 5.0にも、同様の脆弱性があると報告されています。

※SCO OpenServer:SCO(Santa Cruz Operation)が開発したクローズドソース版のUNIX

■ 対策
 Windowsは最新バージョンを使用すること。Windowsサーバも最新のものを使ってください。


2.4 Land攻撃

 TCPの3ウェイハンドシェークを悪用する攻撃です。攻撃者は送信元と宛先を同じ(共に標的ホスト)にしたSYNパケットを標的ホストに送信します。標的のホストは、SYN、ACKパケットを返そうとするのですが、そのアドレスが自分自身になっているので、自分自身に対して返信パケットを送り続けてしまいます。そのため、システムの負荷が高まり、応答不能に陥ってしまいます。

■ 対策
(ルータやファイアウォールの設定)
 外部から送られてくるパケットで、送信元と宛先が同じになっているパケットを探して、破棄することで防御することができます。あるいは、送信元アドレスが内部アドレスになっているパケットが外から来たら、破棄してください。


3 DDoS攻撃

 DDoS(Distributed DoS、分散DoS)攻撃は大量のマシンから1つのサーバに一斉にDoS攻撃を仕掛ける攻撃手法です。DDoS攻撃に利用されるDoS攻撃は殆どの場合はFlood攻撃タイプのものですので、対策もFlood攻撃タイプのDoS攻撃と同様です。

 DDoS攻撃には2つの類型があります。1つは攻撃者が大量のマシンを踏み台にして(不正に乗っ取った上で)、それらのマシンから一斉にDoS攻撃を仕掛けるタイプで協調分散型DoS攻撃と呼ばれています。

 もう一つの類型はDRDoS(Distributed Reflective DoS)攻撃と呼ばれています。このタイプは、攻撃者が攻撃対象のマシンに成りすまして、大量のマシンに対して何らかのリクエストを一斉に送信し、リプライを攻撃対象マシンに集中させることで、攻撃しようとするものです。DRDoS攻撃は、マルウェア等を使って踏み台となるマシンを乗っ取るという必要がありませんので、攻撃が発見しにくいといわれています。




4 EDoS攻撃

 DoS攻撃にはターゲットに経済的なダメージを負わせることを目的として行われる場合もあるようです。このような攻撃をEDoS(Economic DoS)攻撃といいます。






更新履歴       

2016/08/09         作成

























































































 ページの先頭