好私服传奇安全研究院 0day漏洞也搞融合:惡意PDF樣本詳細分析

2018年3月末,ESET研究人員發現了一個有趣的惡意PDF樣本。仔細觀察發現,該示例利用了兩個先前未知的漏洞:Adobe Reader中的遠程代碼執行漏洞和Microsoft Windows中的特權升級漏洞。

組合的漏洞的使用非常強大,因為它允許攻擊者執行任意代碼,對易受攻擊的目標具有最高可能的特權,並且只有最少量的用戶交互。APT組織經常使用這種組合來執行他們的攻擊,例如去年的Sednit活動。

一旦發現了PDF樣本,ESET就與Microsoft安全響應中心,Windows Defender ATP研究團隊和Adobe產品安全事件響應團隊聯系並一起工作,因為他們修複了這些錯誤。 


{07}76{)V(9]BE6}VK668T2.png


【漏洞編號】CVE-2018-4990;CVE-2018-8120

【風險等級】嚴重

【影響版本】

  • Acrobat DC (2018.011.20038 and earlier versions)

  • Acrobat Reader DC (2018.011.20038 and earlier versions )

  • Acrobat 2017 (011.30079 and earlier versions)

  • Acrobat Reader DC 2017 (2017.011.30079 and earlier versions)

  • Acrobat DC (Classic 2015) (2015.006.30417 and earlier versions)

  • Acrobat Reader DC (Classic 2015) (2015.006.30417 and earlier versions)

  • Windows 7 for 32-bit Systems Service Pack 1

  • Windows 7 for x64-based Systems Service Pack 1

  • Windows Server 2008 for 32-bit Systems Service Pack 2

  • Windows Server 2008 for Itanium-based Systems Service Pack 2

  • Windows Server 2008 for x64-based Systems Service Pack 2

  • Windows Server 2008 R2 for Itanium-based Systems Service Pack 1

  • Windows Server 2008 R2 for x64-based Systems Service Pack 1

【安全補丁】

Adobe以及微軟也提供了相應補丁及安全公告,分別如下:

  • APSB18-09

  • CVE-2018-8120

【技術細節】

1、PDF

PDF是電子文檔文件格式,與其他常見文檔格式一樣,攻擊者可以利用該類型文件將惡意軟件傳播至受害者計算機。為執行惡意代碼,攻擊者必須找到並利用PDF閱讀器軟件中的漏洞。PDF閱讀器軟件較多,Adobe Reader最常用。


Adobe Reader軟件中有一個沙箱安全功能,也稱保護模式。Adobe在官方博客上發布了相關技術細節,分為四部分(Part 1、Part 2、Part 3、Part 4)。沙箱使漏洞利用更加困難:即使攻擊者可以執行代碼,還是必須繞過沙箱的保護機制才能突破運行Adobe Reader的計算機。通常情況下,攻擊者需要借助操作系統本身的漏洞來繞過沙箱保護機制。


當然攻擊者可以同時找到Adobe Reader軟件以及目標操作系統中的漏洞並編寫利用程序,不過這種情況非常罕見。


2、CVE-2018-4990:Adobe Reader的RCE漏洞

惡意PDF樣本中嵌入了javascript代碼,用來控制整個漏洞利用過程。一旦PDF文件被打開,代碼就會被執行。


在漏洞利用開始階段,javascript代碼開始操縱Button1對象,該對象包含JPEG2000圖像,該圖像在Adobe Reader中觸發雙重漏洞。


[8~[Z@~8C7_EELPOV_DMM1I.png

      操控Button1對象的javascript代碼


javascript代碼中用到了堆噴射(heap-spray)技術以破壞內部數據結構。在這些操作都完成後,攻擊者就實現了他們的主要目標:從javascript代碼中實現內存的讀取及寫入。


DO4QZ9]9U`UPU[Y]50A6B23.png

 用來讀取及寫入內存javascript代碼


使用這兩個過程,攻擊者找到Escript.api插件的內存地址,該插件是Adobe javascript引擎。使用該模塊的彙編指令(ROP gadgets),惡意javascript成功構造了一條ROP鏈,這將導致執行本地shellcode。


G$)ACUBE}L{J@QG}]M%MU]V.png

構建ROP鏈的惡意javascript


最後,shellcode會初始化PDF中的PE文件,並執行權遞交給該文件。


3、CVE-2018-8120:Windows權限提升漏洞

利用Adobe Reader漏洞後成功,攻擊者必須破壞沙箱保護機制,這是第二個利用代碼的目的所在。


未知漏洞的源頭在於win32k Windows內核組件中的NtUserSetImeInfoEx函數。更具體一些,就是NtUserSetImeInfoEx的SetImeInfoEx子例程沒有驗證數據指針,允許某個NULL指針被解除引用(dereference)。


EL8I{`FYE2KU[DDT@@6ZBGH.png

反彙編後的SetImeInfoEx例程代碼


如圖上圖所示,SetImeInfoEx函數的第一個參數為指向經過初始化的WINDOWSTATION對象的指針。如果攻擊者創建了一個新的window station對象,並將其分配給用戶模式下的當前進程,所述spklList就會等於0。因此,通過映射NULL頁面並將指針設置為偏移量0x2C後,攻擊者就可以利用這個漏洞寫入內核空間中的任何地址。必須注意的是,從Windows 8開始,用戶進程不能再映射NULL頁面。


既然攻擊者具備任意寫入權限,他們就可以使用各種方法實施攻擊,不過在我們分析的這個例子中,攻擊者選擇使用Ivanlef0u以及Mateusz “j00ru” JurczykGynvael Coldwin介紹的一種技術。攻擊者重寫了全局描述符表(GDT,Global Descriptor Table)來創建Ring 0的一個call gate)(調用門)。為了完成這個任務,攻擊者使用SGDT彙編指令獲取了原始的GDT信息,構造自己的表然後使用前面提到的漏洞重寫了原始的表。


隨後,漏洞利用程序使用CALL FAR指令執行了跨權限級別的調用。


6%R[2R}T_R(P%IU5EI}49RG.png

反彙編後的CALL FAR指令


一旦代碼在內核模式執行,漏洞利用系統令牌替換當前進程的標記。


4、結論

最初,ESET研究人員在將PDF樣本上載到惡意樣本的公共存儲庫時發現了該樣本。樣本不包含最終攻擊有效載荷,這可能表明它在其早期開發階段。盡管樣本沒有包含真正的惡意最終攻擊有效載荷,這可能表明它在早期開發階段,但作者展示了在漏洞發現和利用寫作方面的高水平技能。 

【IoC】

ESET檢測標識:

JS/Exploit.Pdfka.QNVtrojan

Win32/Exploit.CVE-2018-8120.A trojan

SHA-1哈希:

C82CFEAD292EECA601D3CF82C8C5340CB579D1C6

0D3F335CCCA4575593054446F5F219EBA6CD93FE

【參考鏈接】

https://www.welivesecurity.com/2018/05/15/tale-two-zero-days/

漏洞分析內容僅供參考,具體內容表達以及含義以原文為准