パケットモニタ


先週こしらえたデスクトップ(といっても床に置いてあるのだが) は, こないだシミズの好意でモニタも届き, モニタのスペックがわからないまま 手探りで XF86 を設定し, 800x600 の解像度で 16bit いろが出るようになった. ATX なので, APM を使えば shutdown するとハードウェア的に shutdown される. 残念ながら, モデムが付いてるのに電話をかけようとしないので, ダイアルアップ IP ルータとして活躍するには至っていない. それから, 時間が無くて, 今週ようやく gimp と x-tt をget できた ところなので, XF86 で truetype font を使うのはもうちょっと後廻しだ. それに代わって, 今回は, 通信の暗号化とパケットのモニタリングの話だ.

現行の IP v4 は, IP のレイヤが持つ機能として, 経路制御しかない. それだけでも環境によっては十分な負荷を発生させる. しかし, 現在発生している IP からみの保安の問題は, IP レイヤで保安に対する配慮が なされていたら, その幾つかはそもそも発生すらしなかったであろうと考えると, 当初実験的なプロトコルで研究者しか使ってなかった TCP/IP が, いまやオッサンのエロメディアの一翼を担うようになった今日この頃, みなさまいかがお過ごしでしょうか, てな感じですね.

とりあえず, このプログラム をコンパイルしてくれ. sniffit という実行ファイルができるから, root になって,

GOD@aya:/home/yuji#sniffit -i
と実行してくれ. 実行したら, どっかに telnet する. sniffit を実行している窓に, そのコネクションが表示されるだろう. 自分から相手向きのコネクションに カーソルを合わせてリターン. そして, おもむろに, telnet の窓でユーザ名とパスワードを打てば, それがそのまま sniffit の窓に表示されるのをみるがいい.

IP は, データをナマで流しており, telnet もナマなので, これはもう, 広場で誰かに用事を大声で頼んでいるようなものなのだが, その用事が秘密の用件(パスワードとか)だったりするから大笑い. これが sniffit みたいなプログラムが存在できるわけです.

traceroute というコマンドは知ってますね. たとえば, pop サーバへ traceroute してみよう. 通過するルータを全部表示してくれます. 少なくとも, そのルータが接続されているネットワークセグメントの 全てのホストが安全でない限り, あなたの通信は安全ではない.

だから, リモートでシェルアカウントを使う時は, これ を使おう. それから以前 こういう記事 を書いたが, ssh を使うならば そんなめんどくさい事しなくても, アクセス先のリモートホストで, 何も考えずに "xterm" とかタイプすれば, ローカルの Xサーバに X クライアントが出現する. しかも, その Xコネクションは, 安全に保護されている.

sshはRSA 暗号によるユーザ認証を使う. RSA暗号については これ を見ていただくとして, 要は, 暗号化に用いる鍵(公開鍵)と, 復号化に用いる鍵 (秘密鍵)が異なっており, 秘密鍵から公開鍵を計算できるけれども, 公開鍵から 秘密鍵を計算するのは, ちょっと難しいので, 安心して相手の公開鍵で暗号化し て, データを相手に送れる(すると, 相手はそいつの秘密鍵で復号する)というこ だ.

ssh による認証は, こういう段取りで行われる. (以下, ssh 1.2.26 附属の README文書からの抄訳)

  1. 接続要求があると, リモートは, ランダムな数値を生成し, ユーザの公開鍵でその数値を暗号 化して, ローカルに発送.
  2. ローカルは, 暗号化された数値をユーザの秘密鍵で復号.
  3. 復号した数値を元に, ローカルは MD5 チェックサムを計算.
  4. リモートに, チェックサムを通知, リモートは, 自分が生成した数値から 計算した MD5チェックサムと比較.
  5. 一致したら, 正しいユーザであると認証
認証に, ランダムな数値そのままが使われるのではなく MD5 が使われるのは, 数列を暗号化していると判っていると, ランダムな文字列を暗号化したものを復 号するよりも, 暗号を解読するのが容易になってしまうからである. 数学が直接役に立つ事はほとんど無いが, これは, そういう非常に稀な場合だなあ.