1.實驗內容
(1)惡意程式碼檔案型別標識、脫殼與字串提取
(2)使用IDA Pro靜態或動態分析crackme1.exe與crakeme2.exe,尋找特定輸入,使其能夠輸出成功資訊。
(3)分析一個自制惡意程式碼樣本rada,並撰寫報告,回答問題
(4)取證分析實踐
2.實驗過程
2.1 惡意程式碼檔案型別標識、脫殼與字串提取
(1)使用檔案格式和型別識別工具,給出rada惡意程式碼樣本的檔案格式、執行平臺和加殼工具
先下載目的檔案RaDa.exe,然後對檔案進行初步分析。
輸入命令file RaDa.exe
如圖所示,關於RaDa.exe檔案的內容可以分為四個部分。PE32表明這是一個32位的可執行檔案格式,意味著它能夠在32位作業系統上執行。GUI表示該檔案具備圖形使用者介面,使得使用者能夠透過圖形化方式進行互動。Intel 80386指明該檔案設計用於Intel 80386及其相容處理器,顯示了其處理器架構的要求。for MS Windows指的是該程式專為Windows作業系統開發。
再使用PEiD工具開啟RaDa.exe,可以看到其基本資訊
可以看到加殼型別是upx,還有一些其他的資訊
(2)使用超級巡警脫殼機等脫殼軟體,對rada惡意程式碼樣本進行脫殼處理
使用命令strings rada.exe
檢視RaDa.exe檔案中的可列印字串,但是由於加殼導致結果都是亂碼
用超級巡警脫殼機軟體對RaDa.exe進行脫殼操作,脫殼後儲存檔案rada_unpacked.exe到原目錄
再重新使用strings rada_unpacked.exe
指令檢視脫殼後檔案的可列印字串
雖然前面的一些內容還是亂碼,但是後面的亂碼部分已經變成可讀的內容了
尋找了一下沒有找到作者資訊,只找到了一些函式名
(3)使用字串提取工具,對脫殼後的rada惡意程式碼樣本進行分析,從中發現rada惡意程式碼的編寫作者是誰?
使用Process Explorer工具開啟RaDa_unpacked.exe檔案
找到程序RaDa_unpacked.exe
右鍵選擇Properties,進入Strings介面
成功找到作者資訊及編寫時間
也可使用IDA Pro開啟RaDa_unpacked.exe
開啟Strings介面
也可以成功找到作者資訊
2.2 使用IDA Pro靜態或動態分析crackme1.exe與crakeme2.exe,尋找特定輸入,使其能夠輸出成功資訊
下載crackme1.exe和crackme2.exe
先用file指令看一下檔案資訊
file crackme1.exe
console表示該檔案是一個控制檯應用程式,即執行時在命令列介面中進行輸入和輸出
使用命令列執行crackme1.exe並對引數個數進行猜測,觀察程式輸出
可以看出程式應該需要1個引數
使用IDA Pro開啟crackme1.exe
開啟Strings介面檢視字串
出現了兩個沒見過的字串“I know the secret”和“You know how to speak to programs, Mr.Reverse-Engineer”
猜測一個應該是正確的口令,另一個是正確的回顯
輸入試一下
根據結果猜測程式的正確輸入為“I know the secret”,正確輸出為“You know how to speak to programs, Mr.Reverse-Engineer”。
接下來驗證一下猜想
在IDA介面的view中找到graphs並開啟Function Call檢視函式呼叫圖
找到輸出函式所在位置
找到sub_401280的函式流程圖
分析一下圖中流程圖可以知道sub_401280先判斷引數個數,若不是引數個數不正確則輸出"I think you are missing something.",若引數個數正確且引數不為"I know the secret"則輸出"Pardon?What did you say?",若引數個數正確且引數為"I know the secret"則輸出"You know how to speak to programs,Mr.Reverse—Engineer",所以我們的猜測正確
接下來分析crackme2.exe
先用IDA Pro開啟crackme2.exe
檢視Strings介面
猜測口令和輸出就在這些字串裡
開啟Function Call進行分析
這裡也呼叫了printf函式
開啟流程圖進行分析
可以看到crackme2.exe和crackme1.exe總體上差不多,只是在crackme1.exe的基礎上增加了對於程式名的判斷,只有當程式名為crackmeplease.exe的時候才能被執行,否則就會提示“I have an identity problem.”。最後的輸出變為"We have a little secret:Chocolate"
先輸入命令copy crackme2.exe crackplease.exe
複製一份名為crackplease.exe的檔案
再輸入命令crackplease.exe “I know the secret”
即可得到正確輸出
2.3 分析一個自制惡意程式碼樣本rada
(1)提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊
輸入命令md5sum rada.exe
得到rada檔案的摘要值
再輸入命令file rada.exe檢視檔案資訊
以上可以作為識別同一樣本的資訊
(2)找出並解釋這個二進位制檔案的目的
開啟Process Explorer並執行RaDa_unpacked.exe
在strings頁面檢視檔案中的字串
圖中可以看出這個檔案使用http連線到10.10.10.10並進行資料傳輸;在C盤建立資料夾C:/RaDa/tmp;將檔案rada.exe複製到C:\RaDa\bin;對主機的登錄檔進行了讀寫和刪除操作;還有截圖、休眠等操作
(3)識別並說明這個二進位制檔案所具有的不同特性
這個檔案透過修改登錄檔使程式開機自啟動,該程式啟動之後將自己複製到c盤中,並且與10.10.10.10連線,將傳輸的檔案儲存到c盤中
(4)識別並解釋這個二進位制檔案中所採用的防止被分析或逆向工程的技術
UPX加殼
(5)對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由
後門程式,它可以獲得控制許可權並開機自啟動,並透過加殼進行偽裝
(6)給出過去已有的具有相似功能的其他工具
實驗二中msfvenom生成的後門程式
(7)可能調查處這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?
IDA Pro開啟RaDa_unpacked.exe
檢視Strings頁面
右鍵開啟setup並只勾選Unicode
找到--author
雙擊進行分析
開啟對應流程圖
可以看出由sub_40AAA0判斷輸出Unknown argument還是Authors:Raul Siles & David Perze, 2004
檢視sub_40AAA0
看到select語句判斷程式是否在Vmware執行,若是則輸出Unknown argument: --authors,否則輸出Authors:Raul Siles & David Perze, 2004
可以調查作者,在非VMware的虛擬機器輸入--authors引數可以檢視作者,或者透過IDA Pro或者Process Explorer檢視strings也可以
(8)給出至少5種檢測該惡意軟體的方法,例如基於特徵碼的方法,需要詳細介紹每種方法
- 基於特徵碼的檢測方法
透過識別已知惡意程式的特徵碼來檢測後門。特徵碼是對惡意程式碼或可疑程式碼段的唯一標識,大多數防病毒軟體使用這種方法來掃描系統中可能的惡意檔案。
具體過程:
收集已知惡意程式碼的特徵碼,這些特徵碼可能是檔案的雜湊值、特定位元組序列或字串。
將這些特徵碼與系統中檔案的雜湊值或位元組序列進行比對。
如果檔案中包含已知特徵碼,則將其標記為可能的後門程式。
優點:快速且準確,適合檢測已知後門。
缺點:無法檢測未知後門或稍作修改的變種。
- 行為分析檢測方法
透過監控程式在系統中的行為來判斷是否存在後門程式。通常,後門程式會執行特定的惡意操作,如建立遠端連線、讀取敏感資訊等。
具體過程:
設定行為監控系統,監視程式的程序建立、網路連線、檔案讀取、寫入等行為。
預設一些異常行為的判定標準,如網路通訊的頻率、訪問的IP地址範圍等。
識別出符合後門特徵的異常行為,進一步分析其合法性。
優點:能有效檢測未知的後門程式。
缺點:可能出現誤報,並需要高效能監控系統支援。
- 基於沙盒環境的檢測方法
沙盒檢測方法是將程式在隔離的環境中執行,觀察其行為以判斷是否具有後門特性。該方法適合檢測未知或變種後門。
具體過程:
建立一個虛擬的隔離環境(沙盒),可以是虛擬機器或虛擬容器。
在沙盒中執行目標程式,監視其行為,包括系統呼叫、網路訪問等。
分析執行結果,判斷程式是否試圖與外部主機通訊、獲取敏感資訊等行為,若有則可能是後門程式。
優點:對未知的後門程式有較高的檢測成功率。
缺點:沙盒檢測時間較長,且某些後門具備反沙盒特性,難以在沙盒中檢測到。
- 基於流量分析的檢測方法
後門程式通常會與攻擊者的伺服器通訊,流量分析方法透過檢測網路流量中的異常行為,識別潛在的後門程式。
具體過程:
設定流量監控系統,監視系統或網路的進出資料包。
分析資料包的流量特徵,包括訪問的目的IP地址、埠、資料包大小、傳輸協議等。
根據設定的規則,如不常見的協議使用、非正常工作時間的流量等,識別異常連線。
將異常連線的主機進一步分析,確認是否有後門。
優點:能夠檢測出在系統中隱藏的、未被防病毒軟體檢測到的後門程式。
缺點:對網路資源消耗大,且需要大量資料分析以識別正常和異常流量。
- 基於雜湊比對的檢測方法
雜湊比對方法主要用於檢測檔案的完整性,判斷是否被篡改而植入後門程式。
具體過程:
計算系統檔案或程式的雜湊值,生成當前檔案的指紋。
將這些雜湊值與已知良性檔案的雜湊值庫進行比對。
如果檔案的雜湊值與已知良性檔案不一致,則說明檔案被篡改,有可能被植入後門。
優點:快速有效,能夠檢測已知程式是否被篡改。
缺點:僅適用於已知檔案的檢測,對未知檔案或新檔案無法檢測。
2.4 取證分析實踐
資料來源是Snort收集的蜜罐主機5天的網路資料來源,並去除了一些不相關的流量,同時IP地址和其他敏感資訊被混淆。回答下列問題:
(1)IRC是什麼?當IRC客戶端申請加入一個IRC網路時將傳送那個訊息?IRC一般使用那些TCP埠?
IRC是一種實時通訊協議,廣泛用於聊天、討論和資訊共享。它支援透過網路在不同的計算機之間傳輸訊息,通常用於建立聊天室或私聊。IRC協議由客戶端與伺服器進行通訊,客戶端透過連線到IRC伺服器加入一個或多個聊天室並進行交流。
當IRC客戶端申請加入一個IRC網路時,通常會傳送一條NICK訊息來指定客戶端的暱稱,接著傳送USER訊息來提供關於該使用者的資訊。例如:
NICK:用於設定客戶端的暱稱(例如:NICK chuzhehao)。
USER:提供客戶端的使用者名稱、主機名、伺服器名和真實姓名(例如:USER chuzhehao 0 * :Chuzhehao)。
之後,客戶端可能會向IRC伺服器傳送JOIN訊息來加入一個指定的頻道(例如:JOIN #chuzhehao_channel)。
IRC協議一般使用以下TCP埠:
一般埠號為6667,也會使用6660-6669,6697是IRC使用SSL/TLS加密的埠。
(2)殭屍網路是什麼?殭屍網路通常用於什麼?
殭屍網路(Botnet)是由大量被惡意軟體感染並被遠端控制的計算機或裝置組成的網路。這些計算機通常被攻擊者控制後,成為“殭屍”,在使用者不知情的情況下執行攻擊者的命令。殭屍網路透過控制成千上萬的受感染裝置,能夠進行大規模的惡意活動。
殭屍網路通常用於:
分散式拒絕服務攻擊(DDoS)、傳送垃圾郵件、資料盜竊、傳播其他惡意軟體等
(3)蜜罐主機(IP地址:172.16.134.191)與那些IRC伺服器進行了通訊?
使用wireshark開啟資料包
輸入ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697
進行過濾
檢視所有地址
除蜜罐主機(IP地址:172.16.134.191)外,還有66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172和209.126.161.29這五個地址
所以與蜜罐主機通訊的IRC伺服器有五個,分別是66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172和209.126.161.29。
(4)在這段觀察期間,多少不同的主機訪問了以209.196.44.172為伺服器的殭屍網路?
首先使用命令sudo apt install tcpflow
和sudo apt install tcpflow-nox
安裝tcpflow
再使用tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
進行檢視
生成了172.016.134.191.01152-209.196.044.172.06667,209.196.044.172.06667-172.016.134.191.01152和report.xml三個檔案
先執行export LC_COLLATE='C'
和export LC_CTYPE='C'
避免字元編碼導致計數不準確的問題
輸入命令cat 209.196.044.172.06667-172.016.134.191.01152 | 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 | wc -l
如圖可知有3457個主機訪問了殭屍網路
(5)哪些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 > 2.txt;wc -l 2.txt
得到一個txt檔案
可以看到共有165個IP
(6)攻擊者嘗試攻擊了那些安全漏洞?
輸入命令snort -r botnet_pcap_file.dat
檢視資訊
發現絕大部分是TCP包,很小一部分是UDP包
輸入命令tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191 and tcp[tcpflags]== 0x12' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
篩選tcp包
輸入命令tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191 and udp ' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
篩選udp包
TCP響應埠為135、139、25、445、4899、80
UDP響應埠為137
使用wireshark開啟botnet_pcap_file.dat
篩選條件設定為(tcp.dstport == 135 || tcp.dstport == 25)&& ip.dst == 172.16.134.191
可以看到25埠和135埠僅僅進行了TCP三次握手,並沒有資料交換
接下來把篩選條件設定為tcp.dstport==139 && ip.dst == 172.16.134.191
發現也只是進行連線,沒有資料交換
把篩選條件設定為tcp.dstport==145 && ip.dst == 172.16.134.191
發現了PSEXESVC.EXE
過濾條件設定為ip.dst==61.111.101.78檢視從蜜罐發往攻擊主機的資料包,看到了Acceptance,且資料包中找到了\PIPE\lsass,攻擊者可以進行遠端呼叫訪問和管理許可權
回看對蜜罐接收到的報文,發現了大量與 SVCCTL 相關的通訊。透過查詢得知,Windows 系統中的 SVCCTL 介面用於與服務控制管理器(SCM)互動。該介面存在的漏洞允許匿名使用者連線到 SCM,並檢視系統中所有安裝和執行的服務。
把篩選條件設定為tcp.dstport==4899 && ip.dst == 172.16.134.191
也只是連線但沒有資料交換
把篩選條件設定為tcp.dstport==80 && ip.dst == 172.16.134.191
可以看到向蜜罐傳送了CCCCCCCCCCCCCCCCCCCCCCCCCCC,是緩衝區溢位攻擊
還用指令碼進行攻擊
發現蠕蟲c:\notworm
看下蜜罐的回覆
說明80埠的攻擊都失敗了
把篩選條件設定為udp.port==137 && ip.src == 172.16.134.191
用於"NetBIOS Name Service"(NetBIOS名稱服務),沒有資料交換
(7)那些攻擊成功了?是如何成功的?
來自61.111.101.78的攻擊利用了Dv1dr32蠕蟲,透過向目標主機的445埠傳送包含PSEXESVC.EXE的資料包並將其寫入系統目錄來實施攻擊。蠕蟲利用SVCCTL介面的漏洞,連線服務控制管理器(SCM),獲取目標主機的服務資訊,實現對系統的控制。
3.問題及解決方案
問題1:出現下圖中的報錯,關閉視窗後在Process Explorer中提示Path:拒絕訪問
問題1解決方案:不要關閉圖中的報錯視窗,直接開啟Process Explorer就可以檢視資訊
問題2:系統提示找不到tcpflow命令
問題2解決方案:輸入命令sudo apt install tcpflow
和sudo apt install tcpflow-nox
安裝tcpflow即可
4.學習感悟、思考等
在本次惡意程式碼檢測與分析實踐中,我加深了對後門程式、木馬、殭屍網路的理解,並透過工具如PEID、IDA進行脫殼操作,掌握了分析惡意程式碼的基本方法。儘管實驗內容複雜,需要對組合語言和各種工具的熟練掌握,但我透過實踐解決了不少困難,特別是在資料分析和工具使用上。透過Wireshark資料包分析,我提升了對潛在攻擊意圖的識別能力。