1.實驗要求
1.1 實驗內容
一、惡意程式碼檔案型別標識、脫殼與字串提取
對提供的rada惡意程式碼樣本,進行檔案型別識別,脫殼與字串提取,以獲得rada惡意程式碼的編寫作者,具體操作如下:
(1)使用檔案格式和型別識別工具,給出rada惡意程式碼樣本的檔案格式、執行平臺和加殼工具;
(2)使用超級巡警脫殼機等脫殼軟體,對rada惡意程式碼樣本進行脫殼處理;
(3)使用字串提取工具,對脫殼後的rada惡意程式碼樣本進行分析,從中發現rada惡意程式碼的編寫作者是誰?
二、使用IDA Pro靜態或動態分析crackme1.exe與crakeme2.exe,尋找特定輸入,使其能夠輸出成功資訊。
三、分析一個自制惡意程式碼樣本rada,並撰寫報告,回答以下問題:
(1)提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊;
(2)找出並解釋這個二進位制檔案的目的;
(3)識別並說明這個二進位制檔案所具有的不同特性;
(4)識別並解釋這個二進位制檔案中所採用的防止被分析或逆向工程的技術;
(5)對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由;
(6)給出過去已有的具有相似功能的其他工具;
(7)可能調查處這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?
(8)給出至少5種檢測該惡意軟體的方法,例如基於特徵碼的方法,需要詳細介紹每種方法。
四、取證分析實踐
Windows 2000系統被攻破並加入殭屍網路
1.2 本週所學
對於惡意程式碼的分析技術,包括靜態分析與動態分析中的快照對比、動態行為監控、網路監控、沙盒、動態跟蹤測試等技術的原理,學會使用如PEID、IDA Pro、Process Explorer等一些分析軟體,除此之外還有網路掃描與網路踩點(google hacking)的概念及其技術實現。
2.實驗過程
2.1惡意程式碼檔案型別標識、脫殼與字串提取
2.1.1分析rada樣本的檔案格式、執行平臺和加殼工具
在將RaDa.exe檔案傳入虛擬機器後,在虛擬機器命令列中輸入file RaDa.exe
檢視檔案基本資訊,
PE32 executable:這表明 RaDa.exe 是一個可移植可執行檔案(Portable Executable,簡稱PE)。PE32 表示這是一個32位的PE檔案。
GUI:這表示該可執行檔案包含圖形使用者介面(Graphical User Interface),意味著它是一個圖形介面程式,而不是命令列工具。
Intel 80386:這表明該檔案是為基於Intel 80386微處理器的系統設計的。
for MS Windows:表示該可執行檔案是執行在windows系統中的。
3 sections:這表示該可執行檔案由三個不同的節(sections)組成。
注:在PE檔案中,節是用來組織程式碼、資料和其他資源的單位。每個節都有特定的屬性和用途,例如程式碼節可能包含程式的可執行指令,資料節可能包含變數和常量等。
此時在虛擬機器命令列中輸入strings RaDa.exe>
分析目標檔案,發現得出的可識別字串都是亂碼,極有可能加了殼。
在PEiD軟體中放入下載好的RaDa.exe進行分析
可見,該PE檔案已被UPX加殼過。
2.1.2對rada樣本進行脫殼處理
將RaDa.exe檔案放入脫殼軟體中,可得脫殼後的新PE檔案RaDa_unpacked.exe,如圖
2.1.3利用字串提取工具對脫殼後的樣本進行分析
此時在虛擬機器命令列中輸入strings RaDa_unpacked.exe>
分析脫殼後的目標檔案
可見,部分內容已能被識別,比如圖中出現了該PE檔案作者?的[c] Raul Siles && David Perez的字串。
2.2 使用IDA Pro靜態或動態分析crackme1.exe與crakeme2.exe,尋找特定輸入,使其能夠輸出成功資訊
2.2.1對於crackme1.exe
在將crackme1.exe檔案傳入虛擬機器後,在虛擬機器命令列中輸入file crackme1.exe
,首先檢視檔案的基本資訊,
可知該檔案也是一個32位的PE檔案,執行在windows系統上,具有7個節,但非圖形介面程式,因此應為命令列工具,
將crackme1.exe檔案放入IDA Pro軟體中的PE Executable介面,得到圖形化反彙編視窗如圖,圖中我簡單標註了視窗的序號,以便區分講解
可見該程式在實際執行過程中對於所有有效引數存在三種螢幕輸出結果,
分別是
- "I think you are missing something.\n"
- "Pardon? What did you say?\n"
- "You know how to speak to programs, Mr. "..
此時我們在主機命令列中測試該程式,並使用不同的輸入引數測試該程式的返回值,得到如下結果
此時結合上面我們執行該程式時得到的所有返回值,我們可以得知輸出的結果1與2應該不是我們要找的成功輸入的返回結果,所以我們的目標即找到能使程式輸出結果3的輸入引數。
對於所得的圖形化反彙編視窗,我們可以發現若要使程式輸出結果3,也即成功執行視窗5所代表的程式碼,那麼程式的執行必須經過視窗2,
此時觀察視窗2的彙編程式碼,可知其執行邏輯為
首先獲取 arg_4 引數(從視窗1中可知即第一個輸入的引數)指向的值,並透過strcmp函式將其與字串 "I know the secret" 進行比較。如果兩者相等,程式將跳轉到 loc_401310 標籤處繼續執行,也就是執行視窗5的程式碼段。
所以我們應該輸入的引數應為I know the secret
嗎?
顯然不是,正確輸入應為"I know the secret"。
若是看不懂彙編程式碼,此時還有一種方法有助於找到目標引數
按view->Open subviews->Generate pesudocode依次點選導航欄上的圖示,
或者直接在顯示全程式反彙編結果的主介面(即上面給出的介面)按f5
即可得到反編譯c語言程式碼
從該c語言程式碼我們同樣可知目標引數應為"I know the secret"。
2.2.2對於crackme2.exe
分析過程類似,
此處簡化分析過程,直接上反編譯結果
可見若要該程式輸出目標資訊,那麼必須滿足第一個命令列輸入引數為"crackmeplease.exe",第二個引數為"I know the secret",不能出現第三個引數
那麼問題來了。我們執行該程式第一個引數比為該程式程式名用以指向該程式,因此對於程式crackme2.exe來說,我們不可能找到目標輸出資訊,因為其第一個引數必為crackme2.exe
除非我們給程式改名!
於是我們將程式crackme2.exe改名為crackmeplease.exe,以符合目標執行程式碼執行路線的第一個執行條件,同時讓crackmeplease.exe作為第一個引數的情況下能讓該程式正常執行。
於是我們輸入在命令列中輸入"crackmeplease.exe" "I know the secret"
事實證明,crackmeplease.exe可以不加雙引號。
2.3 分析一個自制惡意程式碼樣本rada,並撰寫報告
2.3.1提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊
在虛擬機器命令列中輸入file RaDa_unpacked.exe
檢視脫殼後RaDa檔案的基本資訊。
可以得到這一程式是32位的執行在windows系統上的圖形介面PE檔案,支援80386指令集,由4個不同的節組成。
再於虛擬機器中輸入md5sum RaDa_unpacked.exe
獲取該程式的md5雜湊值,由圖可知為847c2a1dcfe8347afd8cf76d99217c5b
2.3.2找出並解釋這個二進位制檔案的目的
將脫殼後的RaDa檔案拖入IDA中,檢視其反彙編程式碼,我們可以發現該程式在執行中會執行這幾個可疑的操作
比如
中出現了這些字串
http://10.10.10.10/RaDa
:這是一個URL,可能用於與遠端伺服器通訊。
RaDa_commands.html
、cgi-bin
、download.cgi
、upload.cgi
:顧名思義,這些字串可能與Web服務或指令碼相關,用於執行命令、下載或上傳檔案。
C:\RaDa\tmp
、C:\RaDa\bin
:這些是檔案路徑,可能用於儲存臨時檔案或可執行檔案。
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
:這是一個Windows登錄檔路徑,通常用於設定程式在系統啟動時自動執行。
是不是覺得一條一條查反彙編程式碼太過繁瑣了?
其實我們還可以直接點選執行RaDa_unpacked.exe,此時程式會跳出一個彈窗,不要關閉或確認,保證該程序處於執行的狀態。
然後開啟ProcessExplorer程式,查詢RaDa_unpacked.exe的程序,然後雙擊該程序,點選彈出的檔案導航欄中的strings。
即可直接過濾掉其他的程式碼,快速發現檔案中一些可以字串的彙總了。
注:kali虛擬機器命令列中的strings工具實際上不能識別出那麼多PE中展示出的字串。
可見,除了上述透過IDA反彙編分析出的那些可疑操作外,還有
Starting DDoS Smart remote attack...
:表明程式可能涉及到分散式拒絕服務攻擊(DDoS)
Vscript.Shell、RegWrite、RegRead、RegDelete
:這些與Windows指令碼宿主和登錄檔操作有關,後門程式可能會使用這些功能來執行命令或修改系統設定。
--gui、--invisible、--noinstall
:這些引數可能用於控制程式的可見性和安裝行為,以避免被使用者發現
經驗證,對於該程式確實存在一些控制引數或者說指令。比如在命令列中輸入RaDa.exe --authors
執行帶--authors引數的RaDa程式時,程式會彈出顯示作者資訊的一個視窗。
在C:\RaDa\bin、C:\RaDa\tmp路徑上確實生成了相關資料夾,甚至C:\RaDa\bin路徑下還生成了一個新的RaDa.exe檔案。
綜上,這些可疑的字串表明程式可能會執行包括網路通訊、檔案操作、登錄檔修改、命令和控制、指令碼執行等操作,而這些都是後門程式的典型特徵。因此,我們可以合理推斷這段程式碼屬於一個後門程式,或者說是一個後門程式的一部分。
2.3.3識別並說明這個二進位制檔案所具有的不同特性
結合2.3.2
我們可知該程式具有如下特性
遠端通訊能力:程式可能具備與遠端伺服器通訊的能力。
遠端Web服務互動:程式可能與Web服務互動,執行伺服器傳來的命令、下載檔案或上傳資料。
檔案系統操作:程式可在本地檔案系統中建立或操作檔案,用於儲存臨時資料或可執行檔案。
自動啟動能力:程式可能修改登錄檔以實現在系統啟動時自動執行。
指令碼執行修改系統配置:Vscript.Shell、RegWrite、RegRead、RegDelete 表明程式可能執行某些指令碼或修改系統配置。
潛在的DDoS攻擊能力(沒試過):程式可能具備發起分散式拒絕服務攻擊的能力。
2.3.4識別並解釋這個二進位制檔案中所採用的防止被分析或逆向工程的技術
主要是upx壓縮殼操作,使得在未被脫殼前程式被分析的結果是被壓縮的程式碼,無法準確靜態識別程式的功能特點與執行目標。
2.3.5對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由
既非病毒也非蠕蟲,實為後門程式。
因為其不表現出大量自我複製與傳播的特點,僅僅在c盤目錄下生成一個RaDa資料夾與相關程式檔案,沒有主動向其他主機或在宿主機的其他位置大量複製,不屬於蠕蟲與病毒
沒有偽裝成一個正常的程式,不屬於木馬
能夠不依附於宿主機獨立執行,接受遠端指令進行操作,所以屬於後門程式。
2.3.6給出過去已有的具有相似功能的其他工具
在實驗二中使用的msf工具,用於生成後門程式獲取目標主機的某些許可權。
2.3.7可能調查處這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?
可以,在前面的步驟中已經查到了該程式的作者,比如在kali虛擬機器中透過strings分析,還有透過IDA反彙編查詢、以及PE中字串的提取這三種方式均可獲取開發作者的名字。
當然上述方式都是有條件的的
- 該檔案並未被加殼壓縮或加密處理
- 作者確實在程式中留下自己的資訊
2.3.8給出至少5種檢測該惡意軟體的方法,例如基於特徵碼的方法,需要詳細介紹每種方法
基於特徵碼的檢測:
這種方法依賴於已知惡意軟體的特徵碼或簽名(特徵碼是一段獨特的二進位制程式碼,通常與惡意軟體的行為或結構相關聯)。安全軟體會將掃描到的檔案與資料庫中的特徵碼進行比對,以識別已知的惡意軟體。
啟發式分析:
啟發式分析透過分析程式的行為模式來識別惡意軟體。也就是說這種方法不依賴於已知的特徵碼,而是根據一系列規則來判斷程式是否表現出惡意行為。
行為監控和分析:
這種方法透過監控程式在系統上的實時行為來檢測惡意活動。這包括檔案的建立、修改、刪除,網路連線的建立,以及對系統資源的訪問等。
靜態程式碼分析:
靜態程式碼分析是在不執行程式的情況下,透過分析程式的原始碼或二進位制程式碼來識別潛在的惡意行為。這包括檢查程式碼中的可疑模式、函式呼叫、API使用等。
動態連結庫(DLL)注入和API鉤子檢測:
這種方法透過監控程式對DLL的載入和API呼叫來檢測惡意行為。因為惡意軟體經常透過注入DLL或掛鉤API來隱藏其活動或篡改系統功能。
2.4 取證分析實踐
2.4.1IRC是什麼?當IRC客戶端申請加入一個IRC網路時將傳送那個訊息?IRC一般使用那些TCP埠?
IRC是Internet Relay Chat的縮寫,意為網際網路中繼聊天,是一種允許使用者透過網際網路進行實時文字交流的協議。
其中IRC網路由多個伺服器組成,這些伺服器相互連線,形成一個大型的聊天網路。使用者可以透過IRC客戶端軟體連線到IRC伺服器,加入不同的聊天室(也稱為頻道)進行交流。
IRC通常使用TCP埠6667進行通訊。
然而,由於6667埠可能會被網路防火牆或路由器阻止,IRC伺服器也可能使用其他埠,如6660到6669,或者使用動態埠。
2.4.2殭屍網路是什麼?殭屍網路通常用於什麼?
殭屍網路(Botnet)是由多個受感染的計算機、裝置或伺服器組成的網路,這些裝置通常被稱為“殭屍”或“肉雞”(Bots)。這些殭屍裝置被惡意軟體(通常稱為殭屍程式或Bot程式)控制,而裝置的所有者通常並不知情。殭屍網路的控制者,也被稱為Botmaster,可以遠端指揮這些裝置執行各種操作。
殭屍網路通常用於以下目的:
-
分散式拒絕服務攻擊(DDoS):攻擊者可以指揮大量殭屍裝置同時向目標伺服器傳送請求,導致伺服器過載,從而無法正常服務合法使用者。
-
垃圾郵件傳送:殭屍網路可以被用來傳送大量的垃圾郵件,這些郵件可能包含惡意連結或附件,用於傳播更多的惡意軟體或進行網路釣魚。
-
資料竊取:殭屍程式可以竊取裝置上的敏感資訊,如登入憑證、財務資訊、個人資料等,並將這些資訊傳送給攻擊者。
-
點選欺詐:殭屍網路可以被用來模擬點選廣告,從而為攻擊者或其同夥產生不正當的廣告收入。
-
惡意軟體分發:殭屍網路可以被用來分發更多的惡意軟體,如勒索軟體、鍵盤記錄器、間諜軟體等,以進一步擴大殭屍網路的規模。
-
網路釣魚:殭屍網路可以被用來建立釣魚網站或傳送釣魚資訊,誘使使用者洩露敏感資訊。
2.4.3對於botnet_pcap_file.dat檔案,其中蜜罐主機(IP地址:172.16.134.191)與那些IRC伺服器進行了通訊?
首先將botnet_pcap_file.dat檔案以wireshark開啟,
在過濾攔輸入ip.addr==172.16.134.191&&tcp.dstport==6667
用來過濾出有關ip為172.16.134.191,且目的埠有關6667的報文。
可見蜜罐主機與
- 209.126.161.29
- 66.33.65.58
- 63.241.174.144
- 217.199.175.10
- 209.126.161.29
這5個irc主機進行了通訊
再由guolv條件ip.src==172.16.134.191&&irc
所得的結果,蜜罐主機只傳送了三次(NICK USER)報文,只建立起了一個irc通訊,我們可知,
蜜罐主機首先向5個irc伺服器傳送tcp請求試圖建立irc通訊,但只有
- 63.241.174.144
- 217.199.175.10
- 209.126.161.29
這3臺伺服器線上並作出回應,而最終只有
209.126.161.29伺服器成功與蜜罐主機建立irc通訊。
2.4.4在這段觀察期間,多少不同的主機訪問了以209.196.44.172為伺服器的殭屍網路?
首先我們將botnet_pcap_file.dat傳入虛擬機器中,此時我將其更名為botnet_pcap_file20222319.dat,
然後在虛擬機器命令列中輸入apt-get install tcpflow
下載tcpflow工具
咱後透過指令tcpflow -r botnet_pcap_file20222319.dat "host 209.196.44.172 and port 6667"
從目標檔案中提取所有與IP地址 209.196.44.172 相關的,並且使用TCP埠 6667 的TCP流,然後將這些流重構為單獨的檔案。
此時在當前目錄下生成了一個report.xml和兩個網段記錄
由於我們需要知曉多少不同的主機訪問了以209.196.44.172為伺服器的殭屍網路,所以此處我們選擇對檔案209.196.044.172.06667-172.016.134.191.01152進行操作。
即在命令列中輸入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
其中:
cat 209.196.044.172.06667-172.016.134.191.01152
用cat工具制定一個待處理檔案
grep -a "^:irc5.aol.com 353"
grep 命令用於搜尋檔案中的模式。-a 選項表示同時處理文字和二進位制檔案。這裡的正規表示式 "^:irc5.aol.com 353" 匹配以 irc5.aol.com 開頭,後跟空格和數字 353 的所有行,降負荷條件的行保留,其餘丟棄。
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x : //g"
sed 命令用於對文字進行模式空間的替換。這個命令中的替換表示式 s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x : //g 用於刪除以 # 開頭,後跟任意字元(除了 x),直到再次出現 x 的字串。
tr ' ' '\n'
用於將所有空格替換為換行符。
tr -d "\15"
用於刪除所有回車。
grep -v "^$"
用於刪除空行。-v 選項表示反向選擇,即選擇不匹配的行。
sort -u
sort 命令用於對結果進行排序,-u 選項表示去除重複行。
wc -l
wc 命令用於統計結果有幾行,-l 選項表示只顯示行數。
最終結果顯示共有3461臺主機訪問了以209.196.44.172為伺服器的殭屍網路
2.4.5哪些IP地址被用於攻擊蜜罐主機?
在虛擬機器命令列中輸入tcpdump -n -nn -r botnet_pcap_file20222319.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20222319.txt;wc -l 20222319.txt
可知共有165個IP地址被用於攻擊蜜罐主機。
2.4.6攻擊者嘗試攻擊了那些安全漏洞?
在wireshakes的導航欄中依次點選統計->協議分析,進入下述介面。
可知在這一次攻擊過程中主要透過tcp(99.7%)進行通訊,極少透過udp(0.3%)進行通訊。
然後我們再於虛擬機器中輸入tcpdump -r botnet_pcap_file20222319.dat -nn 'src host 172.16.134.191 and tcp[tcpflags]== 0x12' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
篩選出tcp通訊過程中涉及的所有埠。
可知,涉及的埠有135(RPC遠端過程呼叫)、139(NetBIOS/SMB)、25(SMTP簡單郵件傳輸協議)、445(SMB windows共享)、4899(Radmin遠端控制)、80(HTTP)
同理,對於udp,則有tcpdump -r botnet_pcap_file20222319.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
僅有一個137(NetBIOS)埠。
2.4.7那些攻擊成功了?是如何成功的?
接下來我們逐一對這些埠進行排查。
-
137埠
在wiresharks過濾條件中輸入ip.dst==172.16.134.191&&udp.port==137
圖中顯示對於蜜罐主機,其他主機一直在嘗試解析其基於NetBIOS的計算機名稱,但一直無回應,不過也沒有明細的越界惡意行為,因此應該不存在攻擊。 -
135
在wiresharks過濾條件中輸入ip.dst==172.16.134.191&&tcp.port==135
結果顯示僅僅是進行了一次tcp連線。 -
139
同理,過濾條件為ip.dst==172.16.134.191&&tcp.port==139
並無明顯異常,是正常的tcp、smb行為。 -
25
同理,過濾條件為ip.dst==172.16.134.191&&tcp.port==25
同樣只是正常的tcp連線過程。 -
445
同理,過濾條件為ip.dst==172.16.134.191&&tcp.port==445
61.111.101.78向蜜罐主機傳送了PSEXESVC.EXE。其中PSEXESVC.EXE作為PsExec服務的一部分,允許使用者遠端執行命令或執行程式,也可以應用於攻擊,因此很有攻擊的嫌疑,不過最後PSEXESVC.EXE也被刪除了。 -
4899
同理,過濾條件為ip.dst==172.16.134.191&&tcp.port==4899
可見其具有大量的PSH包,具有很大的攻擊嫌疑
但最重要的是下面這一段
第四個資料包是一個HTTP HEAD請求,嘗試訪問 /cgi-bin/../../../../../winnt/system32/cmd.exe?/c+dir。這是一個典型的目錄遍歷攻擊嘗試,攻擊者試圖訪問系統目錄下的檔案。 -
80
同理,過濾條件為ip.dst==172.16.134.191&&tcp.port==80
具有緩衝區溢位性質與目錄遍歷攻擊性質的攻擊表現。
3.問題及解決方案
- 問題一:在查閱資料後發現IDA可以透過一次點選view->Open subviews->Generate pesudocode進行反編譯,但在實際程式中並無次功能。
- 解決問題:原因是一開始我用的是直接在學習通上下載的舊版IDA,並不支援反編譯功能,因此在官網下載最新版即可。
4.學習感悟、思考等
本次實驗的確不難,網路上資料很充裕,如包括何透過tcpflow過濾包、如何分析攻擊報文、IDA反編譯如何操作等等,基本上也是一個復現實驗。
本次實驗我認為最大的收穫就是掌握了使用PEiD、IDA、PE、脫殼軟體等等工具,並且學會了透過tcpflow工具切分捕獲的包,再利用cat對文件進行二次處理的過程。
當然,還有為了分析報文,我簡單認識了IRC、SMB等協議的具體報文通訊過程(就是不知道後面還會不會用得上)。