今回は,「Sys-Security Group」という団体(サイト)が開発したスキャニング・ツール「Xprobe」を取り上げ,ICMP(Internet Control Message Protocol)パケットを制限することの重要性について考えてみたいと思う。

 通常,攻撃者が事前に情報収集をする際,TCP や UDP アプリケーションを利用することが一般的である。そのため,ルーターやファイアウオール等でパケット・フィルタリングする場合,TCP や UDP パケットについては注意を払う。しかし,ICMP パケットについては比較的軽視されがちであると思う。ところが,ICMP でもある程度の情報収集ならば可能なのだ。

ICMP と「Xprobe」

 ICMPとは,ホストやデバイス同士がエラー・メッセージや制御メッセージなどをやり取りするためのプロトコルである。実装形態としては,ping や traceroute といったアプリケーションに代表されるように,主にリモート管理等を目的として利用されることが多い。そのため,ICMP パケットを許可しているサイトは多い。しかし,ICMPを利用する必要性がないにもかかわらずICMP パケットの通過を許可しているサイトも多いようだ。この点に着目したのが,Ofir Arkin 氏によって創設されたサイト「Sys-Security Group」である。同サイトでは,「ICMP Usage in Scanning Project」として,ICMP を利用したスキャニング手法を研究している。

 そのプロジェクトの過程で,ICMP を利用して対象サイトのOSを特定する理論が発見された。この理論は「X」と呼ばれている。そして,「X」を実践するために,Fyodor Yarochkin 氏等によって開発されたツールが「Xprobe」である。

 Xprobe は,「OS フィンガープリント」を利用する。OS フィンガープリントとは,OS の指紋(fingerprint),つまり OS を特定するための特徴を指す。OS フィンガープリントは,TCP/IP のスタック構造の違いに起因する。具体的には,パケットを生成する際の,各ヘッダー(TCP や IP など)内の,各フィールド値の設定規則の違いなどである。ベンダーによって異なる理由は,それぞれで RFC(Request for Comment) の解釈が違うためである。

 ポート・スキャナ・ツールとして有名な「nmap」も,OS を特定する機能がある。“-O”オプションを付けて利用することにより,高い精度で OS を特定できる([参考資料])。しかし,nmap は主に TCP パケットのヘッダーを情報源としており,Xprobe とは仕組みが異なる。以下,Xprobe の仕組みを詳しく説明する。

Xprobe の仕組み

 Xprobe では,5種類のパケットを用いる。

  1. 明らかに閉じられていると思われるポートに対する UDP パケット
  2. ICMP Echo Request(Type:8)
  3. ICMP Timestamp Request(Type:13)
  4. ICMP Information Request(Type:15)
  5. ICMP Netmask Request(Type:17)

 これらのパケットを組み合わせて送信し,返信された ICMP パケットの IP ヘッダーを基に OS を特定するのである。

 3 ~ 5 に関しては,応答パケットの有無自体が判断材料となる。1 と 2 については,以下の IP ヘッダー内のフィールドを情報源とする。

  • Total Length(総パケット長)
  • Identification(識別子)
  • Type of Service(サービス・タイプ)
  • Flag(フラグ)
  • Fragment Offset(フラグメントのオフセット)
  • Time to Live(有効期限)
  • Checksum(チェックサム)

 例えば,Time to Live(TTL)に関しては,ICMP Echo Requestを使用する ping などのツールでも,その生成規則が異なることが分かる。具体的に見てみよう。以下は,上から順に,同一セグメント上にある Windows NT 4.0 Server,Windows 2000 Professional,Solaris 7搭載のIntel マシンに対して ping を打った結果である。それぞれで TTL の値が異なる。

C:\>ping 10.0.0.1 (Windows NT 4.0 Server)

Pinging 10.0.0.1 with 32 bytes of data:

Reply from 10.0.0.1: bytes=32 time<10ms TTL=64
     ・・・・・・・・・

C:\>ping 10.0.0.2 (Windows 2000 Professional)

Pinging 10.0.0.2 with 32 bytes of data:

Reply from 10.0.0.2: bytes=32 time<10ms TTL=128
     ・・・・・・・・・

C:\>ping 10.0.0.3 (Solaris 7 intel)

Pinging 10.0.0.3 with 32 bytes of data:

Reply from 10.0.0.3: bytes=32 time=10ms TTL=255
     ・・・・・・・・・

 同様に,他のフィールドに関しても,OS の種類に依存した生成規則がある。そのため,これら ICMP パケットを利用することで,OS フィンガープリントを取得することが可能となるのである。ちなみに,Xprobe では 4 ステップ以内で 26 種類の OS を判別できる。

 以下は,Windows 2000 Professional マシンに対して Xprobe を実行した結果である。

# ./x -v 10.0.0.2
X probe ver. 0.0.1p1
------------------
Interface: eth0/10.0.0.10

LOG: Target: 10.0.0.2
LOG: Netmask: 255.255.255.255
LOG: probing: 10.0.0.2
TEST: UDP to 10.0.0.2:32132 [98 bytes] sent, waiting for reponse.
TREE: IP total length field value is OK
TREE: Frag bits are OK
TEST: ICMP echo request to 10.0.0.2 [68 bytes] sent, waiting for reponse.
TREE: Microsoft Windows Family TCP stack
TREE: Other Windows-based OS (ttl: 128)
FINAL:[ Windows 2k. SP1, SP2 ]

 この例では,始めに UDP パケットを,次に ICMP Echo Request を送信し,それらに対する返信 ICMP パケットを基に,OS が Windows 2000 であると判断している。

◇     ◇     ◇     ◇     ◇     ◇

 TCP や UDP では困難でも,ICMP が許可されているために,今回紹介した Xprobe ようなツールを使えば OS を特定できてしまうサイトは意外に多い。もちろん,「この程度の情報ならリスクも低いだろう」という考え方もあるだろう。OS 情報の漏洩自体は,侵入の原因となり得る直接的な問題ではない。

 しかし,「不必要なサービスは提供しない」というセキュリティの定石に則るならば,TCP や UDP パケットと同様,不必要な ICMP パケットも制限すべきなのである。LAN 内の ICMP パケットまでフィルタリングする必要はないが,グローバル IP アドレスを割り当てられているルーターやファイアウオール,各種サーバー・マシンでは,不要な ICMP パケットを制限することが望まれる。

 ただし,闇雲にフィルタリングすることは避けなければならない。フィルタリングによって問題が発生する場合があるからだ。例えば,ICMP need fragment をフィルタすると,path MTU discovery が機能しなくなってしまい,状況に応じた効率の良いデータ転送ができなくなるという問題が発生する(詳細については参考資料を参照のこと)。

◎参考資料
Sys-Security Group
Remote OS detection via TCP/IP Stack FingerPrinting (日本語訳)
INTERNET CONTROL MESSAGE PROTOCOL (RFC 792)
Path MTU Discovery and Filtering ICMP


矢次 弘志 (Hiroshi Yatsugi)
株式会社ラック 不正アクセス対策事業本部
yatsugi@lac.co.jp


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。