360MarvelTeam虛擬化漏洞第二彈 - CVE-2015-5279 漏洞分析

wyzsk發表於2020-08-19
作者: 360安全衛士 · 2015/09/25 12:59

0x00 前言


雲端計算目前已成為一種被大多數網際網路公司接受的服務模式,它提供了定製化的硬體資源,應用,以及服務。作為實現雲端計算構想的最重要的技術基石,虛擬化系統提供了硬體資源的量化分配和靈活排程,保證雲業務的順利實施。因此,雲業務的健康發展,離不開虛擬化系統的穩定執行。

360 Marvel Team將陸續公開一系列獨立發現的針對虛擬化軟體高危0day漏洞的分析文章,揭開虛擬化攻擊技術的神秘面紗。在9月29日的360 ISC 2015大會上,該團隊安全研究員唐青昊,將進行關於《雲虛擬化系統的漏洞挖掘技術》議題的演講,在該議題中將分享漏洞挖掘的核心技術。

本文為該系列的第二篇文章,將詳細分析CVE-2015-5279 qemu網路卡堆溢位漏洞的相關知識。關於第一篇文章針對CVE-2015-6815漏洞的分析,詳見http://www.freebuf.com/vuls/77834.html

0x01 漏洞基礎知識


CVE-2015-5279是qemu虛擬化環境中rtl8029網路卡裝置存在一處堆溢位型別漏洞。那麼什麼是qemu軟體?qemu軟體和kvm虛擬化存在什麼樣的關係?rtl8029網路卡是怎樣的一款裝置呢?下面將逐一解答這些問題。

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 平臺,都能正常工作。

圖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 版本來完成。

在瞭解了kvm和qemu的原理以及相互的關係之後,我們再來關注下rtl8029網路卡裝置,如下圖所示。這裡需要了解的是在qemu中模擬rtl8029網路卡裝置的模組是ne2000。ne2000模擬了rtl8029網路卡收發資料包的流程,邏輯位置位於虛擬機器裝置驅動和宿主機qemu網路介面卡模組之間,當虛擬機器的使用者空間發生socket send操作之後,裝置驅動將封裝好的資料傳送到ne2000裝置模擬器,然後進入qemu相關介面卡模組,再透過宿主機的物理網路卡向外傳送資料。而接收資料則是相反的過程。

圖2. rtl8029網路卡實物照

0x02 漏洞原理分析


第一部分中簡要分析了kvm, qemu,以及關於ne2000網路卡模組這些瞭解漏洞原理的基礎知識,我們再來分析CVE-2015-5279漏洞的具體產生原因。

該漏洞發生在ne2000網路卡模組的接收資料包的過程,相關程式碼截圖如下。這部分程式碼取自qemu-2.4.0/hw/net/ne2000.c檔案中的ne2000_receive函式。ne2000_receive函式是虛擬機器接收外部資料包的關鍵函式,其大致流程為:

  1. 判斷網路卡是否處於工作狀態,資料緩衝區是否處於滿的狀態;
  2. 透過檢測是否是否處於混雜模式,mac地址是否匹配,是否為廣播地址,從而判斷是否接收此資料包;
  3. 如緩衝區較小,則對其進行擴充套件;
  4. 進入資料包處理過程(如下圖程式碼所示):處理資料包頭部;寫資料包內容;
  5. 結束收包過程(如下圖程式碼所示)。

圖3. 有缺陷的程式碼

在進入收包程式碼之前,s->curpag,s->stop,s->start是可以被駭客控制為任意數值。因此在上述函式流程的第4步中,index,avail,len這些關鍵的變數也可以被設定為可控的數值。利用這一特點,駭客可以創造出哪些攻擊方式呢?

首先可以導致邏輯迴圈,即當進入while迴圈之後,使len不斷等於0,執行”size -= len; ”這一行指令時,size永遠不會減小,因此“ while (size > 0) ”的判斷永遠為真,進入死迴圈。

第二種是造成堆緩衝區的溢位,在執行“memcpy(s->mem + index, buf, len); ”這一行程式碼時,由於index是可被操控的,因此可以在正確的緩衝區之外寫入資料包內容。要實現這種利用方式,還需控制收包流程中的第一步,即判斷緩衝區邊界的過程。相關程式碼截圖如下。

圖4. 需要進行關注的關鍵程式碼

0x03 漏洞危害


CVE-2015-5279被qemu官方安全團隊定義為高危漏洞,一旦被駭客惡意利用,可以實現拒絕服務攻擊,虛擬機器逃逸攻擊。在成功利用該漏洞之後,駭客進而可以控制宿主機以及該宿主機上的其他虛擬機器,進而造成企業的敏感資訊洩露,內網被滲透的可怕後果。

圖5. 官方確定該漏洞為高危

0x04 漏洞修復方案


360 Marvel Team在發現該漏洞之後,第一時間通知了qemu官方安全團隊進行修復。 在經歷了長達25天的緊張修復之後,官方團隊於9月15日公開了該漏洞的詳細資訊,詳見https://access.redhat.com/security/cve/CVE-2015-5279,該連結也包含了對360 Marvel Team成員的致謝資訊。

補丁地址:https://lists.gnu.org/archive/html/qemu-devel/2015-09/msg03984.html

官方提供了對該漏洞的補丁,其中在ne2000_receive函式中增加了對索引邊界的檢查,防止了緩衝區溢位的危險。建議使用qemu的廠商儘快採用該補丁,以免駭客利用該漏洞對業務造成影響。

圖6. 官方釋出的補丁資訊

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

相關文章