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

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

實驗四 惡意程式碼分析實踐

目錄

一、實踐內容

1.惡意程式碼檔案型別標識、脫殼與字串提取
對提供的rada惡意程式碼樣本,進行檔案型別識別,脫殼與字串提取,以獲得rada惡意程式碼的作者
具體操作如下:
(1)使用檔案格式和型別識別工具,給出rada惡意程式碼樣本的檔案格式、執行平臺和加殼工具;
(2)使用超級巡警脫殼機等脫殼軟體,對rada惡意程式碼樣本進行脫殼處理;
(3)使用字串提取工具,對脫殼後的rada惡意程式碼樣本進行分析,從中發現rada惡意程式碼的作者

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

3.分析一個自制惡意程式碼樣本rada,並撰寫報告,回答以下問題:
(1)提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊;
(2)找出並解釋這個二進位制檔案的目的;
(3)識別並說明這個二進位制檔案所具有的不同特性;
(4)識別並解釋這個二進位制檔案中所採用的防止被分析或逆向工程的技術;
(5)對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由;
(6)給出過去已有的具有相似功能的其他工具;
(7)可能調查出這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?

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

二、實踐目的

2.1 實踐目的

· 能夠對惡意程式碼進行分析

2.2 實驗所涉及的知識點

1.惡意程式碼
· 惡意程式碼(Unwanted Code)是指沒有作用卻會帶來危險的程式碼,一個最安全的定義是把所有不  
  必要的程式碼都看作是惡意的,不必要程式碼比惡意程式碼具有更寬泛的含義,包括所有可能與某個組織  
  安全策略相沖突的軟體

· 常見惡意程式碼的類別
(1)計算機病毒:是編制者在計算機程式中插入的破壞計算機功能或者資料的程式碼,能影響計算機  
  使用,能自我複製的一組計算機指令或者程式程式碼
(2)蠕蟲病毒:它是利用網路進行復制和傳播,傳染途徑是通過網路和電子郵件。它能傳播它自身  
  功能的拷貝或它的某些部分到其他的計算機系統中(通常是經過網路連線)
(3)後門:一般是指那些繞過安全性控制而獲取對程式或系統訪問權的程式方法
(4)木馬:偽裝成一個實用工具,誘使使用者將其安裝在PC端,從而祕密獲取資訊
(5)殭屍網路:與後門類似,也允許攻擊者訪問系統。但是所有被同一個殭屍網路感染的計算機將  
  會從一臺控制命令伺服器接收到相同的命令
(6)核心套件:設計用來隱藏其他惡意程式碼的惡意程式碼

2.惡意程式碼分析方法
· 惡意程式碼分析與針對良性程式碼和軟體的程式分析技術,都可以採用通用的程式碼分析技術來作為基礎,  
  主要包括靜態分析和動態分析方法,來對程式碼進行逆向工程(Reverse Engineering)來確定  
  其功能

· 靜態分析技術:反病毒掃描、檔案格式識別、字串提取分析、惡意程式碼例項名、二進位制結構分析、  
  加殼識別與程式碼脫殼等

· 動態分析技術:基於快照對比的分析方法和工具、沙箱技術、動態除錯技術、系統動態行為監控  
  方法等

三、實踐過程

3.1 任務一 惡意程式碼檔案型別標識、脫殼與字串提取

· 步驟一 使用檔案格式識別工具(這裡使用的是kali虛擬機器內的命令)給出惡意程式碼樣本的檔案格式
       首先需要將惡意樣本放入我們的kali虛擬機器中(因為file命令只能在kali裡用,而不能  
  在windows xp環境中執行)開啟終端輸入 file RaDa.exe 命令,檢視該檔案型別,我們可以發  
  現如下圖所示的結果,該樣本檔案是一個有圖形化介面(GUI)的Win32 PE(可移植可執行)的程式
· 步驟二 使用工具對惡意程式碼樣本的加殼型別進行分析
       這裡我們使用PEiD工具(建議在虛擬機器windows xp中執行),通過下圖所示我們可以看到  
  這是一個版本為0.89.6的壓縮殼(UPX),並且也能從該圖中看到相關PE檔案的屬性,比如入口點  
  以及檔案偏移等
