新聞中心
惡意的PDF樣本同時開採Adobe Reader與Windows漏洞
2018.06.13
 
 
2018年3月下旬,ESET研究人員發現了一款不同尋常的PDF惡意樣本。經過專業分析後發現,其利用Adobe Reader的記憶體重覆釋放漏洞,以及舊版Windows權限擴張漏洞,結合兩個漏洞,駭客能以最高權限執行任意程式,而且只要求很少的使用者互動。
 
同時開採這兩個漏洞讓該攻擊程式的威力非常強大,將允許駭客於電腦以最高權限執行任意程式,而且只要求很少的使用者互動。APT駭客團隊常利用多個漏洞進行攻擊,例如去年Sednit發起的攻擊便是如此。
 
ESET在發現的同時間,即通知Adobe與微軟,他們也分別在5月修補了位於Adobe Reader中的CVE-2018-4990漏洞及Windows中的CVE-2018-8120漏洞,後者僅影響舊版Windows,包括Windows 7 SP1與Windows Server 2008 SP1/SP2。
 
受此影響的產品版本如下:
Acrobat DC(2018.011.20038及以下版本)
Acrobat Reader DC(2018.011.20038及以下版本)
Acrobat 2017(011.30079及以下版本)
Acrobat Reader DC 2017(2017.011.30079及以下版本)
Acrobat DC(2015經典版)(2015.006.30417及以下版本)
Acrobat Reader DC(2015經典版)(2015.006.30417及以下版本)
Windows 7 32位SP1
Windows 7 64位SP1
Windows Server 2008 32位SP2
Windows Server 2008安騰處理器版SP2
Windows Server 2008 64位SP2
Windows Server 2008 R2安騰處理器版SP1
Windows Server 2008 R2 64位SP1
 
以下為惡意樣本的技術細節及其所利用的漏洞。
 
PDF(可攜式文件格式)是一種電子檔格式。與其他常見文件格式相似,它可被攻擊者用來向受害者的電腦投遞惡意程式。但在執行自編惡意程式碼之前,攻擊者須首先找出並利用PDF閱讀器軟體中所蘊含的漏洞。PDF閱讀器有很多產品,其中使用較廣泛的一款就是Adobe Reader。
 
駭客若要利用PDF檔案展開攻擊,必須於PDF讀取軟體中找到可開採的安全漏洞,而在該樣本中,駭客發現了Adobe Reader中的記憶體重複釋放漏洞,並藉由嵌入式的JavaScript程式碼展開攻擊,取得記憶體的讀寫權限,並執行惡意程式。由於Adobe Reader具備沙箱功能,就算可執行惡意程式,駭客也必須繞過沙箱保護才能危害執行Adobe Reader的電腦
 
此次攻擊者成功找到安全性漏洞,並針對Adobe Reader軟體和作業系統編寫漏洞攻擊程式,是極其罕見的一起案例。
 
CVE-2018-4990 – Adobe Reader遠端控制設備安全性漏洞
 
該惡意PDF樣本中內含JavaScript程式碼,便於掌控整個漏洞攻擊過程。當PDF檔打開時,JavaScript程式碼便得以執行。
 
漏洞攻擊初期,JavaScript程式碼開始操控Button1物件。該物件中含有一張專門編制的JPEG2000圖片,利用後者觸發Adobe Reader之中的雙重釋放安全性漏洞。
 
 
圖1:操控Button1物件的JavaScript程式碼
 
該JavaScript利用heap-spray techniques,損壞內部資料架構。在實施所有上述操控步驟後,攻擊者便實現了其主要目標:掌控自編JavaScript程式碼的記憶體讀寫權。
 
 
圖2:用於實現記憶體讀寫的JavaScript程式碼
 
運用這兩項基本步驟,攻擊者便可找到EScript.api外掛程式的記憶體位置,即Adobe JavaScript引擎所在地址。然後再利用該模組的彙編指令(返回導向程式設計工具,即ROP外掛程式),使惡意JavaScript設置返回導向程式設計鏈,從而達到執行native shellcode的目的。
 
 
圖3:產生返回導向程式設計鏈的惡意JavaScript
 
最後一步,shellcode會初始化PDF文檔中已嵌入的一個可移植執行體(PE)檔,並向其傳達執行指令。
 
CVE-2018-8120 – Microsoft Windows系統許可權提升漏洞
 
利用Adobe Reader之中的安全性漏洞後,攻擊者還需要攻陷沙箱。這正是接下來要探討的第二步漏洞攻擊的用意所在。
 
這一先前未知漏洞之所以存在的根源在於,Windows內核組件Win32k之中的NtUserSetImeInfoEx函數。具體來說,SetImeInfoEx subroutine of NtUserSetImeInfoEx不驗證資料指標,從而允許引用NULL pointer dereference。
 
 
圖4:分解後的SetImeInfoEx routine
 
從圖4可明顯看出,SetImeInfoEx函數中的第一個參數原本期待,指標指向視窗工作站物件。如攻擊者新建視窗工作站物件,並在使用者模式下將其分配給當前進程,則spklList可等於零。故而,通過NULL page並將指標設置為偏移量0×2C,攻擊者便可利用該漏洞,在核空間中寫入任意位址。需注意的是,Windows 8及以上系統中,已不允許使用者進程NULL page。
 
由於攻擊者擁有寫入任意代碼的基本許可權,便可運用各類技術實施攻擊。本例中,攻擊者選擇使用由Ivanlef0u和Mateusz “j00ru” Jurczyk及Gynvael Coldwin已描述過的一項技術,通過重寫通用描述元表(GDT)的方式,將調用門設置為Ring 0。具體操作是,攻擊者運用保存通用描述元表(SGDT)的彙編指令,獲取GDT原始位址,建立自編描述符表,然後再利用上述漏洞,重新寫入原表。
 
然後該漏洞攻擊法使用CALL FAR指令,執行相互特權級調用。
 
 
圖5:分解後的CALL FAR指令
 
當核心模式執行代碼後,攻擊者會將當前the token更換為the system token。
 
結論
 
ESET研究人員表示雖然該樣本並未完成,但足已顯示駭客發現漏洞與撰寫攻擊程式的技術高超。
 
全球資安大廠ESET一直致力開發主動偵測、多層級的安全技術,並結合自動化的機器學習和人類知識,基於30 年的研究經驗,為各種規模的企業和端點平台,提供主動和智慧的防護產品或解決方案。連年榮獲Virus Bulletin 100獎項肯定, 優異的成績持續保持業界領先地位。全球擁有超過1億的用戶,代理機構遍及全球超過180個國家,支援多種語系,並提供在地化的服務協助、是個人及企業值得信賴的資安領導品牌。若有任何資安需求,歡迎洽詢ESET資安專業團隊,服務電話:(02)7722-6899,或上官網查詢:https://www.eset.tw/