Sniffing and PromiscuousMode

Date : 2005-03-10
Author : Defolos

CONTENTS

(1.) Sniffingとは
(2.) Sniffingの原理
(3.) プロミスキャストモード
(4.) Sniffingの流れ
- 一般的なSniffing形式
- 非凡的なSniffing形式
(5.) Snifferの検出
- pingによる検出
- DNS要求による検出
- レイテンシー
- ps出力による検出
- promiscdetectの利用
- PromiScanの利用
(6.) スイッチの有用性
(7.) スイッチを利用している場合のSniffing
- MAC Spoofing
- MAC Over Flood
- ARP Poisoning

Sniffingとは

 Sniffingとは簡単に言えばパケットの盗聴のことです。語源は「くんくん嗅ぎまわる」という意味の英単語です。ネットワーク上を流れるパケットを取得し、ヘッダーを見ることができるためスプーフィングの初期捜査で使われたりもします。また、telnetやmailなどの平文でやり取りされるパケットからパスワードやメール内容を読み取ることも可能です。
 パケットアナライジングと呼ばれることもあり、本来はネットワーク管理者がセキュリティ強化の目的で利用しているので、Snifferの起動にはroot権限を必要とします。パケットアナライザの管理の注意点としては、パケットアナライザは本質的にネットワークを通過するパケットを表示できるものが多いため、盗聴など悪用されないように注意する必要があります。


Sniffingの原理

 まずEthernetのLAN(Local Area Network)を思い浮かべてください。ご存知の通りEhternetはパケットを全ての端末に送信することで通信しています(CSMA/CD)。そこから端末が自分宛でないパケットを破棄することで通信が成り立っています。

 つまり、端末が自分宛でないパケットも破棄しないで取り込むようにし、取り込んだパケットを表示することがSniffingということになります。


プロミスキャストモード

 プロミスキャストモード(Promiscuous Mode)とは、全てのパケットを取り込むネットワークカードの設定です。

 Ethernetでは全端末にパケットを送信し、自分宛でないパケットを破棄することで通信が成り立っていますが、Sniffingをするにあたって全てのパケットを取得したいので、勝手に捨てられては困ります。どうにかして全てのパケットを取り込むようにしなくてはなりません。

 パケットの破棄はネットワークカードの設定にゆだねられています。普通は自分宛のパケットのみを取り込むように設定されていますが、プロミスキャストモードという設定も用意されています。ネットワークカードをプロミスキャストモードに設定できれば、全てのパケットを取得できることになります。
 それではプロミスキャストモードに設定してみましょう。次の設定方法はLinuxにおいての設定方法です。Windowsの場合はSnifferにプロミスキャストモードにするかどうかの設定項目としてあります。

1.) 確認

 まずは今のモードを確認します。

# ifconfig

 ifconfigコマンドで表示される項目の真ん中ぐらいに「UP BROADCAST RUNNING」という項目があればノーマルモードで動いています。

2.) 切り替え

 次のようにしてプロミスキャストモードとノーマルモードを切り替えます。NIC nameにはeth0などが入ります。

# ifconfig [NIC name] promisc
# ifconfig [NIC name] promisc off

3.) 確認

 ifconfigで確認して、「UP BROADCAST RUNNING PROMISC」となっていれば切り替え成功です。


Sniffingの流れ

● 一般的なSniffing形式

  1. 何らかの方法でroot権限を奪取する
  2. Snifferをインストールする
  3. ログ消し、バックドア設置などを行いログアウト
  4. 数日後Snifferを仕掛けた端末へログイン
  5. 数日分のパケットの行き来を記録したログを自分のPCに転送
  6. 完了

● 非凡的なSniffing形式

  1. 自分のPCにSnifferをインストールする
  2. 何らかの方法で対象Ehternetに物理的に接続する
  3. アナライジングをはじめる
  4. ほしい情報が得られたらアナライジングを終了する
  5. 家に帰る

 前者はハッキングの後処理としてよく用いられる方法です。一方後者はハッキングの足掛かりとして用いることができます。後者は物理的に対象のネットワークに赴かなければならないため、危険は大きいです。


Snifferの検出

 プロミスキャストモードになっている端末があったらSnifferを仕掛けられた可能性を疑うようにしましょう。その他の確認方法として次のようなものが挙げられます。

● pingによる検出

 存在しないIPアドレス、MACアドレスを指定したICMPエコー要求(ping)を送信します。ノーマルモードのNICなら誰も返信は返してこないはずですが、プロミスキャストモードのNICは全てのパケットを取得するので、反応を返してきます。これによってプロミスキャストモードのNICがあるかどうかを検査できます。
対策:自分とは異なるアドレスのpingに反応しないように設定する。

● DNS要求による検出

 多くのSnifferはドメイン表記で送信元IPや送信先IPをログに記録するため、DNS逆引きを行います。そこで、SnifferのDNS逆引き要求パケットを監視することでSnifferの有無を検査できます。
