華盛頓郵報曾根據斯諾登泄露出來的PPT(圖1)報道過美國國家安全局(NSA)在云端監聽Google(包括Gmail)和Yahoo用戶的加密通信[1]。然而我們知道Gmail是使用TLS保護的,NSA是如何破解Google的TLS加密通信的呢?
圖1. 美國NSA和英國GCHQ聯合計劃MUSCULAR中,NSA和GCHQ繞過TLS加密,在云端監聽后端的明文通信。
1. 問題分析與測試
目前主流網站都依賴HTTPS(HTTP over TLS/SSL)實現服務器認證、數據加密和完整性保護,比如Google幾乎所有應用都在HTTPS的保護之下。同時,主流網站也普遍使用了CDN(Content Delivery Network)技術(雖然有些互聯網公司使用自己開發的類似平臺,他們并不叫CDN這個名字),用以提高網站的性能、可靠性和安全性。目前,HTTPS和CDN技術幾乎都已成為商業網站必須的基礎服務。
然而長期以來,HTTPS和CDN兩種技術的設計和發展是獨立的,HTTPS設計之初是一種端到端(End-to-End)的協議,而CDN卻是以中間人(Man in the Middle)的方式工作。原始網站如何如何授權給中間的CDN廠商、如何完成瀏覽器-CDN-原始網站之間的身份認證、秘鑰交換和數據保護,以及如何撤銷這種授權,無論學術界還是工業在以前都沒有沒有系統性的考慮。
我們在Oakland’14(IEEE Symposim on Security &Privacy)發表了論文“When HTTPS Meets CDN: A Case of Authentication in Delegated Service”[2],首次提出了HTTPS在CDN環境中授權服務的認證問題,把兩種技術結合在一起進行了系統性的研究。我們調研了Akamai、CloudFlare等世界上主流的20個CDN服務商,以及一萬多個支持HTTPS的熱門網站(同時也是上述20個CDN廠商的客戶),揭示出了當前HTTPS在CDN部署中的許多問題。
首先是CDN節點和后臺源服務器之間的通信很容易受到中間人攻擊(圖2):我們測試了5個CDN廠商的后臺通信,發現盡管瀏覽器到CDN節點的通信使用HTTPS加密,有的廠商使用明文的HTTP與后臺服務器進行通信(CDN77、CDN.NET);有的廠商雖然使用了HTTPS,卻不驗證證書的有效性(即可以使用自簽名的證書偽造任何網站,存在問題的廠商包括CloudFlare和InCapsula);有的廠商(如Amazon公司的CloudFront)雖然要求合法證書,但是卻不驗證證書的Common Name。
圖2.有些CDN的后端通信使用不加密的HTTP進行傳輸
其次是瀏覽器和CDN節點之間的授權認證問題。我們發現很多CDN廠商要求源網站提交自己的公鑰證書和私鑰,這嚴重破壞了PKI安全信任的基本原則,即私鑰必須是嚴格保密、不能與第三方共享的。盡管也有替代的方案不要求用戶共享私鑰,比如使用客戶證書(Custom Certificate)或者共享證書(Shared Certificate)方案,但是秘鑰管理復雜,客戶網站無法自主的撤銷自己對CDN廠商的授權,作為可信第三方的CA也沒有撤銷體現授權關系的共享證書。
具體細節可以參考我們的論文原文和Oakland會上所作報告的Slides[2]。
2. 實際攻擊的案例
在現實互聯網中,中國教育和科研網應急響應組CCERT在2014年初曾經收到過類似的攻擊報告,蘋果公司(Apple)使用的CDN廠商Akamai的某些節點已經受到了類似的攻擊,導致蘋果公司源網站上的JavaScript頁面被替換成了翻墻軟件自由門的使用手冊。我們與Akamai的技術人員確認過,的確是他們的CDN節點和后臺的服務器之間使用HTTP協議傳輸,導致通信被劫持,某些CDN節點的緩存數據被污染了。
本文一開始的問題,也是由于HTTPS在CDN實現中的問題所致。根據斯諾登泄露出來的PPT(圖1),我們知道美國國家安全局(NSA)和英國的情報機構GCHQ在他們聯合計劃MUSCULAR中,他們也使用了類似的技術監聽Yahoo和Google的通信:由于類似CDN的GFE(Google Front Engine)與提供內容的后臺服務器使用了不加密或安全性較弱的通信協議,NSA和GCHQ可以繞過瀏覽器端和CDN之間的TLS,在后臺直接監聽明文的通信。正如圖靈獎得主、著名密碼專家A. Shamir所言:“Cryptography is typically bypassed, not penetrated.”
3.解決方案
在論文的撰寫過程中,我們向涉及到的CDN廠商都通報了這一問題,并和CloudFlare、Akamai等公司的技術人員有過多次交流,我們所報告的問題得到了所有聯系到的產商的認可。其中,CloudFlare 公司在得到我們論文后,很快推出了更加安全的服務 Strict SSL[4],并宣稱這一服務可以挫敗NSA對后臺通信的監聽。
然而瀏覽器和CDN前端的授權問題卻不只是實現上的問題。為解決這一HTTPS在CDN服務中的授權問題,我們在論文中提出并實現了一個基于DANE[3]的輕量級的解決方案,DANE(DNS-based Authentication of Named Entities)是IETF 制定的標準以完善Web 網站的PKI信任模型。我們的實現表明,在CDN環境下實現安全、高效的HTTPS通信是可行的,但是由于DNSSec和DANE的部署并不普及,這一方案離工業界的普遍部署還有一定的距離。我們希望推進CDN和安全領域中進一步的研究,希望有更加有效的解決方案。
本文的第一作者梁錦津博士還參與了CloudFlare公司后來的一種解決方案——Keyless SSL[5]的開發和測試工作。這一方案不要求客戶網站與CDN共享私鑰,而是在CDN在與前端瀏覽器進行TLS的認證和秘鑰協商過程中,通過安全的信道把協商過程中的信息轉發給源網站,由源網站提取會話秘鑰或完成簽名以后再提交給CDN節點。由于TLS的通信過程中只有握手過程中才用到Private Key,以后的通信過程與源網站無關。清華大學計算機系張道維的本科畢業設計完成了Keyless SSL的的部分實現,實現中修改了OpenSSL和Ngnix的部分源代碼,比較復雜,還有很大改進的空間。
受本論文的影響,互聯網標準組織IETF的CDN互聯工作組(CDNI)開始討論CDN及CDNI互聯的網絡環境中加密流量的授權問題[6],還沒有形成最終的解決方案。因為最初的互聯網設計原則之一是端到端,而今天許多中間盒子(Middle Box)使得互聯網到處都是中間人,類似HTTPS在CDN中的問題將普遍存在,許多問題值得我們進一步研究,也歡迎有興趣的研究者、CDN廠商的技術人員和我們合作研究。
作者簡介
段海新,清華大學網絡科學與網絡空間研究院研究員,網絡與信息安全實驗室(NISL)主任,CCERT應急響應組負責人,加州大學Berkeley訪問學者,藍蓮花戰隊(Blue-Lotus)聯合創始人。長期從事網絡安全相關的教學和研究,重點關注DNS、CDN、PKI、Web、TLS等基礎設施和基礎協議的安全,研究成果發表在Oakland、USENIX Security、NDSS、SIGCOMM的學術會議,在工業界引起廣泛關注。段海新主頁:http://netsec.ccert.edu.cn/duanhx, 新浪微博:http://weibo.com/duanhx
本文首發于“網絡安全研究國際學術論壇(InForSec)” ,歡迎轉發,但請注明出處:http://inforsec.org