IT用語/DoS攻撃あれこれ

DoS攻撃あれこれ(2014-09-27、更新:2016-11-18)


この手の話題は尽きること無いので、適宜更新していきたいな~とは思っていますが、
とりあえず現状整理しておきたいものだけでも列挙していきます。



DoS攻撃(Denial of Service attack:サービス停止攻撃、サービス拒否攻撃など)

一般的には、攻撃対象のシステムに対して過剰な負荷をかけて、そのシステム本来の機能/サービスを停止させる攻撃手法。
やり方は様々で(後述)、システムの脆弱性を突くものから正常な通信だけど異常なほど大量に送りこむものなど、何でもあり。
だからそれらに対して真面目に対策を講じなければならないシステム管理者はたまったものではないですね。

DDoS攻撃(ディードス。Distributed Denial of Service attack:分散型DoS攻撃)

何が「分散」かというと、攻撃者が分散(不特定多数)ということ。
犯人は一人でも、他の複数の踏み台サーバを経由したり、ボット(BOT*1)等のウィルスで感染させたPC群から、1つの攻撃対象めがけて一斉に攻撃します。
メリット(?)は、防御側は不特定多数の攻撃元(IPアドレス)から来るのでファイアウォール等で防ぐのが面倒になる(逆に特定の攻撃元の場合は、そのIPアドレスからの通信をDenyしてしまうだけで済む)。
攻撃側としては、足がつきにくい、自分の正体がバレにくいなど。

対策は難しいですが、例えば過剰な通信(攻撃とみなせる通信)を自動で止めたり、通信に優先度をつけたりする等(電話で言えば119番とかの緊急回線用の帯域は別枠として確保しておく、とか)。 ここまでくると単純なファイアウォールより一段上の設備が必要になりそうですね。IPSとか*2

余談ですが、バルス祭りって、DDoSみたいなもんですよね?まぁ、お祭り?なんでしょうけど・・・

IPスプーフィング(IP Spoofing)

送信元IPアドレスを詐称して攻撃を仕掛ける方法。
プログラミングやらない人はイメージつきにくいかもしれませんが、送信元IPアドレスって簡単に詐称でます。*3
また、DoS攻撃が目的なら当然応答なんて期待してないので、むしろ送信元IPなんて詐称した方がお得です。
ファイアウォールの設定は送信元IPアドレスが社内か社外かを基準にすることが多いので、社内のネットワークIPアドレス*4を詐称して攻撃を仕掛けます。

対策例は「外部から入るパケットの送信元IPアドレスが自ネットワークのものであれば、そのパケットを阻止する」(情報処理技術者試験より)。
グローバルなIPアドレスで詐称してくるようなら、IPSec等のセキュアな通信と組み合わせて対応する必要が出てくるので、面倒くさいですね。

SYNフラッド(SYN Flood)

まずTCPの3Wayハンドシェイクはググってくださいという前提で。
・・・ごめんなさい、概要だけ書きます。

  1. 太郎さんは、次郎さんと通信がしたいので、
  2. まず、太郎さんが「おい次郎、聞こえるか!(SYN)」と声をかけます。
  3. 次郎さんは、「聞こえたぞ(ACK)、こっちの声は聞こえるか?(SYN)」と返します。
  4. 太郎さんが「聞こえた(ACK)」と言います。
    「ところで、次郎、おまえに貸した金の件だが・・・」とここから通信が始まります*5

以上、これが3WAYハンドシェイクのイメージです。
2人がお互いのSYNとACKを交換し合って、はじめて通信を開始できるという話です。

では、SYNフラッドの話に戻ると、
要は、通信開始の合図(SYNパケット)だけを攻撃対象に送り続けること。
攻撃される側は、通信相手(攻撃者)の最後の通信(ACK)を一定時間待ち続けることになる、攻撃なのか単に応答が遅いだけなのか区別がつかないので待たざるを得ない。
で、通信を待つということは、その分メモリやらスレッドやらのリソースを消費するわけで、それが大量になるとシステムはダウンする、という仕組みです。

対策の例としては、通信を待つ際のリソースを減らすこと。
Linuxの例だと

