你覺(jué)得用了SSL和TLS的網(wǎng)站或者應(yīng)用就一定很安全?
理論上來(lái)說(shuō)是的,但實(shí)際上它們有多安全取決于實(shí)現(xiàn)SSL和TLS類庫(kù)的程序員們的認(rèn)真程度。
GnuTLS類庫(kù)最近一個(gè)關(guān)于CVE-2014-0092的安全補(bǔ)丁引起了國(guó)外許多開(kāi)發(fā)人員的關(guān)注。CVE-2014-0092安全漏洞被描述為“GnuTLS沒(méi)有正確地處理X.509證書驗(yàn)證過(guò)程中出現(xiàn)的錯(cuò)誤… 導(dǎo)致攻擊者可以根據(jù)這個(gè)(漏洞)流程創(chuàng)建一個(gè)GnuTLS認(rèn)為合法的證書”。
版本控制系統(tǒng)顯示該漏洞自從2005年以來(lái)就一直存在。嗯,這顯然是個(gè)大問(wèn)題,大伙兒都意識(shí)到了。
為了解決這個(gè)安全漏洞,GnuTLS類庫(kù)的維護(hù)者Nikos,同時(shí)也是RedHat的員工,隨后提交了一個(gè) 補(bǔ)丁 。最后,他把bug的狀態(tài)設(shè)置為關(guān)閉,新的GnuTLS類庫(kù)也被生成并被推入更新渠道。
這個(gè)補(bǔ)丁及未打補(bǔ)丁前的安全漏洞的嚴(yán)重性在于,入侵者可以繞過(guò)網(wǎng)站所使用的安全套接字層協(xié)議(SSL)和傳輸層安全協(xié)議(TLS)的保護(hù),從而監(jiān)視所有使用該協(xié)議的應(yīng)用的用戶與服務(wù)器之間的加密通訊,并破解這些被加密的內(nèi)容。由于這個(gè)Bug的影響,有超過(guò)200個(gè)依賴于GnuTLS實(shí)現(xiàn)關(guān)鍵SSL和TLS操作的操作系統(tǒng)(包括RedHat、Ubuntu和Debian發(fā)行版)和應(yīng)用(Web應(yīng)用、電子郵件等等)的安全受到了威脅。
這個(gè)數(shù)目顯然還會(huì)不停地增長(zhǎng)。
問(wèn)題是怎么來(lái)的?
極具諷刺意味的是,CVE-2014-0092的安全補(bǔ)丁所犯的錯(cuò)誤與Apple開(kāi)發(fā)人員之前犯的“goto fail;”錯(cuò)誤如出一轍。所不同的是,Apple的開(kāi)發(fā)人員連續(xù)寫了兩個(gè)goto fail;導(dǎo)致第二個(gè)“goto fail;”后面的代碼根本無(wú)法到達(dá),而GnuTLS類庫(kù)的維護(hù)人員則將證書驗(yàn)證函數(shù)中的“goto fail;”改成了“goto cleanup;”。
GnuTLS的“安全補(bǔ)丁”
有人調(diào)侃,這位兄弟一定是看了Apple的goto fail然后想“啊~讓我看看我的代碼是不是有這樣的問(wèn)題。然后,好吧,讓我們把goto fail改成goto cleanup,搞定!”
GnuTLS的安全漏洞早在2008年就已經(jīng)有開(kāi)發(fā)人員提出。當(dāng)時(shí)這個(gè)開(kāi)發(fā)人員在OpenLDAP的郵件組中表示,GnuTLS類庫(kù)的代碼在比較證書的時(shí)候存在問(wèn)題,并且整個(gè)類庫(kù)的代碼只是實(shí)現(xiàn)了非常基本的功能,對(duì)于復(fù)雜的情況并沒(méi)有做適當(dāng)處理。他的提議最后在質(zhì)疑和諷刺中歪向了GPL協(xié)議的爭(zhēng)執(zhí),沒(méi)有任何下文。
目前的情況
安全研究人員正在研究這個(gè)漏洞的危及范圍。目前來(lái)說(shuō),讀者應(yīng)該假設(shè)這是個(gè)嚴(yán)重的安全漏洞——因?yàn)楹芏嗍褂肎nuTLS類庫(kù)的下游代碼將會(huì)受到影響。例如,libcurl就依賴于GnuTLS類庫(kù)。一些基于Debian和Ubunut操作系統(tǒng),用于思科網(wǎng)絡(luò)硬件的虛擬專用網(wǎng)絡(luò)應(yīng)用也會(huì)受到影響。
對(duì)此,美國(guó)約翰霍普金斯大學(xué)的加密學(xué)教授說(shuō):“這個(gè)修補(bǔ)糟糕透頂。”
是的,糟糕透頂,誰(shuí)知道其它類似的類庫(kù)有沒(méi)有這種問(wèn)題呢?