1. 程式人生 > 其它 >20192415 2021-2022-2 《網路與系統攻防技術》實驗四實驗報告

20192415 2021-2022-2 《網路與系統攻防技術》實驗四實驗報告

20192415 2021-2022-2 《網路與系統攻防技術》實驗四實驗報告

1.實驗內容

1.1 實驗內容

  1. 惡意程式碼檔案型別標識、脫殼與字串提取:對提供的rada惡意程式碼樣本,進行檔案型別識別,脫殼與字串提取,以獲得rada惡意程式碼的編寫作者。
  2. 使用IDA Pro靜態或動態分析crackme1.exe與crakeme2.exe,尋找特定輸入,使其能夠輸出成功資訊。
  3. 分析一個自制惡意程式碼樣本rada,並撰寫報告,回答問題。
  4. Windows 2000系統被攻破並加入殭屍網路的取證分析實踐:資料來源是Snort收集的蜜罐主機5天的網路資料來源,並去除了一些不相關的流量,同時IP地址和其他敏感資訊被混淆。

2.實驗過程

2.1 惡意程式碼檔案型別標識、脫殼與字串提取

2.1.1 使用檔案格式和型別識別工具,給出rada惡意程式碼樣本的檔案格式、執行平臺和加殼工具

  1. 使用file命令檢視檔案格式,結果如下。

    file命令用來識別檔案型別,也可用來辨別一些檔案的編碼格式。它是通過檢視檔案的頭部資訊來獲取檔案型別,而不是像Windows通過副檔名來確定檔案型別的。

    “PE32”說明是一個32位的PE檔案,“(GUI) Intel 80386”說明執行在Intel 80386 GUI上,“MS Windows”說明針對的作業系統是Windows。

     ┌──(root㉿20192415xingzhibin)-[~/rada]
     └─# file RaDa.exe
     RaDa.exe: PE32 executable (GUI) Intel 80386, for MS Windows
    
  2. 使用PE Explorer檢視檔案格式、執行平臺

    除了在linux中使用file命令,在windows中可以藉助程式解析器等工具檢視檔案資訊,如PE Explorer。

    PE Explorer是功能超強的視覺化Delphi、C++、VB程式解析器,能快速對32位可執行程式進行反編譯,並修改其中資源。

    如下圖所示,這是使用PE Explorer檢視RaDa.exe的檔案頭資訊。
    “Machine(處理器)”欄位是執行平臺,內容為0x014c,表明可執行在Intel386處理器或後續相容處理器;
    “Magic(魔術)”欄位是檔案型別,內容為0x010B,表明這是一個32位的PE檔案。

  3. 使用PEID檢視加殼工具

    當加殼的程式執行時,會首先執行一小段脫殼程式碼,來解壓縮加殼的檔案。我在分析的時候是利用PEid這款工具對程式檢查是否存在殼(PEid工具在2011年4月就停止更新了,但是還是可以識別大多數的殼)。
    識別結果為“UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo”,可知該程式加的是UPX的殼,版本是0.89.6。

2.1.2 使用超級巡警脫殼機等脫殼軟體,對rada惡意程式碼樣本進行脫殼處理

使用超級巡警脫殼機進行脫殼,脫殼後程序為RaDa_unpacked.exe。

2.1.3 使用字串提取工具,對脫殼後的rada惡意程式碼樣本進行分析,從中發現rada惡意程式碼的編寫作者是誰

  1. 使用strings命令分析

    使用strings命令分析脫殼後的rada惡意程式碼樣本(即RaDa_unpacked.exe),分析結果如下圖所示(左圖未脫殼,右圖已脫殼)。

    strings命令: 在物件檔案或二進位制檔案中查詢可列印的字串。

  2. 用IDA Pro調整編碼格式

    在RaDa_unpacked.exe的string中,發現有一行為“(c) Raul Siles & David Perez”,猜測與編寫作者相關。
    用IDA Pro開啟RaDa_unpacked.exe,“View”→“Open subviews”→“strings”檢視字串。

    右鍵單擊選擇“setup”,更改allowed string types為Unicode,再次檢視,
    出現“Copyright (C) 2004 Raul Siles & David Perez”。
    “Copyright”有“版權、著作權”的意思,可知該惡意程式碼為Raul Siles和David Perez在2004年編寫。

2.2 使用IDA Pro靜態或動態分析crackme1.exe與crakeme2.exe,尋找特定輸入,使其能夠輸出成功資訊

2.2.1 在linux中安裝IDA Pro6.4

IDA是比利時Hex-Rays公司出品的一款互動式靜態反彙編工具。它可以直接反彙編出二進位制檔案的彙編程式碼,是目前軟體逆向與安全分析領域最好用、最強大的一個靜態反彙編軟體,已成為眾多軟體安全分析人員不可缺少的利器!它支援Windows、Linux等多個平臺,支援Intel X84、X64、ARM、MIPS等數十種CPU指令集。

Linux版本的IDA Pro比較稀少,很幸運的是吾愛破解論壇已經有大牛分享了Linux版本的IDA Pro,分享的作者已經對該IDA Pro進行了path,去掉了區域網檢測的校驗。下載該Linux版本IDA Pro直接解壓,在Linux 32bit系統上可以直接使用,在Linux 64bit的系統上需要安裝一些依賴庫檔案能正常使用該IDA Pro。
具體在kali中安裝IDA Pro可參考ida pro6.4 linux安裝使用

