0day漏洞組合拳:詳細分析一款惡意PDF樣本

0day漏洞組合拳:詳細分析一款惡意PDF樣本

來自專欄 安全客

一、前言

2018年3月末,ESET研究人員發現了一款非常有趣的惡意PDF樣本。經過仔細研究後,我們發現該樣本利用了之前未知的兩個漏洞:Adobe Reader中的一個遠程命令執行漏洞以及Microsoft Windows中的一個許可權提升漏洞。

這兩個漏洞組合起來威力巨大,攻擊者可以通過這種方式在存在漏洞的目標上以儘可能高的許可權來運行任意代碼,並且整個過程很少需要用戶交互。APT組織通常會使用這種組合拳來發起攻擊,比如去年的Sednit攻擊活動就是非常好的一個例子。

在發現這款PDF樣本後,ESET第一時間聯繫了微軟安全響應中心(MSRC)、Windows Defender ATP研究團隊以及Adobe Product安全事件響應團隊,並與這些單位一起協作,直至漏洞被成功修復。

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

  • APSB18-09
  • CVE-2018-8120

受影響的相關產品版本信息如下:

Acrobat DC (2018.011.20038及更早版本)

Acrobat Reader DC (2018.011.20038及更早版本)

Acrobat 2017 (011.30079及更早版本)

Acrobat Reader DC 2017 (2017.011.30079及更早版本)

Acrobat DC (Classic 2015) (2015.006.30417及更早版本)

Acrobat Reader DC (Classic 2015) (2015.006.30417及更早版本)

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

本文介紹了這款惡意樣本以及所利用漏洞的技術細節。

二、簡介

PDF(Portable Document Format)是一種電子文檔文件格式,與其他常見文檔格式一樣,攻擊者可以利用該類型文件將惡意軟體傳播至受害者主機。為了執行惡意代碼,攻擊者需要尋找並利用PDF閱讀器軟體中的漏洞。現在有多款PDF閱讀器,其中最常用的就是Adobe Reader。

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

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

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

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

在漏洞利用開頭階段,JavaScript代碼開始操控Button1對象,該對象包含一個精心構造的JPEG2000圖像,該圖像會觸發Adobe Reader中的雙重釋放(double-free)漏洞。

圖1. 操控Button1對象的JavaScript代碼

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

圖2. 用來讀取及寫入內存JavaScript代碼

利用這兩種方法,攻擊者成功定位EScript.api插件的內存地址,而該插件正是Adobe JavaScript的引擎。利用該模塊的彙編指令(ROP gadgets),惡意JavaScript成功構造了一條ROP鏈,可以執行本地shellcode。

圖3. 惡意JavaScript成功構造ROP鏈

最後一步,shellcode會初始化PDF中內嵌的一個PE文件,將執行權遞交給該文件。

四、CVE-2018-8120:Windows許可權提升漏洞

成功利用Adobe Reader漏洞後,攻擊者必須打破沙箱保護機制,而這正是我們即將討論的第二個利用代碼的目的所在。

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

圖4. 反彙編後的SetImeInfoEx常式代碼

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

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

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

圖5. 反彙編後的CALL FAR指令

一旦代碼在內核模式執行,漏洞利用程序就會使用system token(令牌)替換掉當前進程的token。

五、總結

當PDF樣本提交到公共惡意樣本庫時,ESET研究人員就發現了這款樣本。彼時樣本並不包含最終的攻擊載荷,這表明當時樣本很有可能處於早期研發階段。雖然當時樣本並不包含真正的惡意載荷,仍有可能處於早期研發階段,但這也告訴我們樣本的作者在漏洞發現及漏洞利用方面具備較高的水平。

六、IoC

ESET檢測標識:

JS/Exploit.Pdfka.QNV trojan

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

樣本SHA-1哈希:

C82CFEAD292EECA601D3CF82C8C5340CB579D1C6

0D3F335CCCA4575593054446F5F219EBA6CD93FE

本文翻譯自 welivesecurity.com, 原文鏈接 。如若轉載請註明出處。

登錄安全客 - 有思想的安全新媒體www.anquanke.com/,或加入交流群702511263、下載安全客APP來獲取更多最新資訊吧~

推薦閱讀:

Mac打開PDF中英文混合的文章是亂碼,怎麼解決?
微軟的 Office 轉 PDF 的技術是自己開發的嗎?還是購買了其他的PDF公司的開發包,然後二次開發集成的?
如何評價onyx boox max2?值得買嗎?
請收藏!這是一份最全的PDF問題解決方案。
在 Mac 上如何方便地將 Word 轉換為 PDF?

TAG:PDF | 科技 | 計算機科學 |