smurf攻撃の中継への対策

総合情報システム運用センター 曽根 秀昭
sone@tains.tohoku.ac.jp

1 smurf攻撃の中継による大量な通信の発生

1.1 smurfの概略

 今年度に入ってから,TAINS の各部局のサブネットにおいて,何者かの 悪意ある操作によって,きわめて大量の通信を発生させられる例が何件か発生しました。
 この事件の大量の通信は,自動応答を要求する制御用通信を本学のサブネットへ 送り込んできて,そこで大量に複製を発生させることにより,要求元とは別の 被害者へ向けて極めて大量の通信を発生させる攻撃によるものです。 これは smurf (スマーフ)と呼ばれ,被害者へ向けて極めて大量の通信が 殺到するために, コンピュータとネットワークの処理負荷が増大して利用不能になる被害が生じます。 本学のサブネットにおいても,ネットワークの混雑のために,一時的に ネットワークやコンピュータが使用不能に陥ることがあります。
 TAINS を含めて,インターネットと通信できるネットワークの管理者には,smurf 攻撃の中継を防止するように設定することが期待されています。

1.2 smurfの背景など

 Smurf の攻撃者は,標的となる被害者と,中間的な第三者のネットワーク (たとえば,本学のどこかのサブネット)を選びます。攻撃者は,第三者のサブネットの IPブロードキャストアドレスへ向けて,応答要求のための制御用通信 (*1) を送り出します。 しかし,サブネットのIPブロードキャスト(同報)アドレスへ送ることにより, そこのコンピュータが一斉に返答 (*2) を送信します。 攻撃者は,被害者が応答要求を発信したように偽装し,また, 大きなサイズの返答を発生するように仕組むので,被害者へ向けて大きな 通信量の返答が送り付けられます。

[何者か] −応答要求→ [本学のサブネットの各WS] =応答⇒ 被害者

 もしも,特定の被害者に対する smurf をインターネット中の多数のサブネットに 仕掛けたとしたら,世界中からの返答が被害者のところに集中し,負荷が高まって, そのネットワークやコンピュータはサービス不能(応答遅れやダウン) に陥ります。この理由で,smurf 攻撃はサービス不能 (Denial of Service) 攻撃の典型的なものです。
 被害が起こるのは,標的とされた被害者のところだけではありません。Smurf に利用されたサブネットでは,接続しているすべての機器が返答を送出するために 異常に混雑して,利用不能になることが多くあります。 さらに,きわめて大量の通信が被害者のネットワークへ向けて送り出されるために, 本学とインターネットとの接続回線の通信容量が浪費されて,全学的に通信品質の 低下の影響を受けることも多くあります。


(*1) ICMP echo requestという種類のものです。本来は相手方との通信の可能性を 調査するためのものです。
(*2) ICMP echo reply になります。

1.3 対策の概略

 smurf 攻撃の中継を防止するためには,外部からサブネットのIP ブロードキャストアドレスへの通信が入るのを排除することと, IPブロードキャストアドレスへの制御用通信(ICMP)を無視することの, 二通りの対策があります (*3)。 具体的には次の2項目になり,少なくともどちらかが必要です。
  1. サブネットの入り口であるルータにおいてパケットフィルタを設定し, サブネットのIPブロードキャストアドレスへ宛てたパケット(directed broadcast) を外部から内部へ通さないようにする (*4)
  2. サブネット内にあるワークステーションなどにおいて,IP ブロードキャストアドレスへ送られた制御用通信(ICMPメッセージ)には 反応しないように,OSに手を入れる。
 以下,次節ではルータにおいて外部からIPブロードキャストアドレスへの通信を 排除する設定について,3節ではIPブロードキャストアドレスへの制御用通信を 無視する設定について紹介します。
(*3) これらの通信はいずれも,もともと必要ないものですので,対策を施しても支障 はありません。
(*4) 総合情報システム運用センターでは TAINS の入り口であるルータにおいて, 外部からTAINSの共通的なIPブロードキャストアドレスへ送られる通信を排除する 設定を実施しています。ただし,学内のネットワークの構成は多様であるので, この設定だけで防止できるのは一部に限られます。

2 ルータでIPブロードキャストアドレスへの通信を排除する設定

2.1 Cisco 社のルータの場合

 入り口でCisco のルータを使っているサブネットならば,全ての インターフェースについて以下の指定をします。
no ip directed-broadcast

2.2 SunOS ワークステーションを使ったルータの場合

1. SunOS4.1.x のワークステーションの場合

 SunOS4.1.x のワークステーションをルータにしているサブネットならば, そのルータで以下のコマンドをシステム起動時の 初期化ファイル(/etc/rc.localなど)の中で指定しておきます。
