2014年3月9日 星期日

蘋果與 GnuTLS 的 SSL/TLS 漏洞是 NSA 植入的後門嗎?

當你上網刷卡付錢或在網站上讀寫敏感私密資料 (例如登入 gmail) 的時候, 網址開頭會變成 https。 這個 s 就是 "secure", 意謂著你現在的連線受到加密保護, 應該是安全的。 它底層所採用的加密安全機制叫做 SSL (舊) 或 TLS (新)。

2013 年九月, 紐約時報根據 Snowden 所提供的資料 報導 NSA 的 Bullrun 竊聽機制有能力破解幾乎所有網路加密機制: 「他們花最多力氣在破解全美 (其實是全球) 普遍使用的加密技術: SSL、 VPN 及 4G 行動保護。」 (相關中文報導: 網路加密協定在美國國安局前幾乎都是無效的; 很讚、 很多連結的 New Yorker 報導

資安專家 Bruce Schneier 閱讀 Snowden 提供的文件之後 大嘆美國政府背叛了網路, 並提供五點建議讓民眾自保。 「出問題不是數學, 而是程式碼。」 資安教授 Matthew Green 說: 就算要我用右手臂換取才能看到文件我也願意! 可惜他只能 憑空猜想 (就是這篇文章先被校方 要求撤下 後來才又放回去) 有哪些攻擊方式, 其中之一就是建議大家要小心微軟 IIS 及自由軟體 OpenSSL 的程式碼有沒有漏洞。 結果最近發現問題的並不是使用量比較高的 Windows 與 OpenSSL, 而是相對比較次要熱門的蘋果產品及自由軟體 GnuTLS。 (下詳)

上個月, 蘋果的 iOS 被發現 有一個 SSL 超級烏龍漏洞 -- 有一句 goto 指令被額外重複一次, 造成安全檢查破功。 詳見 PTT 專業分析文

這是粗心造成的 bug 還是陰謀? Schneier 也不確定; 只是恰好先前他寫了一篇文章指出後門的三大要件, 這個 bug 完全符合。 其中一個要件就是要看起來像是一個意外造成的 bug, 這樣萬一被抓到時, 才好開脫。 John Gruber 注意到: 這個後門出現的時間點是 iOS 從 5.1.1 升級到 6.0 的時候; iOS 6.0 於 2012 年九月份上市; 去年六月曝光的簡報宣稱蘋果電腦於 2012 年十月被納入 NSA 的 PRISM 監聽計畫。 「鞋子合腳」, 但是不是陰謀很難講; 有五種可能性: 詳見 沒有註明原文連結的簡中報導。 不只是 Schneier, Guardianzdnetinfowar、 ... 大家都在問: 這到底是粗心還是陰謀? 當初是誰改的? 是在什麼樣的情況下加了這一句? 為什麼後續的檢測沒有測出來? Schneier 那一篇底下有很長的討論; 他自己則說: 「我真的不知道。 但是如果是我想要藏後門, 這正是我會採取的手段。」

無獨有偶地, 本月初 Red Hat 工程師發現: 自由軟體 GnuTLS 同樣在負責 SSL/TLS 安全認證部分的程式碼, 也有類似的錯誤: 這次是因為 goto 到錯誤的地方, 同樣造成連線安全檢查破功。 質疑蘋果的陰謀論, 大部分也都適用於質疑 GnuTLS。 最大的差別是: 雖然兩者的程式碼都攤在陽光下, 蘋果的修改歷程沒有公開, 而 GnuTLS 的修改歷程有公開。 分析 之後, 發現是 2005 年清理雜亂程式碼 (code refactoring) 的時候, 因為混雜了兩種常見但彼此矛盾的不同寫作風格, 導致不小心造成 「該放行」 與 「該阻擋」 的判斷結果顛倒寫錯。 這篇文章 指出: 常見的 SSL/TLS 自由軟體包含 OpenSSL、 GnuTLS 與 NSS; 網頁伺服器 apache 預設是使用 OpenSSL 而不是 GnuTLS; firefox 瀏覽器採用 NSS。 但是 chromium 以及其他 webkit 系列瀏覽器 (那就包含 konqueror 囉) 則採用 GnuTLS。 該文也解釋因為授權衝突的關係, 才出現這麼多版本。 zdnet 的 linxu/open source 專欄作家 Steven J. Vaughan-Nichols 勸開發者丟掉 GnuTLS

我趕快在我所有的 antix (debian 系列) 電腦上順便把所有的安全更新一起補上: apt-get upgrade security 。 更新之前與之後, 下 dpkg -l libgnutls26 查看一下系統裡所安裝的版本; 另外也用 apt-cache show libgnutls26 查看一下你所採用的 distro 的官網的版本。 我更新之後的版本是 2.12.20-8+deb7u1 。 根據 1 2 這兩篇, 這樣看起來就 ok 了。 如果是 ubuntu 的話, 安全更新之後請跟 這一頁 所列出來的版本對照確認。

那麼, 這兩個 bugs, 到底是不是 NSA 植入的後門? 放著手邊正事沒做, 爬了一整天的文, 我還是得不到結論。

* * * * *

手邊沒電腦; 口頭推薦本文嗎? 可以請您的朋友搜尋 「ssl 後門」 或 「tls 後門」。

5 則留言:

  1. 基本上如果不是故意的這只有可能是code merge時發生的,我們其實會開很多branch同時開發,然後會有一個很大的merge回來
    這種大merge無法code review會造成這種結果
    不過 如果真確執行static/dynamic analysis的話,可能可以抓到
    但如果這些analysis的report有可能很多warning,很多人就掠過不看也有可能,所以這很難講,因為連續兩個goto是不太合理的
    至於gnutls不知道是否跟apple這一樣,還是只是coding style的錯誤,總之很多陰謀論不見得是這樣。

    回覆刪除
  2. 加密技術漏洞 網路安全大出血
    http://udn.com/NEWS/BREAKINGNEWS/BREAKINGNEWS5/8601185.shtml

    OpenSSL加密漏洞 Yahoo受害
    http://www.cna.com.tw/news/firstnews/201404090036-1.aspx

    OpenSSL ‘heartbleed’ bug live blog
    http://blog.fox-it.com/2014/04/08/openssl-heartbleed-bug-live-blog/

    回覆刪除
  3. 不要牽拖別人

    http://www.openldap.org/lists/openldap-devel/200802/msg00072.html

    2008年就有人指出gnutls本身就有問題,大學生都知道該用strncpy偏偏要用strcpy,怪誰?

    回覆刪除
  4. 北韓網路孤立 逃過美病毒攻擊
    http://news.ltn.com.tw/news/world/paper/885086

    回覆刪除