遠(yuǎn)程控制工具VNC拒絕服務(wù)漏洞分析

Qemu是一款處理器模擬軟件,可以提供用戶模式模擬和系統(tǒng)模式模擬。當(dāng)處于用戶模式模擬狀態(tài)時(shí),將使用動(dòng)態(tài)翻譯技術(shù),允許一個(gè)cpu構(gòu)建的進(jìn)程在另一個(gè)cpu上執(zhí)行。本篇文章就是針對(duì)遠(yuǎn)程控制工具VNC拒絕服務(wù)漏洞的分析。

VNC(Virtual Network Computing)是一款優(yōu)秀的遠(yuǎn)程控制工具軟件。由于Qemu內(nèi)置vnc功能模塊,所以可通過vnc客戶端對(duì)遠(yuǎn)程Qemu虛擬機(jī)進(jìn)行遠(yuǎn)程訪問。

360安全團(tuán)隊(duì)成員連一漢/LR在閱讀Qemu-VNC源碼過程中,發(fā)現(xiàn)了功能模塊中的一個(gè)遠(yuǎn)程拒絕服務(wù)。

該漏洞危險(xiǎn)等級(jí)為中,漏洞編號(hào)CVE-2015-5239。

VNC通訊協(xié)議介紹

VNC采用RFB通信協(xié)議。RFB(“remote 幀緩存”)是一個(gè)遠(yuǎn)程圖形用戶的簡(jiǎn)單協(xié)議。通過這個(gè)協(xié)議,用戶可以遠(yuǎn)程模擬鼠標(biāo)點(diǎn)擊、鍵盤按鍵以及文本復(fù)制/剪切等功能。本文所講述漏洞就是在文本復(fù)制/剪切時(shí)觸發(fā)的。

舉例說明

下面這段數(shù)據(jù)是真實(shí)發(fā)送的用于文本復(fù)制/剪切的報(bào)文:

06 00 00 00 00 00 00 06 74 65 73 74 21 21

06 :表示協(xié)議類型message-type

00 00 00 :用于填充padding

00 00 00 06 :待剪切數(shù)據(jù)的長度length

74 65 73 74 21 21:待剪切數(shù)據(jù)內(nèi)容text

協(xié)議格式相對(duì)簡(jiǎn)單,就不再進(jìn)一步描述。

漏洞分析

QEMU在通過vnc讀取報(bào)文中存儲(chǔ)的剪切板中的數(shù)據(jù)時(shí),由于其未對(duì)報(bào)文中用于描述數(shù)據(jù)長度的字段進(jìn)行嚴(yán)格限制,進(jìn)而導(dǎo)致其出現(xiàn)邏輯錯(cuò)誤進(jìn)入死循環(huán)。下面就是程序處理的主體邏輯:

讀取報(bào)文中用于描述待讀取數(shù)據(jù)長度的字段

判斷這個(gè)字段是否超過整個(gè)報(bào)文的長度。

如果為否,則進(jìn)行數(shù)據(jù)復(fù)制;如果為是,則跳出循環(huán)

實(shí)現(xiàn)代碼如下(ui/vnc.c):

實(shí)現(xiàn)代碼如下(ui/vnc.c)

從上述代碼中可以發(fā)現(xiàn):由于len的初始值為1,所以protocol_client_msg()的返回值為8。Input.offset的值始終為14大于8,所以此時(shí)不會(huì)跳出循環(huán)。在進(jìn)入下次循環(huán)時(shí)8將作為protocol_client_msg()的參數(shù)len傳入,用于讀取報(bào)文長度字段的值。但是,如果此時(shí)讀取的報(bào)文中的長度字段為0xFFFFFFF9則protocol_client_msg()的返回值又將為1,下次循環(huán)時(shí)len的值也就又恢復(fù)為初始值1。

這樣,程序又進(jìn)入開始時(shí)的狀態(tài),再次調(diào)用protocol_client_msg()并且返回值為8。然后又將8傳入protocol_client_msg(),讀取報(bào)文中的長度字段0xFFFFFFF9,返回值又為1,循環(huán)往復(fù)。由于在這段循環(huán)過程中客戶端連接標(biāo)志vs->csock始終未被更改,程序也將無法跳出循環(huán),從而進(jìn)入死循環(huán)狀態(tài)。Vnc拒絕服務(wù)也就由此產(chǎn)生。

漏洞危害

攻擊者利用該漏洞可以導(dǎo)致虛擬機(jī)拒絕服務(wù),并且保持對(duì)cpu的高占用率,繼而會(huì)影響宿主機(jī)以及其他虛擬機(jī)的正常執(zhí)行。

我們?cè)跍y(cè)試環(huán)境中對(duì)該漏洞進(jìn)行測(cè)試,觸發(fā)前后的截圖如下??梢钥吹?,在漏洞觸發(fā)后qemu-kvm無法遠(yuǎn)程訪問,并占有極高的CPU使用率,嚴(yán)重影響其它程序的運(yùn)行。

漏洞觸發(fā)前CPU的狀態(tài):

漏洞觸發(fā)前CPU的狀態(tài)

漏洞觸發(fā)后CPU的狀態(tài):

漏洞觸發(fā)后CPU的狀態(tài)

修補(bǔ)方案

官方已經(jīng)對(duì)該漏洞進(jìn)行修復(fù),修補(bǔ)如下:

官方已經(jīng)對(duì)該漏洞進(jìn)行修復(fù)

該補(bǔ)丁中,開發(fā)人員對(duì)關(guān)鍵數(shù)據(jù)dlen的大小進(jìn)行嚴(yán)格的大小判斷,確保數(shù)據(jù)長度值不能超過1MB。這樣就完美修復(fù)此漏洞。在這里建議所有使用qemu的廠商采用該補(bǔ)丁,防止攻擊者利用CVE-2015-5239漏洞對(duì)廠商和用戶攻擊造成損失。

相關(guān)閱讀
網(wǎng)友評(píng)論
圖文推薦
  • 百度殺毒怎么樣 百度殺毒軟件好嗎

    百度殺毒軟件好嗎?這是很多用戶在使用百度殺毒這款軟件之前的疑問,因?yàn)闅⒍拒浖?shí)在太多,用戶有這樣的疑問也無可厚非,今天,小編就帶大家看看百度殺毒的一些特色吧,或許能夠解答用戶的疑問了!

  • 勒索病毒怎么清除 勒索病毒徹底清除方法

    很多用戶的電腦遭受了勒索病毒的侵入,那么要如何清除勒索病毒呢?接下來,小編就為大家?guī)砝账鞑《厩宄椒ㄒ约袄账鞑《厩宄ぞ?,感興趣的朋友可以來了解下。

  • 比特幣病毒怎么解決 比特幣病毒解決方法

    最近,很多朋友都被比特幣勒索病毒給刷屏了,黑客通過索要破解費(fèi)用來獲取利益,那么,比特幣病毒怎么破解呢?接下來,小編就為大家?guī)肀忍貛挪《窘鉀Q方法。