· 步驟三 檢視RaDa.exe中的可列印字串
       在kali虛擬機器中執行命令 strings RaDa.exe ,我們可以看到如下圖所示的結果,發現  
  該檔案中可列印的字串全是亂碼,可以合理猜測該檔案是被加殼了
· 步驟四 利用超級巡警工具進行脫殼處理
       在windows xp環境中,利用超級巡警工具進行脫殼可以得到如下圖結果,可以發現生成了一  
  個新檔案 RaDa_unpacked.exe
	再次在kali環境中,輸入strings命令檢視脫殼後的RaDa_unpacked.exe,這時通過  
  下圖所示的結果,我們可以成功看到脫殼後該惡意程式的可列印字串
· 步驟五 利用工具對惡意程式碼進行分析,找出其作者
       在windows xp環境下,我們可以執行IDA pro工具對該檔案進行分析,在Strings視窗或  
  者是用Hex View-A視窗我們可以看到作者名 Raul Siles 和 David Perze


       但是這樣檢視不是非常方便,其實我們可以將Strings視窗中的字元編碼換成Unicode(當然  
  也可以用其他工具,比如process explorer),這樣就能如下圖所示更快的找到作者

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

· 步驟一 檢查兩個檔案的完整性,計算其md5的值
       在kali環境下,輸入命令 md5sum crackme1.exe 和 md5sum crackme2.exe 檢視兩  
  檔案的md5值
· 步驟二 檢視兩個檔案的檔案型別
       再次在kali環境下輸入file命令,可以發現兩個檔案都是32位的windows PE檔案
· 步驟三 對crackme1.exe進行分析
       在kali環境下輸入命令 wine crackme1.exe ,可以發現在不接受引數輸入時,程式的輸  
  出為 I think you are missing something,在接受有一個引數輸入時,程式的輸出為 Par  
  don? What did you say? ,在接受有兩個引數輸入時,程式的輸出依舊變為 I think you  
  are missing something。通過提示我們可以合理推測,是不是隻需要輸入一個引數就能得到  
  我們想要的資訊?
	在windows xp環境下開啟IDA pro,對crackme1.exe進行分析,在Strings視窗我們  
  可以看到剛才在kali進行測試時的輸出資訊,同時我們還發現了 “I know the secret” 和 “Yo
  u know how to speak to programs, Mr. Reverse-Engineer” 這兩個字串,我們可以  
  猜測密碼是否是 “I know the secret” ,而正確輸出的資訊為 “You know how to speak  
   to programs, Mr. Reverse-Engineer”
        首先來驗證一下剛才的猜想,發現如下圖所示果真如此
	接下來驗證一下猜想,在IDA pro工具中,點選上方工具欄中的view→Graphs→function  
   calls(函式呼叫圖)檢視程式的call flow,這裡我們可以看出來該程式是用C語言編寫的,並  
  且還通過了strcmp函式比較了輸入。同時我們也可以發現,關鍵的程式段在sub—_401280,因為  
  輸出和比較輸入的過程都在這個段中
	讓我們來看看彙編部分,通過以上分析我們可以知道程式的主體在sub_401280段,所以我  
  們可以在這個段裡檢視,如下圖所示我們可以看到有這樣一條語句 cmp [ebp+arg_0],2,這條語  
  句的意思為判斷程式是否有兩個引數,但是根據之前的分析,應該是隻要一個引數就能輸出正確結果  
  了。這是怎麼回事呢?其實在C語言中,主函式的格式本來為int main(int argc, char const  
   *argv[ ]),其中argc 是表示傳入main函式中的引數個數(包括這個程式本身),而argv表示  
  傳入main函式中的引數列表(其中argv[0]表示這個程式的名字),所以我們輸入的命令 wine c  
  rackme1.exe “I know the secret” 其實包括兩個引數crackme1.exe和“I know the se  
  cret”
	彙編分析可能過於麻煩,IDA pro工具是支援反彙編功能的(這個程式本來就是用C語言代  
  碼編寫),我們可以利用工具的這一特性對該檔案進行反彙編。如下圖所示,我們可以直接看出正確  
  輸入為“I know the secret”
