虛擬化漏洞分析之QEMU網(wǎng)卡堆溢出漏洞
原創(chuàng)前言:
云計(jì)算目前已成為一種被大多數(shù)互聯(lián)網(wǎng)公司接受的服務(wù)模式,它提供了定制化的硬件資源,應(yīng)用,以及服務(wù)。作為實(shí)現(xiàn)云計(jì)算構(gòu)想的最重要的技術(shù)基石,虛擬化系統(tǒng)提供了硬件資源的量化分配和靈活調(diào)度,保證云業(yè)務(wù)的順利實(shí)施。因此,云業(yè)務(wù)的健康發(fā)展,離不開虛擬化系統(tǒng)的穩(wěn)定運(yùn)行。
360 Marvel Team將陸續(xù)公開一系列獨(dú)立發(fā)現(xiàn)的針對(duì)虛擬化軟件高危0day漏洞的分析文章,揭開虛擬化攻擊技術(shù)的神秘面紗。在9月29日的360 ISC 2015大會(huì)上,該團(tuán)隊(duì)安全研究員唐青昊,將進(jìn)行關(guān)于《云虛擬化系統(tǒng)的漏洞挖掘技術(shù)》議題的演講,在該議題中將分享漏洞挖掘的核心技術(shù)。
本文為該系列的第二篇文章,將詳細(xì)分析CVE-2015-5279 qemu網(wǎng)卡堆溢出漏洞的相關(guān)知識(shí)。關(guān)于第一篇文章針對(duì)CVE-2015-6815漏洞的分析,詳見http://www.freebuf.com/vuls/77834.html。
一. 漏洞基礎(chǔ)知識(shí)
CVE-2015-5279是qemu虛擬化環(huán)境中rtl8029網(wǎng)卡設(shè)備存在一處堆溢出類型漏洞。那么什么是qemu軟件?qemu軟件和kvm虛擬化存在什么樣的關(guān)系?rtl8029網(wǎng)卡是怎樣的一款設(shè)備呢?下面將逐一解答這些問題。
QEMU是一款處理器模擬軟件,可以提供用戶模式模擬和系統(tǒng)模式模擬。當(dāng)處于用戶模式模擬狀態(tài)時(shí),將使用動(dòng)態(tài)翻譯技術(shù),允許一個(gè)cpu構(gòu)建的進(jìn)程在另一個(gè)cpu上執(zhí)行。系統(tǒng)模式模擬狀態(tài)下,允許對(duì)整個(gè)pc系統(tǒng)的處理器和所使用到的相關(guān)外圍設(shè)備進(jìn)行模擬。qemu提供的仿真外設(shè)包括硬件Video Graphics Array (VGA) 仿真器、PS/2 鼠標(biāo)和鍵盤、集成開發(fā)環(huán)境(IDE)硬盤和 CD-ROM 接口,以及軟盤仿真。也包括對(duì)E2000 Peripheral Controller Interconnect (PCI) 網(wǎng)絡(luò)適配器、串行端口、大量的聲卡和 PCI Universal Host Controller Interface (UHCI) Universal Serial Bus (USB) 控制器(帶虛擬 USB 集線器)的仿真。除了仿真標(biāo)準(zhǔn) PC 或 ISA PC(不帶 PCI 總線)外,QEMU 還可以仿真其他非 PC 硬件,如 ARM Versatile 基線板(使用 926E)和 Malta million instructions per second (MIPS) 板。對(duì)于各種其他平臺(tái),包括 Power Macintosh G3 (Blue & White) 和 Sun-4u 平臺(tái),都能正常工作。
圖1.qemu可進(jìn)行模擬的外圍設(shè)備
KVM是一種依賴硬件虛擬化技術(shù)(Intel VT或者AMD V)的裸機(jī)虛擬化程序,它使用 Linux 內(nèi)核作為它的虛擬機(jī)管理程序。對(duì) KVM 虛擬化的支持自 2.6.20 版開始已成為主流 Linux 內(nèi)核的默認(rèn)部分。KVM支持的操作系統(tǒng)非常廣泛,包括Linux、BSD、Solaris、Windows、Haiku、ReactOS 和 AROS Research Operating System。
在 KVM 架構(gòu)中,虛擬機(jī)實(shí)現(xiàn)為常規(guī)的 Linux 進(jìn)程,由標(biāo)準(zhǔn) Linux 調(diào)度程序進(jìn)行調(diào)度。事實(shí)上,每個(gè)虛擬 CPU 顯示為一個(gè)常規(guī)的 Linux 進(jìn)程。這使 KVM 能夠享受 Linux 內(nèi)核的所有功能。設(shè)備模擬由提供了修改過的 qemu 版本來完成。
在了解了kvm和qemu的原理以及相互的關(guān)系之后,我們?cè)賮黻P(guān)注下rtl8029網(wǎng)卡設(shè)備,如下圖所示。這里需要了解的是在qemu中模擬rtl8029網(wǎng)卡設(shè)備的模塊是ne2000。ne2000模擬了rtl8029網(wǎng)卡收發(fā)數(shù)據(jù)包的流程,邏輯位置位于虛擬機(jī)設(shè)備驅(qū)動(dòng)和宿主機(jī)qemu網(wǎng)絡(luò)適配器模塊之間,當(dāng)虛擬機(jī)的用戶空間發(fā)生socket send操作之后,設(shè)備驅(qū)動(dòng)將封裝好的數(shù)據(jù)發(fā)送到ne2000設(shè)備模擬器,然后進(jìn)入qemu相關(guān)適配器模塊,再通過宿主機(jī)的物理網(wǎng)卡向外發(fā)送數(shù)據(jù)。而接收數(shù)據(jù)則是相反的過程。
圖2. rtl8029網(wǎng)卡實(shí)物照
二.漏洞原理分析
第一部分中簡要分析了kvm, qemu,以及關(guān)于ne2000網(wǎng)卡模塊這些了解漏洞原理的基礎(chǔ)知識(shí),我們?cè)賮矸治鯟VE-2015-5279漏洞的具體產(chǎn)生原因。
該漏洞發(fā)生在ne2000網(wǎng)卡模塊的接收數(shù)據(jù)包的過程,相關(guān)代碼截圖如下。這部分代碼取自qemu-2.4.0/hw/net/ne2000.c文件中的ne2000_receive函數(shù)。ne2000_receive函數(shù)是虛擬機(jī)接收外部數(shù)據(jù)包的關(guān)鍵函數(shù),其大致流程為:
1. 判斷網(wǎng)卡是否處于工作狀態(tài),數(shù)據(jù)緩沖區(qū)是否處于滿的狀態(tài);
2. 通過檢測(cè)是否是否處于混雜模式,mac地址是否匹配,是否為廣播地址,從而判斷是否接收此數(shù)據(jù)包;
3. 如緩沖區(qū)較小,則對(duì)其進(jìn)行擴(kuò)展;
4. 進(jìn)入數(shù)據(jù)包處理過程(如下圖代碼所示):處理數(shù)據(jù)包頭部;寫數(shù)據(jù)包內(nèi)容;
5. 結(jié)束收包過程(如下圖代碼所示)。
圖3. 有缺陷的代碼
在進(jìn)入收包代碼之前,s->curpag,s->stop,s->start是可以被黑客控制為任意數(shù)值。因此在上述函數(shù)流程的第4步中,index,avail,len這些關(guān)鍵的變量也可以被設(shè)置為可控的數(shù)值。利用這一特點(diǎn),黑客可以創(chuàng)造出哪些攻擊方式呢?
首先可以導(dǎo)致邏輯循環(huán),即當(dāng)進(jìn)入while循環(huán)之后,使len不斷等于0,執(zhí)行”size -= len; ”這一行指令時(shí),size永遠(yuǎn)不會(huì)減小,因此“ while (size > 0) ”的判斷永遠(yuǎn)為真,進(jìn)入死循環(huán)。
第二種是造成堆緩沖區(qū)的溢出,在執(zhí)行“memcpy(s->mem + index, buf, len); ”這一行代碼時(shí),由于index是可被操控的,因此可以在正確的緩沖區(qū)之外寫入數(shù)據(jù)包內(nèi)容。要實(shí)現(xiàn)這種利用方式,還需控制收包流程中的第一步,即判斷緩沖區(qū)邊界的過程。相關(guān)代碼截圖如下。
圖4. 需要進(jìn)行關(guān)注的關(guān)鍵代碼
三.漏洞危害
CVE-2015-5279被qemu官方安全團(tuán)隊(duì)定義為高危漏洞,一旦被黑客惡意利用,可以實(shí)現(xiàn)拒絕服務(wù)攻擊,虛擬機(jī)逃逸攻擊。在成功利用該漏洞之后,黑客進(jìn)而可以控制宿主機(jī)以及該宿主機(jī)上的其他虛擬機(jī),進(jìn)而造成企業(yè)的敏感信息泄露,內(nèi)網(wǎng)被滲透的可怕后果。
圖5. 官方確定該漏洞為高危
四.漏洞修復(fù)方案
360 Marvel Team在發(fā)現(xiàn)該漏洞之后,第一時(shí)間通知了qemu官方安全團(tuán)隊(duì)進(jìn)行修復(fù)。
在經(jīng)歷了長達(dá)25天的緊張修復(fù)之后,官方團(tuán)隊(duì)于9月15日公開了該漏洞的詳細(xì)信息,詳見https://access.redhat.com/security/cve/CVE-2015-5279,該鏈接也包含了對(duì)360 Marvel Team成員的致謝信息。
補(bǔ)丁地址:https://lists.gnu.org/archive/html/qemu-devel/2015-09/msg03984.html
官方提供了對(duì)該漏洞的補(bǔ)丁,其中在ne2000_receive函數(shù)中增加了對(duì)索引邊界的檢查,防止了緩沖區(qū)溢出的危險(xiǎn)。建議使用qemu的廠商盡快采用該補(bǔ)丁,以免黑客利用該漏洞對(duì)業(yè)務(wù)造成影響。
圖6. 官方發(fā)布的補(bǔ)丁信息
小結(jié):針對(duì)360 Marvel Team獨(dú)立發(fā)現(xiàn)的虛擬化安全漏洞CVE-2015-5279,本文完整分析了漏洞相關(guān)的原理,危害,以及修復(fù)方案,希望可以引起更多開展云業(yè)務(wù)的公司,對(duì)虛擬化安全問題的重視。
關(guān)于360 Marvel Team:
360 Marvel Team是國內(nèi)首支虛擬化安全研究團(tuán)隊(duì),研究內(nèi)容為云安全領(lǐng)域的虛擬化平臺(tái)攻防技術(shù),致力于保持領(lǐng)先的脆弱性安全風(fēng)險(xiǎn)發(fā)現(xiàn)和防護(hù)能力,針對(duì)主流虛擬化平臺(tái)提供漏洞檢測(cè)和系統(tǒng)加固解決方案。