Debian系のOpenSSLにおける脆弱性

この脆弱性は面倒だ。OpenSSHを使っているとき、Etch(stable), Lenny(testing), Sid (unstable)で秘密鍵と公開鍵をつくり、その公開鍵を用いて他のサーバにログインしているならば、この公開鍵をすべて置き換えないといけない。

うぁ、午後がつぶれる。

追記 (2008/05/16 16:50)

この脆弱性は、安定版ディストリビューションetch)では0.9.8c-4etch3で、テスト版(lenny)および不安定版ディストリビューション(sid)ではバージョン 0.9.8g-9 でそれぞれ修正されている。利用者は問題のあるバージョンのOpenSSLで生成された暗号鍵かどうかを調べるツールで確認の上、該当パッケージをアップグレード、暗号鍵を再生成することが推奨される。

自分のバージョンを以下のコマンドで確認

% cat /proc/version

現在インストールされているバージョンを以下のコマンドで確認

% dpkg -l | grep openssl

Ringserver Projectの理研のサーバからダウンロードしていたのだけれども、16:50現在、理研のRing server内のパッケージは古いバージョンのままだった。

自分がDebian系でサーバーを立てている場合

とにかく、opensslを差し替える必要あり。特にこだわりがなければアップグレードをする。なお、このときにサーバの秘密鍵が自動的に差し替えられるので、他のマシンからSSHログインしようとするとエラーが出る。そのマシンのknown_hostsをクリアすること。

etchの場合

% sudo aptitude update
% sudo aptitude dist-upgrade


lennyの場合

% sudo aptitude update
% sudo aptitude safe-upgrade

次に、Apache SSLとかSMTP AUTHとかover SSL/TLSを使っているサービスにおける証明書を作り直す。個々のやり方は以下を参照。

最後にそのサーバにログイン可能なユーザーが使用している公開鍵が安全なものかどうかを確かめる。etchとsidの場合は、ssh-vulnkeyというコマンドを使えば良いらしい。openssl-serverをアップグレードしたときに自動的に追加されるコマンドらしい。

% sudo ssh-vulnkey -a

Lennyの場合は、どうもssh-vulnkeyというコマンドがインストールされていない。downk.plをダウンロードしチェックする。参考

% cd /tmp
% wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz
% wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz.asc
% gpg --keyserver subkeys.pgp.net --recv-keys 02D524BE
% gpg --verify dowkd.pl.gz.asc
% gunzip dowkd.pl.gz
% perl dowkd.pl user

脆弱性のある鍵を使っている利用者がいたら、連絡して差し替えさせる。

自分がDebian以外のサーバを立てている場合

downk.plをダウンロードし、脆弱性のある公開鍵でログインしているユーザーがいないかどうかをチェックする。参考

% cd /tmp
% wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz
% wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz.asc
% gpg --keyserver subkeys.pgp.net --recv-keys 02D524BE
% gpg --verify dowkd.pl.gz.asc
% gunzip dowkd.pl.gz
% perl dowkd.pl user

脆弱性のある鍵を使っている利用者がいたら、連絡して差し替えさせる。

クライアント(サーバに接続する側)としてDebianを使っているとき

公開鍵認証しか許されていないときには、サーバの管理者の協力が必要なので協力要請すること。

自分のDebianマシンで作った秘密鍵と公開鍵のペアを使ってSSHログインしている場合、そのログイン先に脆弱性を配布しているようなものなので、すべてもれなく公開鍵を差し替えること。

まず、opensslをアップデート。特にこだわりがなければaptitudeを用いてupgradeをする。

 % sudo aptitude update
 % sudo aptitude dist-upgrade か sudo aptitude safe-upgrade

次に~/.ssh/known_hostsの中身を削除。

 % cat /dev/null > ~/.ssh/know_hosts

そして、秘密鍵と公開鍵ペアの作り直す。

 % ssh-keygen -t rsa か ssh-keygen -t dsa

公開鍵をサーバーへコピー。本来は物理的な手段で移動させるべきだけれどもパスワード認証が許可されるなら横着してssh経由で移動させる。

 % scp ~/.ssh/id_rsa.pub ユーザー名@サーバーのFQDN: 

次にサーバーへログインする。

 % ssh ユーザー名@サーバーのFQDN

~/.ssh/authorized_keysから古い鍵を削除する。

% vi ~/.ssh/authorized_keys

どれが古い鍵か分からない場合はauthorized_keysの中身をすべて消して,必要な公開鍵を一から登録しなおす。すべての鍵を消す場合には以下のようにする。

 % cat /dev/null > ~/.ssh/authorized_keys

公開鍵を追加する。

 % cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

以上で終わり。