2024年10月7日 星期一

PDF檔案之資安鑑識調查


作者:林國龍 bill lin

  • 恆逸教育訓練中心-資深講師
  • 技術分類:資訊安全

PDF是一種最常用的共享文件形式。攻擊者可以在PDF檔案中隱藏惡意腳本,當使用者嘗試開啟該檔案時,這些腳本就會被執行。此類惡意腳本可以輕鬆規避系統與網路安全機制,並在系統中安裝其他惡意程式。我們將使用Didier Stevens Suite(基於python的工具)來分析可疑的PDF檔案。

Didier Stevens Suite是一套由Didier Stevens開發的免費工具,廣泛應用於資安鑑識、惡意軟體分析與網路安全。這些工具旨在幫助安全專業人士進行檔案分析、網路流量調查與其他相關的資安鑑識工作。以下是Didier Stevens Suite 中一些常用工具及其功能介紹:

  • pdfid.py:用於 PDF 文件的初步分析。此工具會識別 PDF 文件中的可疑標記和關鍵字,如"/JS"、"/JavaScript"、"/AA"、"/OpenAction" 等,這些關鍵字可能指向嵌入式惡意程式碼。
  • pdfparser.py:深入地分析 PDF 文件結構。它可以解碼並解析 PDF 中的物件,提取 JavaScript 程式碼、解碼 Stream,並檢查內嵌的文件或圖像。
  • pecheck.py:用於分析 Windows 可執行檔(PE 檔)。此工具可以檢查檔案的數位簽章、驗證編譯時間、識別壓縮或混淆的 PE 檔,並且整合 hash 計算和 VirusTotal 查詢。
  • oledump.py:分析 Microsoft Office 文件中的 OLE 檔案,檢查嵌入的巨集和其他惡意內容。它支援多種選項,可以解碼和分析巨集程式碼或其他嵌入的物件。

以下是安裝與下載Didier Stevens Suite工具的步驟:
  1. 下載Didier Stevens Suite工具:前往Didier Stevens的GitHub頁面(https://github.com/DidierStevens)直接下載整個儲存庫的ZIP檔案,或者使用"git"指令將儲存庫複製到本機檔案系統。
  2. 安裝工具:大部分Didier Stevens的工具都是用Python編寫的,因此在使用這些工具之前,您需要確保已安裝Python環境。建議安裝Python 3.6以上的版本。安裝完成後,確保Python路徑已經添加到系統的環境變數中,這樣可以在命令提示字元(Windows)或終端機(Linux/macOS)中直接使用"python3" 指令。
  3. 使用工具:下載工具後,您可以在命令提示字元或終端機中進入該工具的目錄,然後執行工具。例如:在 bash 中執行下列指令:
    python3 pdfid.py Infected.pdf

使用工具pdfid.py掃描PDF檔案中的可疑元素或關鍵字,PDFiD是一個用於檢查PDF文件內部結構的工具,特別有助於檢測可能存在的惡意程式碼或可疑內容:

  • /JS 1(1):表示這個PDF文件中有1個"/JS"標記,這代表包含JavaScript程式碼。這個內容可能是惡意的,因為JavaScript可以用來在PDF中執行腳本。
  • /JavaScript 1(1):表示這個PDF文件中有1個"/JavaScript"標記,這也指向含有JavaScript程式碼的物件。這可能是惡意PDF的跡象。
  • /AA 0::表示這個PDF文件中沒有自動執行(/AA)動作。自動執行動作通常會在打開或顯示頁面時自動執行一些動作。
  • /OpenAction 1(1):表示這個PDF文件中有1個"/OpenAction"標記,這通常表示當PDF文件被打開時,會自動執行某些動作。在這個例子中,很可能是執行惡意JavaScript。

為了深入分析PDF文件結構,我們將使用pdf-parser.py工具從PDF檔案中提取更多資料:

obj 1 0:
  • Type:/Catalog
    • 這是PDF文件的根目錄(Catalog),包含了PDF的結構信息。
  • Referencing:2 0 R, 3 0 R, 5 0 R
    這個目錄引用了另外三個物件,分別是2號物件、3號物件和5號物件。
    • /Outlines 2 0 R:指向2號物件,通常是大綱目錄。
    • /Pages 3 0 R:指向3號物件,表示頁面樹狀結構的根節點。
    • /OpenAction 5 0 R:指向5號物件,表示打開PDF時的預設動作。
obj 5 0:
  • Type:/Catalog
    • 這是一個動作物件,通常用於定義使用者互動時的動作,如JavaScript。
  • Referencing:6 0 R
    指向6號物件,這應該是包含JavaScript程式碼的物件。
    • /S /JavaScript:表示這個動作是一段JavaScript。
    • /JS 6 0 R:指向JavaScript程式碼所在的物件(即6號物件)。
obj 6 0:
  • Type:(未指定)
  • Referencing:(無)
  • Contains stream:這個物件包含了一個 stream。
    • /Length 6008:表示stream的長度為6008字元。
    • /Filter [/#46la#74#65#44#65cod#65/AS#43#49#49He#78#44e#63od#65]:
      這是用於解碼stream的過濾器名稱,這裡看起來是一個編碼過的字串。 依照結構來看,值得特別注意的是它包含了一段被編碼的JavaScript(物件6 0),表示這個PDF試圖在打開時執行某些動作,很可能是一個資安風險。
      為了瞭解PDF文件中所包含的stream詳細內容,我們將安裝並使用PDF Stream Dumper GUI載入此PDF文件,如下圖所示:




object 1標記為綠色,因為它包含OpenAction功能
object 5標記為紅色,因為它包含JavaScript標頭標記
object 6標記為藍色,因為它包含object streams
針對object 1與object 5的分析顯示:PDFStreamDumper的「Text」標籤下的內容與我們先前在pdf-parser.py工具中看到的內容相同。


object 6 stream中,這段程式碼使用"unescape"函數將URL編碼的字串解碼為普通字串。


這段程式碼不斷重複並拼接字串,以產生特定長度的字串內容,該內容被重複填充以便達到特定的目的(緩衝區溢位)


util.printf("%45000.45000f", 0);
這行程式碼試圖利用util.printf函數觸發緩衝區溢位或其他格式化字串漏洞。


按一下工具列上的Exploit_Scan按鈕,該按鈕將徹底掃描檔案以查找任何已知的PDF漏洞並將其顯示在文字檔案中。

從文字檔案中取得的資訊如下:

一.漏洞類型:漏洞利用CVE-2008-2992
二.將漏洞嵌入PDF檔案的日期:11.4.08
三. Adobe Acrobat和Reader版本:8.1.2
四.漏洞名稱:util-printf
五.PDF檔案中發現漏洞利用的位置:在stream 6以及主要文字方塊中


啟動瀏覽器,在網址列輸入https://cve.mitre.org ,查找該CVE相關資訊:


畫面中顯示Adobe Acrobat與Reader 8.1.2版本及更早版本中存在基於堆疊的緩衝區溢位漏洞,允許攻擊者透過PDF檔案遠端執行任意程式碼。這些程式碼是用JavaScript編寫的,這些程式碼會在PDF檔案開啟時惡意的執行util.printf()。因此,對該PDF文件的靜態分析結果顯示該檔案是惡意的。靜態分析可以讓我們在不開啟任何可疑PDF檔案的情況下檢查它,並確認是否包含嵌入的任何惡意元件。




您可在下列課程中了解更多技巧喔!

0 意見:

張貼留言