成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

神操作:教你用Python識別惡意軟件

開發(fā) 后端
在本文中,我們將介紹惡意軟件靜態(tài)分析的基礎(chǔ)知識。靜態(tài)分析是對程序文件的反匯編代碼、圖形圖像、可打印字符串和其他磁盤資源進行分析,是一種不需要實際運行程序的逆向工程。雖然靜態(tài)分析技術(shù)有欠缺之處,但是它可以幫助我們理解各種各樣的惡意軟件。

 在本文中,我們將介紹惡意軟件靜態(tài)分析的基礎(chǔ)知識。靜態(tài)分析是對程序文件的反匯編代碼、圖形圖像、可打印字符串和其他磁盤資源進行分析,是一種不需要實際運行程序的逆向工程。雖然靜態(tài)分析技術(shù)有欠缺之處,但是它可以幫助我們理解各種各樣的惡意軟件。

[[321561]]

通過細致的逆向工程,你將能夠更好地理解惡意軟件二進制文件在攻擊目標后為攻擊者提供的好處,以及攻擊者可以隱藏并繼續(xù)攻擊受感染計算機的方式。正如你將看到的,本文結(jié)合了描述和實例,每個部分都介紹了靜態(tài)分析技術(shù),然后說明其在實際分析中的應(yīng)用。

本文的代碼和數(shù)據(jù),可以在公眾號后臺回復(fù)惡意軟件獲取下載方式。你將在數(shù)據(jù)目錄/ch1中找到本文示例中使用的惡意軟件示例。為了演示本文討論的技術(shù),我們在演示中使用ircbot.exe,這是一個互聯(lián)網(wǎng)中繼聊天(Internet Relay Chat,IRC)機器人,也在日常廣泛監(jiān)測中最常見的惡意軟件的示例之一。

嚴格來說,當(dāng)連接到IRC服務(wù)器時,這個程序被設(shè)計常駐在目標計算機上。在ircbot.exe控制目標后,攻擊者可以通過IRC控制目標計算機,執(zhí)行控制指令,例如打開網(wǎng)絡(luò)攝像頭偷偷捕獲視頻、提取目標的地理位置和桌面的截圖,以及從目標機器中提取相關(guān)文件等。

01 微軟Windows可移植可執(zhí)行文件格式

要進行惡意軟件靜態(tài)分析,你需要了解Windows PE文件格式,該格式描述了如.exe、.dll和.sys等當(dāng)今Windows程序文件的結(jié)構(gòu),并定義了它們存儲數(shù)據(jù)的方式。PE文件包含x86指令、圖像和文本等數(shù)據(jù),以及程序運行所需的元數(shù)據(jù)。

PE格式最初的設(shè)計是用來進行下面的操作。

1)告訴Windows如何將程序加載到內(nèi)存中

PE格式描述了文件的哪些塊應(yīng)該加載到內(nèi)存中,以及在哪里加載。它還告訴你,Windows應(yīng)該在程序代碼里的哪個位置開始執(zhí)行程序,以及哪些動態(tài)鏈接代碼庫應(yīng)該加載到內(nèi)存中。

2)為運行程序提供在執(zhí)行過程中可能使用的媒體(或資源)

這些資源可以包括字符串,如GUI對話框或控制臺輸出的字符串,以及圖像或視頻。

3)提供安全數(shù)據(jù),例如數(shù)字代碼簽名

Windows使用這些安全數(shù)據(jù)來確保代碼出自受信任的來源。

PE格式通過利用圖1-1中所示的一系列結(jié)構(gòu)來完成以上工作。

 

神操作:教你用Python識別惡意軟件

 

▲圖1-1 PE文件格式

如圖1-1所示,PE文件格式包括一系列頭(header),用來告訴操作系統(tǒng)如何將程序加載到內(nèi)存中。它還包括一系列節(jié)(section)用來包含實際的程序數(shù)據(jù)。Windows將這些節(jié)加載到內(nèi)存中,使其在內(nèi)存中的偏移量與它們在磁盤上的顯示位置相對應(yīng)。

