[Edit][Create New]
[ IndexPage / ネットとプログラミング / web296 / No14.txt ]

No14.txt

今回は前回の続きです。

実際には、各NIC(Network Interface Card:一般にネットワークカード等と呼ば
れてるもの)が、自分のホスト用のパケット(細分化された情報の単位)かどうか
を判断し、ホスト内のデバイスには情報が流れないようになっているのですが、
この機能はソフトウェア的にOFFにすることが出来、事実上、一般的なネットワ
ークでは、簡単に他のホスト宛ての情報が得られる状態にあります。

もちろんOS側でも、管理者(UNIXで言うところのroot)以外の権限ではこの機能
をOFFにできないように対策が施してありますが、ホスト1台が巨大だった昔と
違い、例えば小さなPDAに管理者権限で設定された盗聴プログラムをセットし、
それをHUBにこっそり挿してそこからPHSカード経由で情報を遠隔地のマシンに
送りつづける、と言った盗聴も今や可能になっているわけです。

それでは実際には、どのようにして別のホスト宛ての情報を読み取るのでしょ
うか?

これはもちろんOSの実装によって違います。例えばFreeBSDは/dev/bpf*という
デバイスを用意し、そこにアクセスすれば全てのパケットを読み出す事ができ
るようになっています。まるで普通のファイルのようにopen()で/dev/bpf*をオ
ープンし、read()で読み出すだけです(恐ろしい事にwrite()も実行できます)。

Linuxでは、socket()でソケットを作成する際にオプションを指定する方法を採
っているようです(実際にはNICのモード変更等の操作が別に必要です)。これも、
オープンしたソケットに対しread()やwrite()するだけです。

SunOSは詳しくないのですが、/dev/nitというbpfに似たデバイスを使うようです。

ここで、実際にプログラムとその解説を行おうと思ったのですが、筆者の力量
と誌面の不足で今回は見送ります。申し訳ありません。

さて、各OS(やデバイスドライバ)は、どうしてこんな盗聴のもとになるような
危ない機能を持たせているのでしょうか? そもそもOSがこんな機能を持たなけ
れば、盗聴される危険性も減るはずです。

確かに一般的な利用にはbpfのようなデバイスは必要ありませんが、例えばあ
るホストをゲートウェイ(ルータやブリッジ等)、DHCPサーバーなどにしたい場
合、常に全てのパケットを監視しておく必要が出てきます。こういった場合を
考えて、各OSは全てのパケットを取込む操作を可能にしているわけです。

他にも、この操作は、ネットワークの稼動状態の監視などにも非常に有効です。

さて今回まで、盗聴の危険性やその具体的な手段について解説してきました。
泥棒を防ぐには泥棒の性質や手口を熟知している必要があります。その後に、
実際に盗聴をいかにして防ぐかについて解説していこうと思います。