當前位置:
首頁 > 新聞 > 如何使用Python腳本分析惡意軟體

如何使用Python腳本分析惡意軟體

一般來說,大多數安全防禦的底層,都是各種經過編程的腳本,且這些腳本可以適用於多個安全防禦策略和軟體。而且編寫腳本可以幫助安防人員將一些檢測任務自動化,將瑣碎的分析擴展到大量數據的分析,增加工作效率。

Python作為目前比較流行的一個種程序設計語言,已被用於很多殺毒模塊中,所以有很多人希望提高Python的編程技能,以實現對殺毒軟體的改造和自定義。

雖然有多種編程語言(Perl, Ruby, Scheme,或 Java)可供選擇,但Python之所以最受歡迎的,原因之一,是它具有跨平台的屬性,並且相對容易讀寫和編寫。許多現有的開源安全工具也是用Python編寫的,因此學習這種語言可以幫助你更好的理解現有功能。

本文就介紹了Python編程如何用於實現可執行文件(PE)的分析,比如,腳本可以使你快速解析單個文件並提取其關鍵特徵,或者在多個文件之間進行活動,以幫助確定它們運行的優先順序。

請注意,這篇文章假定讀者已經對Python和編程概念有了一些基本的了解。

Python已經被大量用於分析惡意軟體的工具中

有了一些基本的編程技能,就可以通過簡單的檢查現有代碼,根據需要進行修改,就可以提高你對Python的了解。雖然在某些情況下簡單的調整代碼可能會產生預期的結果,但很多人可能會從對該語言更正式的介紹中獲益。其實你上網就可以下載到許多免費提供Python教程,在此,我想你推薦Code Academy 。如果你希望獲得更嚴格的Python學習體驗,可以參加某些相關課程。

現有工具

目前市面上有許多基於Python的惡意軟體分析工具,下面是一些我認為有助於靜態文件分析的工具:

1.pyew:Pyew是一款非常著名的命令行惡意軟體分析工具,通常被用於深度代碼分析或修改文件。支持PE、ELF、OLE2、PDF等格式,並且支持自定義插件添加更多的功能;

2.AnalyzePE:用於報告Windows PE文件的各種工具;

3.pescanner;

4.peframe:PEframe是一個開源工具,用於對可移植可執行文件惡意軟體和通用可疑文件執行靜態分析。它可以幫助惡意軟體研究人員檢測打包程序,xor,數字簽名,互斥鎖,反調試,反虛擬機,可疑部分和函數以及有關可疑文件的更多信息;

5.pecheck:負責分析PE文件信息,使用方法也很簡單,就是拖入PE文件,就可以對文件的PE結構進行解析;

這些工具可以產生有用的輸出內容,是理解Python的絕佳開始。通過簡單的查看源代碼並根據需要進行研究,你可以了解開發者編寫的內容並修改代碼以滿足自己的目的。但是,當你的自定義需求增多或分析更深入時,你可能會遇到現有工具無法滿足你的情況,此時你必須開發新的解決方案。請放心,這些解決方案並不要求你從頭開始編寫代碼。相反,你可以依賴現有的Python庫,來提取那些符合你需求和操作的代碼。

目前比較常用且流行的python PE庫是pefile,python的PE庫是用來專門解析PE文件的,可靜態分析PE文件,且其中的模塊可以輕鬆訪問可執行文件的結構。另一個則是library庫,它出現的時間不是很長,但卻有著更加通用的跨平台庫,能測試可執行格式(LIEF),library庫包括用於PE文件分析的Python模塊。

本文將重點介紹如何使用Python 2和pefile進行文件分析。請注意,pefile是一個第三方模塊庫,而不是標準Python安裝的內置模塊。因此,你必須先使用pip安裝,如pip install 。

探索pefile

