因為一個兩年前就犯下的愚蠢行為所造成的安全問題 DSA-1571-1 / CVE-2008-0166 ,你必須儘快更新所有曾經在 Debian 上透過 libssl0.9.8 (0.9.8c-1 或之後版本) 所產生的金鑰。
這個問題是當初為了修正透過 valgrind 檢查記憶體時所產生的錯誤訊息,因此拿掉了程式碼中的一行,該行恰巧是用以設定產生亂數 (RNG) 的種子,如此一來造成所有透過 libssl 產生亂數的密碼都是可以被預測的。結果就是加密金鑰很容易被猜到。修正方式就是再加回該行。不過此次更新也一併修正了 CVE-2007-3108 與 CVE-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,載點位於
- http://security.debian.org/project/extra/dowkd/dowkd.pl.gz
- http://security.debian.org/project/extra/dowkd/dowkd.pl.gz.asc (OpenPGP signature)
下載之後,請透過以下指令驗證檔案無誤
$ 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/ 中的說明進行設定。
Pingback: Zero’s Uncle WordPress » ssh的weak key,要重新產生新的 host keys()