因為一個兩年前就犯下的愚蠢行為所造成的安全問題 DSA-1571-1 / CVE-2008-0166 ,你必須儘快更新所有曾經在 Debian 上透過 libssl0.9.8 (0.9.8c-1 或之後版本) 所產生的金鑰。

這個問題是當初為了修正透過 valgrind 檢查記憶體時所產生的錯誤訊息,因此拿掉了程式碼中的一行,該行恰巧是用以設定產生亂數 (RNG) 的種子,如此一來造成所有透過 libssl 產生亂數的密碼都是可以被預測的。結果就是加密金鑰很容易被猜到。修正方式就是再加回該行。不過此次更新也一併修正了 CVE-2007-3108CVE-2007-4995,因此應該直接升級到新版 openssl 較為保險。

影響的系統包含所有 Debian 為基礎的系統,如 Ubuntu (USN-612-1) 等。影響的軟體範圍包含所有的使用 libssl0.9.8 產生的金鑰。若你使用 etch 請確認 openssl 版本高於 0.9.8c-4etch3, sid 與 lenny 則是 0.9.8g-9

在更新完 openssl 後,你應該重新產生或轉換舊的弱金鑰 (weak keys)。首當其衝的是 ssh ,因為是最容易被攻擊而取得系統權限的軟體。Debian 與 Ubuntu 各提供工具以供用戶自行檢查。

Ubuntu 提供的一個小工具 ssh-vulnkey 可以幫你檢查單機上的 ssh user key 與 host key 是否是有風險。此工具可於新版的 openssh-client 取得,ssh-vulnkey 目前只在 Ubuntu 的套件庫中。

ssh-vulnkey 是一個 以 C 開發的 native program,速度比 dowkd.pl 快上一些。你可以於 Debian 或 Ubuntu 新版的 openssh-client 取得。(Debian 上的 openssh 版本於 1:4.3p2-9etch1 之後)

Debian 使用者可以使用 Florian Weimer 所開發的 dowkd.pl,載點位於

下載之後,請透過以下指令驗證檔案無誤

$ gpg --recv-keys 02D524BE
gpg: requesting key 02D524BE from hkp server pgp.mit.edu
gpg: key 02D524BE: duplicated user ID detected - merged
gpg: key 02D524BE: public key "Florian Weimer (HIGH SECURITY KEY) " imported
gpg: public key 5E13C7DB is 715511958 seconds newer than the signature
gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model
gpg: depth: 0  valid:   2  signed:  38  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: depth: 1  valid:  38  signed:  28  trust: 6-, 12q, 0n, 6m, 14f, 0u
gpg: depth: 2  valid:  14  signed:  14  trust: 2-, 4q, 0n, 2m, 6f, 0u
gpg: depth: 3  valid:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 2f, 0u
gpg: next trustdb check due at 2008-12-13gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
$ gpg --verify dowkd.pl.gz.asc
gpg: Signature made Tue May 13 22:09:19 2008 CST 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

確認檔案正確後,將其解開

$ gunzip dowkd.pl.gz

指令的用法很簡單,它可以用來檢查金鑰檔、host keys、user keys.

$ perl dowkd.pl help
usage: dowkd.pl [OPTIONS...] COMMAND [ARGUMENTS...]

COMMAND is one of:

  file: examine files on the command line for weak keys
  host: examine the specified hosts for weak SSH keys
  user: examine user SSH keys for weakness; examine all users if no
        users are given
  help: show this help screen

OPTIONS is one pf:

  -c FILE: set the database cache file name (default: dowkd.db)

dowkd currently handles OpenSSH host and user keys and OpenVPN shared
secrets, as long as they use default key lengths and have been created
on a little-endian architecture (such as i386 or amd64).  Note that
the blacklist by dowkd may be incomplete; it is only intended as a
quick check.
$ perl dowkd.pl host kalug.linux.org.tw
# kalug.linux.org.tw SSH-2.0-OpenSSH_4.3p2 Debian-9
# kalug.linux.org.tw SSH-2.0-OpenSSH_4.3p2 Debian-9
kalug.linux.org.tw: weak key
kalug.linux.org.tw: weak key
$ perl dowkd.pl user
/home/chihchun/.ssh/id_rsa.pub:1: weak key

若你發現掃描結果中有 “weak key” 字樣,應該儘速重新產生該金鑰。

對於 Host Key 的作法是在該伺服器上執行以下指令,如此便會產生新的 host keys

# rm /etc/ssh/ssh_host_*
# dpkg-reconfigure openssh-server

若 authorized_keys 或 private keys 為弱金鑰,則請刪除他們,升級 openssh 至新版後,再重新以 ssh-keygen 產生金鑰。若你知道怎麼使用 authorized_keys,大約就知道如何重新產生 ssh keys,細節不詳述。

以上是 ssh keys 處理方式,至於其它影響的軟體,請持續參考 http://www.debian.org/security/key-rollover/ 中的說明進行設定。