対策:DNS逆引きをしない。

● レイテンシー

 Snifferは盗聴と同時に平文パスワードの取得を行ったりしているので、多大な負担がかかると処理速度が低下してしまいます。これを監視することでSnifferの有無を検査できます。
対策:大量のパケットが流れても、一定量以上のパケットを取得せず、CPU負担を一定に保つ。

● ps出力による検出

 psコマンド(起動中のプロセスを表示する)で出力される情報を元にSnifferの有無を検査する方法です。
対策:psコマンドの改竄。

● promiscdetectの利用

 WindowsNT/2000/XPのローカルで作動するプロミスキャスト検知ツールです。UNIX系OSではプロミスキャスト検出としてifconfigが提供されていますが、Windows環境では標準では提供されていません。そこで、これらのツールを使うことで検出することが可能となります。

● PromiScanの利用

 WindowsNT/2000/XPで作動するプロミスキャスト検出ツールです。ネットワーク経由で他のPCのプロミスキャストモードを検出できます。作動にWindows用パケットキャプチャドライバ「WinPcap」を利用するため、あらかじめWinPcapをインストールしておく必要があります。検出には前述の「pingによる検出」と同じような方法を用いているようです。


スイッチの有用性

 スイッチ(スイッチング・ハブ)はMACアドレスによってパケットの送り先を決定するハブです。覚えておいていただきたいのは、「スイッチのほうが頭がいい」ということです。CSMA/CDでは、どこか一箇所のホストがパケットを送信している間はコリジョンが発生するため他のホストは通信ができません。リピータハブはホストが送信してきたパケットを全てのホストに送信するだけで、コリジョンは相変わらず発生してしまいます。
 一方スイッチはMACアドレスで送信するべきホストにしかパケットが流れないようにできるのでコリジョンの発生は起きません。そのため複数のホスト同士が同時に通信できます。

 (figure1)はリピータハブを表しています。リピータハブはhost:Aから送信されたパケットを全てのホストに平等に送信するので、host:Aからhost:Cへのパケットを盗聴する場合アタッカーがhost:DでSniffingを行ってもパケットが盗聴できてしまいます。

(figure1) http://ruffnex.oc.to/defolos/text1/figure/figure23.jpg

 (figure2)はスイッチを表しています。スイッチはOSI参照モデルのデータリンク層に準じており、MACアドレスでパケットを届けるべきホストを識別できるので、届けるべきホスト以外のホストにパケットを送らない仕組みになっています。そのため、host:からAhost:Cへのパケットをhost:DでSniffingすることは不可能です。

(figure2) http://ruffnex.oc.to/defolos/text1/figure/figure24.jpg

 基本的にリピータハブよりスイッチのほうがセキュリティが高いといえます。昔はスイッチは高価だったため、リピータハブが主流でしたが、今はスイッチの値段も低くなっているのでハブを導入する場合にはスイッチをオススメします。


スイッチを利用している場合のSniffing

 前述の通り、スイッチを導入しているネットワークでは盗聴は困難になってしまいます。しかし、スイッチを導入してあっても盗聴は可能です。次にスイッチ環境下でのSniffing方法を挙げます。

● MAC Spoofing

 自分のNICのMACアドレスをSniffingしたいホストのMACアドレスと同じにすることで成りすましを行います。スイッチの仕様にもよりますが、場合によっては2つのホスト(本物のホストと偽称しているホスト)にパケットが送信されます。アドレスの重複警告が出るようなら、あらかじめDOSアタックなどでMAC偽称したいホストを落してから偽称すれば問題ありません。

● MAC Over Flood

 スイッチはメモリにMACとポートの対応付けを展開しています。そのため、大量の異なったMACアドレスからのパケットがスイッチに流れると、メモリは対応付けを覚えきれなくなります。スイッチの仕様にもよりますが、場合によっては全てのポートにパケットを送信します。

● ARP Poisoning

 まずは(figure3)を見てください。

(figure3) http://ruffnex.oc.to/defolos/text1/figure/figure25.jpg

 host:Aからhost:Cへのパケットを、host:Bが盗聴しようとしている図です。まずhost:Bはhost:Aへ「IP-192.168.0.3のMACアドレスはMAC-Bである」という偽のARPパケットを送信します。次にhost:Bはhost:Cへ「IP-192.168.0.1のMACアドレスはMAC-Cである」という偽のARPパケットを送信します。これでhost:Aからhost:Cへ送信したパケットはhost:Bに流れることになります。ここでhost:Bはhost:Cへ向けて先ほどのパケットを送信すれば、盗聴されたことに気づかれません。また、host:Cからhost:Aへ送られるパケットもhost:Bに流れます。ARP Poisoningでは、盗聴だけでなくパケットの改竄も可能であり、Poisoningの防衛も難しいので有用な手段といえます。


■参考文献


go back to the TOP page of Glazheim Lykeion.