· 步驟四 對crackme2.exe進行分析
       該檔案分析過程與crackme1.exe相似,這裡我們直接採用IDA pro反彙編的方式,檢視其C  
  語言程式碼。可以看到有一點點不同,在判斷正確輸入前,還對檔名進行了判斷,這裡我們只需要將  
  檔名改掉,並且輸入正確的引數即可(依舊是“I know the secret”)
       修改後執行檔案,輸入 crackmeplease.exe "I know the secret" ,成功得到正確  
  的結果 “We have a little secret:Chocolate”

3.3 任務三 分析一個自制惡意程式碼樣本rada,並能回答相關問題

· 步驟一 檢視該檔案的摘要
       在kali環境下輸入命令 md5sum RaDa.exe ,得到該二進位制檔案的摘要。輸入 file Ra  
  Da.exe ,得到該二進位制檔案是32位,並帶有圖形化介面的windows PE檔案,如圖所示
· 步驟二 利用IDA工具對RaDa_unpacked.exe進行分析
       在windows xp環境下使用IDA pro工具對檔案進行分析(因為RaDa.exe被加殼,裡面一些  
  字串為亂碼,所以這裡我們對脫殼後的檔案進行分析即可)。
       如下圖所示,我們可以看到這幾條語句大概含義為使用http協議連線到IP地址為10.10.10.  
  10的目標主機下的一個名為RaDa_commands的網頁上,下載並上傳cgi
       在被害者主機的C盤建立一個資料夾 C:/RaDa/tmp 來儲存其下載的檔案,並且還將該程式  
  檔案RaDa.exe複製到了 C:\RaDa\bin 目錄下
        同時修改了登錄檔(HKEy User\Software\Microsoft\Windows\CurrentVersion\  
  Run),還將rada設定為了開機自啟動。同時該程式也能實現對登錄檔的讀、寫還有刪除功能
	往下分析可以看到該程式還能發起DDOS遠端攻擊(smurf)
	接著我們可以看到該程式進行的一系列命令操作,get(下載)、screenshot(截圖)、s  
  leep(睡眠)等指令
	該程式也支援一系列引數,包括--verbose、--visible、--server、--authors等,  
  我們可以看看--authors的執行效果
	再往下看,我們可以看到一條SQL語句,這句話大概意思是先對網絡卡配置資訊的查詢(SELE  
  CT * FROM Win32_NetworkAdapterConfigurat),如果true,則確認dword_40C070對應  
  的字元是否存在,並進行了Mac地址查詢,登錄檔的檢視等操作(Wscript.shell),即判斷vmwa  
  re tools是不是在登錄檔裡面
	我們可以發現三個網段,大概意思就是判斷伺服器是否在這三個網段中,然後在伺服器中執  
    行命令列
· 步驟三 回答基礎問題
	(1)提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊
		答:根據以上分析,我們可以知道該二進位制檔案的摘要為caaa6985a43225a0  
  b3add54f44a0d4c7,並且也得知了它是一個PE可執行檔案,同時採用了壓縮殼技術(UPX)

	(2)找出並解釋這個二進位制檔案的目的
		答:猜測這個二進位制檔案是一個後門程式,會通過http請求訪問某頁面,並  
  讓攻擊者能夠進行一系列指令操作(如screenshot)

	(3)識別並說明這個二進位制檔案所具有的不同特性
		答:啟動RaDa.exe後,它能夠自動安裝到C盤中,並且還可以修改登錄檔讓其能  
  夠跟隨系統開機自啟動,訪問http://10.10.10.10/Rada/Rada_command.html,還可以解析  
  指令並執行指令
		
	(4)識別並解釋這個二進位制檔案中所採用的防止被分析或逆向工程的技術
		答:首先是這個二進位制檔案採用了壓縮殼技術,其次可能會有一些誤導項,比  
  如starting DDOS smurf remote attack

	(5)對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由
		答:這個二進位制檔案不具有傳播和感染的性質,所以它不在計算機病毒和蠕蟲的  
  範疇中(這兩者有傳播性),同時這個檔案也未能將自己偽裝成良性程式,所以也不屬於木馬。排  
  除以上幾種可能後,猜測這應該是後門程式

	(6)給出過去已有的具有相似功能的其他工具
		答:木馬Bobax(使用HTTP協議從指定的伺服器下載命令檔案)、木馬Setir  
  i等

	(7)可能調查出這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限  
  定條件下?
		答:可以找出,這個二進位制檔案的開發作者是Raul siles和David Perze,  
  但是必須在字串是明文狀態下才能找到(例如步驟二中將RaDa.exe脫殼處理)

