時間:2017-08-22 來源:互聯網 瀏覽量:
一、前言
2017年3月14日,微軟公布了安全公告MS17-013,修複了CVE-2017-0005漏洞。CVE-2017-0005漏洞位於Windows Win32k組件中,攻擊者利用該漏洞可能實現權限提升。根據合作夥伴的可信報告,我們發現了該漏洞的零日(zero-day)利用方法。漏洞利用的目標係統為老版本的Windows係統,攻擊者可借此在目標係統上提升進程權限。
在本文中,我們詳細分析了漏洞利用方法的技術細節,評估了Windows 10周年更新版(於2016年8月份發布)對漏洞的防禦效果,同時也評估了一些緩解措施的效果,比如SMEP(Supervisor Mode Execution Prevention,管理模式執行保護)以及VBS(virtualization-based security,基於虛擬化的安全)。此外,我們也展示了Windows在創造者更新(Creators Update)中帶來的Windows Defender ATP(Windows Defender Advanced Threat Protection)的增強功能,Windows Defender ATP可以檢測攻擊者實施的權限提升(elevation-of-privilege,EoP)攻擊行為,自然也能檢測與該漏洞有關的權限提升攻擊行為。
二、權限提升攻擊細節
經過對漏洞利用代碼的審計分析後,我們發現此次EoP攻擊的目標為運行Windows 7以及Windows 8的主機。攻擊者精心構造了利用工具,避免其運行在較新的平台上。
漏洞利用工具的執行過程中的各個階段以及對應的函數如圖1所示。
2.1 階段1&2:解密器以及API解析器
為了保護主功能代碼,攻擊者使用AES-256算法對初始階段的PE文件進行加密。為了加載下一階段的代碼,程序需要將某個密碼作為參數傳遞給主入口函數。代碼中使用了CryptHashData這個API,將傳入的密碼作為密鑰來解密下一階段的載荷。
第2階段充當了一個中間階段的角色,這個階段用來解析API函數。這一階段所做的API解析工作與shellcode或者位置無關(position-independent)代碼的運行過程類似。
GetProcAddress API解析過程的部分代碼如下所示。這部分代碼似乎會混淆後續的載荷,阻止對其的安全分析。
2.3 階段3:避免在新平台上運行
在階段3中,利用工具會執行一些環境檢查過程,特別是會檢查操作係統平台以及具體的版本信息。攻擊者借此確保漏洞利用代碼運行在存在漏洞的係統上(具體說來,這些係統為Windows 7以及Windows 8),它們較少啟用對應的漏洞防護功能。
從代碼中我們可知,工具專門針對特定版本的Windows係統研發,具體版本為:
主版本號(Major release version)為5;
主版本號為6,次版本號(minor version)為0、1或者2。
這些版本對應的是Windows 2000以及Windows 8之間的Windows操作係統,其中不包含Windows 8.1以及Windows 10。此外,仔細研究其中的係統架構檢查代碼後,我們發現漏洞利用代碼針對的是64位操作係統。
下一階段的載荷通過DLL反射技術完成加載。
2.4 階段4:漏洞利用程序
環境檢查通過後,攻擊代碼開始真正利用CVE-2017-0005這個Windows內核漏洞,最終造成內存崩潰,實現代碼權限提升目的。
通過破壞PALETTE.pfnGetNearestFromPalentry中的一個指針,程序可以實現內存空間中的代碼執行。微軟安全研究員一直在密切跟蹤這種利用技術,這種技術可以通過精心構造的PALETTE對象實現在內核中執行代碼。此前我們在Duqu安全事件的一個樣本中觀察到這種漏洞利用技術,並於Virus Bulletin 2015的演講中介紹過這種技術。
如下代碼片段中,我們可以看到PALETTE函數指針處於損壞狀態:
漏洞利用代碼調用NtGdiEngBitBlt這個原生API來觸發win32k!XLATEOBJ_iXlate函數,後者使用了已損壞的那個處理函數。這樣一來,控製流就會傳遞給之前已分配的一段shellcode。相對比而言,Duqu 2.0中的漏洞利用代碼使用了Gdi32.dll中的GetNearestPaletteIndex函數,以便將程序執行權傳遞給損壞的回調處理函數。雖然這兩個漏洞利用代碼在某些地方有些相似,但根據這個不同點,我們可以判定這兩個漏洞利用代碼並不相關,此類漏洞利用技術有非常翔實的參考文檔,因此也能解釋這兩段利用代碼的相似性。
漏洞利用代碼使用動態創建的係統調用(syscall)代碼片段來調用原生的Windows API,如下所示。
shellcode執行期間的調用棧如下所示:
shellcode執行後,利用程序會使用一種常見的令牌交換(token-swapping)技術來將當前進程的權限提升到SYSTEM權限。在類似的EoP漏洞利用中我們經常可以看到這種技術。
三、防護及檢測方法
前麵提到過,這個零日漏洞利用程序沒有針對諸如Windows 10之類的較新的係統。如果環境檢查過程通過,那麼漏洞利用代碼就會在目標係統中執行,根據我們的測試結果,我們發現如果係統部署了其他的防護機製,那麼漏洞利用程序就無法執行全部代碼。我們可以分析一下這兩種防護技術,一種是中期的防護方法,也可以稱之為戰術級防護方法,旨在打破漏洞利用的執行過程,另一種是長期的防護方法,也可以稱之為戰略級防護方法,旨在完全消除漏洞,阻止漏洞利用。
3.1 戰術級防護:阻止程序濫用pfnGetNearestFromPalentry
漏洞利用代碼中利用PALETTE.pfnGetNearestFromPalentry作為控製權傳送點,微軟安全研究員對這種技術已經跟蹤了一段時間。事實上,我們一直在研究針對這種技術的戰術級防護方法。2016年8月,在發布Windows 10周年更新版的同時,微軟公布了一種戰術級防護機製,目的在於防止程序濫用pfnGetNearestFromPalentry。當PALETTE函數指針被調用時,這種防護機製會檢查函數指針的有效性,確保隻有預定義的一組函數會被調用,防止相應的結構體被濫用。
3.2 戰略級防護
除了上麵描述的戰術級防護機製外,Windows 10在64位內核中引入了SMEP、ASLR增強特性,也引入了基於虛擬化的安全(virtualization-based security,VBS)機製,可以阻止漏洞利用過程。
3.2.1 管理模式執行保護
SMEP(Supervisor Mode Execution Prevention,管理模式執行保護)是一種戰略級防護特性,新版的Intel CPU支持這一功能,自Windows 8以來,微軟也引入了這種安全特性。
啟用SMEP特性後,頁表項(page table entry,PTE)中的標誌位作為用戶/管理員(U/S)標誌,可以指定頁麵處於用戶模式或者內核模式。如果內核模式代碼調用了某個用戶模式頁麵,SMEP就會產生訪問衝突,係統會觸發錯誤檢查過程,停止代碼執行過程並報告安全衝突。這種機製可以阻止利用用戶模式分配的可執行頁麵來運行內核模式下的shellcode,而這種運行機製是EoP漏洞利用程序常用的方法。
類似SMEP之類的戰略級防護措施可以導致數以百計的EoP漏洞利用代碼無效,從而顯著提高攻擊者的技術門檻,這類漏洞利用代碼中不乏從內核態直接調用用戶態shellcode的老式漏洞利用方法,如本文分析的CVE-2017-0005漏洞利用技術。
我們可以使用Coreinfo這個工具來判斷主機是否支持SMEP特性。該工具使用CPUID指令,在輸出結果中顯示支持SMEP特性的CPU以及平台。如下圖所示,從工具的執行結果中,我們可知正在測試的CPU支持SMEP。Windows 8以及更高版本的Windows係統支持SMEP特性。
3.2.2 Windows內核64位ASLR增強特性
啟用SMEP後,雖然攻擊者被迫使用更為複雜的漏洞利用代碼才能實施攻擊行為,但根據安全會議以及安全事件中分享的技術方法,我們的確了解到有多種方法可能繞過SMEP保護機製。如使用內核ROP工具或者通過讀寫(RW)方法直接修改PTE都可以實現繞過目的。為了應對漏洞利用中不斷出現的新技術,微軟在Windows 10周年更新版中提供了Windows內核64位ASLR增強特性,通過隨機化的內核地址增強了SMEP功能,避免基於直接修改PTE實現的漏洞利用技術。
3.2.3 基於虛擬化的安全
VBS(virtualization-based security,基於虛擬化的安全)增強特性可以從另一個角度來防止內核中執行惡意代碼。比如,設備保護(Device Guard)會阻止執行內核內存未簽名區域中的代碼,當然也會阻止內核EoP代碼的執行。設備保護中的增強功能也可以保護MSR、控製寄存器以及描述符表寄存器(descriptor table registers)。這樣一來,對CR4控製寄存器(包括SMEP區域的數據)未授權的修改會被立即阻止。
3.3 Windows Defender ATP功能
在創造者更新版係統中,Windows Defender ATP可以檢測通過修改CR4寄存器實現的SMEP攻擊技術。Windows Defender ATP可以監控CR4.SMEP標誌,一旦出現不一致就會報告相應情況。此外,Windows Defender ATP可以監控進程結構中的令牌區域狀態,以檢測令牌交換攻擊。
四、總結
在較新的係統中,本文分析的CVE-2017-0005漏洞利用代碼會直接停止工作,以避免引起用戶警覺,因此這些係統不會受到該工具影響。攻擊者沒有特別去關注老版本的係統,但有意識地在規避新的硬件以及操作係統平台(如Windows 10周年更新版)中所使用的安全增強特性。雖然我們一直在針對特定的漏洞來發布特定的補丁,但從本文對攻擊者行為的分析來看,係統內置的防禦機製(如SMEP、ASLR增強機製以及VBS機製)可以提供一種彈性的防禦屏障。
與創造者更新版一起發布的Windows Defender ATP(公眾預覽版)能夠檢測端點上的漏洞利用行為,進一步擴展了這種防禦屏障。在即將發布的增強特性中,Windows Defender ATP可以發布安全警報,以便安全操作人員第一時間察覺EoP攻擊行為,采取對應的響應動作。大家可以閱讀我們之前發表的分析跨進程注入技術的文章,進一步了解Windows Defender ATP如何檢測複雜的攻擊行為。
除了加強對EoP利用技術的通用檢測方法之外,微軟安全研究員同時也在積極收集屬於ZIRCONIUM的威脅情報以及特征信息,這一組織正是使用CVE-2017-0005漏洞利用技術的組織。我們會向Windows Defender ATP客戶推送綜合威脅情報,分析正在活躍的攻擊組織以及他們的攻擊方法。
Windows 10企業版中集成了Windows Defender ATP,大家可以免費試用。