由於我的測試環境中運行的是Linux發行版,因此我將使用REMnux工具進行分析。REMnux是一個用於輔助逆向分析人員完成逆向分析任務的免費虛擬機鏡像。其中包含了大量的逆向分析工具,可分析基於Web的惡意軟體,如惡意的JavaScript,Java程序,和Flash文件。它也有工具可以分析惡意文檔,如微軟的Office和Adobe PDF文件,還有通過內存取證逆向病毒的實用工具。

我首先啟動Python互動式shell來探索pefile模塊並編寫一些初始代碼。互動式shell不是用來直接創建腳本的,而是學習可用模塊和執行快速測試的好方法。比如,你只需在終端輸入python,就將看到類似於以下內容的提示。

導入pefile後,就可以利用互動式shell的功能了。

讓我們通過查看其幫助信息來看看此模塊的具體內容,輸入help(pefile),就可以看到以下內容了。

除了對模塊的介紹之外,我還看到了模塊中包含了對類的描述,滑鼠向下滾動,就可以看到有關每個類的詳細信息。不夠,本文我只關注PE類的信息。

通過對PE類的詳細介紹,我知道了這個類將使我們能夠訪問PE文件的結構,而這正是分析Windows文件所需要的。說明裡還詳細說明了如何創建PE類,按照其中所列舉的樣本,我對其中的一個文件進行讀取以及測試。本文,我將使用一個關於銀行木馬emotet的樣本。

我可以返回幫助菜單來閱讀有關PE類的方法和屬性的更多信息,或者通過輸入dir(pefile.PE)來查看此信息的摘要。

雖然其中有很多文本,不過大部分可能都不是基於之前分析過的PE文件而生成的。不過,裡面的一些基本方法,我還是要認識一下的。我看到很多以「get_」開頭的方法,這些方法有助於收集有關文件的一些基本靜態信息。例如,et_impash()返回導入地址表(IAT)的MD5哈希。

get_imphash()方法按照預期工作,提供文件的導入表哈希。

另一個我認為有價值的「get_」函數是get_warnings(),當pefile解析Windows可執行文件時,可能會遇到錯誤。而 get_warnings()函數的作用就是返回在處理PE文件時生成的警告列表。由於安全性分析都是關於調查異常情況的,因此這個返回信息可以揭示有用的信息,以供進一步審查使用。例如,即使特定packer不能通過尋找packer簽名的常用工具(例如,ExeInfo或PEid)來識別,該函數的輸出也可以表明文件被混淆。但是,在這種特殊情況下,執行函數並不會出現錯誤。

現在,讓我接著使用pefile提取在初始惡意軟體分析期間經常審查的其他靜態信息。例如,如何使用pefile來分析這個可執行文件導入的DLL和函數?要回答這個問題,就必須再次使用內置的help()系統進行一些試驗,此方法可以適用於任何正常的Python模塊。

首先,我可以通過了解更多有關PE的內容來檢測我以前的選擇,比如我可以輸入help(pefile.PE)並了解其中的內容。

可以看到對許多「DIRECTORY_ENTRY_」屬性的引用,這些屬性指向的是關鍵文件組件的位置。由於我對導入的內容感興趣,因此我將重點關注DIRECTORY_ENTRY_IMPORT,它被描述為ImportDescData樣本的列表。讓我先從遍歷此列表開始,看看它提供了哪些信息。

正如幫助信息里所描述的一樣,我看到了ImportDescData對象的列表。這些對象代表什麼?為此,我還要再次返回幫助一欄並輸入help(pefile.ImportDescData)。

如上所示,此結構包含DLL的名稱和導入的符號列表。這看起來像是我所需要的信息,不過我再次確認一次。

雖然不是我所需要的信息,但我卻找到了一個新的可供調查的結構,於是我試著輸入help(pefile.ImportData):

現在,我只關注名稱的導入,因此name屬性應該包含我需要的信息。我會將該信息轉化成代碼的形式,使其更具可讀性。

不出所料,此代碼為我提供了一個導入DLL的名稱及其對應的導入函數名稱。

腳本的自動化執行

