Debian OpenSSL問題のまとめ
別館にある自分のウィキでDebian OpenSSL問題についてまとめてみました。
よかったらご覧ください。
基本は喰ってるか飲んでるかですが、よく趣味でカラオケ・PKI・署名・認証・プログラミング・情報セキュリティをやっています。旅好き。テレビ好きで芸能通
Debian OpenSSL問題のまとめ
<追記>
別館にてDebian/OpenSSL問題についてまとめています。よかったらご覧ください。(2009.06.11)
日本Linux協会blogのOpenSSL問題その後(5/15)の
記事で詳しく紹介されている通り、今回のDebian OpenSSH問題に対して、
openssh-blacklistという脆弱な鍵のリストと、
OpenSSHに含まれるコマンドssh-vulnkeyにより、SSHの鍵については
脆弱性に対する対応がひと段落したそうです。
しかしながら、Debian OpenSSL環境で生成したRSA/DSA鍵や
それによって生成されるSSLサーバー証明書、クライアント証明書など
X.509証明書と鍵については何も進展が無いような雰囲気ですね。
このSSH鍵のブラックリストを使って、X.509証明書が脆弱な鍵のものか
どうかをチェックする方法(案)についてご紹介したいと思います。
フローはこんな感じ、、、、
openssh-blacklistやssh-vulnkeyを使った場合でも、
おそらく同様の手順でいけるものと思います。
以下、RSA公開鍵の場合について紹介します。DSAについても
同様の方法で可能です。
SSH2公開鍵ファイルは以下のような内容になっています。
^ssh-rsa [Base64のSSH公開鍵情報] [所有者ID]
SSH2公開鍵情報部分にについてはRFC 4253で規定されており、RSA公開鍵だとこのような形式になっています。
^6.6. Public Key Algorithms
^ string "ssh-rsa"
^ mpint e # モジュラス
^ mpint n # 公開指数
mpintって何?と一瞬困ってしまい途方にくれてしまったのですが、Trilead SSH for Javaという
オープンソースのJavaのライブラリがあったのでこれを
使用することにしました。その他、Base64のためにBoucyCastleなどを
使います。Jythonで書くと以下のような感じになります。
^from java.lang import String
^from java.io import *
^from com.trilead.ssh2 import *
^from com.trilead.ssh2.signature import *
^from org.bouncycastle.util.encoders import Base64
^
^# java.security.cert.X509Certificate証明書の読み込み部分は省略
^cert = (X.509証明書ファイルの読み込み)
^
^# RSA公開鍵のモジュラスnと公開指数eの取得
^pubkey = cert.getPublicKey()
^n = pubkey.getModulus() # モジュラスBigInteger n
^e = pubkey.getPublicExponent() # 公開指数BigInteger e
^
^# SSH2公開鍵の生成
^pk = RSAPublicKey(e, n)
^sshRSAPublicKeyBytes = RSASHA1Verify.encodeSSHRSAPublicKey(pk)
^sshRSAPublicKeyBase64 = Base64.encode(sshRSAPublicKeyBytes)
^sshRSAPublicKeyStr = String(sshRSAPublicKeyBase64)
^
^# 標準出力へ
^print "ssh-rsa", sshRSAPublicKeyStr, "foo@foo"
近々、Javaのコードを紹介できればと思いますが今はJythonで
ごめんなさい。
以上でX.509公開鍵証明書から、同じ公開鍵のSSH2公開鍵ファイルを
生成できました。
先の手順で生成したSSH2公開鍵のファイル名を例えば "foo_rsa.ssh.pub" と
しておきます。
これを dowkd.pl によりチェックするには
^ dowkd.pl file foo.rsa.ssh.pub
のように実行します。脆弱ならば、
^ 鍵の名前: weak key
のように表示されます。dowkd.plに登録された26万の脆弱な鍵のハッシュ値と
照合して、この鍵が脆弱かどうかを判断します。
機会があれば、Jythonでない依存性のすくないJavaのコードや、
openssh-blacklist、ssh-vulnkeyへも対応できればと思います。
Debian系のLinux(Debian,Ubuntu,KNOPPIX,Lindowsなど)で、
OpenSSLベースのRSA鍵・DSA鍵を使っている場合に
乱数の生成部分に問題があり、秘密鍵が推測される可能性がある
という脆弱性報告が出ており、OpenSSH、OpenVPN、X.509証明書など
に影響があります。
これはDebian固有の問題なんですが、Debianで作られたRSA鍵とDSA鍵が
他にエクスポートして使われたら、同じ問題が発生します。
脆弱な鍵のリストも出ており、
今使っている鍵が脆弱なものかどうかを調べるツール dowkd.pl も
配布されています。
どれどれ、おじさんに見せてごらん、、、、
ということで、Ubuntuで試そうと思ったら
VMイメージを会社に置いてきてしまいました。
んん〜〜っ、仕方なくチェックツールだけでも見るために、
cygwinで試そうとしたら、いろんなパッケージが不足している
ことが発覚、、、、、
を足してみるも、毎回DBが生成されてしまい、重いったら
ありゃしない。
ソースをちゃんと見てみることにします。dowkd.plの
わかったことをちょっとまとめたのが以下、
X.509証明書のチェックツールもあるとイイかなと、、、
また、何かわかったら書くことにします。
以下リンク