近年,「盗聴」に関する話題を多く耳にする。FBI(米連邦捜査局)の電子メール監視システム「カーニボー(Carnivore)」,英語圏5カ国で編成する通信傍受機関「エシュロン(Echelon)」などが関心を集めている。国内においても,「通信傍受法」や「サイバー犯罪条約」など,盗聴に関する話題には事欠かない。

 これらはあまりに“大きな”話であるため,一般の人には実感がわかないだろう。しかし,盗聴は身近に存在する。ネットワーク(LAN)において,他のユーザーが送受信するデータを“盗聴”することは非常に容易だ。そのためのプログラムが存在し,実際に悪用されているようだ。プログラムを使えば,他人のメールを盗み読みしたり,パスワード情報を不正に取得したりすることが可能となる。

 そこで今回のコラムでは,ネットワーク盗聴の脅威や仕組み,そして盗聴を発見する方法について解説する。

ネットワーク盗聴は痕跡を残さない

 盗聴プログラムは,インターネットから容易に入手でき,無償で使用できる。そのため,特別なスキルを持たなくても盗聴は可能だ。盗聴プログラムとしては「tcpdump」が有名であるが,それ以外にも様々なプログラム(ツール)が存在する。中には,まるで自分に届いたメールを見ているかのように,他人あてのメールを見ることができる,簡単に使えてしまうツールまで存在する。

 また,盗聴にはリスクが少ない。流れるパケットを盗み見るだけなので,どこにも記録が残らないからだ。ターゲットとしているホスト(ユーザー)に対して何らアクションを起こさないばかりか,ネットワークに自分のパケットを流すこともしない。そのため,ターゲットとなった“被害者”は,通信内容が盗聴されたことを証明できないだけでなく,盗聴されたことにさえ気づかない場合が多い。

 唯一盗聴の障壁となるのは,ターゲットとなるユーザーと同じネットワークに接続しなければならないということだ。もちろん,物理的に接続しなくても,そのネットワーク上のホストに「トロイの木馬」などを仕掛けることでも盗聴は可能である。しかしながら,それでも障壁になることには変わりがない。

 ところが,この障壁がまったくないユーザーがいる。同じネットワークにあらかじめ接続されているユーザーだ。実際,盗聴においては内部犯行が非常に多いと言われている。前述のように,盗聴は非常に容易である。あなたも既に盗聴されているかもしれない・・・。

「プロミスキャス・モード」で盗聴する

 盗聴は記録に残らない。しかし,盗聴者を発見することはできる。そして,そのためのツールも存在する。例えば,「AntiSniff」が有名だ。AntiSniffについて説明する前に,盗聴プログラムがどのように盗聴を行うのかについて簡単に説明しておこう。

 リピータ・ハブで構成されたEthenetのようなネットワークでは,同じネットワーク(セグメント)内のホスト(コンピュータ)には,あて先MACアドレス *1 にかかわらず,すべてのパケットが送信(同報)される。

*1 MACアドレス:OSI参照モデルの第2層にあたる「データリンク層」の下位層(MAC層)で使用するアドレスのこと。NICなどのネットワーク機器に固有の物理アドレス。各機器メーカーが割り当て,出荷時に設定する。

 通常,それぞれのホストでは,NIC(ネットワーク・インタフェース・カード)がパケットを受け取り,NICのファームウエアがあて先MACアドレスに基づいてフィルタリングを行う。そして,自分あて以外のパケットは破棄する。これでは,他人のパケットを盗聴することはできない。

 しかし,NIC を「プロミスキャス・モード(promiscuous mode)」と呼ばれるモードで動作させれば,自分のMACアドレスあて以外のパケットもフィルタリングすることなく取得する。そのため,盗聴プログラムの多くは,NICを同モードで動作させる。その結果,同一ネットワーク上のホストあてのパケットすべてを盗聴できる。

 NIC をプロミスキャス・モードで動作させるためには,そのNICが接続しているホストの管理者権限が必要である。しかし,内部犯行者にとっては,自分が管理するクライアント・マシンを利用すればよいので,何ら問題にはならない。

