2006年07月22日
ARPテーブルの汚染
ネットワークの基本的なプロトコルが誕生した当時は、ここまで日常生活にその技術が使われると思っていなかったのか、攻撃に対して得に考慮されていない。たとえばデータリンク層のイーサネットでは誰かに対して情報を伝えるとき、その話し相手と直接話すのではなく大声で叫んで情報を伝えているようなものだ。
聞いた人がたまたま送信相手だった場合は「ああ、俺に伝える情報だな。メモしておこう」となるが、送信相手じゃなかった場合は「俺宛の情報じゃないし聞き流そう」と言う感じ。
そのため、もし悪意を持った人が「俺宛の情報じゃないけどメモっとこう」とすると簡単に盗聴ができるわけだ。
が、最近はハブがスイッチングハブになってきてるので、話し相手にしか聞こえないようにデータを流して盗聴されにくくはなっている。だからと言ってTelnetやFTPのような平文でパスワードなどを流すのが安全と言うわけではない。IPアドレスからMACアドレスに変換するためのARPを悪用すれば簡単に盗聴できてしまう。
とよく聞くがほんとにできるの?と言うことでやってみた。
ホストAからホストBにFTP接続をして、それをホストZで盗聴する。家のLANはスイッチングハブを使っているので、当然プロミスキャスモードにしてtcpdumpとるだけでは何も聞こえてこない。
が、ARPによるなりすましができるツールで、ホストAとホストBのARPテーブルを汚染してやると・・・・、あああ!パスワードが丸見えだ!!怖ええぇぇ・・・・。
ここでの攻撃は、不正なARPフレームにより、FTP接続先のホストBのIPアドレスに対応するMACアドレスが盗聴ホストのZですよと汚染することでホストAとBの間の通信にZを紛れ込ませて盗聴する仕組みだ。
この攻撃が怖いところは攻撃の検知が難しいところ。プロミスキャスモードで動かしているわけじゃないのでPromiScanのような盗聴しているマシンを検出するツールが使えない。
対策としてはIPアドレスとMACアドレスを静的に対応付ける、ARPのキャッシュ有効時間を短くする。と言うのがあるけど、静的に対応付けるなんてめんどっちぃことができるのはほんとに盗聴がクリティカルになる部分だけだ。キャッシュの有効時間を小さくすることで一応対策はできるらしいけど試してないので不明。攻撃者が大量にARP送り続けたら有効時間短くしても一緒のような気がするけどどうなんだろう。
ARPキャッシュを汚染するときには、ネットワークにARPフレームが大量に流れると言うのでそれをNIDS(ネットワーク侵入検知システム)で検出するぐらいしかないんだろう。ググッてみると検出できますよというNIDSはあった。
大企業ならともかく、中小企業やネットカフェなんかはNIDSなんて入れてないだろうし盗聴し放題なんだろうな・・・。怖い怖い・・・。
盗聴対象ホストとゲートウエイの間に割り込めばSSL使っていない通信は丸見えなので、今どのページを見てるか、どんな書き込みをしたか、IDとパスワードは何かなども筒抜け。外でのネットワーク利用は計画的に・・・。
Trackback on "ARPテーブルの汚染"
このエントリーのトラックバックURL:
"ARPテーブルの汚染"へのトラックバックはまだありません。
ARP テーブルは各ホストが自分でキャッシュを持っているはずだけど、その汚染ツールというのはどうやって書き換えてるんだろう?
普通に考えると攻撃対象のホストが ARP 問い合わせを broadcast するまで気長に待ってるのかな。そんで問い合わせが来たら嘘の情報を返してるってことか。
あれ、そういえばあるホストがARP問い合わせを出していないのにARP応答が返ってきた時は、どういう動作をするんだったっけ?素直にそれも信じちゃうのかな。
セキュリティ関係はいろいろ面白そうですな。時間を作ってちゃんと勉強したい。
ARP問い合わせをしていなくてもARPフレームが届いた場合、その情報で更新されるみたい。ただこれはARPの仕様で決まっているわけじゃなく、実装の仕方によるとどっかのサイトには書いてあったかな。
つまり別に複雑な技術が必要なわけでもなく、聞かれてないのに「IP-ZZZはMACアドレスXXXだよ」と送れば信じてしまう。
ネットワークの基礎的なプロトコルは攻撃に弱いのでSSLやSSHを使って自分の身は自分で守らないとだめってコトですね・・・。