如開頭所述,讓腳本實現自動執行,可以使用戶同時對大量的數據進行分析。上面所舉的例子,都是針對單個文件進行分析的,但日常工作中,安防人員在進行惡意軟體分析時,可能需要同時篩選數百或數千個文件,然後再選擇其中一個文件進行仔細審核。而在這樣的分析環境中,腳本的自動化執行,就可以讓你從所有文件中提取關鍵信息,以實現對樣本的分組和優先順序排序,以便進行更有效的分析。

在此,我要特別提一下ImpHash檢測法,它可以幫助你發現導入哈希表中的重複項。比如,在分析大量樣本時,通過imphash進行分組可以更容易的識別類似的屬性或用於生成二進位文件的通用packer/packaging工具。為了探索這個想法,我編寫了一個小腳本(當然是用Pyton編寫的),以試圖從文件目錄中提取imphash。該腳本應完成的任務如下:

1.創建目錄(完整路徑)中所有文件的列表;

2.打開一個可以編寫的XLSX文件(雖然,我經常使用Excel進行查看或排序,但更好的辦法是將此信息寫入資料庫);

3.計算並寫入每個文件的sha256哈希並插入到XLSX文件中;

4.自動篩選數據;

下面是實現這些任務的一種代碼編寫方式:

#~/usr/bin/env python

import sys,os

import pefile

import hashlib

import xlsxwriter

if __name__ == "__main__":

#Identify specified folder with suspect files

dir_path = sys.argv[1]

#Create a list of files with full path

file_list = []

for folder, subfolder, files in os.walk(dir_path):

for f in files:

full_path = os.path.join(folder, f)

file_list.append(full_path)

#Open XLSX file for writing

file_name = "pefull_output.xlsx"

workbook = xlsxwriter.Workbook(file_name)

bold = workbook.add_format({"bold":True})

worksheet = workbook.add_worksheet()

#Write column headings

row = 0

worksheet.write("A1", "SHA256", bold)

worksheet.write("B1", "Imphash", bold)

row += 1

#Iterate through file_list to calculate imphash and sha256 file hash

for item in file_list:

#Get sha256

fh = open(item, "rb")

data = fh.read()

fh.close()

sha256 = hashlib.sha256(data).hexdigest()

#Get import table hash

pe = pefile.PE(item)

ihash = pe.get_imphash()

#Write hashes to doc

worksheet.write(row, 0, sha256)

worksheet.write(row, 1, ihash)

row += 1

#Autofilter the xlsx file for easy viewing/sorting

worksheet.autofilter(0, 0, row, 2)

workbook.close()

我將上面的腳本命名為pe_stats.py,並使用命令python pe_stats.py suspect_files在名為「suspect_files」的目錄中運行它。為了補充目標的目錄表,我專門從VT下載了100個惡意文件。具體來說,我使用了基本的VTI查詢「type:peexe positive:50+」。當我在Microsoft Excel中打開時,呈現的數據結果如下所示。

快速瀏覽前幾行時,ImpHas模式就會發揮作用,導入表中的重複項。這就方便了我下一步對大量的哈希集群進行統一分析,以了解為什麼這些文件組具有相同的哈希值。另外,我還可以重複訪問pefile庫的文檔,以分析包含在此電子表格中的其他靜態特性。 通過更詳細的信息,我編寫的腳本就可以幫助你對要分析的樣本進行分類和優先順序分析。

總結

這篇文章提供了一種使用Python腳本分析PE文件的思路。 最重要的是,本文介紹了如何使用內置的Python幫助功能和PE文件的一些基本知識來系統的探索惡意文件的屬性。

如果你想了解有關惡意軟體分析策略的更多信息,請加入我即將推出的SANS FOR610課程。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

LuckyMouse使用中國IT公司的證書籤署惡意NDISProxy驅動程序
WordPress內核中一個任意文件刪除漏洞,可導致攻擊者執行任意代碼

TAG:嘶吼RoarTalk |