盗聴ノード発見ツール「PromiScan」

 では,実際にARPパケットを利用して盗聴ノードを発見するツール「PromiScan」を使って,盗聴ノード発見の手順を説明しよう。このツールは筆者が作成し,Web上(http://www.SecurityFriday.com/)で公開しているものだ。

表4 盗聴ノード発見ツール「PromiScan」を利用するために準備するもの
 PromiScanをインストールするには,その前にパケット・キャプチャ・ドライバ「WinPcap」をインストールする必要がある(表4[拡大表示])。表4に示したWebページから,auto-installerタイプをダウンロードして実行すると,WinPcapのインストールは完了する。

 次に,PromiScanをインストールする。SecurityFridayのサイトから最新版(現在promiscan027.zip)をダウンロードして解凍すると,三つのファイルが現れる。これらのファイルをどこかの任意のフォルダに移動し,PromiScan.exeをクリックすればPromiScanが起動する。

図8 PromiScanをセットアップするためのダイアログ・ボックス
図9 PromiScanを稼働した結果例。「X」マークが,盗聴ノードである可能性を示している
表5 PromiScanが盗聴ノード発見のためにデフォルトで使うARPパケット。表2を参照

基本セットアップ

 PromiScanが起動したら,Setupメニューを選択し,基本的なパラメータを設定する必要がある(図8[拡大表示])。必要な設定項目は以下の通りだ。

(1)「Network I/F」はNICを選択する。NICを複数枚使用している場合などには選択が必要。

(2)「IP Address」には,ARPパケットの送信元となるIPアドレスを設定する。この時,自分のPCに設定している正しいIPアドレスは使わない。同じネットワーク上で,誰も使っていないIPアドレスを設定する。

(3)「MAC Address」には,ARPパケットの送信元になるMACアドレスを設定する。この時も,実在しないMACアドレスを設定する。この値はデフォルトで「00 11 22 33 44 55」となっている。特に理由がなければこのままでよい。

(4)「Scan Option」は,「Default」ボタンをクリックすれば,基本の値がセットされる。

PromiScanを動かしてみる

 以上の設定が完了したら,PromiScanのメイン・ウインドウで,スキャンを実行するIPアドレスのレンジを指定し,「START」 ボタンをクリックする。これで,スキャンが開始され,結果がテーブルに表示される(図9[拡大表示])。この時のスキャン・レンジは,原則として自分のマシンが接続されているネットワーク・アドレスの範囲内を設定する。もし,結果に何も表示されないときは「Network I/F」や「IP Address」などを再確認する。

 PromiScanをデフォルト設定のまま動かすと,まずはブロードキャスト・アドレスあてに,指定レンジ内の全IPアドレスに対するARPリクエストを送信し,応答のあったIPアドレスをテーブルにリストアップする。

 続いて,4種類の特殊なあて先アドレスのARPパケットでテストする。デフォルト設定で使うあて先アドレスは表5[拡大表示]の通りである。いずれのアドレスもノーマル・モードのNICがフィルタリングするはずのアドレスだ。つまり,これらのアドレスに対してARPの応答があった場合には,何らかの理由でNICのフィルタを通過したと考えられる。

実行結果の見方

 PromiScanの実行結果は,メイン・ウインドウのテーブルに表示される。ノーマル・モードで応答しないはずのパケットに応答があった場合,「X」マークが付加される(図9)。すなわち,「X」が付けられたノードが,プロミスキャス・モードの可能性のあるノードということになる。

 前述した通り,プロミスキャス・ノードはOSの実装によって,ARPリクエスト・パケットに対する応答が異なる。このため,「X」マークが現れたノード(応答するはずのないARPパケットに応答したノード)が盗聴ノードだとはすぐには決められない。しかし,一般的な状態ではないことは確かで,その原因を調べる必要がある。

 いくつかのケースを例として挙げておこう。

(1)B31とB16だけに「X」マーク

 これは,Windows NT/2000/XP Professionalがプロミスキャス・モードの時の特徴である。該当マシンを実際にチェックしてみる必要があるだろう。しかし,後で説明する古いNICによる例外の可能性もある。この点での考慮が必要だ。

(2)B16だけに「X」マーク

 これは,特殊なNICまたはドライバが使われている場合やWindows 2000でキャプチャ・ドライバがインストールされている場合に見られる結果である。このようなノードについては,時間をあけて繰り返し監視し,B31に「X」マークが付く状態(プロミスキャス)になるかを追跡する必要があるだろう。

(3)B31,B16,B8に「X」マーク

 これは,Windows 9x系がプロミスキャス・モードの時の特徴である。古いNICなどの例外を考慮することも必要だが,そのノードで動いているソフトウェアの状態を直接チェックする必要がある。

(4)B31,B16,B8,Grに「X」マーク

 この場合に考えられるのは,LinuxやFreeBSDなどがプロミスキャス・モードのケースだ。ただし,x86プロセサで動作するSolarisは,マルチキャスト・パケットには一切応答しない。このため,この方法では検出できない。

 また,Windows 2000/XPのWinsock2で,「SIO_RCVALL」モードを使って盗聴している場合にも,B31,B16,B8,Grともにマークが現れるようだ。LinuxとWindowsの判別は,後で説明する応用スキャンのIEEE802.3のARPパケットをテストしてみることで判別できる。

PromiScanが誤認する例外

 残念ながら,ARPパケットを使ったプロミスキャス・ノードの検出技術は完全ではない。例えば,IPアドレスを割り当てていない盗聴ノード(このような状態をステルス状態と呼ぶ)は発見できない。また,NICのドライバが古い場合,プリンタやルータなどが特殊な応答を返すことがある。この場合,プロミスキャス・モードでないノードをリストアップすることがある。現在,筆者が把握している代表的な例外は次の通りである。

(1)無線LANのアクセス・ポイントやブロードバンド・ルータ,ネットワーク・プリンタ関連

 無線LANのアクセス・ポイントやブロードバンド・ルータの中には,ブロードキャスト・アドレスやマルチキャスト・アドレスの判定が完全でないものがある。通常状態において,プロミスキャス・モードの応答を示してしてしまうことがある。これはベンダ情報などを基に区別する必要がある。

(2)古いNIC

 特に多く見られるのが,3Com社の「Etherlink?」など古い10BASEのNICである。3ComのNICは米Dell Computer社のPCにオンボードで装備されているものもあり,判別しにくい(この場合ベンダ情報が3Com,Dellとなる)。

 この手のNICは,正式なマルチキャスト・モードに対応していない。マルチキャスト・リストを持っていないため,NIC自体がマルチキャスト・アドレスを正確にフィルタリングできない。デフォルトでオール・マルチキャスト,すなわちグループ・ビットだけを判定して通過させるように動作しており,プロミスキャス・モードでなくてもグループ・ビットが設定されたパケットをすべて通過させてしまう。

 このため,非盗聴ノードを盗聴ノードだとリストアップする。各ノードを確認すれば済むが,できれば新しいNICに取り換える方が確実である。

(3)3c905x+Linux

 3Comの「3c905x」などのマルチキャストに対応した新しいNICを使っていても,Linuxで利用すると常にプロミスキャス・モードの応答を示してしまうことがある。これは,Linuxのインストーラが自動的に古い3Com用のドライバをインストールし,結果としてドライバがマルチキャスト・リストに対応していないために起こる。

 この問題は,/etc/modules.confを書き換え,正しいドライバを設定することで解決する。

応用スキャンと外部コマンド実行

 PromiScanは,以上の利用方法のほかに役立つ使い方もある。

表6 PromiScanのオプションを設定することで送信できるARPパケット

(1)あて先アドレスの設定

 デフォルトのB31,B16,B8,Grのパケット以外に,別のあて先MACアドレスを設定したARPリクエスト・パケットを送信することもできる。Setupウインドウの「Scan Option」で,表6[拡大表示]のようなパケットが選択できる。

(2)EthernetとIEEE802.3

 一般にLANでは,Ethernetフォーマットが使われているが,IEEE802.3フォーマットでパケットを送信することもできる。

図10 IEEE802.3フォーマットのARPリクエスト・パケットに対しての応答は小文字の「x」「o」で示す。IEEE802.3フォーマットに対してはWindowsだけが答える
 Windowsだけは,このIEEE802.3フォーマットのARPリクエスト・パケットに対して,Ethernetフォーマットで応答する特徴があり,IEEE802.3を選択してスキャンを実行すると,Linuxやルータ,プリンタなどを除いてWindowsだけを調べることができる。このオプションを選択した時にレスポンスがあった場合は,小文字の「x」「o」で表示される(図10[拡大表示])。

(3)外部コマンドの実行

 PromiScanの実行によって怪しいノードを見つけた時,そのノードを別のコマンドで調査することが多々ある。PromiScan027では,外部コマンドを簡単に実行できるようになっている。結果を表示したテーブル上の怪しいノードの行でダブル・クリックすると,外部コマンドが実行される。

 外部コマンドはnbtstatをデフォルトで設定している。相手がWindowsなら,ノードのステータスを表示できるはずだ。外部コマンドの実行は,IPアドレスやMACアドレスを引数として,自分で設定できる。ping,net send,explorerなどを設定しておけば,ダブル・クリックでそれらを簡単に起動できる。もちろん,カスタム・ツールも起動可能だ。

 今回紹介したARPパケットによるネットワーク盗聴ノードの検出手法は,手軽にかつ稼働中のネットワークに大きな影響を与えずに実行できる。実用的で有効な手法である。

 しかし,残念ながら前述の通りパーフェクトではない。それゆえ,盗聴ノードの検出は,最終的には人が介在してチェックしなければならない。

 とはいえ,盗聴ノードを検出できるツールが存在することを知らしめることは,盗聴行為自体を減少させることができ,問題解決の第一歩になるだろう。今回紹介した「PromiScan」の存在や,その使用を社内で告知することで,盗聴行為を抑止していきたいものだ。

 一つだけ注意してほしいことがある。PromiScanを実行すると,通常は飛ばないARPパケットが送信される。このため,システム管理者でない場合は不正アクセスの疑いをかけられる可能性がないとは言えない。これを承知のうえで,トラブルを起こさないように,自分の権限の範囲で実行しなければならないことを忘れないでいただきたい。

Daiji Sanai
筆者は,ネットワークセキュリティ研究チーム「SecurityFriday.com」のリーダ。2001年7月に米国ラスベガスで開催された有名なセキュリティ技術カンファレンス「The Blackhat Briefings '01」において、「ARPパケットを用いたプロミスキャスノード検出技術」についての発表を行った。