KVM虛擬化新型漏洞CVE-2015-6815技術分析

wyzsk發表於2020-08-19
作者: 360安全衛士 · 2015/09/10 15:14

0x00 前言


雲端計算業務目前已經觸及到多個行業,無論是雲端儲存,雲音樂等生活中隨處可見的業務,就連銀行金融,支付資訊等服務也都和雲緊密相關。作為雲服務的基礎,虛擬化系統扮演著非常重要的角色,因為在雲生態中主機的硬體多是由虛擬化系統模擬出來的。虛擬化系統中的安全漏洞將嚴重影響雲業務的安全。

360虛擬化安全團隊(MarvelTeam)近日發現了多個虛擬化軟體安全漏洞,使用kvm和xen作為虛擬化平臺的公司業務都將會受這批漏洞影響。該漏洞一旦被攻擊者惡意利用,可以造成三種型別的安全風險:1)虛擬機器當機,影響業務;2)系統資源被強制佔用,宿主機及所有虛擬機器拒絕服務;3)虛擬機器逃逸,攻擊者在宿主機中執行任意程式碼。

我們將陸續公開系列針對虛擬化軟體高危0day漏洞的分析文章,揭開宿主機攻擊技術的神秘面紗。本文將首先分析KVM虛擬化新型漏洞CVE-2015-6815。

在9月29日的ISC 2015大會上,360虛擬化安全團隊(MarvelTeam)安全研究員唐青昊,將進行《雲虛擬化系統的漏洞挖掘技術》的議題演講,進一步分享漏洞挖掘的核心技術。

0x01 關於QEMU和KVM


QEMU是一款處理器模擬軟體,可以提供使用者模式模擬和系統模式模擬。當處於使用者模式模擬狀態時,將使用動態翻譯技術,允許一個cpu構建的程式在另一個cpu上執行。系統模式模擬狀態下,允許對整個pc系統的處理器和所使用到的相關外圍裝置進行模擬。qemu提供的模擬外設包括硬體Video Graphics Array (VGA) 模擬器、PS/2 滑鼠和鍵盤、整合開發環境(IDE)硬碟和 CD-ROM 介面,以及軟盤模擬。也包括對E2000 Peripheral Controller Interconnect (PCI) 網路介面卡、串列埠、大量的音效卡和 PCI Universal Host Controller Interface (UHCI) Universal Serial Bus (USB) 控制器(帶虛擬 USB 集線器)的模擬。除了模擬標準 PC 或 ISA PC(不帶 PCI 匯流排)外,QEMU 還可以模擬其他非 PC 硬體,如 ARM Versatile 基線板(使用 926E)和 Malta million instructions per second (MIPS) 板。對於各種其他平臺,包括 Power Macintosh G3 (Blue & White) 和 Sun-4u 平臺,都能正常工作。

enter image description here

圖1.qemu可進行模擬的外圍裝置

KVM是一種依賴硬體虛擬化技術(Intel VT或者AMD V)的裸機虛擬化程式,它使用 Linux 核心作為它的虛擬機器管理程式。對 KVM 虛擬化的支援自 2.6.20 版開始已成為主流 Linux 核心的預設部分。KVM支援的作業系統非常廣泛,包括Linux、BSD、Solaris、Windows、Haiku、ReactOS 和 AROS Research Operating System。

在 KVM 架構中,虛擬機器實現為常規的 Linux 程式,由標準 Linux 排程程式進行排程。事實上,每個虛擬 CPU 顯示為一個常規的 Linux 程式。這使 KVM 能夠享受 Linux 核心的所有功能。裝置模擬由提供了修改過的 qemu 版本來完成。

0x02 QEMU網路卡裝置簡介


QEMU支援多種網路卡裝置,可以透過如下的命令去列舉所支援的網路卡裝置型別,一共有8種,基本可以滿足大多數作業系統的需求。

圖2.qemu支援的虛擬網路卡裝置

enter image description here

此次漏洞出現在e1000網路卡裝置中,該網路卡的基本功能等同於Intel rc82540EM硬體網路卡,支援TSO技術,網路資料傳輸效率極高。

0x03 漏洞分析


CVE-2015-6815是qemu軟體的虛擬網路卡裝置存在的一處邏輯漏洞,攻擊者可透過構造惡意的資料流觸發該漏洞。 我們分析網路卡在處理惡意資料流時執行的邏輯:

a)網路卡驅動向網路卡裝置傳送指令,通知網路卡裝置執行資料傳送操作; b)set_tctl(E1000State *s, int index, uint32_t val)

當網路卡裝置判斷已經設定相關暫存器,即開始進行發包操作,進入set_tctl函式中進行相關處理,函式原型如下:

c) start_xmit(E1000State *s)

start_xmit函式首先檢查(s->reg[TCTL]&E1000_TCTL_EN),若等於0,表示沒開啟傳送功能,將直接退出。否則判斷是否存在有效的描述符,有的話則依次取出描述符交給process_tx_desc處理。

d)存在漏洞的函式原始碼如下:

enter image description here

enter image description here

圖3.存在漏洞的函式程式碼

根據註釋,可以清晰地看到,該函式的主要目的是按照3種型別來處理網路卡資料描述符表中的單個描述符,分別是context descriptor,data descriptor,legacy descriptor,這三種型別代表了不同的資料內容:描述資訊,資料,遺留資訊,網路卡透過判斷處於何種型別,設定s->tx的狀態位,然後根據tp->tse 和 tp->cptst來確定是否要呼叫xmit_seg函式以及怎樣填充buf,由於函式對驅動傳進來描述符的內容沒有檢測,可設定成任意值。xmit_seg函式根據s->tx中各欄位的資訊來填充s->data,最後呼叫qemu_send_packet函式傳送s->data,qemu_send_packet(nc, buf, size)。

在該函式的執行過程中,攻擊者透過惡意的資料流,可以控制該函式中的tp->hdr_len和tp->mss資料的值,而 msh = tp->hdr_len + tp->mss。在進入do...while 迴圈之後,tp->size值為0,而bytes和msh的值可以控制,透過迫使程式碼邏輯進入第一個if迴圈,可將bytes設定為msh的值,即bytes也可以被控制。之後,bytes可以一直保持值不變,直至進入while的條件判斷語句,此時如果bytes為0,則do...while進入死迴圈的邏輯。

0x04 漏洞危害


攻擊者利用該漏洞可以導致虛擬機器拒絕服務,並且保持對cpu的高佔用率,繼而會影響宿主機以及其他虛擬機器的正常執行。

我們在測試環境中對該漏洞進行測試,觸發前後的截圖如下。可以看到,在漏洞觸發後宿主機的空閒cpu百分比一直鎖定為為0%。

enter image description here

圖4.觸發漏洞前

enter image description here

圖5.觸發漏洞後

0x05 漏洞修補方案


360虛擬化安全團隊(MarvelTeam)在發現了該漏洞之後,第一時間通知QEMU軟體官方團隊進行修復。官方在20天的緊張修復之後,在9月5日完成對該漏洞的修復補丁。詳細資訊見https://access.redhat.com/security/cve/CVE-2015-6815,該網頁也包含了360虛擬化安全團隊的致謝。

官方對該漏洞的修補方法如下:

enter image description here

圖6.官方提供的漏洞補丁

在該補丁中,開發人員加入了對漏洞關鍵資料 – bytes樹值的判斷,如為0,則退出迴圈,完美修復漏洞。建議所有使用qemu的廠商採用該補丁,防止攻擊者對在虛擬機器中利用CVE-2015-6815漏洞。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章