2.2.2 分析crackme1.exe

  1. 使用file命令檢視crackme1.exe的檔案資訊

    可知crackme1.exe為windows系統下執行的32位可執行程式,沒有圖形介面,僅使用控制檯操作。

     ┌──(root㉿20192415xingzhibin)-[~/exp4]
     └─# file crackme1.exe
     crackme1.exe: PE32 executable (console) Intel 80386, for MS Windows
    
  2. 執行程式並試探輸入格式

    希望通過特定輸入使crackme1.exe輸出成功資訊,首先要確定“特定輸入”可能包含幾個引數。
    多次執行crackme1.exe並嘗試不同的引數個數,通過返回結果判斷正確的引數個數(不含程式名)可能是一個。

  3. 利用IDA檢視crackme1.exe包含哪些字串

    程式中往往包含很多字串資源,這些資源存在於PE檔案的rdata段,使用IDA反編譯後,可以查詢到這些字串。
    選擇“View”→“Open subviews”→“strings”,檢視字串。
    可知共有4種字串,目前我們試探出其中兩種為返回情況:“I think you are missing something.”是“引數數量不對”時的返回情況、“Pardon? What did you say?”是“引數數量對但內容不對”的返回情況。

  4. 利用IDA檢視crackme1.exe的函式呼叫圖

    選擇“View”→“Graphs”→“Function calls”,檢視函式呼叫圖。
    可以看到,_main函式可以呼叫_fprintf和_printf。據此,我們判斷_main中包含選擇輸出哪些資訊的邏輯結構。

    fprintf是C/C++中的一個格式化庫函式,位於標頭檔案中,其作用是格式化輸出到一個流檔案中。
    printf 是指格式化輸出函式,主要功能是向標準輸出裝置按規定格式輸出資訊。printf是C語言標準庫函式,定義於標頭檔案。

  5. 檢視函式與反彙編

    通過“Jump”→“Jump to function”→“_main”檢視_main函式。按下F5(或“View”→“Open subviews”→“Generate pseudocode”)進行反彙編。

    讀程式碼可知,程式首先會判斷引數個數,若引數個數不為2(包含函式名),輸出“I think you are missing something.”,否則進入下一層選擇結構。下一層判斷第二個引數是不是“I know the secret”,若是則輸出“You konw how to speak to programs,Mr.Reverse-Engineer”,否則輸出“Pardon? What did you say?”。
    希望通過特定輸入使crackme1.exe輸出成功資訊,就需要將“I know the secret”作為第二個引數,這樣就可以得到成功資訊“You konw how to speak to programs,Mr.Reverse-Engineer”。效果如下。

    argc和argv這兩個C語言預訂的引數可以實現給main函式傳參:
    argc是int型別,表示執行程式的時候給main函式傳遞了幾個引數
    argv是一個字串陣列,這個陣列用來儲存argc個字串,每個字串就是我們給main函式傳的一個引數。第一個引數argv[0]一定是程式名稱。

2.2.3 分析crackme2.exe

對crackme2.exe的分析過程與crackme1.exe類似。

  1. 使用file命令檢視檔案資訊

    crackme2.exe同樣為windows系統下執行的32位可執行程式、沒有圖形介面僅使用控制檯操作。

  2. 執行程式並試探輸入格式

    通過返回結果判斷正確的引數個數(不含程式名)可能是一個。

  3. 利用IDA檢視crackme2.exe包含哪些字串

    可知共有5種字串,目前我們試探出其中兩種為返回情況:“I think you are missing something”是“引數數量不對”時的返回情況、“Pardon? What did you say?”是“引數數量對但內容不對”的返回情況。

  4. 利用IDA檢視函式呼叫圖

    可以看到,_main函式可以呼叫_fprintf、puts、putchar。據此判斷_main中包含選擇輸出哪些資訊的邏輯結構。

    puts()函式用來向標準輸出裝置(螢幕)輸出字串並換行。
    putchar把指定的字元(一個無符號字元)寫入到標準輸出stdout中。

  5. 檢視函式與反彙編

    檢視_main函式,按下F5(或“View”→“Open subviews”→“Generate pseudocode”)進行反彙編。

    讀程式碼可知,程式首先會判斷引數個數,若引數個數不為2(包含函式名),輸出“I think you are missing something.”,否則進入下一層選擇結構。下一層判斷第一個引數是不是“crackmeplease.exe”,不是則輸出“I have an identity problem.”,否則進入下一層選擇結構。下一層判斷第二個引數是不是“I know the secret”,若是則輸出成功資訊,否則輸出“Pardon? What did you say?”。
    希望通過特定輸入使crackme2.exe輸出成功資訊,就需要將“crackmeplease.exe”作為第一個引數,將“I know the secret”作為第二個引數,這樣就可以得到成功資訊。
    要求第一個引數是“crackmeplease.exe”,而第一個引數是程式名,所以要先對crackme2.exe重新命名為“crackmeplease”後再執行。效果如下。

2.3 分析自制惡意程式碼樣本rada,並回答問題

2.4 取證分析實踐:Windows 2000系統被攻破並加入殭屍網路

3.問題及解決方案

4.學習感悟、思考等