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