3.4 任務四 取證分析實踐(windows2000系統被攻陷並加入殭屍網路)

· 資料來源是Snort收集的蜜罐主機5天的網路資料來源,並去除了一些不相關的流量,同時IP地址和其他  
  敏感資訊被混淆。

· 步驟一 IRC是什麼?當IRC客戶端申請加入一個IRC網路時將傳送哪個訊息?IRC一般使用哪些TCP  
  埠?
	答:因特網中繼聊天(Internet Relay Chat),簡稱 IRC,相當於qq、微信之類的。  
  IRC 的工作原理非常簡單,只需要在自己的 PC 上執行客戶端軟體,然後通過因特網以IRC 協議  
  連線到一臺 IRC 伺服器上即可。IRC 特點是速度非常之快,聊天時幾乎沒有延遲的現象,並且只  
  佔用很小的頻寬資源
	註冊時需傳送的訊息有三種,分別是口令,暱稱和使用者資訊,註冊完成後,客戶端就需要  
  使用JOIN資訊來加入頻道Channel
	IRC伺服器當使用明文傳輸時通常在6667埠監聽,利用SSL加密傳輸就在6697埠

· 步驟二 殭屍網路是什麼?殭屍網路通常用於什麼?
	答:殭屍網路是一組以協調方式連線的計算機,用於惡意目的。殭屍網路中的每臺計算機  
  都稱為殭屍網路。這些機器人形成受損計算機網路,由第三方控制並用於傳輸惡意軟體或垃圾郵件  
  或發起攻擊。
	殭屍網路主要用於:發動DDOS攻擊、傳送垃圾郵件、 監聽使用者敏感資訊、竊取機密、 擴  
  散新的惡意軟體、比特幣挖礦等

· 步驟三 蜜罐主機(IP地址:172.16.134.191)與那些IRC伺服器進行了通訊?
	根據以上分析,我們需要對IRC伺服器的埠進行監聽(6667埠),在wireshark工具  
  中對botnet_pcap_file.dat進行分析,使用 ip.src == 172.16.134.191 and tcp.dst  
  port == 6667 的過濾規則查詢,可以找到五個IRC伺服器,分別為:209.126.161.29、66.3  
  3.65.58、63.241.174.144、217.199.175.10、209.196.44.172
· 步驟四 在這段觀察期間,多少不同的主機訪問了以209.196.44.172為伺服器的殭屍網路?
	首先在kali環境下輸入命令 apt-get install tcpflow(root許可權下執行),然後輸  
  入命令tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'   
  進行抓包(-r是為了能夠讀取該資料包),我們可以得到三個檔案 209.196.044.172.06667-1  
  72.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、report  
  .xml
	根據題意,我們使用管道命令 cat 209.196.044.172.06667-172.016.134.191.01  
  152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac   
  @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | w  
  c -l ,其中cat命令,連線209.輸出檔案;grep搜尋獲取暱稱輸出行;sed:去除字首;tr:將  
  空格轉換為換行;tr -d刪除\r;grep -v:去除空行;sort -u排序並去除重複;wc -l:輸出  
  行數。這樣我們可以篩選出來3461個
