謝謝平臺提供-http://bjbsair.com/2020-04-13...html
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。python
殺毒編程
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。數組
python安全
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。服務器
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。網絡
PE格式最初的設計是用來進行下面的操做。less
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。編程語言
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。函數
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息 謝謝平臺提供-http://bjbsair.com/2020-04-13...
在本文中,咱們將介紹惡意軟件靜態分析的基礎知識。靜態分析是對程序文件的反彙編代碼、圖形圖像、可打印字符串和其餘磁盤資源進行分析,是一種不須要實際運行程序的逆向工程。雖然靜態分析技術有欠缺之處,可是它能夠幫助咱們理解各類各樣的惡意軟件。
殺毒
經過細緻的逆向工程,你將可以更好地理解惡意軟件二進制文件在攻擊目標後爲攻擊者提供的好處,以及攻擊者能夠隱藏並繼續攻擊受感染計算機的方式。正如你將看到的,本文結合了描述和實例,每一個部分都介紹了靜態分析技術,而後說明其在實際分析中的應用。
python
嚴格來講,當鏈接到IRC服務器時,這個程序被設計常駐在目標計算機上。在ircbot.exe控制目標後,攻擊者能夠經過IRC控制目標計算機,執行控制指令,例如打開網絡攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關文件等。
要進行惡意軟件靜態分析,你須要瞭解Windows PE文件格式,該格式描述瞭如.exe、.dll和.sys等當今Windows程序文件的結構,並定義了它們存儲數據的方式。PE文件包含x86指令、圖像和文本等數據,以及程序運行所需的元數據。
PE格式最初的設計是用來進行下面的操做。
PE格式描述了文件的哪些塊應該加載到內存中,以及在哪裏加載。它還告訴你,Windows應該在程序代碼裏的哪一個位置開始執行程序,以及哪些動態連接代碼庫應該加載到內存中。
這些資源能夠包括字符串,如GUI對話框或控制檯輸出的字符串,以及圖像或視頻。
PE格式經過利用圖1-1中所示的一系列結構來完成以上工做。
代碼
▲圖1-1 PE文件格式
如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操做系統如何將程序加載到內存中。它還包括一系列節(section)用來包含實際的程序數據。Windows將這些節加載到內存中,使其在內存中的偏移量與它們在磁盤上的顯示位置相對應。
讓咱們從PE頭開始,來更詳細地探討這個文件結構。咱們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操做系統的遺留產物,僅僅出於兼容性緣由而存在。
如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的通常屬性,如二進制代碼、圖像、壓縮數據和其餘程序屬性。它還告訴咱們程序是不是針對32位或64位系統而設計的。
可選頭❸實際上在今天的PE可執行程序中無處不在,偏偏與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載後運行的第一個指令。
它還定義了Windows在加載PE文件、Windows子系統、目標程序(例如Windows GUI或Windows命令行)時加載到內存中的數據大小,以及有關該程序其餘的高級詳細信息。因爲程序的入口點告訴了逆向工程師該從哪裏開始進行逆向工程,這個頭信息對逆向工程師來講是很是寶貴的。
節(section)頭❹描述了PE文件中包含的數據節。PE文件中的一個節是一塊數據,它們在操做系統加載程序時將被映射到內存中,或者包含有關如何將程序加載到內存中的指令。
換句話說,一個節是磁盤上的字節序列,它要麼成爲內存中一串連續字節的字符串,要麼告知操做系統關於加載過程的某些方面。
節頭還告訴Windows應該授予節哪些權限,好比程序在執行時,是否應該可讀、可寫或可執行。例如,包含x86代碼的.text節一般被標記爲可讀和可執行的,可是不可寫的,以防止程序代碼在執行過程當中意外修改自身。
圖1-1描述了許多節,如.text和.rsrc。執行PE文件時,它們會被映射到內存中。其餘如.reloc節的特殊節不會被映射到內存中,咱們也將討論這些節。下面咱們來瀏覽圖1-1中顯示的節。
每一個PE程序在其節頭中包含了至少一個標記爲可執行的x86代碼節;這些節幾乎老是命名爲.text❺。
.idata節❻,也被稱爲導入節,包含導入地址表(IAT),它列出了動態連接庫和它們的函數。IAT是最重要的PE結構之一,在對PE二進制文件進行最初的分析時須要查看它,由於它指出了程序所調用的庫,然而這些調用反過來又可能會泄露惡意軟件的高級功能。
在PE文件結構中的數據節能夠包括.rsrc、.data和.rdata等節,它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其餘媒體等。例如,圖1-1中的.rsrc節❼包含了程序用於將文本呈現爲字符串的可打印字符串。
.rsrc(資源)節中的信息對惡意軟件分析師是很是重要的,由於經過檢查PE文件中的可打印字符串、圖形圖像和其餘資產,他們能夠得到關於文件功能的重要線索。
在03節中,你將瞭解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節中提取圖形圖像。而後,在04節中,你將學習如何從惡意軟件資源節中提取可打印的字符串。
PE二進制文件的代碼並不是是與位置獨立的,這意味着若是將它從預期的內存位置移動到新的內存位置,它將沒法正確執行。.reloc❽在不破壞代碼的狀況下經過容許移動代碼來解決這個問題。
若是一個PE文件的代碼已被移動,它就告訴Windows操做系統將該文件的代碼中進行內存地址轉換,這樣代碼仍能夠正確運行。這些轉換一般涉及在內存地址中添加或減去偏移量。
由Ero Carerra編寫和維護的Python模塊pefile已經成爲解析PE文件的一個行業標準的惡意軟件分析庫。在本節中,我將向你展現如何使用pefile來解析ircbot.exe。代碼清單1-1假設ircbot.exe已位於你當前的工做目錄中。
輸入如下命令安裝pefile庫,以便咱們能夠在Python中導入它:
$ pip install pefile
如今,使用代碼清單1-1中的命令啓動Python,導入pefile模塊,而後使用pefile打開並解析PE文件ircbot.exe。
$ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")
咱們實例化pefile.PE,它是PE模塊實現的核心類。它解析PE文件,以便咱們能夠查看它們的屬性。經過調用PE構造函數,咱們加載並解析指定的PE文件,在本例中爲ircbot.exe。如今咱們已經加載並解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節數據
代碼
如代碼清單1-3所示,咱們從PE文件五個不一樣的節中提取了數據:.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節對應一個元素。每一行的第一個條目標識PE節。(你能夠忽略一系列的\x00空字節,它們只是C語言樣式的空字符串終止符。)其他字段告訴咱們,一旦將每一個節被加載到內存中,它的內存利用率將是多少,以及一旦被加載,它將在內存中的何處被找到。
例如,0x1000❶是加載這些節的虛擬內存地址基址,也能夠將其視爲節的內存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節被加載後所需的內存大小。第三個字段中的207360❸表示該節將在該內存塊中所佔用的數據量。
除了使用pefile解析程序的節以外,咱們還可使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數調用。咱們能夠經過鏡像(dump)PE文件的IAT來實現這一點。代碼清單1-4顯示瞭如何使用pefile鏡像ircbot.exe的IAT。
$ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT: print entry.dll for function in entry.imports: print '\t', function.name
代碼清單1-4會生成如代碼清單1-5所示的輸出(爲了簡潔起見,輸出進行了截斷)。
代碼
如代碼清單1-5所示,這個輸出對於惡意軟件分析頗有價值,由於它列出了惡意軟件聲明和將引用的豐富的函數數組。
例如,輸出的前幾行告訴咱們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,並使用CreateProcessA❸建立新的進程。雖然這些只是關於惡意軟件的基本信息,但它們是瞭解惡意軟件更爲詳細行爲的開始。
要了解惡意軟件是如何設計來捉弄攻擊目標的,讓咱們看看在它的.rsrc節中所包含的圖標。例如,惡意軟件二進制文件經常被設計成假裝的Word文檔、遊戲安裝程序、PDF文件等經常使用軟件的圖標來欺騙用戶點擊它們。
你還能夠在惡意軟件中找到攻擊者本身感興趣程序中的圖像,例如攻擊者爲遠程控制受感染機器而運行的網絡攻擊工具和程序。
回到咱們的樣本圖像分析,你能夠在本文的數據目錄中找到名爲fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認爲它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執行文件。
在咱們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像以前,咱們首先須要建立一個目錄來保存咱們將提取的圖像。代碼清單1-6顯示瞭如何完成全部這些操做。
$ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico
咱們首先使用mkdir images建立一個目錄來保存提取的圖像。接下來,咱們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,而後使用icotool提取(-x)並將Adobe中.ico圖標格式中的全部資源轉換(-o)爲.png圖形,以便咱們可使用標準的圖像瀏覽工具查看們
一旦你使用wrestool將目標可執行文件中的圖像轉換爲PNG格式,你就能夠在你喜歡的圖像瀏覽工具中打開它們,並以各類分辨率查看Adobe Acrobat圖標。
正如我在這裏給出的例子所示,從PE文件中提取圖像和圖標相對簡單,能夠快速顯示與惡意軟件二進制文件相關的有趣且又有用的信息。一樣地,咱們能夠輕鬆地從惡意軟件中提取可打印字符串來獲取更多信息,咱們接下來會作這項工做。
字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師一般依賴惡意樣本中的字符串來快速瞭解其中可能發生的狀況。這些字符串一般包含下載網頁和文件的HTTP和FTP命令,用於告訴你惡意軟件鏈接到的地址的IP地址和主機名等相似信息。
字符串還能夠顯示有關二進制文件的更多技術信息。例如,你可能會發現有關用於建立二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。
查看文件中全部字符串的標準方法是使用命令行工具strings,按照如下語法進行使用:
$ strings filepath | less
該命令將文件中的全部字符串逐行打印到終端上。在末尾添加 | less能夠防止字符串在終端上跨屏顯示。默認狀況下,strings命令查找全部最小長度爲4字節的可打印字符串,可是你能夠設置不一樣的最小長度並更改「命令手冊」中所列各類其餘參數。
我建議只使用默認的最小字符串長度4,可是你可使用-n選項更改最小字符串長度。例如,「string -n 10 filepath」只提取最小長度爲10字節的字符串。
如今咱們鏡像了一個惡意軟件程序的可打印字符串,可是挑戰在於要理解這些字符串的含義。例如,假設咱們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內容中,咱們使用pefile庫已經進行了探討,以下所示:
$ strings ircbot.exe > ircbotstring.txt
ircbotstring.txt的內容包含數千行文本,但其中一些行應該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。
代碼
這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。
咱們來嘗試分析另外一個。代碼清單1-8所示的字符串鏡像代表ircbot.exe能夠起到Web服務器的做用,在目標機器上偵聽來自攻擊者的鏈接。
代碼
代碼清單1-8顯示了ircbot.exe用於實現HTTP服務器的各類HTTP樣板程序。此HTTP服務器可能容許攻擊者經過HTTP鏈接到目標計算機以發出命令,例如獲取受害者桌面的屏幕截圖並將其回傳給攻擊者的命令。
咱們在整個代碼清單中看到了HTTP功能的證據。例如,從Internet資源請求數據的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態代碼200的HTTP字符串,代表HTTP網絡事務都運行良好,而Server:myBot❸代表HTTP服務器的名稱是myBot,這是ircbot.exe附加的一個內置HTTP服務器。
全部這些信息都有助於理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務器,當你鏈接到它時,它會輸出特定的字符串,這樣你就能夠藉此掃描你的網絡來識別受感染的主機。
在本文中,你大體對靜態惡意軟件分析有了必定的認識,其中包括在不實際運行的狀況下檢查惡意軟件程序。
你瞭解了定義Windows操做系統.exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。
你還使用圖像分析和字符串分析等靜態分析技術,從惡意軟件樣本中提取更多的信息