誰だ?、サービス上げたの、、、、、(*´Д`*)
Ubuntu
誰だ?、サービス上げたの、、、、、(*´Д`*)
元々DebianやUbuntu使いではないので知らなくて仕方なくずっとGNU Java???を使っていたんですが、ちゃんとsun-java5、sun-java6なるパッケージがあるんじゃないですか〜〜〜〜っ。すみません、、、無知で、、、、
<リンク>
http://packages.qa.debian.org/s/
http://packages.qa.debian.org/s/sun-java5.html
http://packages.qa.debian.org/s/sun-java6.html
Ubuntu、Sun Sparc Fireサポートへ - Debian向けJava SE 5パッケージ配布も
Ubuntuのopenssl-blacklist-0.1パッケージをダウンロードし、
脆弱だとされるサンプルの鍵を使って実行してみたんですが
^% openssl-vulnkey examples/bad_rsa.key
^Not blacklisted: 58dce70acfd4dc1a9d28722fc62edb8d30110778 examples/bad_rsa.key
と出てしまいました。ブラックリストとのハッシュの照合の部分がおかしいのではないかと思い、作者のJamieさんにとりあえずメールしてみました。
<追記>
別館にて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証明書が脆弱な鍵のものか
どうかをチェックする方法(案)についてご紹介したいと思います。
フローはこんな感じ、、、、
- X.509公開鍵証明書からSSH2公開鍵ファイルを生成する
- 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系の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証明書のチェックツールもあるとイイかなと、、、
また、何かわかったら書くことにします。
以下リンク
- Debian JPの
- [[http://www.debian.or.jp/blog/openssl_package_and_its_vulnerability.html]]
- NIST CVE-2008-0166
- [[http://nvd.nist.gov/nvd.cfm?cvename=CVE-2008-0166]]
- DSA 1571-1: New openssl packages fix predictable random number generator
- [[http://lists.debian.org/debian-security-announce/2008/msg00152.html]]
- [[http://wiki.debian.org/SSLkeys]]
- [[http://search.cpan.org/~pmqs/DB_File-1.817/DB_File.pm]]
- JPCERT Debian GNU/Linux に含まれる OpenSSL/OpenSSH の脆弱性に関する注意喚起
- Adobe
- AdobeCDS
- Android
- BEAST
- BSAFE
- CA
- CAdES
- Chrome
- CipherSuite
- Debian
- ECC
- ECDSA
- ECOM
- ETSI
- Firefox
- HeartBleed
- IPA
- iPhone
- ISO
- Java
- JavaScript
- JCE
- JIS
- JNSA
- jsrsasign
- JSSE
- Jython
- MD5
- Microsoft
- NIST
- OASIS
- OCSP
- OpenSSH
- OpenSSL
- PDF署名
- PKI
- Python
- RC4
- RSA
- SHA2
- SHA256
- SHA3
- share
- SMIME
- SSL
- SSLTLS
- SSLv3
- SSLサーバー証明書
- TLS
- Ubuntu
- W3C
- wiki
- Windows
- windows
- Windowsルート証明書の更新プログラム
- Windowsルート証明書プログラム
- X.509
- X.509証明書
- XAdES
- XML
- XMLDSig
- XML署名
- イタリアン
- グルメ
- セキュリティ
- タイムスタンプ
- ディナー
- トラストアンカ
- ニューヨーク
- ハッシュアルゴリズム
- ハッシュ関数
- パス検証
- ブリュッセル
- プラグテスト
- ベルギー
- ラーメン
- ランチ
- ルート証明書
- ルート認証局リスト
- 暗号
- 暗号スイート
- 暗号ライブラリ
- 吉祥寺
- 九段下
- 識別名
- 出張
- 署名
- 証明書
- 神保町
- 水道橋
- 脆弱性
- 中華
- 長期署名
- 統計情報
- 認証局
- 洋食
- 旅行
- 和食
- 丼物