自堕落な技術者の日記

基本は喰ってるか飲んでるかですが、よく趣味でカラオケ・PKI・署名・認証・プログラミング・情報セキュリティをやっています。旅好き。テレビ好きで芸能通

OpenSSH

Debian OpenSSL問題のまとめ3

kurushima @ 自堕落な技術者のヰキ(公開版) - OpenSSL/Debian脆弱性
Debian OpenSSL問題のまとめ


別館にある自分のウィキでDebian OpenSSL問題についてまとめてみました。
よかったらご覧ください。

PKCS#8 RSA鍵からSSH2公開鍵に変換するJavaコード2

kurushima @ 自堕落な技術者のヰキ(公開版) - OpenSSL/Debian脆弱性/PKCS8秘密鍵→SSH2公開鍵変換ツール


私のウィキページで公開し忘れたので貼っておきます。

Debian OpenSSL問題でX.509証明書をチェックするためのツール公開2

自堕落な技術者のヰキ(公開版) - OpenSSL/Debian脆弱性/SSH2X509鍵変換ツール


JavaでX.509証明書からSSH2公開鍵に変換するツールを作り、ソースを自分のWiki(別館)で公開しております。

以下、説明ページより。



一部のDebian、UbuntuやKNOPPIXの環境で生成されたOpenSSLベースの鍵は、
プロセスIDを元に乱数としており、乱数の使用方法に問題があったため、秘密鍵が予測される可能性があります。
http://www.us-cert.gov/current/index.html#debian_openssl_vulnerability

また、UbuntuではOpenSSHやOpenSSLの脆弱な鍵のブラックリストや
脆弱性チェックツールssh-vulnkey(OpenSSHクライアントに同梱)やdowkd.plなどの
スクリプトが配布されており、OpenSSH鍵についてはチェックの環境は整っていると
思われますが、openssh-blancklist-0.1に含まれるPythonで実装されたチェックスクリプト
openssl-vulnkeyはブラックリストとの突合方法に問題があるようで
サンプルに含まれた脆弱な鍵を脆弱であると判断できないようです。

openssl-vulnkeyではパスワードで保護されていないRSA秘密鍵を対象に
チェックするため、一般的には秘密鍵をそのまま保存しておくケースが無いため
SSLサーバー証明書、クライアント証明書、S/MIME用証明書など
X.509公開鍵証明書とその秘密鍵が脆弱であるかどうかチェックできる
環境にないと思われます。

本ツールでは、X.509公開鍵証明書よりSSH2公開鍵を生成します。
生成された鍵はSSH2鍵の脆弱性チェックツール(ssh-vulnkey, dowkd.pl)で
検証すれば、証明書や秘密鍵が脆弱であるか判断することができます。

ツールはJavaで実装され、ソースコードは公開します。
ツールとして、また公開鍵関係のプログラミングの勉強など
自由に利用してもらって構いません。
(大した量のプログラムでないので、、、(^^;

Debian OpenSSL/OpenSSH 脆弱鍵ブラックリストの状況(2008.05.23)2

  • openssl-blacklist-0.1: OpenSSL RSA1024/2048秘密鍵: 33万鍵
  • openssh-blacklist-0.1: OpenSSH DSA1024/RSA2048公開鍵,認証した鍵リスト: 20万鍵
  • dowkd.pl: OpenSSH DSA/RSA公開鍵: 26万鍵

<追記>

別館にてDebian/OpenSSL問題についてまとめています。よかったらご覧ください。(2009.06.11)

Debian OpenSSLで生成されたX.509証明書の脆弱性チェック法(1)3

日本Linux協会blogのOpenSSL問題その後(5/15)

記事で詳しく紹介されている通り、今回のDebian OpenSSH問題に対して、

openssh-blacklistという脆弱な鍵のリストと、

OpenSSHに含まれるコマンドssh-vulnkeyにより、SSHの鍵については

脆弱性に対する対応がひと段落したそうです。

しかしながら、Debian OpenSSL環境で生成したRSA/DSA鍵や

それによって生成されるSSLサーバー証明書、クライアント証明書など

X.509証明書と鍵については何も進展が無いような雰囲気ですね。

このSSH鍵のブラックリストを使って、X.509証明書が脆弱な鍵のものか

どうかをチェックする方法(案)についてご紹介したいと思います。

フローはこんな感じ、、、、

  1. X.509公開鍵証明書からSSH2公開鍵ファイルを生成する
  2. SSH鍵脆弱性チェックスクリプト dowkd.pl でこれをチェックする

openssh-blacklistやssh-vulnkeyを使った場合でも、

おそらく同様の手順でいけるものと思います。

X.509公開鍵証明書からSSH2公開鍵の生成

以下、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公開鍵ファイルを

生成できました。

dowkd.plによるチェック

先の手順で生成した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やUbuntuな方々、鍵は大丈夫ですか?2

Debian系のLinux(Debian,Ubuntu,KNOPPIX,Lindowsなど)で、

OpenSSLベースのRSA鍵・DSA鍵を使っている場合に

乱数の生成部分に問題があり、秘密鍵が推測される可能性がある

という脆弱性報告が出ており、OpenSSH、OpenVPN、X.509証明書など

に影響があります。

  • 問題のあるバージョン
    • Debian GNU/Linux 4.0
    • Ubuntu 7.04, 7.10, 8.04 (Debian 4.0系)
    • KNOPPIX 不明 (Debian 4.0系)
    • Debian系で動作する OpenSSL 0.9.8c-1〜 (修正済:0.9.8c-4etch3〜, 0.9.8g-9〜)

これはDebian固有の問題なんですが、Debianで作られたRSA鍵とDSA鍵が

他にエクスポートして使われたら、同じ問題が発生します。

脆弱な鍵のリストも出ており、

今使っている鍵が脆弱なものかどうかを調べるツール dowkd.pl も

配布されています。

どれどれ、おじさんに見せてごらん、、、、

ということで、Ubuntuで試そうと思ったら

VMイメージを会社に置いてきてしまいました。

んん〜〜っ、仕方なくチェックツールだけでも見るために、

cygwinで試そうとしたら、いろんなパッケージが不足している

ことが発覚、、、、、

  • DB_File.pm
  • libdb2, libdb2-dev
  • perl-Module-build

を足してみるも、毎回DBが生成されてしまい、重いったら

ありゃしない。

ソースをちゃんと見てみることにします。dowkd.plの

わかったことをちょっとまとめたのが以下、

  • SSHとOpenVPNの鍵しか調べないない
  • dowkd.pl には脆弱な鍵のハッシュリストも入っている
  • 対象がユーザの場合~/.ssh/の鍵ハッシュ、RSA、DSA公開鍵をチェックする

X.509証明書のチェックツールもあるとイイかなと、、、

また、何かわかったら書くことにします。

以下リンク

最新記事
Categories
Archives
Twitter
記事Google検索

本ブログ内をGoogle検索
Yahoo!アクセス解析
Travel Advisor
記事検索
QRコード
QRコード
  • ライブドアブログ