蘇化語
這世界上本不存在無懈可擊的網(wǎng)絡(luò)安全體系。漏洞是必然的,黑客是永恒的,差別只是危害大小和發(fā)現(xiàn)時間是早或晚。一般來說,每天都有數(shù)個小型漏洞被發(fā)現(xiàn),除了黑客、白帽和安全專家們,根本無人關(guān)心。每隔一陣子,又會有一個稍微大一點的漏洞,可能會在科技媒體上占據(jù)一個角落。所以,當媒體突然鋪天蓋地地報道“心臟出血”(heartbleed)這個新漏洞時,你就能意識到,這個漏洞大得不一般。誠如密碼學(xué)專家布魯斯·施奈爾在博客中所言:“如果從1到10來打分,這次的嚴重程度應(yīng)該是11分?!?/p>
施奈爾聲稱,這個漏洞造成的影響是“災(zāi)難性”的。那么,這場災(zāi)難的源頭是什么?可能造成的危害又是什么?我們應(yīng)該如何進行補救呢?
說起計算機安全漏洞,人們大多想起的是Windows Update、360和騰訊管家等諸多安全軟件時常跳出來警告大家的電腦系統(tǒng)漏洞。然而“心臟出血”卻不是這類系統(tǒng)漏洞,它是一種叫做OpenSSL的網(wǎng)絡(luò)安全協(xié)議之中的漏洞;由于OpenSSL被全世界大多數(shù)網(wǎng)銀、在線支付、電商網(wǎng)站、社交網(wǎng)絡(luò)和電子郵件等重要網(wǎng)站所廣泛使用,所以它一旦出現(xiàn)高危風(fēng)險,所帶來的后果便相當驚人。
所謂SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS),即是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的安全協(xié)議,最早在1994年由網(wǎng)景公司推出,從上世紀90年代以來,已被所有主流瀏覽器采納。TLS與SSL在傳輸層對網(wǎng)絡(luò)連接進行加密,是當今互聯(lián)網(wǎng)上應(yīng)用最廣泛的安全傳輸方法。當我們訪問Gmail郵箱或者進入基金公司網(wǎng)上交易平臺的時候,我們會看見URL地址旁邊有一個“鎖”,同時前綴是HTTPS,這就表明我們在該網(wǎng)站上的通訊信息都會被加密。
至于OpenSSL,則是基于SSL協(xié)議開發(fā)的一種開源軟件包,它囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協(xié)議,并提供了豐富的應(yīng)用程序供測試或其他目的使用。
在OpenSSL里面,又有一個“心跳機制”(heartbeat)。這個擴展套件主要是用來確認通信另一方是否處于聯(lián)網(wǎng)狀態(tài)。它的原理是,客戶端發(fā)送一個“心跳包”給服務(wù)器,服務(wù)器將這個心跳包打開,提取出其中的有效負載,裝入一個回饋包然后傳回給客戶端。用通俗的話來說,就是客戶端朝服務(wù)器大吼一聲“喂你還活著嗎”,然后服務(wù)器回復(fù)“我還有心跳喔,快來找我玩吧”,這樣一個過程。
理論上來說,客戶端發(fā)送的有效負載是什么,服務(wù)器回饋給它的就應(yīng)該是完全一樣的復(fù)制品,大小和數(shù)據(jù)內(nèi)容都應(yīng)該一模一樣。但是,在2012年5月14日OpenSSL發(fā)布1.0.1版本時,這個心跳機制就有一個漏洞。這個漏洞會讓黑客們作弊,把小的有效負載偽裝成很大的樣子,這樣服務(wù)器為了回饋同樣的有效負載,就把其他信息裝了進去。這就好比一個人在銀行里存了100塊錢,但存款單上寫了1000塊,這樣他在取錢的時候,銀行就只好把屬于其他儲戶和銀行自己的錢拼湊起來給他1000塊了。
所以,攻擊者可以通過這個方法看到隨機的其他信息,實際上也就是竊聽到其他用戶的敏感數(shù)據(jù),其中可能包括了用戶名、密碼、銀行賬號等等。更嚴重的是,服務(wù)器還可能把專用密鑰一并在反饋包里交給了客戶端,也就是說,攻擊者可以直接得到進出服務(wù)器內(nèi)部的鑰匙,能夠隨意查看任何人的信息。
利用這個漏洞,攻擊者每次最多可以得到64k的數(shù)據(jù)。然而,由于平均每臺計算機每秒鐘可以執(zhí)行一到兩次這樣的攻擊,所以黑客還是可以很輕松地大面積抓取用戶的敏感信息。所以,當谷歌和科諾康(Codenomicon)的工程師發(fā)現(xiàn)這個漏洞時,他們很形象地將之命名為“心臟出血”,一個心跳機制上的致命漏洞。
科諾康的工程師安蒂·卡嘉萊寧是最早發(fā)現(xiàn)這個安全漏洞的人之一,他表示,這完全是一場偶遇的結(jié)果。
卡嘉萊寧說,他當時正在跟同事瑞庫·希塔馬基一起測試公司的新軟件Safeguard,這是一個專門用來識別各種新型漏洞的安全軟件。他們在測試到OpenSSL的心跳機制時,問題就出現(xiàn)了,他們注意到,回饋包可能會變得異常地大。隨后,卡嘉萊寧和希塔馬基又采用了不同的方法對心跳機制進行測試,并最終證明,這個功能存在漏洞,會秘密地泄露外部數(shù)據(jù)。這種外泄是不留痕跡的,也就是說,你將無法追蹤誰從你的服務(wù)器中到底拿走了什么東西?!斑@個發(fā)現(xiàn)讓我們不寒而栗,”卡嘉萊寧說,“我們意識到,這可能是一個非常非常嚴重的漏洞?!?/p>
第二天,科諾康的安全專家馬克·拉克索發(fā)現(xiàn)了一個更大的問題——從這個漏洞中溜走的,可能不僅僅是信息數(shù)據(jù),還包括服務(wù)器上的專用密鑰??稳R寧說:“在互聯(lián)網(wǎng)安全方面,專用密鑰就是最要緊的東西,它就是你的身份證。所以,這個漏洞有潛力成為互聯(lián)網(wǎng)歷史上最糟糕最嚴重的漏洞?!?/p>
之所以如此糟糕,是因為OpenSSL的市場占有率著實可怕。由于它是一個免費的開源軟件,社區(qū)完備,而且具有功能強大的支持庫和密碼工具,所以全世界大部分采用SSL加密的網(wǎng)站都樂于采用OpenSSL。在它的客戶群體中,光是Apache/Nginx這樣的Web容器,就占據(jù)有全球66%的份額,加上即時通訊用的XMPP協(xié)議、郵件用的SMTP/POP/IMAP協(xié)議和VPN服務(wù)等等,覆蓋面相當驚人。
根據(jù)檢索網(wǎng)絡(luò)空間節(jié)點的搜索引擎ZoomEye(鐘馗之眼)的統(tǒng)計顯示,在4月8日該漏洞爆發(fā)當天,中國國內(nèi)有33303個443(HTTPS服務(wù))端口受到本次漏洞影響,全球受影響的443端口數(shù)量應(yīng)該達到71萬以上。在這個漏洞被公布之后,谷歌和Twitter等大型公司已經(jīng)率先宣布進行了漏洞修復(fù),而微軟和蘋果公司則干脆宣稱自己核心業(yè)務(wù)不受影響(作為兩個崇尚封閉的公司,微軟和蘋果很可能并未采用OpenSSL這樣的開源軟件)。百度、360、微信和淘寶等國內(nèi)重量級網(wǎng)絡(luò)產(chǎn)品也在第二天進行了修復(fù)。在這些網(wǎng)站修復(fù)完成之后,用戶再進行修改密碼的工作,就可以在相當程度上保證自己的安全。
然而,修復(fù)漏洞并不等于其影響就不再存在。我們知道,這個漏洞最早存在于2012年發(fā)布的1.0.1版本,距離現(xiàn)在已經(jīng)有將近兩年之久。我們很難想象在長達兩年的時間中,沒有黑客發(fā)現(xiàn)并利用這個漏洞偷取信息;而且,由于這種攻擊方式非常難以察覺,所以如果真的有人利用了這個漏洞,我們也不知道到底是誰對哪個網(wǎng)站做了什么。它的波及面實在太廣了,影響也實在太大。以最壞的打算來看,很有可能所有大型網(wǎng)站的信息都遭到了泄露,其中的每一個用戶都會受到影響。
不僅如此,它的余波也將會非常長。因為很多系統(tǒng)的專用密鑰或許已經(jīng)在漏洞被修補之前被竊取。其中有些密碼又是無法被簡單修改的,所以對于這樣的網(wǎng)站來說,黑客們大可利用之前得到的管理員權(quán)限輕松獲取客戶信息;萬一網(wǎng)站保存的是明文密碼,那就更糟糕了,黑客們還可以看見用戶設(shè)定的密碼,無論修改多少次都沒有用。
這個漏洞并不是惡意的“后門”。根據(jù)OpenSSL日志顯示,這個漏洞來自于德國開發(fā)者羅賓·希格爾曼在2011年12月的一次更新,當時他的任務(wù)是包括修復(fù)代碼中存在的幾個漏洞并增添新的功能。在接受《悉尼先驅(qū)晨報》的采訪時,希格爾曼遺憾地表示,漏洞的起因完全是他當時“忘記驗證一個包含字符串長度的變量”。任何一個有編程經(jīng)驗的人都能理解這樣的疏忽,只不過,這一次他的疏忽影響確實大了一點。
不過,編寫者沒有惡意,卻并不代表其他人沒有惡意。在“心臟出血”漏洞被公布之后不久,彭博社爆出重磅消息:NSA(美國國家安全局)早在兩年前該漏洞剛剛出現(xiàn)的時候就已經(jīng)獲知了它的存在;不僅如此,NSA還以國家安全為由,利用這個漏洞用來獲取密碼和用戶數(shù)據(jù),也就是說,NSA借此獲取了整個互聯(lián)網(wǎng)超過2/3的數(shù)據(jù)。
報道同時還指出,“心臟出血”絕非個案,事實上NSA手中至少擁有上千個相似的漏洞,而該機構(gòu)則一貫以情報收集為由為其辯護?!癗SA養(yǎng)了一千多個專家,用各種先進的分析技術(shù),專門去追尋這些漏洞,”報道稱,“據(jù)知情人士介紹,這已成為NSA用來竊取賬號密碼和執(zhí)行其他任務(wù)的基本手段之一。”
這并非沒有可能。在斯諾登提供的材料中,有一項被《華盛頓郵報》完整揭露出來的“黑預(yù)算”,其中顯示,NSA每年花費16億美元在數(shù)據(jù)處理和發(fā)掘上。如此巨大的人力物力投入,讓他們確實有能力早早領(lǐng)先整個互聯(lián)網(wǎng)世界去發(fā)現(xiàn)并利用這樣重大的漏洞。
在彭博社這篇報道出爐之后,NSA官方予以了否認。他們聲稱,在科諾康和谷歌宣布這個漏洞之前,他們都不知道有這樣一個漏洞。至于白宮方面,也同樣通過一份國家安全委員會的聲明對這一指控予以否認,并稱“如果聯(lián)邦政府,包括情報機構(gòu)在內(nèi),在上周之前已經(jīng)發(fā)現(xiàn)這一漏洞,那么我們一定會報告給負責(zé)OpenSSL的社區(qū)”。
然而問題在于,斯諾登揭示出來的NSA與白宮本身就扮演著兩個彼此矛盾的角色,他們一方面保護美國政府及各產(chǎn)業(yè)的計算機網(wǎng)絡(luò)不被黑客侵犯,另一方面又要扮演黑客去侵入其他國家政府和敵對組織的網(wǎng)絡(luò)。加之我們已經(jīng)知道,NSA曾以國家安全為由,用“棱鏡計劃”對谷歌和Facebook等多家企業(yè)進行監(jiān)控,他們的否認真的還有可信度嗎?
微妙的是,在做出否認的幾天之后,美國國家安全委員會發(fā)言人凱特琳·海登又披露了美國總統(tǒng)奧巴馬關(guān)于網(wǎng)絡(luò)安全的一些政策細節(jié),確認奧巴馬已授權(quán)NSA“出于國家安全或執(zhí)法需要,可以利用某些漏洞來破解網(wǎng)絡(luò)加密、設(shè)計網(wǎng)絡(luò)武器”。這又似乎印證了NSA曾經(jīng)利用心臟出血漏洞的報道?!叭绻@是真的,那么NSA將會面臨網(wǎng)絡(luò)社區(qū)的徹底反噬。”美國海軍一位安全專家說。
“心臟出血”漏洞帶來的影響很大,媒體報道也吸引了很多平時并不關(guān)心這方面信息的人,于是很自然地,也有了很多恐慌的言論。
比如說,有人說,HTTPS并不比HTTP安全,所以HTTPS根本沒必要存在。我們需要知道的是,盡管OpenSSL這次的漏洞使得攻擊者可以繞開會話加密協(xié)議而得到敏感信息,但HTTP協(xié)議本身根本不涉及加密。如果說“心臟出血”是讓黑客找到了放在門口腳墊下的鑰匙以闖入家門竊取信息,那么HTTP就是把信息大剌剌擺在了馬路上,哪一個更為不安全可想而知。
其次,“心臟出血”也不代表SSL協(xié)議本身出現(xiàn)了漏洞。因為SSL安全協(xié)議本身并未出現(xiàn)問題,這一次的漏洞是OpenSSL這款軟件在實現(xiàn)時的疏漏所造成的,并不會對SSL的存在造成動搖。
再者,盡管微軟和蘋果乃至于國內(nèi)不少大公司因為采用的是商業(yè)性SSL軟件而非OpenSSL而逃過一劫,但事實上,開源軟件的優(yōu)越性并不應(yīng)該經(jīng)此一事便遭到抹殺。因為密碼學(xué)是非常專業(yè)而且需要極大投入的學(xué)科,像OpenSSL這樣的開源軟件,其社區(qū)已經(jīng)非常完備,有無數(shù)人投入了多年的精力去探索分析和研究,實力不遜于任何商業(yè)公司。另外,從開發(fā)的角度上來說,開源便意味著源代碼需要經(jīng)過所有人的審查,它出現(xiàn)漏洞的概率也會比較小。當然,開源軟件在修補漏洞時可能會被黑客打“時間差”,但考慮到開源軟件在修復(fù)漏洞的效率上也遠遠高于閉源軟件,這一點小瑕疵也算瑕不掩瑜。
真正應(yīng)該提倡的,或許是混合多種加密方式,尤其涉及金融服務(wù)時,不要單單依賴于SSL協(xié)議來完成保密工作。如同支付寶綁定手機短信驗證一樣,這樣的雙重驗證方式,可以進一步減少因為軟件漏洞帶來的風(fēng)險。
未來或許會更好。美國LaserLock科技公司的首席技術(shù)官保羅·唐弗里德說,或許人們可以嘗試采用生物識別技術(shù)的驗證方法。“雖然無法保護存在漏洞的SSL代碼片段,但能夠避免身份盜竊和重復(fù)攻擊?!彼f,“現(xiàn)在我們的面部和語音識別技術(shù)已經(jīng)非常強大,能夠在用戶的現(xiàn)有設(shè)備上運行,所以我們不禁要問,為什么我們的網(wǎng)站還要繼續(xù)依賴于傳統(tǒng)的密碼呢?”