Sniffingとは簡単に言えばパケットの盗聴のことです。語源は「くんくん嗅ぎまわる」という意味の英単語です。ネットワーク上を流れるパケットを取得し、ヘッダーを見ることができるためスプーフィングの初期捜査で使われたりもします。また、telnetやmailなどの平文でやり取りされるパケットからパスワードやメール内容を読み取ることも可能です。
パケットアナライジングと呼ばれることもあり、本来はネットワーク管理者がセキュリティ強化の目的で利用しているので、Snifferの起動にはroot権限を必要とします。パケットアナライザの管理の注意点としては、パケットアナライザは本質的にネットワークを通過するパケットを表示できるものが多いため、盗聴など悪用されないように注意する必要があります。
まずEthernetのLAN(Local Area Network)を思い浮かべてください。ご存知の通りEhternetはパケットを全ての端末に送信することで通信しています(CSMA/CD)。そこから端末が自分宛でないパケットを破棄することで通信が成り立っています。
つまり、端末が自分宛でないパケットも破棄しないで取り込むようにし、取り込んだパケットを表示することがSniffingということになります。
プロミスキャストモード(Promiscuous Mode)とは、全てのパケットを取り込むネットワークカードの設定です。
Ethernetでは全端末にパケットを送信し、自分宛でないパケットを破棄することで通信が成り立っていますが、Sniffingをするにあたって全てのパケットを取得したいので、勝手に捨てられては困ります。どうにかして全てのパケットを取り込むようにしなくてはなりません。
パケットの破棄はネットワークカードの設定にゆだねられています。普通は自分宛のパケットのみを取り込むように設定されていますが、プロミスキャストモードという設定も用意されています。ネットワークカードをプロミスキャストモードに設定できれば、全てのパケットを取得できることになります。
それではプロミスキャストモードに設定してみましょう。次の設定方法はLinuxにおいての設定方法です。Windowsの場合はSnifferにプロミスキャストモードにするかどうかの設定項目としてあります。
まずは今のモードを確認します。
# ifconfig
ifconfigコマンドで表示される項目の真ん中ぐらいに「UP BROADCAST RUNNING」という項目があればノーマルモードで動いています。
次のようにしてプロミスキャストモードとノーマルモードを切り替えます。NIC nameにはeth0などが入ります。
# ifconfig [NIC name] promisc
# ifconfig [NIC name] promisc off
ifconfigで確認して、「UP BROADCAST RUNNING PROMISC」となっていれば切り替え成功です。
前者はハッキングの後処理としてよく用いられる方法です。一方後者はハッキングの足掛かりとして用いることができます。後者は物理的に対象のネットワークに赴かなければならないため、危険は大きいです。
プロミスキャストモードになっている端末があったらSnifferを仕掛けられた可能性を疑うようにしましょう。その他の確認方法として次のようなものが挙げられます。
存在しないIPアドレス、MACアドレスを指定したICMPエコー要求(ping)を送信します。ノーマルモードのNICなら誰も返信は返してこないはずですが、プロミスキャストモードのNICは全てのパケットを取得するので、反応を返してきます。これによってプロミスキャストモードのNICがあるかどうかを検査できます。
対策:自分とは異なるアドレスのpingに反応しないように設定する。
多くのSnifferはドメイン表記で送信元IPや送信先IPをログに記録するため、DNS逆引きを行います。そこで、SnifferのDNS逆引き要求パケットを監視することでSnifferの有無を検査できます。
対策:DNS逆引きをしない。
Snifferは盗聴と同時に平文パスワードの取得を行ったりしているので、多大な負担がかかると処理速度が低下してしまいます。これを監視することでSnifferの有無を検査できます。
対策:大量のパケットが流れても、一定量以上のパケットを取得せず、CPU負担を一定に保つ。
psコマンド(起動中のプロセスを表示する)で出力される情報を元にSnifferの有無を検査する方法です。
対策:psコマンドの改竄。
WindowsNT/2000/XPのローカルで作動するプロミスキャスト検知ツールです。UNIX系OSではプロミスキャスト検出としてifconfigが提供されていますが、Windows環境では標準では提供されていません。そこで、これらのツールを使うことで検出することが可能となります。
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方法を挙げます。
自分のNICのMACアドレスをSniffingしたいホストのMACアドレスと同じにすることで成りすましを行います。スイッチの仕様にもよりますが、場合によっては2つのホスト(本物のホストと偽称しているホスト)にパケットが送信されます。アドレスの重複警告が出るようなら、あらかじめDOSアタックなどでMAC偽称したいホストを落してから偽称すれば問題ありません。
スイッチはメモリにMACとポートの対応付けを展開しています。そのため、大量の異なったMACアドレスからのパケットがスイッチに流れると、メモリは対応付けを覚えきれなくなります。スイッチの仕様にもよりますが、場合によっては全てのポートにパケットを送信します。
まずは(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の防衛も難しいので有用な手段といえます。