2008年10月16日
OpenSSL パッケージの脆弱性とその影響について (SSH鍵、SSL証明書等)
残念な事に Debian の OpenSSL パッケージに脆弱性が見つかりました。見つかった問題は既に修正されていますが、 今回の問題はパッケージの更新だけで済ませられないものとなっています。
今回の問題は、OpenSSL の乱数生成部分について、Debian の OpenSSL パッケージのメンテナが Valgrind (C/C++ プログラムでのメモリリークなどの問題を見つけるデバッグツール) を使っていて見つけた問題を修正しようとして誤ったパッチを当ててしまった事が原因です。 これによって、乱数が使われずに暗号が非常に弱いものとなってしまう問題が発生しました。 なお、この問題は Debian だけに止まらず Debian をベースとしているディストリビューション (Ubuntu など)やシステムにも影響があります。また、Debian を使っていない場合でも、ユーザが問題のあるバージョンの Openssl パッケージが含まれた Debian で生成したクライアント鍵を使っている場合は影響を受けることになるので注意してください。
端的に影響を言うと、SSH サーバでパスワード認証ではなく鍵認証を利用している場合、 通常であれば鍵が無ければまずログインできないわけですが、乱数が推測可能な範囲になっているため、 総当たり攻撃によってログインされてしまう…などの影響が考えられます。 既に攻撃ツールはリリースされ、広く既知の状態となっていますので早めに対応ください。
今回の件について、簡単な要約をすると以下になります (詳しくは最新の openssh-client パッケージに含まれるドキュメント /usr/share/doc/openssh-client/README.compromised-keys.gz を参照していただくことをお勧め致します)。
- SSH クライアント/サーバについて
-
- Sarge までの Debian で生成したSSH鍵は今回の問題の影響を受けません。
- パッケージ (openssl, openssh-server) のアップデートを実施 (dist-upgrade)してください。
OpenSSH サーバパッケージについては、最新の更新 (DSA-1576)で今回の対応としてホスト鍵を作り直すようになっています (ssh を通じて rsync などを運用している方は鍵の変更によって接続がエラーになりますので注意してください)。 詳しくは debian-users メーリングリストでの訳を参照ください。
また、openssh-blacklist パッケージが出来て server パッケージはこれに依存するようになっており、 明らかに脆弱なキーについては接続を拒否をするようになっています。このため、通常の upgrade では更新が反映されず、 dist-upgrade とする必要があります。 - OpenSSH の known_hosts ファイルを更新
パッケージを更新後、ssh クライアントの known_hosts ファイル (~/.ssh/known_hosts) に登録されているホスト鍵と上記で更新されたサーバのホスト鍵が異なるので警告が出て繋がらないようになります。 クライアントの known_hosts から該当のホストを削除してください (ssh-keygen -R "hostname" コマンドで削除)。 - OpenSSH のクライアント鍵確認
上記の更新に伴って、OpenSSH クライアントパッケージに確認用のツール (ssh-vulnkey) が含まれました。各自のクライアント鍵が影響を受けるかどうかをチェックしてください。 デフォルトの鍵ファイル名を使っている場合は "sudo ssh-vulnkey -a" で確認が出来ますし、違う鍵ファイル名の場合は "ssh-vulnkey /path/to/key" という形で確認が可能です。また、別のツール dowkd.pl (OpenPGP signature) も利用して二重にチェックする事をお勧めします。 - 影響を受けるクライアント鍵を更新
SSH クライアント鍵については、各ユーザで作成をしなおす必要があります。 ssh-keygen コマンドを使って再生成してください。 - サーバに登録してあるクライアント鍵情報の更新 (authorized_keys ファイル)
必要な場合となる場合は、リモートで接続する先の authorized_keys から脆弱な公開鍵情報を取り除いて、新たに生成した公開鍵の情報を登録してください。
- SSL 証明書について
-
- Sarge までの Debian で生成したSSL証明書は今回の問題の影響を受けません。
- パッケージのアップデート (openssl) を実施してください。
- 利用しているサーバ/クライアント証明書を再生成してください。
- 他のシステムで使われている証明書がある場合は、新たに生成した証明書で置き換えてください。
- その他パッケージについて
以下についても更新が必要となると思われます。必要に応じて 鍵のロールオーバーや Debian Wiki の SSLkeys ページを確認してください。
- cyrus imapd, courier imap/pop3
- Apache2 SSL
- dovecot, postfix, exim4 (サービスのリスタートが必要)
- bincimap
- boxbackup
- cryptsetup
- ekg
- dropbear
- ftpd-ssl
- gforge
- MIT Kerberos (krb5)
- OpenSWAN / StrongSWAN
- OpenVPN
- puppet
- sendmail
- ssl-cert
- telnetd-ssl
- tinc
- tor
- xrdp
今後の対応として以下のページを参照ください。一部ページは状況に応じて更新予定です。
- DSA-1571-1 openssl -- 予測可能な乱数の生成
- DSA-1576-1 openssh -- 予測可能な乱数の生成 (パッケージはさらに更新されています。5/17 14:00 現在、1:4.3p2-9etch2 が最新バージョンですが、mips アーキテクチャは現在パッケージの生成が追いついていません)
- Debian Wiki の SSLkeys ページ (適宜更新されています)
- 鍵のロールオーバー (5/19 20:00 現在、OpenSSH、bincimap、boxbackup、cryptsetup、dropbear、ekg、ftpd-ssl、gforge、MIT Kerberos (krb5)、OpenSWAN / StrongSWAN、OpenVPN、puppet、sendmail、ssl-cert、telnetd-ssl、tinc、tor、xrdp についての情報が掲載されています。
2008/10/16 23:02 リンク
OpenSSL パッケージの脆弱性と脆弱なパッケージを含まない他の環境への影響について(Q&A)
既に幾つかのメディアで取り上げていただいていたり、ユーザ間でも話題になっているこの問題ですが、誤解を招かないよう注意が必要な点が幾つかあります。以下の問答を参考に誤解をしていないかどうか確認をお願い致します。
- Q: 影響は Debian だけ?〜「Debian とその派生ディストリビューションが影響を受けるだけなんでしょ?私は(*BSD / 他のディストリビューション)を使ってるから関係ないですよね。」
-
A: いいえ、残念ながらそうではありません。
今回の問題は欠陥があるバージョンの OpenSSL パッケージを使って作られた鍵/証明書が脆弱であるというところにあります。例えば運用しているサーバが Red Hat Enterprise Linux だったとして、ユーザの ~/.ssh/authorized_keys に該当の欠陥がある状態で作られた鍵が登録されていたら、その Red Hat Enterprise Linux に不正なアクセスが容易な状態にあることになります(例に上げた Red Hat Enterprise Linux は CentOS でも Fedora でも FreeBSD でも他のものでも置き換えて考えてください)。
- Q: 自分のところは Sarge を運用しているので全く平気ですよね!
-
A: いいえ、残念ながらそうではありません。
例えば、脆弱性のあるバージョンの OpenSSL を含んだ環境でユーザが SSH 鍵を作成していて、それを authorized_keys に登録した場合を想像してください…その Sarge を運用しているホストへの侵入は容易な状態となっています。Etch であれば更新された openssh-server と既知の脆弱な鍵リストである openssh-blacklist によってその様な鍵を使った場合に接続が拒否されますが、Sarge はセキュリティサポートが終了しているためにこの様な危険な状態からは保護されません。
- Q: では、どうやって私のサーバが影響があるのかを確認すれば良いのですか?
-
A: Debian Project より提供されている Debian OpenSSL Weak Key Detector (dowkd) を利用してください。
これは perl で書かれたスクリプトで、perl が導入されている環境であれば OS / ディストリビューションを問わずに実行できます (Debian では 5.8.8 及び 5.10 にて動作が確認されています)。実行前のファイルの正当性の確認には OpenPGP 署名を確認してください。なお、このスクリプトは随時更新されていますので、適宜チェックしてください。
-
ユーザが自分の authrized_keys に脆弱な鍵が含まれていないかをチェックした例
user@localhost:~$ perl dowkd.pl file ~/.ssh/authorized_keys /home/user/.ssh/authorized_keys:1: weak key summary: keys found: 1, weak keys: 1
SSH サーバが脆弱なホスト鍵を利用していないかをリモートからチェックした例
user@localhost:~$ perl dowkd.pl host 192.168.100.100 # 192.168.100.100 SSH-2.0-OpenSSH_4.3p2 Debian-9 # 192.168.100.100 SSH-2.0-OpenSSH_4.3p2 Debian-9 192.168.100.100: weak key 192.168.100.100: weak key
- Q: ダウンロードした Debian OpenSSL Weak Key Detector (dowkd) が正当なものであるかを確認したいのですが。
-
以下の様にして、正当性の確認が可能です。環境として PGP あるいは GPG が利用可能であることが必要となります (参考として、以下の作業は Debian sid 環境で確認を行っています)。
- セキュリティ勧告のメールの PGP 署名を確認
- PGP 署名の ID が誰のものであるかを確認
- PGP 鍵サーバから確認した ID の公開鍵を取得
- dowkd.pl と署名ファイル dowkd.pl.gz.asc をダウンロードして同一ディレクトリに配置
- 署名を確認
-
(1) まず、今回のセキュリティ勧告のメール (DSA-1571)にサインされている署名を確認します。
セキュリティ勧告が流れる debian-security-announce@lists.debian.org は PGP 署名をされた特定のアドレスからのみ投稿可能なメーリングリストですので、Florian Weimer さんのメッセージはまず真正なものであろう、と判断できます。より確実にこれが Florian Weimer さんが書いたものである、という確認するために該当のメールをファイルとして保存して以下の確認をします。
$ gpg --verify \[SECURITY\]_\[DSA_1571-1\]_New_openssl_packages_fix_predictable_random_number_generator.txt gpg: Signature made 2008年05月13日 21時03分24秒 JST using RSA key ID 02D524BE gpg: Can't check signature: public key not found
-
(2) セキュリティ勧告が 02D524BE という ID の鍵で署名されている事が確認できましたので、その鍵を所持しているのが誰なのかを公開鍵サーバから検索します。
$ gpg --keyserver pgp.nic.ad.jp --search-keys 02D524BE gpg: searching for "02D524BE" from hkp server pgp.nic.ad.jp (1) Florian Weimer (HIGH SECURITY KEY) <fw@deneb.enyo.de> Florian Weimer (HIGH SECURITY KEY) <Weimer@CERT.Uni-Stuttgart.DE> Florian Weimer (HIGH SECURITY KEY) <Florian.Weimer@RUS.Uni-Stuttgart.D Florian Weimer (HIGH SECURITY KEY) <fw@deneb.enyo.de> Florian Weimer (HIGH SECURITY KEY) <Weimer@CERT.Uni-Stuttgart.DE> Florian Weimer (HIGH SECURITY KEY) <Florian.Weimer@RUS.Uni-Stuttgart.D 2048 bit RSA key 02D524BE, created: 2002-03-19 Enter number(s), N)ext, or Q)uit > Q
上記の様に Florian Weimer
さんの鍵であることが確認できました。DSA-1571は Florian Weimer <fw@deneb.enyo.de> さん (02D524BE) が少なくとも署名したものです。 -
(3) 署名した鍵の確認ができたので、Florian Weimer さんの公開鍵 (02D524BE) を公開鍵サーバから取得します。
$ gpg --keyserver pgp.nic.ad.jp --recv-keys 02D524BE gpg: requesting key 02D524BE from hkp server pgp.nic.ad.jp gpg: key 02D524BE: duplicated user ID detected - merged gpg: key 02D524BE: public key "Florian Weimer (HIGH SECURITY KEY)
" imported gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model gpg: depth: 0 valid: 1 signed: 11 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: depth: 1 valid: 11 signed: 12 trust: 2-, 0q, 0n, 5m, 4f, 0u gpg: depth: 2 valid: 10 signed: 5 trust: 10-, 0q, 0n, 0m, 0f, 0u gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) -
(4) dowkd.pl と dowkd.plについて署名されたファイルを取得します。
$ wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz $ wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz.asc
-
(5) 先ほどファイルを取得したディレクトリで dowkd.pl についての署名を確認します。
$ gpg --verify dowkd.pl.gz.asc gpg: Signature made 2008年05月23日 05時39分49秒 JST using RSA key ID 02D524BE gpg: Good signature from "Florian Weimer (HIGH SECURITY KEY)
" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: C8D3 D9CF FA9E 7056 3F32 FA54 BF7B FF04 02D5 24BE Good signature from "Florian Weimer (HIGH SECURITY KEY) <fw@deneb.enyo.de>" とあるので、OpenSSL のセキュリティ勧告メールを流した Florian Weimer さんが、dowkd.pl についても署名をしたことが確認できました。
なお、この場合 WARNING が出ているのは、自身が所有しているデータの中では「信用の輪(web of trust)」の中に含まれていない鍵であることを意味しています。この鍵が真正に Florian Weimer さんのものであることを信用するかについては、鍵交換などを実施していくか、その鍵に署名している他の人のリストなどから別途確認ください。
- Q:SSL の証明書も問題になるのですか?確認の仕方が知りたいのですが
-
A: これも、Debian OpenSSL Weak Key Detector (dowkd) を利用してください。PEM ファイルのチェックが行えます。
- Q:SSL の証明書の再発行は費用が発生するので行いたくないのですが…
-
A: 残念ながら OpenSSL パッケージに該当の脆弱性があった期間に作られたものは、再度申請などして作り直しが必要になります。
ベンダによっては今回の場合について SSLサーバ証明書の残存期間の無償再発行や値引きでの対応を行うなどとしているところがありますので、詳しくは各ベンダに対応について問い合わせてください。(もし、情報がありましたら追記したいと思いますので、お教えください。
- SSL 証明書取扱いベンダの対応
-
- 日本ベリサイン株式会社
「Debian GNU/Linux に含まれる OpenSSL/OpenSSH の脆弱性」について(通常価格より値引きでの対応) - グローバルサイン株式会社
通常でも期限内であれば無償再発行を行っているため、特別な対応はなし。 - サイバートラスト株式会社
Debian GNU/Linuxに含まれるOpenSSL/OpenSSHの脆弱性への対応に関するお知らせ〜 該当するSSLサーバ証明書の残存期間の無償再発行を開始 〜(無償再発行) - セコムトラストシステムズ株式会社
「Debian GNU/Linux に含まれる OpenSSL/OpenSSH の脆弱性に関する注意喚起」について (PDF)(証明書発行から30日以内のものについて、無償で対応) - 株式会社コモドジャパン
COMODO OFFERS FREE REPLACEMENT CERTIFICATE TO ANY INDIVIDUALS AFFECTED BY DEBIAN VULNERABILITY FLAW (無償再発行) - Thawte (Verisign に買収されており、ブランドとして存続)
通常でも期限内であれば無償再発行を行っているため、特別な対応はなし。 - GeoTrust (Verisign に買収されており、ブランドとして存続)
GeoTrust ブランドの場合 (QuickSSL等)、通常でも期限内であれば無償再発行を行っている。再発行手続きはこちら - RapidSSL (Verisign に買収されており、ブランドとして存続)
再発行については通常は有料対応。RapidSSL + Platinum Support の場合は無償再発行が可能。再発行手続きはこちら
- 日本ベリサイン株式会社
2008/10/16 23:02 リンク
過去のニュース
- 2025 年のニュース
- 2024 年のニュース
- 2023 年のニュース
- 2022 年のニュース
- 2021 年のニュース
- 2020 年のニュース
- 2019 年のニュース
- 2018 年のニュース
- 2017 年のニュース
- 2016 年のニュース
- 2015 年のニュース
- 2014 年のニュース
- 2013 年のニュース
- 2012 年のニュース
- 2011 年のニュース
- 2010 年のニュース
- 2009 年のニュース
- 2008 年のニュース
- 2007 年のニュース
- 2006 年のニュース
- 2005 年のニュース
- 2004 年のニュース
- 2003 年のニュース
- 2002 年のニュース
- 2001 年のニュース
- 2000 年のニュース
- 1999 年のニュース
- 1998 年のニュース
- 1997 年のニュース