歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

利用逆向分析與模糊測試技術深入考察Windows圖形庫漏洞

來源:本站整理 作者:佚名 時間:2019-07-02 TAG: 我要投稿

對于Windows應用程序和組件的漏洞,攻擊者通常都會垂涎三尺。其中,Recorded Future進行的一項研究表明,2018年漏洞利用率最高的10個漏洞中有8個是Microsoft Office的漏洞。是不是覺得難以置信?實際上這一點也不奇怪,舉例來說,如果我們考察Microsoft Excel實例啟動時所加載的模塊,會發現竟然多達91個DLL——還是那句老話,系統越復雜,越容易出現安全漏洞。此外,notepad.exe或calc.exe出現要想正常運行,也需要大約30-40個DLL。

Process Explorer:考察Microsoft Excel的相關模塊
實際上,任何一個模塊中出現安全漏洞,都會危及Microsoft Excel自身。其中一種潛在的攻擊向量,就是向用戶提供惡意文檔,并設法讓用戶打開這些文檔。因此,對于攻擊者來說,只需找到一個含有安全漏洞的模塊,就能攻陷整個應用程序,進而搞定整個系統。這是攻擊者的最大優勢,他們擁有充足的時間,可以全面深入的研究目標,因此,通常總能找到相應的攻擊方法。而對于系統安全來說,其安全性取決于系統中最薄弱的一個環節。
在本文中,我們通過一個具體的例子,為讀者演示如何通過比對原始程序與打過補丁后的程序之間的差異和逆向工程來分析導致Microsoft相關的漏洞的根源,并展示讓含有相關漏洞的應用程序發生崩潰所需的具體步驟——這對于安全研究人員來說是非常有幫助的,因為應用程序崩潰是成功利用漏洞的重要一步。
具體來說,這里使用的漏洞是CVE-2019-0618,這是一個Windows GDI+組件的遠程執行代碼漏洞。在某些情況下,將多個普通漏洞組合在一起也足以搞定整個系統。鑒于此,我們認為CVE-2019-0618很可能會成為一個被廣泛利用的漏洞,因為它可用于在感興趣的目標系統上執行惡意軟件。有關攻擊者使用的惡意軟件免殺技術的詳細概述,請參閱另一篇文章。
Windows GDI+
GDI+是一種基于C/C++類的API,使應用程序能夠在視頻顯示器和打印機上使用圖形和格式化文本。實際上,基于Microsoft Win32和Win64 API的應用程序是無法直接訪問圖形硬件的。相反,應用程序要想與設備驅動程序進行交互,必須借助于GDI+。另外,由于GDI+可用于所有基于Windows的應用程序,使得GDI+ API已經成為顯示Windows表單并管理其內容的主要工具。
在撰寫本文時,ZDI已經公布了9個針對GDI+的漏洞,其中包括本文所研究漏洞。從公布的ZDI報告來看,本文研究的是 一個基于堆的緩沖區溢出漏洞,它能夠導致遠程代碼執行。同時,根據該報告來看,該漏洞的CVSSv2得分為9.2,同時還指出,該漏洞位于DoRotatedStretchBlt方法中,這對于我們的分析工作來說是一個非常有用的線索。除此之外,它沒有公開披露與我們的調查相關的其他信息,也沒有通過針對這個漏洞的概念證明(PoC)代碼。
相關代碼在打補丁前后的變化情況
首先,我們想了解漏洞是如何進行修復的。基于此,我們可以推斷出漏洞的大致情況。為此,我們必須通過比較DLL打補丁后的版本與此前的版本的變化情況,從而縮小需要關注的代碼的范圍;具體的比對方法,請參考另一篇文章中的詳細介紹。簡而言之,我們需要將打補丁后的Windows 7 x86 GdiPlus DLL與未打補丁的Windows 7 x86 GdiPlus DLL進行比對。

Gdiplus.dll:未打補丁(左)vs已打補丁(右)
通過考察相關代碼在打補丁前后的變化情況,我們可以推斷出許多有用的信息。例如,觀察打過補丁的方法的數量,可以推測該特定更新的重要性。通過觀察和比較單個模塊的連續補丁,可以幫我們了解其開發過程,例如特定組件中出現的問題/漏洞的類別等。同時,這種方法還可以幫助安全研究人員識別模糊測試的目標,以及哪些功能更可能存在漏洞。
利用IDA插件BinDiff,我們可以對比二進制代碼在打補丁前后的變化情況,具體如下所示:

BinDiff的輸出結果:比較GdiPlus.dll在打補丁前后的變化情況
通過比較發現,DoRotatedStretchBlt方法確實發生了一些變化,并且這里還具有較高的置信度。下面,讓我們詳細看看圈起來部分的變化情況。

BinDiff的輸出結果:gdiplus!DoRotatedStretchBlt方法,已打補丁與未打補丁的情況
BinDiff插件的顏色的含義:
綠色節點表示在兩個可執行文件中具有相同指令的基本塊;
紅色節點表示比較算法無法找到等價物的基本塊;
黃色節點表示算法可以找到等價物的節點,但是在不同版本中,某些指令已經發生了變化。
在我們的例子中,我們可以看到打過補丁的DLL中有一些紅色基本塊,所以,我們可以使用IDA Hex-Rays反匯編程序來進一步查看實際的差異。

IDA的輸出結果:GdiPlus!DoRotatedStretchBlt方法,已打補丁的版本(左)vs未打補丁的版本(右)
通過觀察這個補丁,可以看出它處理的是一種典型的安全問題——使用memcpy時沒有進行適當邊界檢查。該補丁似乎是用于處置Size參數的不同值的,以避免發生溢出。奇怪的是,并非所有的情況都得到了相應的處理。這是因為,與Windows補丁程序的情況一樣,補丁程序不會出現在漏洞所在的確切位置。進一步的研究表明,該補丁程序的另一部分位于StretchBLT記錄的處理程序中:

[1] [2] [3]  下一頁

【聲明】:黑吧安全網(http://www.zjtpzs.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        神秘东方电子游艺 过年卖什么用的赚钱 最赚钱的职业 英文怎么说 小区车库商店赚钱吗 食之契约 馒头 赚钱 梦幻西游新区第几天开始赚钱 2018什么微商好赚钱 有哪些可以写东西赚钱的网站 个人网上如何创业赚钱吗 汇丰电商怎么赚钱的 有车怎么才能赚钱 口袋妖怪珍珠赚钱 挂机赚钱开通会员 在彩票平台上投注赚钱 卖卷肉饼赚钱不 谁有能赚钱的路子啊 手机怎么炒赚钱