瑞星OpenSSL(CVE-2014-0160)漏洞分析報(bào)告
2014-04-11 09:19:311. CVE-2014-0160漏洞背景
2014年4月7日OpenSSL發(fā)布了安全公告,在OpenSSL1.0.1版本中存在嚴(yán)重漏洞(CVE-2014-0160)。OpenSSL Heartbleed模塊存在一個(gè)BUG,問題存在于ssl/dl_both.c文件中的心跳部分,當(dāng)攻擊者構(gòu)造一個(gè)特殊的數(shù)據(jù)包,滿足用戶心跳包中無法提供足夠多的數(shù)據(jù)會(huì)導(dǎo)致memcpy函數(shù)把SSLv3記錄之后的數(shù)據(jù)直接輸出,該漏洞導(dǎo)致攻擊者可以遠(yuǎn)程讀取存在漏洞版本的OpenSSL服務(wù)器內(nèi)存中多達(dá)64K的數(shù)據(jù)。
2. OpenSSL受影響版本的分布
根據(jù)已經(jīng)公開的信息,該漏洞影響分布情況如下。
??OpenSSL 1.0.1f??????????? ?? (受影響)
??OpenSSL 1.0.2-beta?????? (受影響)
??OpenSSL 1.0.1g?????????????? (不受影響)
??OpenSSL 1.0.0 branch???? (不受影響)
??OpenSSL 0.9.8 branch???? (不受影響)
3. 產(chǎn)生漏洞的主要原因
比較OpenSSL 1.0.1g、OpenSSL 1.0.1f兩個(gè)文件。
在這兩個(gè)文件的ssl文件夾中的d1_both.c、t1_lib.c兩個(gè)文件中,都有一個(gè)tls1_process_heartbeat函數(shù),它就是漏洞的關(guān)鍵。如下圖:

圖左比圖右的代碼,添加了兩個(gè)判斷,主要是針對length字段。再查看length的聲明,如下圖。

OpenSSL 1.0.1f處理過程代碼:


處理過程:從數(shù)據(jù)中讀取長度payload,并根據(jù)數(shù)據(jù)包長度直接申請內(nèi)存,然后拷貝payload 大小的數(shù)據(jù)到申請的內(nèi)存空間;由于沒有驗(yàn)證length是否真是數(shù)據(jù)包的實(shí)際大小,所以如果讓有心人偽造一個(gè)length字段(length字段比實(shí)際數(shù)據(jù)要大),就可以越界訪問內(nèi)存,從而導(dǎo)致內(nèi)存泄漏。
而OpenSSL 1.0.1g 文件中,則對length字段進(jìn)行了相關(guān)的驗(yàn)證。



