作者:
mssp299
·
2015/07/22 13:59
原文地址:http://h30499.www3.hp.com/t5/HP-Security-Research-Blog/Adobe-s-CVE-2015-5090-Updating-the-Updater-to-become-the-bossman/ba-p/6765412
0x01 前言
2015年7月,Adobe修補了多個漏洞,其中CVE-2015-5090格外顯眼,值得深究。但是,Adobe對於這些漏洞只是根據威脅程度進行了排名,並沒有給出詳情。事實上,攻擊者可以利用這個bug以系統許可權用來執行程式碼,即攻擊者能夠完全接管目標機器。因為這個漏洞影響的是Adobe的更新服務,也就是說,該漏洞同時存在於Adobe Reader和Acrobat Pro軟體中。這兩個程式都會安裝ARMSvc服務(更新程式),並且都把 AdobeARM.exe/AdobeARMHelper.exe
存放在c:\progra~1\common~1\Adobe\ARM\1.0
目錄下面。
我們這裡的漏洞利用方法是針對acrobat.exe的,不過,稍作修改也是可以用於Reader的。下面的影片,為大家演示了這個漏洞的利用過程。
0x02 Bug資訊
ARMSvc.exe支援多個由IDA中的HandlerProc函式定義的使用者控制元件:
圖1 Handler函式
UserControls的內部程式碼:
圖2 控制元件
對於該漏洞利用來說,我們主要感興趣的地方在於:
170——建立一段共享記憶體。
179——執行ELEVATE,而ELEVATE又會使用共享記憶體中的引數來執行AdobeARMHelper.exe。
使用者控制元件170的問題在於它建立了一個帶有弱許可權的共享記憶體段。 由於任何使用者都能讀寫該共享記憶體段,這就意味著,攻擊者能夠控制傳遞給AdobeARMHelper.exe程式的引數。
透過觀察AdobeARMHelper.exe,我們發現了例程sub_42A260,這個例程可用來尋找給定目錄下面的第一個檔案。之後,它會檢查該檔案是否帶有Adobe的簽名,如果是的話,sub_42A260就會把這個檔案複製到AdobeARM.exe程式所在的目錄下面。
圖3 簽名校驗
如果簽名校驗失敗,該例程將退出:
圖4 簽名校驗失敗
如果透過了簽名校驗,該例程就會複製該檔案:
圖5 簽名校驗成功
該函式沒有考慮到以下幾點:
- 沒有對存放被複制的檔案的目錄路徑進行檢查。這樣,攻擊者就能提供自己的路徑,即把這個檔案複製到攻擊者指定的路徑下面。
- 找到第一個檔案的時候,沒有檢查檔名。
- 第一個檔案被發現時,沒有檢查檔案的副檔名。
函式DOES會進行下列檢查:
- 在指定資料夾下面找到的第一個檔案是否帶有Adobe的簽名。利用方法:
我們能夠做什麼:
- 控制SM傳遞給
AdobeARMHelper/AdobeARM
的引數。
- 在需要的時候以系統許可權來執行AdobeARM.exe。
- 利用任何具有Adobe 簽名的檔案來覆蓋AdobeARM.exe。
我們需要做什麼:
- 讓無Adobe簽名的程式碼也能執行。
策略:
為了利用這個bug,我們可以用具有Adobe簽名的程式碼來覆蓋AdobeARM.exe,並透過這些程式碼做一些有趣的事情。
例如,arh.exe是Adobe AIR的安裝包裝器。理論上,我們可以用arh.exe覆蓋AdobeARM.exe,這是完全允許的,因為它也有Adobe的簽名。之後,我們就可以透過arh.exe安裝任意的AIR應用程式了。這個策略唯一的問題在於,arh.exe不允許向其傳遞引數,所以,我們無法直接透過SM向其傳遞引數。
最好的策略是,利用某個可以向其傳遞額外引數的、帶有簽名的二進位制程式碼來覆蓋AdobeARM.exe。利用方法:
如果我們仔細考察Acrobat Pro就會注意到,它含有一個名為AcrobatLauncher.exe的二進位制程式,該程式允許透過指定的PDF檔案來啟動Acrobat.exe。AcrobatLauncher.exe是個好東西,因為它只會忽略額外的引數,並且既不支聲,也不會退出。
具體的命令列引數為 AcrobatLauncher.exe -open PDF_FILE。
0x03 攻擊鏈
- 觸發SM。
- 給SM寫引數。
- 觸發使用者控制元件ELEVATE,把AcrobatLauncher.exe(作為AdobeARM.exe)複製到
c:\progra~1\common~1\Adobe\ARM\1.0\AdobeARM.exe
。這基本上把更新程式覆蓋掉了。
- 執行新的adobearm.exe,它將透過我們的PDF漏洞利用程式碼來執行acrobat.exe程式。這一步是由ELEVATE控制元件自動完成的。
- PDF漏洞利用程式碼會把32.dll轉儲到
c:\progra~1\common~1\Adobe\ARM\1.0
目錄下。這是透過我們的一種JavaScript旁路技術完成的。
- 清除臨時資料夾,這樣再次呼叫ELEVATE時,adobearmhelper.exe就不會從臨時資料夾中複製到任何東西了。
- 重寫SM,這樣,它就會執行我們的新AdobeARM.exe,而不會做任何的修改了。
- 再次執行ELEVATE,這樣就會只用“-open”一個選項來執行AdobeARM.exe,以載入secur32.dll,並以SYSTEM身份彈出計算器。
從中可以看出,CVE-2015-5090為攻擊者提供了一種非常可靠的方法使其可以系統許可權執行程式碼。所以,如果你正在使用Adobe Reader 或Acrobat Pro的話,務必給這個漏洞打上補丁。此外,如果你想了解第5步中的JavaScript旁路技術的更多詳情的話,請關注我們即將到來的Defcon演講。我們拉斯維加斯見!
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!