DoS攻撃・DDoS攻撃とは ― SYNフラッドと増幅攻撃
DoS攻撃は
DoS攻撃・DDoS攻撃とは、サービスを使えなくする攻撃
Webサイトやオンラインサービスが突然つながらなくなる原因の1つが、DoS攻撃です。DoS攻撃は、サーバやネットワークに大量の通信を送りつけるなどして、正規の利用者がサービスを使えない状態にする攻撃です。DDoS攻撃は、同じことを多数の機器から同時に行う攻撃です。
DoSはDenial of Serviceの略で、日本語ではサービス妨害攻撃と呼びます。DDoSの頭のDは、分散を意味するDistributedの頭文字です。DoSとの違いは、攻撃の送信元が1台か多数かです。
目的は、データを盗んだり書き換えたりすることではなく、サービスを使えなくすることです。情報セキュリティの3要素でいえば、可用性を狙う攻撃にあたります。標的の機器に侵入せず、通信を送るだけで成り立つ攻撃が多いのも特徴です。そのため、不正アクセスへの備えであるID・パスワードの管理だけでは防げません。
DoS攻撃は、人の心理的な隙を突くソーシャルエンジニアリングや標的型攻撃とも違います。狙うのは、通信の決まり(プロトコル)の仕組みそのものです。
DoSとDDoSの違いは、攻撃元の数
DoS攻撃の攻撃元は1台です。1台の機器から標的へ通信を送り続け、標的の処理能力や回線を使い切らせます。
DDoS攻撃の攻撃元は多数の機器です。攻撃者は、ウイルスなどで多数の機器を乗っ取り、指令を出して一斉に通信を送らせます。乗っ取られた機器の集まりをボットネットと呼び、その中の1台1台をボットと呼びます。機器の乗っ取りに使うマルウェアの種類は、マルウェアの種類の記事で説明しています。
DDoSでは、標的に集まる通信が増えます。通信が多数の送信元から来るため、攻撃元を1つずつ止める方法も効きにくくなります。攻撃の本当の出どころも、見つけにくくなります。
乗っ取られた機器の持ち主も、被害者です。自分の機器が攻撃に使われていることに、気づかない場合があります。
DoS攻撃の種類:何を使い切らせるか
DoS攻撃は、標的が持つ資源のどれかを使い切らせます。使い切らせる資源で分けると、手口の違いが見えやすくなります。
| 使い切らせる | 代表的な | 詳しく |
|---|---|---|
| 回線の帯域 | 大量の通信で回線を埋める。増幅攻撃もこの仲間 | 増幅攻撃の節 |
| メモリ(接続の状態を覚える領域) | SYNフラッド | SYNフラッドの節 |
| CPUの処理能力 | 大量のパケットに照合や応答をさせる | 種類の節の末尾 |
インターネットの技術文書RFC 4732は、アプリケーションが使い切らされる資源を挙げています。メモリ・CPU・ディスク・プロセス数・同時接続数の上限です。資源によって、攻撃が止まったあとの回復の様子も違います。CPUは攻撃が止まれば空きますが、ディスクの空きは、消す処理をしないと戻りません。
次の2つの節では、表の「回線の帯域」と「メモリ」を使い切らせる代表的な手口を説明します。メモリを狙うSYNフラッドは、帯域を埋める攻撃より少ないパケットで済みます。帯域を狙う手口には、通信を何倍にも膨らませる増幅攻撃があります。
SYNフラッド:接続の待ち枠を使い切る
SYNフラッドは、SYNだけを大量に送り、サーバの接続の待ち枠を使い切らせる攻撃です。TCPは、3ウェイハンドシェイクという3回のやりとりで接続を始めます。SYNフラッドは、最初のSYNだけを送り、最後のACKを返さないことで成り立ちます。
サーバは、SYNを受けると、その接続の情報を覚えてからSYN+ACKを返します。最後のACKが届くまでのこの状態を、半開き接続と呼びます。多くのOSは、覚えておける半開き接続の数に上限を設けています。
この上限が埋まると、新しいSYNは無視されるか、未完了の接続が置き換えられます。どちらになるかはOSによって違います。正規のクライアントのSYNも、同じ扱いを受けます。
攻撃者は、送信元アドレスを偽装することが多いです。この場合、サーバのSYN+ACKは偽装された送信元へ届きます。そのアドレスの持ち主も、巻き添えの被害を受けます。
偽装した送信元が動いている機器だと、接続を断るRSTが返り、枠はすぐに空きます。そのため攻撃者は、SYN+ACKに何も返さないアドレスを送信元に選びます。次の図で、受付表が埋まる様子を1段ずつ確かめられます。
正規のクライアント(192.0.2.10)が、サーバへSYNを送ります。サーバは、この接続を受付表の1枠に書き留め、SYN+ACKを返します。この状態を半開き接続と呼びます。
クライアントが最後のACKを返すと、接続が確立します。この接続は、半開きの待ちを終えて受付表から出ます。ふつうは、枠はすぐに空きます。
攻撃者は、送信元を偽装したSYNを次々に送ります。サーバは、そのたびに受付表へ書き留め、偽装された送信元へSYN+ACKを返します。送信元には、SYN+ACKに何も返さないアドレスが選ばれています。ACKも、接続を断るRSTも返ってこないので、枠は空きません。
正規のクライアントがSYNを送っても、受付表に空きがありません。この場合、新しいSYNは無視されるか、未完了の接続が置き換えられます。どちらになるかは、OSによって違います。待ち時間が過ぎて枠が空いても、攻撃者が次のSYNを送り続ければ、すぐ埋まります。
SYNクッキーを使うサーバは、SYNを受けても受付表に何も書き留めません。必要な情報を、返すSYN+ACKのシーケンス番号に埋め込みます。本物のクライアントからACKが返ると、その番号から情報を復元して接続を作ります。偽装されたSYNには返事が来ないので、何も残りません。
待ち時間を短くして枠を早く空ける方法もありますが、攻撃者が送る頻度を上げれば効果は薄れます。一方、SYNクッキーという方法は、そもそも枠を使いません。接続の情報を、SYN+ACKのシーケンス番号に埋め込むからです。このため、SYNフラッドへの代表的な対策になっています。
ただし、SYNクッキーはTCPの一部の機能と両立しない場合があります。そのためRFC 4987は、SYNクッキーを初期設定では有効にしないよう勧めています。
増幅攻撃:小さな要求を大きな応答に変える
増幅攻撃は、小さな要求を送り、標的に向けて大きな応答を返させる攻撃です。応答を返す側のサーバを、反射サーバと呼びます。増幅攻撃を反射攻撃と呼ぶこともあります。
攻撃者は、要求の送信元アドレスを標的のアドレスに書き換えます。反射サーバは、要求の送信元に応答を返すので、応答は標的へ届きます。
この手口は、送信元アドレスを偽装できる攻撃者にしか使えません。送信元を確かめるやりとりを挟まないUDPのサービスは、偽装された要求にも応答してしまいます。DNSは、その代表例です。
応答が要求の何倍になるかを、増幅率と呼びます。アメリカのサイバーセキュリティ機関CISAは、帯域増幅率を表にまとめています。帯域増幅率は、応答のデータ部分(UDPペイロード)のバイト数を、要求のバイト数で割った値です。
| 反射に | 増幅率 |
|---|---|
| DNS | 28〜54倍 |
| SSDP | 30.8倍 |
| NTP | 556.9倍 |
| Memcached | 10,000〜51,000倍 |
たとえば増幅率が28倍のサービスに10Mbps分の要求を送ると、単純計算で280Mbps分の応答が標的へ向かいます。攻撃者の回線が細くても、標的には大量の通信が届きます。
TCPのSYN+ACKの再送を使う増幅もあります。この場合も、偽装した送信元から反射サーバへSYNを送り、返ってくるSYN+ACKが標的へ向かいます。標的からRSTも最後のACKも返らないと、反射サーバはSYN+ACKを何度か再送します。その分だけ、標的に届く通信が増えます。
対策の考え方
対策は、狙われる資源と手口ごとに変わります。次の表は、ここまでの攻撃と対策の対応です。
| 狙われる | 対策 | 仕組み |
|---|---|---|
| SYNフラッド | SYNクッキー | 受付表に何も書き留めず、SYN+ACKのシーケンス番号に情報を埋め込む |
| SYNフラッド | 手前の機器での代理応答 | ファイアウォールなどが接続の完了まで受け、完了後に本来のサーバへ中継する |
| 送信元を偽装する攻撃 | 偽装した送信元の遮断 | ISPなどが、割り当てた範囲に無い送信元アドレスのパケットを捨てる |
| 増幅攻撃 | 大きな応答を返す前の確認 | 送信元が本物かを確かめるやりとりを挟んでから、大きな応答を返す |
| 帯域・処理能力の全般 | 容量の余裕と分散 | 予想できるピークに耐える容量を用意し、提供拠点を分散する |
送信元の偽装を遮断する対策は、BCP 38として知られるRFC 2827が定めています。ISPなどが、割り当てた範囲に無い送信元アドレスのパケットを捨てる方法です。ただし、正当なアドレスから送られる攻撃や、乗っ取られた多数の機器からの攻撃には効きません。世界中で導入される保証もないので、受ける側がこの対策だけに頼ることはできません。
ファイアウォールは、通す通信を絞る仕組みです。SYNフラッドでは、ファイアウォールが接続の完了まで手前で受ける使い方もあります。ただし、DDoSの通信は多数の送信元から来るので、正規の通信と見分けにくくなります。送信元や宛先ポートの絞り込みだけでは、防ぎきれません。通信の流れがふだんと違うことから攻撃を見つけるには、IDSやIPSを使います。
急に増えた正規のアクセスと、巧妙なDoS攻撃は、原理的には区別できません。そのためRFC 4732は、最初の防衛線として、予想できるピークに耐える容量を用意することを挙げています。容量が足りないサイトは、最も落としやすい標的です。
もう1つの考え方は、サービスの提供拠点を分散することです。拠点が複数あれば、全体を攻撃するのが難しくなります。
ロードバランサは、複数のサーバに処理を振り分けます。CDNは、世界中のエッジサーバでコンテンツを配ります。どちらも、1か所に通信が集中しない形を作る仕組みです。クラウドでは、AWS WAFとShieldのような防御サービスも使えます。
練習問題(全6問)
正解:DoS攻撃の
どちらも、
正解:ハンドシェイクが
SYNを
正解:SYN+ACKは
サーバは、
正解:280Mbpsから
10Mbpsの
正解:SYNを
SYNクッキーは、
正解:原理的には、
RFC 4732に
選んでから「採点する」を押すと、解説つきで答え合わせができます。
参考にした資料
- RFC 4987 TCP SYN Flooding Attacks and Common Mitigations(SYNフラッドの仕組みとSYNクッキー)
- RFC 4732 Internet Denial-of-Service Considerations(DoS・DDoSの定義、増幅攻撃、対策の考え方)
- RFC 2827 Network Ingress Filtering(送信元アドレス偽装の遮断)
- CISA UDP-Based Amplification Attacks(サービスごとの増幅率)
- CISA Understanding Denial-of-Service Attacks(DDoSとボットネット)
関連記事
おすすめの本 PR
セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