讓我們從PE頭開始,來更詳細地探討這個文件結(jié)構(gòu)。我們將略過對DOS頭的討論,這是20世紀80年代微軟DOS操作系統(tǒng)的遺留產(chǎn)物,僅僅出于兼容性原因而存在。

1. PE頭

如圖1-1底部所示,在DOS頭❶的上面是PE頭❷,它定義了程序的一般屬性,如二進制代碼、圖像、壓縮數(shù)據(jù)和其他程序?qū)傩浴K€告訴我們程序是否是針對32位或64位系統(tǒng)而設(shè)計的。

PE頭為惡意軟件分析師提供了基本但有用的情景信息。例如,頭里包括了時間戳字段,這個字段可以給出惡意軟件作者編譯文件的時間。通常惡意軟件作者會使用偽造的值替換這個字段,但是有時惡意軟件作者會忘記替換,就會發(fā)生這種情況。

2. 可選頭

可選頭❸實際上在今天的PE可執(zhí)行程序中無處不在,恰恰與其名稱的含義相反。它定義了PE文件中程序入口點的位置,該位置指的是程序加載后運行的第一個指令。

它還定義了Windows在加載PE文件、Windows子系統(tǒng)、目標程序(例如Windows GUI或Windows命令行)時加載到內(nèi)存中的數(shù)據(jù)大小,以及有關(guān)該程序其他的高級詳細信息。由于程序的入口點告訴了逆向工程師該從哪里開始進行逆向工程,這個頭信息對逆向工程師來說是非常寶貴的。

3. 節(jié)頭

節(jié)(section)頭❹描述了PE文件中包含的數(shù)據(jù)節(jié)。PE文件中的一個節(jié)是一塊數(shù)據(jù),它們在操作系統(tǒng)加載程序時將被映射到內(nèi)存中,或者包含有關(guān)如何將程序加載到內(nèi)存中的指令。

換句話說,一個節(jié)是磁盤上的字節(jié)序列,它要么成為內(nèi)存中一串連續(xù)字節(jié)的字符串,要么告知操作系統(tǒng)關(guān)于加載過程的某些方面。

節(jié)頭還告訴Windows應(yīng)該授予節(jié)哪些權(quán)限,比如程序在執(zhí)行時,是否應(yīng)該可讀、可寫或可執(zhí)行。例如,包含x86代碼的.text節(jié)通常被標記為可讀和可執(zhí)行的,但是不可寫的,以防止程序代碼在執(zhí)行過程中意外修改自身。

圖1-1描述了許多節(jié),如.text和.rsrc。執(zhí)行PE文件時,它們會被映射到內(nèi)存中。其他如.reloc節(jié)的特殊節(jié)不會被映射到內(nèi)存中,我們也將討論這些節(jié)。下面我們來瀏覽圖1-1中顯示的節(jié)。

1).text節(jié)

每個PE程序在其節(jié)頭中包含了至少一個標記為可執(zhí)行的x86代碼節(jié);這些節(jié)幾乎總是命名為.text❺。

2).idata節(jié)

.idata節(jié)❻,也被稱為導(dǎo)入節(jié),包含導(dǎo)入地址表(IAT),它列出了動態(tài)鏈接庫和它們的函數(shù)。IAT是最重要的PE結(jié)構(gòu)之一,在對PE二進制文件進行最初的分析時需要查看它,因為它指出了程序所調(diào)用的庫,然而這些調(diào)用反過來又可能會泄露惡意軟件的高級功能。

3)數(shù)據(jù)節(jié)

在PE文件結(jié)構(gòu)中的數(shù)據(jù)節(jié)可以包括.rsrc、.data和.rdata等節(jié),它們存儲程序使用的鼠標光標圖像、按鈕圖標、音頻和其他媒體等。例如,圖1-1中的.rsrc節(jié)❼包含了程序用于將文本呈現(xiàn)為字符串的可打印字符串。