· 步驟五 哪些IP地址被用於攻擊蜜罐主機?
	輸入命令 tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134  
  .191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more  
   > 1.txt;wc -l 1.txt 檢視連線主機ip的地址,並輸出到1.txt中(tcpdump -nn: 指定  
  將每個監聽到的資料包中的域名轉換成IP、埠從應用名稱轉換成埠號後顯示;grep -v:排除  
  指定字串;cut -d '.' -f 10:擷取以'.'為分隔符的第 10 列;uniq命令用於檢查及刪除  
  文字檔案中重複出現的行列; wc -l 用於統計檔案的行數)
· 步驟六 攻擊者嘗試攻擊了那些安全漏洞?
	輸入命令 snort -r botnet_pcap_file -c /etc/snort/snort.conf -K asci  
  i 檢視網路流的分佈情況,從下圖所示,我們可以看到大部分都是TCP包,有小部分是UDP包,接  
  下來我們可以分別篩選出相應的TCP埠和UDP埠
	首先篩選TCP埠,輸入命令 tcpdump -r botnet_pcap_file.dat -nn 'src hos  
  t 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.'  
   -f 5 | sort | uniq ,檢視TCP埠有135、139、25、445、4899和80
	再來看看UDP埠,輸入命令 tcpdump -r botnet_pcap_file.dat -nn 'src hos  
  t 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | un  
  iq ,檢視UDP埠有137(在區域網中提供計算機的IP地址查詢服務,處於自動開放狀態,所以訪  
  問這個埠是NetBIOS查點)
	利用wireshark檢視TCP的135和25埠,發現他們只是進行了TCP連線
	利用wireshark檢視TCP的139埠,發現了NBSS包和SMB包(兩者都跟NetBIOS有關)  
  以及一些TCP流
	利用wireshark檢視TCP的445埠,我們可以發現用這樣一個叫PSEXESVC.EXE的可執行  
  檔案,這是可以利用遠端控制執行被害主機,並且獲取其許可權,常用於內網滲透
	利用wireshark檢視TCP的80埠,一開始能看到很多的A,猜測是否攻擊者想利用緩衝區  
  溢位攻擊來獲取主機許可權,檢視源地址為218.25.147.83,在tcp流中可以發現蠕蟲攻擊
· 步驟七 那些攻擊成功了?是如何成功的?
	通過上面分析可知,成功的攻擊發起者是218.25.147.83,它是通過蠕蟲攻擊實現

四、問題及解決方案

4.1 問題一

· 問題描述:不太能夠通過彙編的方式進行分析函式呼叫關係

· 解決方案:參考大量資料,將彙編語句一行一行進行解析

4.2 問題二

· 問題描述:想利用wireshark對RaDa啟動時進行抓包分析,但是卻沒有辦法成功
	
· 解決方案:一開始參考網上的教程說的是wireshark要用32位,但是下載完成後在windows xp的  
  環境下卻沒有辦法執行,但是按理來說應該是能夠捕捉到從本機IP到10.10.10.10的大量資料包

五、學習感悟及思考

這是本學期網路攻防課的第四次實驗,本次實驗的目的是實現對惡意程式碼的分析。在這次實驗中我收穫最多的莫過於學到了很多跟惡意程式碼相關的知識以及一些簡單的分析方法。在這次實驗中我也意識到了自己的不足,比如不能夠清楚地分析彙編程式,以及在對wireshark資料流分析的時候,在一些常用命令的使用上略顯生疏。但是在老師和同學的幫助下我還是一一解決了這些問題,還在惡意程式碼分析上實現了自我的進步。通過這次實驗,我也意識到了學好網路攻防課的核心在於實踐,雖然老師課上講的東西很多,但是通過自己的實踐將這些知識靈活運用,卻是對知識的最好把握,相信在之後的實驗課中能夠學到更多的東西,提升自己的能力。

通過這次實驗證明,惡意程式碼在我們現實生活中很常見,所以作為一名相關專業的學生,一定要能夠對其進行準確分析,找到清楚惡意軟體的方法,淨化網路環境

六、參考資料

· print和fprint函式的區別 https://blog.csdn.net/lianqiangjava/article/details  
  /7465250
· 主函式的格式 https://blog.csdn.net/sinat_28924869/article/details/120974752
· 惡意程式碼分析 https://gitee.com/wildlinux/NetSec/tree/master/ExpGuides