echo '_ip_dirbroadcast/W 0' | adb -w -k /vmunix /dev/mem > /dev/null

2. Solaris 2.x のワークステーションの場合

 Solaris 2.x (SunOS 5.x) のワークステーションを ルータにしているサブネットならば, そのルータで以下のコマンドをシステム起動時の初期化ファイル (/etc/rc2.d/S69inetなど)の中で指定しておきます。
ndd -set /dev/ip ip_forward_directed_broadcasts 0

2.3 その他のルータの場合

 参考文献にあげた,Craig A. Huegen のレポートによると,Proteon/OpenROUTE Networks のルータ,Bay Networks のルータ,3Com の NETBuilder 製品などについて, 処置方法があるようです。

3 IPブロードキャストアドレスへの制御用通信を無視する設定

 IPブロードキャストアドレスへ宛てられた制御用通信 (ICMP) は 無視しても良いことになっていますが,無視する設定ができる機種は 多くなかったようです。 しかし,2.2.5以降の FreeBSD,IBM AIX 4.x のように,デフォルトで無視するように作られたシステムもあるようです。

3.1 Solaris 2.x のワークステーションの場合

 Solaris 2.x のワークステーションならば,IPブロードキャストアドレスへの 応答要求(ICMP echo request) を無視するようにできます。以下のコマンドをシステム起動時の初期化 ファイル(/etc/rc2.d/S69inetなど)の中で指定しておきます。
ndd -set /dev/ip ip_respond_to_echo_broadcast 0

3.2 その他の UNIX の場合

 参考文献にあげた,Craig A. Huegen のレポートによると, IBM AIX 4.x(*5),NetBSD など には無視するか,あるいは返答するかを切り替える方法があるようです。 また,Linux には応答要求を無視するようにする設定方法があるようです。
(*5) AIX 3.x では駄目だそうです。

3.3 fraggle攻撃への対策

 Smurf 攻撃に似て,UNIXのコンピュータから大量の通信を発生させるもので, fraggle と呼ばれるものがあります。ついでに, fraggle 攻撃への対策もとりましょう。
 UNIXのネットワーク関係の処理を設定するファイルの /etc/inetd.conf において,echo と chargen が起動されないように,行の先頭に # を付けてコメントします。その後,inetd を再起動させます。

4 中継制限の動作確認

 前節までの対策が有効になっているかを確かめるには, 実際にサブネットの外から応答要求をIPブロードキャストアドレスへ送ってみて, 返答の数を観測するのが確実です (*6)。 テストのために,ping -s コマンドを使います (*7)。 以下では,テストの対象になるサブネットのIPブロードキャストアドレスが 130.34.567.255 であると仮定します。
 対策の設定をしていない場合は,同じ icmp_seq の返答が いくつも表示されます。
% ping -s 130.34.567.255
PING 130.34.567.255: 56 data bytes
64 bytes from hoste (130.34.567.198): icmp_seq=0. time=5. ms
64 bytes from hosta (130.34.567.194): icmp_seq=0. time=6. ms
64 bytes from hostc (130.34.567.196): icmp_seq=0. time=7. ms
64 bytes from server (130.34.567.201): icmp_seq=0. time=8. ms
 対策が有効であれば,返答は icmp_seq について一つずつ 表示されるか,または表示が出ません。 一つだけ返答があるのは,ルータがサブネット内へ中継しなくとも, ルータがそれに返答するためです。
% ping -s 130.34.567.95
PING 130.34.567.95: 56 data bytes
64 bytes from router567 (130.34.56.789): icmp_seq=0. time=6. ms
64 bytes from router567 (130.34.56.789): icmp_seq=1. time=5. ms
64 bytes from router567 (130.34.56.789): icmp_seq=2. time=7. ms

(*6) 少数回のテストに限定し,大きなパケットを使わなければ,実害は無視できます。
(*7) ping コマンドは,応答要求を出して相手との通信到達性を確かめる道具として 使われるコマンドです。所在(パス)は,システムにより異なりますし, 標準では備わっていないこともあります。また,返答の一覧を表示するために ``-s'' オプションを使いますが,システムにより異なる ことがあります。 システムの種類(ping の種類)によっては,複数の返答が戻った場合に core dumpの表示をすることもあります。

謝辞

 本稿は,TAINS利用研究会の議論や皆さんからの情報提供を もとにして作成しました。

参考文献


www-admin@tohoku.ac.jp
pub-com@tohoku.ac.jp