遠(yuǎn)程控制工具VNC拒絕服務(wù)漏洞分析
掃描二維碼隨身看資訊
使用手機(jī) 二維碼應(yīng)用 掃描右側(cè)二維碼,您可以
1. 在手機(jī)上細(xì)細(xì)品讀~
2. 分享給您的微信好友或朋友圈~
Qemu是一款處理器模擬軟件,可以提供用戶模式模擬和系統(tǒng)模式模擬。當(dāng)處于用戶模式模擬狀態(tài)時(shí),將使用動(dòng)態(tài)翻譯技術(shù),允許一個(gè)cpu構(gòu)建的進(jìn)程在另一個(gè)cpu上執(zhí)行。本篇文章就是針對遠(yuǎn)程控制工具VNC拒絕服務(wù)漏洞的分析。
VNC(Virtual Network Computing)是一款優(yōu)秀的遠(yuǎn)程控制工具軟件。由于Qemu內(nèi)置vnc功能模塊,所以可通過vnc客戶端對遠(yuǎn)程Qemu虛擬機(jī)進(jìn)行遠(yuǎn)程訪問。
360安全團(tuán)隊(duì)成員連一漢/LR在閱讀Qemu-VNC源碼過程中,發(fā)現(xiàn)了功能模塊中的一個(gè)遠(yuǎn)程拒絕服務(wù)。
該漏洞危險(xiǎn)等級為中,漏洞編號CVE-2015-5239。
VNC通訊協(xié)議介紹
VNC采用RFB通信協(xié)議。RFB(“remote 幀緩存”)是一個(gè)遠(yuǎ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é)議格式相對簡單,就不再進(jìn)一步描述。
漏洞分析
QEMU在通過vnc讀取報(bào)文中存儲(chǔ)的剪切板中的數(shù)據(jù)時(shí),由于其未對報(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):
從上述代碼中可以發(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ù),并且保持對cpu的高占用率,繼而會(huì)影響宿主機(jī)以及其他虛擬機(jī)的正常執(zhí)行。
我們在測試環(huán)境中對該漏洞進(jìn)行測試,觸發(fā)前后的截圖如下??梢钥吹?,在漏洞觸發(fā)后qemu-kvm無法遠(yuǎn)程訪問,并占有極高的CPU使用率,嚴(yán)重影響其它程序的運(yùn)行。
漏洞觸發(fā)前CPU的狀態(tài):
漏洞觸發(fā)后CPU的狀態(tài):
修補(bǔ)方案
官方已經(jīng)對該漏洞進(jìn)行修復(fù),修補(bǔ)如下:
該補(bǔ)丁中,開發(fā)人員對關(guān)鍵數(shù)據(jù)dlen的大小進(jìn)行嚴(yán)格的大小判斷,確保數(shù)據(jù)長度值不能超過1MB。這樣就完美修復(fù)此漏洞。在這里建議所有使用qemu的廠商采用該補(bǔ)丁,防止攻擊者利用CVE-2015-5239漏洞對廠商和用戶攻擊造成損失。
- 1 Win10的PIN碼是什么 PIN碼怎么設(shè)置和取消
- 2 DNS污染怎么解決 教你幾招輕松恢復(fù)
- 3 手機(jī)WIFI打不開是怎么回事 手機(jī)WIFI打不開怎么辦
- 4 騰訊云怎么綁定域名 騰訊云服務(wù)器綁定域名圖文教程
- 5 手機(jī)WiFi信號弱怎么辦 手機(jī)WiFi信號突然變?nèi)踅鉀Q辦法
- 6 網(wǎng)絡(luò)訪問受限怎么辦 網(wǎng)絡(luò)感嘆號解決辦法
- 7 百度云怎么搜索資源 百度云盤資源搜索教程
- 8 2015世界黑客大戰(zhàn)直播 黑客大戰(zhàn)直播網(wǎng)址
- 9 DNS污染檢測方法 教你一招輕松驗(yàn)證
- 10 百度網(wǎng)盤如何實(shí)名認(rèn)證 百度網(wǎng)盤怎么實(shí)名認(rèn)證
-
百度殺毒怎么樣 百度殺毒軟件好嗎
百度殺毒軟件好嗎?這是很多用戶在使用百度殺毒這款軟件之前的疑問,因?yàn)闅⒍拒浖?shí)在太多,用戶有這樣的疑問也無可厚非,今天,小編就帶大家看看百度殺毒的一些特色吧,或許能夠解答用戶的疑問了!
-
勒索病毒怎么清除 勒索病毒徹底清除方法
很多用戶的電腦遭受了勒索病毒的侵入,那么要如何清除勒索病毒呢?接下來,小編就為大家?guī)砝账鞑《厩宄椒ㄒ约袄账鞑《厩宄ぞ?,感興趣的朋友可以來了解下。
-
比特幣病毒怎么解決 比特幣病毒解決方法
最近,很多朋友都被比特幣勒索病毒給刷屏了,黑客通過索要破解費(fèi)用來獲取利益,那么,比特幣病毒怎么破解呢?接下來,小編就為大家?guī)肀忍貛挪《窘鉀Q方法。