.rsrc(資源)節(jié)中的信息對惡意軟件分析師是非常重要的,因為通過檢查PE文件中的可打印字符串、圖形圖像和其他資產(chǎn),他們可以獲得關(guān)于文件功能的重要線索。

在03節(jié)中,你將了解如何使用icoutils工具包(包括icotool和wrestool)從惡意軟件二進制文件的資源節(jié)中提取圖形圖像。然后,在04節(jié)中,你將學(xué)習(xí)如何從惡意軟件資源節(jié)中提取可打印的字符串。

4).reloc節(jié)

PE二進制文件的代碼并非是與位置獨立的,這意味著如果將它從預(yù)期的內(nèi)存位置移動到新的內(nèi)存位置,它將無法正確執(zhí)行。.reloc❽在不破壞代碼的情況下通過允許移動代碼來解決這個問題。

如果一個PE文件的代碼已被移動,它就告訴Windows操作系統(tǒng)將該文件的代碼中進行內(nèi)存地址轉(zhuǎn)換,這樣代碼仍可以正確運行。這些轉(zhuǎn)換通常涉及在內(nèi)存地址中添加或減去偏移量。

02 使用pefile解析PE文件格式

由Ero Carerra編寫和維護的Python模塊pefile已經(jīng)成為解析PE文件的一個行業(yè)標準的惡意軟件分析庫。在本節(jié)中,我將向你展示如何使用pefile來解析ircbot.exe。代碼清單1-1假設(shè)ircbot.exe已位于你當(dāng)前的工作目錄中。

輸入以下命令安裝pefile庫,以便我們可以在Python中導(dǎo)入它:

 

  1. $ pip install pefile 