盗聴者を探し出す「AntiSniff」

 「盗聴するには,NIC をプロミスキャス・モードで動作させなければならない」-- これを利用して盗聴を検出するのが AntiSniff である。AntiSniff は,盗聴行為を直接検出するのではなく,プロミスキャス・モードで動作しているNICを検出することで,盗聴行為を検出する。シェアウエアであるが,15日間使用可能な試用版もある。

 それでは,AntiSniffはどのようにして,プロミスキャス・モードで動作するNICを見つけるのだろうか。その検出方法を説明しよう。

 AntiSniff では,調査対象となる複数のホストに対して,以下に示す 3 種類のテストを行う。これらの結果から,プロミスキャス・モードの検出を実現する。

  • Operating System Specific Tests
  • DNS Tests
  • Network and Machine Latency Tests

 「Operating System Specific Tests」では,特別に生成したユニキャスト,マルチキャスト,ブロードキャストのパケットを送信し,それに対する OS の挙動を情報源として,プロミスキャス・モードを検出する。詳細については割愛するが,高い精度で検出することが可能である。

 盗聴プログラムの多くは,受信したパケットから検出した IP アドレスをDNSサーバーへ問い合わせて(逆引きして),ホスト名を調べる。その特徴を利用するのが,「DNS Tests」である。

 具体的には,AntiSniff は,実在しないIPアドレスあてのパケットを流すと同時に,自ら(実際にはNIC)をプロミスキャス・モードに変更し,ネットワークのトラフィックを監視する。“おとり”のパケットを取得した盗聴プログラムは,実在しないIPアドレスのホスト名を逆引きするために,DNS クエリを送信する。

 AntiSniff は,この逆引きのDNS クエリを検出した場合に,その送信元がプロミスキャス・モードであると判断する。なぜなら,“おとり”のパケットのIPアドレスは実在しないため,プロミスキャス・モードのホスト(NIC),すなわち盗聴者以外は知ることができないはずだからである。

 前述のように,プロミスキャス・モードのNICはフィルタリングを行わない。すべてのパケットを取得して処理してしまう。この性質を利用するのが,「Network and Machine Latency Tests」である。

 このテストにおいて,AntiSniff は調査対象のホストに対して echo リクエストを送信し続け,レスポンス・タイムを計測する。これを繰り返して,“基準”となるレスポンス・タイムを定めた後,通常では発生しないようなトラフィックを大量に送信する。

 当然,プロミスキャス・モードの NIC と,そうでない NIC ともに,レスポンス・タイムは増加する。しかし,プロミスキャス・モードの NIC では,どのMACアドレスあてのパケットでもフィルタリングせずに取得して,上位層(プロトコル・スタックなど)で処理を行ってから応答することになる。そのため,レスポンス・タイムの増加分に若干の違いが出る。この違いから,プロミスキャス・モードを検出するのだ。

 筆者がこのツールを検証した結果,かなりの精度でプロミスキャス・モードのNICを検出することができた。

◇     ◇     ◇     ◇     ◇     ◇

 現在,インターネット上において,プライバシーの問題が深刻化しているのは事実である。そして,インターネット上に存在する脅威に対して,自分の身は自分で守らなければならないことも,また事実である。

 今回取り上げた盗聴の脅威に対しては,スイッチング・ハブの導入や通信を暗号化することが,主な対策として挙げられる。しかし,スイッチング・ハブで構成された Ethernet上でも,「ARP Poisoning」*2 という手法を用いることで,盗聴が可能となってしまう。また,すべての通信を暗号化することは現実的でない。「重要な情報だけを暗号化する」という対策でも十分効果的ではあるが,それだけでは不安な面もある。

*2 ARP Poisonig:ARPテーブルのキャッシュを悪用することで,ターゲット・ホストになりすましてパケットを横取りし,その後,ターゲットにパケットを転送することで,2者間のパケットを盗み見る盗聴手法のこと。

 「盗聴されないようにする」という対策は不可欠だが,「盗聴しているホストを見つけ出す」という,ある意味“積極的な”対策を組み合わせることで,よりセキュアにできるとは言えるだろう。今回紹介した AntiSniff を,“盗聴対策”のひとつとして,参考にしていただければ幸いである。


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


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