「/proc/sys/net/ipv4/tcp_syncookies の設定を1(有効)にする」
→イメージとしては、3Wayハンドシェイクの最後のACKが来るまでは
 TCPの「シーケンス番号だけ」を記録しておくに留めておけば、
 大量の通信が来ても大してリソースは必要がない、という原理です。

(ただし、詳細は省きますが、逆に記録する情報が減ることで通信の正当性が測りづらくというなる弊害もあるので注意は必要)

フラグメント攻撃(fragment)

断片(フラグメント) を利用した攻撃全般。
例として、IPで情報を送信する時、そのデータが大きいときは分割(断片化)して少しずつ送ります。
(なんでかというと、ネットワークの帯域が足りないとか、相手機器が一度に処理できないとかの事情から)
では、2つに分割したはずのデータのうち、1つ目しか届いてこない場合、
受信側は残りの1つをいつまで待てばいいのでしょう・・・という事を大量に行う攻撃。

対策例は、ネットワーク監視機器(ファイアウォールやIDSなど)で怪しい通信を見張る、など。
(と、書いてしまうと、基本的にDoSの対策は全部「ネットワーク監視」になっちゃう気がしますが・・・)

スマーフ攻撃(Smurf)

IP spoofingとは逆で、pingの「応答」を利用した攻撃。
送信元IPアドレスを攻撃対象のアドレスに設定して、ping*6要求を例えば世界中にばら撒く。
すると、頼んでもいないping応答が世界中から攻撃対象に帰ってくる、というたちの悪い攻撃の一つ。

対策例はIPスプーフィング同様、ファイアウォールでの送信元IPのチェックなど。
環境によってはICMP*7自体をファイアウォールでDenyしてしまう事も珍しくはないですね。

DNS amp(DNS amplification)/NTP amp(NTP amplification)

amplificationは「拡大」の意味。
理屈は前述のスマーフ攻撃と同じで、送信元IPアドレスを詐称した要求をばら撒いて、攻撃対象に頼んでもない応答をにたらふく喰らわせる方法。
特徴として、攻撃の効率が良い。
うまくやればDNS*8/NTP*9の数byte~数十byteの要求に対して、その数百倍の応答が帰ってくる。この辺が「amp」ということです。

前述のスマーフも「応答」を攻撃に利用したことから、「リフレクション攻撃」ともいう。

対策例はIPスプーフィングやスマーフと同じですが、重要なのは攻撃に加担しないことになります。
具体的には自社でNTPサーバやDNSサーバを用意したときに、無用な外部からの要求には応答しないようにしたり、DNSならキャッシュサーバは外部には公開しない、とかになります。


なんか、このページは注釈ばっかりになっちゃいました・・・


*1 コンピュータウィルスの形態の1つ。何らかの方法で攻撃者との通信手段を持っていて、攻撃者が攻撃タイミングを指示したりできる場合が多い。ボットの一例として「Mirai」があります。
*2 Intrusion Prevention System:侵入防止システム。通信状況を監視して動的にフィルタリングのルールを変えたりできる。ただ、その動的な部分で「誤検知」が多くて、僕には玄人向けの装置ってイメージが強いです。
*3 僕は昔はUnix&C言語erだったんですが、Unixネットワークプログラミングの本とか一冊買えば本当に詐称盗聴が簡単にできるのを知って感動?したものです・・・
*4 社内のIPアドレス(プライベートIP)は三択クイズみたいなものなので推測は容易です(10.0.0.0/8か、172.16.0.0/12か、192.168.0.0/16のどれか)
*5 次郎さんの運命やいかに
*6 pingといえばネットワークエンジニア御用達のコマンド。IPレベルの疎通を確認する為に対象に「生きてますか?」リクエストを送信して、その応答の有無や応答速度を測る。潜水艦のアクティブソナーが由来。プロトコルがTCPでもUDPでもなくICMPな所が試験にしょっちゅう出るポイント。
*7 Internet Control Message Protocol。名前の通り、通信制御状態を調査できるプロトコル。その為「攻撃」の為の調査に利用されることもしばしば。
*8 Domain Name System。ドメイン名(null-i.net)の問合せに対してIPアドレス(219.94.~)を返したりする便利なプロトコル。詳細は IT用語/DNS
*9 Network Time Protocol。時計を正確な時刻に合わせるための便利なプロトコル

  最終更新のRSS