現(xiàn)在,使用代碼清單1-1中的命令啟動Python,導(dǎo)入pefile模塊,然后使用pefile打開并解析PE文件ircbot.exe。

  • 代碼清單1-1 加載pefile模塊并解析PE文件(ircbot.exe)

 

  1. $ python 
  2. >>> import pefile 
  3. >>> pe = pefile.PE("ircbot.exe"

我們實例化pefile.PE,它是PE模塊實現(xiàn)的核心類。它解析PE文件,以便我們可以查看它們的屬性。通過調(diào)用PE構(gòu)造函數(shù),我們加載并解析指定的PE文件,在本例中為ircbot.exe。現(xiàn)在我們已經(jīng)加載并解析了這個文件,運行代碼清單1-2中的代碼從ircbot.exe的pe字段中提取信息。

  • 代碼清單1-2 遍歷PE文件的各個節(jié)并打印有關(guān)它們的信息

 

  1. #基于 Ero Carrera的示例代碼(pefile庫的作者) 
  2. for section in pe.sections: 
  3.   print(section.Name, hex(section.VirtualAddress), 
  4.     hex(section.Misc_VirtualSize), section.SizeOfRawData) 
  • 代碼清單1-3顯示了打印輸出的內(nèi)容。

代碼清單1-3 使用Python的pefile模塊從ircbot.exe中提取節(jié)數(shù)據(jù)

 

神操作:教你用Python識別惡意軟件

 

如代碼清單1-3所示,我們從PE文件五個不同的節(jié)中提取了數(shù)據(jù):.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出,每提取一個PE節(jié)對應(yīng)一個元素。每一行的第一個條目標識PE節(jié)。(你可以忽略一系列的\\x00空字節(jié),它們只是C語言樣式的空字符串終止符。)其余字段告訴我們,一旦將每個節(jié)被加載到內(nèi)存中,它的內(nèi)存利用率將是多少,以及一旦被加載,它將在內(nèi)存中的何處被找到。

例如,0x1000❶是加載這些節(jié)的虛擬內(nèi)存地址基址,也可以將其視為節(jié)的內(nèi)存地址基址。在虛擬大小(virtual size)字段中的0x32830❷指定了節(jié)被加載后所需的內(nèi)存大小。第三個字段中的207360❸表示該節(jié)將在該內(nèi)存塊中所占用的數(shù)據(jù)量。

除了使用pefile解析程序的節(jié)之外,我們還可以使用它列出二進制文件將加載的DLL文件,以及它將在這些DLL文件中所請求的函數(shù)調(diào)用。我們可以通過鏡像(dump)PE文件的IAT來實現(xiàn)這一點。代碼清單1-4顯示了如何使用pefile鏡像ircbot.exe的IAT。

  • 代碼清單1-4 從ircbot.exe中提取導(dǎo)入信息

 

  1. $ python 
  2. pe = pefile.PE("ircbot.exe"
  3. for entry in pe.DIRECTORY_ENTRY_IMPORT: 
  4.     print entry.dll 
  5.     for function in entry.imports: 
  6.         print '\t'function.name 

代碼清單1-4會生成如代碼清單1-5所示的輸出(為了簡潔起見,輸出進行了截斷)。

  • 代碼清單1-5 ircbot.exe的IAT表內(nèi)容,其顯示了這個惡意軟件使用的庫函數(shù)

 

神操作:教你用Python識別惡意軟件

 

 

 

如代碼清單1-5所示,這個輸出對于惡意軟件分析很有價值,因為它列出了惡意軟件聲明和將引用的豐富的函數(shù)數(shù)組。

例如,輸出的前幾行告訴我們,惡意軟件將使用WriteFile❶寫入文件,使用CreateFileA❷打開文件,并使用CreateProcessA❸創(chuàng)建新的進程。雖然這些只是關(guān)于惡意軟件的基本信息,但它們是了解惡意軟件更為詳細行為的開始。

03 檢查惡意軟件的圖片

要了解惡意軟件是如何設(shè)計來捉弄攻擊目標的,讓我們看看在它的.rsrc節(jié)中所包含的圖標。例如,惡意軟件二進制文件常常被設(shè)計成偽裝的Word文檔、游戲安裝程序、PDF文件等常用軟件的圖標來欺騙用戶點擊它們。

你還可以在惡意軟件中找到攻擊者自己感興趣程序中的圖像,例如攻擊者為遠程控制受感染機器而運行的網(wǎng)絡(luò)攻擊工具和程序。

回到我們的樣本圖像分析,你可以在本文的數(shù)據(jù)目錄中找到名為fakepdfmalware.exe的這個惡意軟件樣本。這個樣本使用Adobe Acrobat圖標誘騙用戶認為它是一個Adobe Acrobat文檔,而實際上它是一個惡意的PE可執(zhí)行文件。

在我們使用Linux命令行工具wrestool從二進制文件fakepdfmalware.exe中提取圖像之前,我們首先需要創(chuàng)建一個目錄來保存我們將提取的圖像。代碼清單1-6顯示了如何完成所有這些操作。

  • 代碼清單1-6 從惡意軟件樣本中提取圖像的Shell命令

 

  1. $ mkdir images 
  2. $ wrestool -x fakepdfmalware.exe -output=images 
  3. $ icotool -x -o images images/*.ico 

我們首先使用mkdir images創(chuàng)建一個目錄來保存提取的圖像。接下來,我們使用wrestool從fakepdfmalware.exe中提取圖像資源(-x)到/images目錄,然后使用icotool提取(-x)并將Adobe中.ico圖標格式中的所有資源轉(zhuǎn)換(-o)為.png圖形,以便我們可以使用標準的圖像瀏覽工具查看們。

如果你的系統(tǒng)上沒有安裝wrestool,你可以從這里下載:

http://www.nongnu.org/icoutils/

一旦你使用wrestool將目標可執(zhí)行文件中的圖像轉(zhuǎn)換為PNG格式,你就可以在你喜歡的圖像瀏覽工具中打開它們,并以各種分辨率查看Adobe Acrobat圖標。

正如我在這里給出的例子所示,從PE文件中提取圖像和圖標相對簡單,可以快速顯示與惡意軟件二進制文件相關(guān)的有趣且又有用的信息。同樣地,我們可以輕松地從惡意軟件中提取可打印字符串來獲取更多信息,我們接下來會做這項工作。

04 檢查惡意軟件的字符串

字符串是程序二進制文件中可打印字符的序列。惡意軟件分析師通常依賴惡意樣本中的字符串來快速了解其中可能發(fā)生的情況。這些字符串通常包含下載網(wǎng)頁和文件的HTTP和FTP命令,用于告訴你惡意軟件連接到的地址的IP地址和主機名等類似信息。

有時,即使用于編寫字符串的語言也有可能暗示惡意軟件二進制文件的來源國,盡管這可能是偽造的。你甚至可以在一個字符串中找到一些文本,它們用網(wǎng)絡(luò)用語解釋了惡意二進制文件的用途。

字符串還可以顯示有關(guān)二進制文件的更多技術(shù)信息。例如,你可能會發(fā)現(xiàn)有關(guān)用于創(chuàng)建二進制文件的編譯器、編寫二進制文件所使用的編程語言、嵌入式腳本或HTML等信息。

雖然惡意軟件作者可以對所有這些痕跡進行混淆、加密和壓縮等處理,但是即便是高水平的惡意軟件作者也經(jīng)常會暴露并留下一些痕跡,因此在分析惡意軟件時,對鏡像的字符串進行細致檢查顯得尤為重要。

1. 使用字符串程序

查看文件中所有字符串的標準方法是使用命令行工具strings,按照以下語法進行使用:

 

  1. $ strings filepath | less 

該命令將文件中的所有字符串逐行打印到終端上。在末尾添加 | less可以防止字符串在終端上跨屏顯示。默認情況下,strings命令查找所有最小長度為4字節(jié)的可打印字符串,但是你可以設(shè)置不同的最小長度并更改“命令手冊”中所列各種其他參數(shù)。

我建議只使用默認的最小字符串長度4,但是你可以使用-n選項更改最小字符串長度。例如,“string -n 10 filepath”只提取最小長度為10字節(jié)的字符串。

2. 分析鏡像字符串

現(xiàn)在我們鏡像了一個惡意軟件程序的可打印字符串,但是挑戰(zhàn)在于要理解這些字符串的含義。例如,假設(shè)我們將ircbot.exe中的字符串鏡像到ircbotstring.txt文件中,這在本文前面的內(nèi)容中,我們使用pefile庫已經(jīng)進行了探討,如下所示:

 

  1. $ strings ircbot.exe > ircbotstring.txt 

ircbotstring.txt的內(nèi)容包含數(shù)千行文本,但其中一些行應(yīng)該突出顯示出來。例如,代碼清單1-7顯示了從字符串鏡像中提取出來的一串以單詞DOWNLOAD開頭的行。

  • 代碼清單1-7 顯示惡意軟件可以將攻擊者指定的文件下載到目標計算機的字符串輸出

 

神操作:教你用Python識別惡意軟件

 

這些行表示ircbot.exe將嘗試把攻擊者指定的文件下載到目標計算機上。

我們來嘗試分析另一個。代碼清單1-8所示的字符串鏡像表明ircbot.exe可以起到Web服務(wù)器的作用,在目標機器上偵聽來自攻擊者的連接。

  • 代碼清單1-8 顯示惡意軟件有一個攻擊者可以連接的HTTP服務(wù)器的字符串輸出

 

神操作:教你用Python識別惡意軟件

 

代碼清單1-8顯示了ircbot.exe用于實現(xiàn)HTTP服務(wù)器的各種HTTP樣板程序。此HTTP服務(wù)器可能允許攻擊者通過HTTP連接到目標計算機以發(fā)出命令,例如獲取受害者桌面的屏幕截圖并將其回傳給攻擊者的命令。

我們在整個代碼清單中看到了HTTP功能的證據(jù)。例如,從Internet資源請求數(shù)據(jù)的GET方法❶。HTTP/1.0 200 OK❷這一行是一個返回狀態(tài)代碼200的HTTP字符串,表明HTTP網(wǎng)絡(luò)事務(wù)都運行良好,而Server:myBot❸表明HTTP服務(wù)器的名稱是myBot,這是ircbot.exe附加的一個內(nèi)置HTTP服務(wù)器。

所有這些信息都有助于理解和阻止特定的惡意軟件樣本或惡意活動。例如,知道惡意軟件樣本有一個HTTP服務(wù)器,當(dāng)你連接到它時,它會輸出特定的字符串,這樣你就可以借此掃描你的網(wǎng)絡(luò)來識別受感染的主機。

05 小結(jié)

在本文中,你大致對靜態(tài)惡意軟件分析有了一定的認識,其中包括在不實際運行的情況下檢查惡意軟件程序。

你了解了定義Windows操作系統(tǒng).exe和.dll文件的PE文件格式,還了解了如何使用Python庫pefile解析實際場景中的惡意軟件ircbot.exe二進制文件。

你還使用圖像分析和字符串分析等靜態(tài)分析技術(shù),從惡意軟件樣本中提取更多的信息。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2021-05-18 14:42:55

PythonMySQL

2019-01-24 09:00:00

PythonAutoML機器學(xué)習(xí)

2023-10-27 11:38:09

PythonWord

2015-03-23 12:33:28

2015-04-22 11:29:45

PythonPython創(chuàng)建瀑布圖

2023-08-03 08:51:07

2017-10-27 10:29:35

人臉識別UbuntuPython

2021-08-09 13:31:25

PythonExcel代碼

2017-10-29 21:43:25

人臉識別

2021-12-26 18:32:26

Python Heic 文件

2014-07-22 10:19:19

NeoBundle

2022-02-18 10:34:19

邏輯回歸KNN預(yù)測

2017-07-19 10:22:07

2019-09-05 10:07:23

ZAODeepfakes換臉

2021-05-10 06:48:11

Python騰訊招聘

2013-08-23 09:37:32

PythonPython游戲Python教程

2018-05-14 10:43:53

平衡數(shù)據(jù)數(shù)據(jù)分析Python

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2021-12-11 20:20:19

Python算法線性

2014-07-21 09:51:10

AndroidResflux修改應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日日摸日日碰夜夜爽2015电影 | 羞羞网站免费 | 亚洲精品日韩精品 | 日韩电影免费在线观看中文字幕 | 色综合久久久久 | 成人午夜免费福利视频 | a黄毛片 | 欧美日韩久久久 | 色婷婷亚洲国产女人的天堂 | 在线色网站 | 射欧美 | 亚洲视频一区在线观看 | 日本h片在线观看 | 亚州精品成人 | 黄网站在线观看 | 国产成人精品在线 | 日韩欧美精品一区 | 国产精品美女久久久久aⅴ国产馆 | 国内精品伊人久久久久网站 | 日韩a级片| 亚洲91 | 日日操夜夜操视频 | 一区二区免费 | 欧美在线观看一区 | 国产一区二区三区精品久久久 | 中文字幕乱码视频32 | 成人免费小视频 | 中文字幕亚洲视频 | 亚洲欧洲精品一区 | 91精品国产综合久久久亚洲 | 久久久久成人精品 | 日韩精品一区二区三区中文字幕 | 中文字幕国产精品视频 | 综合国产 | 国产日韩欧美电影 | 国产一区二区视频免费在线观看 | 爱综合| 国产精品久久久久久久免费观看 | 精品成人佐山爱一区二区 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产欧美一区二区精品忘忧草 |