DebianベースのOS(Ubuntu含む)を使ってる人は、知っておいた方がいい情報です.
問題点
sshでサーバ接続する際はパスワードが必要ですが,これを毎回入力するのは面倒です.
そのための方法として,自分のパソコン上でランダムな鍵のペアを作成し,公開鍵をサーバーに登録しパソコンに秘密鍵を持ち、それらを照合することでパスワード必要なしで接続できるようになります.この鍵を作成するには
ssh-keygen
というコマンドを使うのですが,今回の問題はこのランダムに作成されるはずの鍵がわずか65,535種類しか生成されていなかったことが発覚しました.
65,535という数字はしらみつぶしに試せば簡単に接続されてしまうということで,今回のような問題になったわけです.
原因
もともと鍵を生成するには,さまざまな条件から生成される変数をスタックに蓄え,その数多くの変数を組み合わせて生成していたためランダムといえる十分に多様な鍵が生成されていました.
ところが,purifyというメモリ管理のエラーをチェックするソフトを用いると,このスタックが初期化されていないというエラーを吐いてしまったそうで,debianの人が鍵生成の少し前でこのスタックを初期する,というパッチを当ててしまったのだ.
そのため鍵生成に使われる変数はpid(プロセスID,普通は16ビット)だけになってしまっていた.
このpidが16ビットであるため,最大でも2の16乗-1の65,535通りしか鍵が生成されないのだ.
実際にpidが取る値を考えると,2万通り程度しか生成されないと思われる.
対策
まずOpen-SSLのアップデートをしましょう.
次にサーバーに登録してあるキー(.ssh/authorized_keys)を削除しましょう.
そのあとまた鍵を生成して登録しなおします.
サーバー管理をしている人は,debian系のサーバーならOpen-SSLのアップデートをして,次に脆弱性のある鍵がないか調べます.
(その方法はhttp//www.jpcert.or.jp/at/2008/at080008.txtなどを参考に)
怪しい鍵は全部削除してクライアントに連絡しましょう.
詳しいことはこちら↓
まとまっててわかりやすいです。
http://metasploit.com/users/hdm/tools/debian-openssl/
http://www.debian.org/security/2008/dsa-1576.en.html