20222411 2024-2025-1 《網路與系統攻防技術》實驗四實驗報告

20222411康灿然發表於2024-11-10

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系統被攻破並加入殭屍網路

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

(1)IRC是什麼?當IRC客戶端申請加入一個IRC網路時將傳送那個訊息?IRC一般使用那些TCP埠?

(2)殭屍網路是什麼?殭屍網路通常用於什麼?

(3)蜜罐主機(IP地址:172.16.134.191)與那些IRC伺服器進行了通訊?

(4)在這段觀察期間,多少不同的主機訪問了以209.196.44.172為伺服器的殭屍網路?

(5)哪些IP地址被用於攻擊蜜罐主機?

(6)攻擊者嘗試攻擊了那些安全漏洞?

(7)那些攻擊成功了?是如何成功的?

1.2 本週學習內容

1.惡意程式碼的定義

使計算機按照攻擊者的意圖執行以達到惡意目的的指令集合。

2.惡意程式碼的型別

計算機病毒、 蠕蟲、特洛伊木馬、邏輯炸彈、系統後門、Rootkit、殭屍程式等…

3.惡意程式碼分析技術

(1)靜態分析

透過反病毒引擎掃描識別已知的惡意程式碼家族和變種名

逆向分析惡意程式碼模組構成,內部資料結構,關鍵控制流程等,理解惡意程式碼的機理,並提取特徵碼用於檢測。

(2)動態分析

透過在受控環境中執行目的碼,以獲取目的碼的行為及執行結果。

2.實驗過程

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

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

  ·在kali命令列中使用file指令檢視

  可以看到,這是一個PE32可執行檔案,適用於Ms Windows作業系統,採用Intel 80386架構,包含3個部分。"GUI"表示該檔案具有圖形使用者介面。
  ·使用PEiD工具檢視檔案資訊。

  可以看到,rada.exe檔案的加殼工具為UPX。同時,也可以看的檔案的入口點、EP段、檔案偏移、首位元組、聯結器版本、子系統等具體資訊。

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

  ·使用PEiD通用脫殼器對RaDa.exe進行處理。

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

  在kali命令列中輸入strings RaDa.exe指令,遺憾的是,由於加殼的原因終端輸出全都是亂碼,無法識別。

  繼續對脫殼後的RaDa.exe.unpacked.exe檔案使用strings指令,可以看到有一部分的輸出已經變成明文。

  由於輸出過長,我將輸出複製到了Strings_unpacked.txt檔案中,來查詢是否有關於作者的蛛絲馬跡。

  在208行處發現了兩個人的名字:Raul siles && David Perez,很可能是該檔案的作者。

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

2.2.1分析crackme1.exe檔案

  首先,在命令列執行檔案,透過更改引數個數與引數內容的方式來對檔案執行的輸出規則進行觀察猜測。



  由此可以發現,在命令列執行引數的個數會對crackme1.exe的輸出產生影響。當引數個數為2時,程式輸出“Pardon? What did you say?”;否則,程式輸出“I think you are missing something.”。但目前,並沒有發現引數內容的不同會對輸出造成什麼影響。
  在kali命令列中提取檔案可列印字元,可以發現,程式中可能一共儲存了“四句話”,有兩種我們已經見過——說明程式可能仍有其他輸出未被我們實現。

  在IDA Pro中也可以看到這“四句話”。

  在IDA Pro中依次點選Views -> Graphs -> Function calls,檢視程式中函式的呼叫過程。

  可以看到,程式中呼叫了printf函式列印輸出字串,還使用了strcmp函式,猜測是用於字串的比對,根據比對結果輸出不同內容。根據呼叫關係,我們需要重點關注main函式的執行邏輯。

  檢視main函式的地址,在右側00401280地址main函式處檢視流程圖(依次點選Views -> Graphs -> Flow chart進入流程圖介面)。

  分析流程圖,進行測試核對結果,可以觀察到分析結果與實際執行結果相符。

  至此,crackme1.exe分析成功。

2.2.2分析crackme2.exe檔案

  同上,在命令列執行檔案,透過更改引數個數與引數內容的方式來對檔案執行的輸出規則進行觀察猜測。

  由此可以發現,檔案與crackme1.exe類似。在命令列執行引數的個數會對crackme2.exe的輸出產生影響。當引數個數為2時,程式輸出“I have an identity problem.”;否則,程式輸出“I think you are missing something.”。但目前,並沒有發現引數內容的不同會對輸出造成什麼影響。
  在IDA Pro中提取檔案可列印字元,可以發現,程式中可能一共儲存了“五句話”。接下來開啟函式呼叫介面分析程式的具體執行邏輯。
  分析思路與工具使用方法與上文相同,不再贅述。

  根據main函式的地址,找到並開啟函式呼叫流程圖檢視。

  透過分析,可以得到以下結論:命令列引數第一個引數為crackmeplease.exe且第二個引數為"I know the secret"時,可以得到最終的輸出,於是把crackme2.exe改名為crackmeplease.exe後進行執行

(此處命令列樣式變了是因為我用的別的同學電腦進行的本項測試,由於我的電腦中命令列執行檔案要輸入.\才能執行,此時命令列第一個引數就改變了,無法得出正確結果,所以只能借用同學電腦)
  就此我們可以推斷出,當第二個引數對比相同後,程式將輸出We have a little secret: Chocolate.
  至此,crackme2.exe檔案分析結束。

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

2.3.1提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊

  在網站對檔案進行摘要,摘要值如下。

https://www.lddgo.net/encrypt/hash (所用網站)

2.3.2 找出並解釋這個二進位制檔案的目的

  在虛擬機器Windows XP中開啟這個程式,於Process Explorer中檢視由20222411ada.exe所建立的程序。

  雙擊程序,檢視具體資訊。仔細觀察字串一欄可以發現不少資訊。

->http://10.10.10.10/RaDa 和 RaDa_commands.html表示10.10.10.10下的一個網頁。猜測可能會跳轉到該網頁。
->出現了download.cgi和upload.cgi檔案,以及新建立的C:\RaDa\tmp和C:\RaDa\bin路徑,猜測可進行上傳下載操作,並存到C盤中。實際上在執行RaDa.exe後,C盤中出現了C:\RaDa\tmp和C:\RaDa\bin兩個新資料夾。
->HKLM\Software\Microsoft\Windows\CurrentVersion\Run:
  這是 Windows 登錄檔中的一個路徑,具體為 "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"。在這個路徑下,儲存著系統啟動時需要自動執行的程式列表。程式可能對該列表進行了修改。
->出現了“Starting DDos Smurf remote attack...”,猜測可能是會進行DDoS攻擊(分散式拒絕服務攻擊)。
->對猜測進行驗證,開啟Wireshark抓包(見上圖2),輸入篩選條件ip.dst == 10.10.10.10。確實可以發現,虛擬機器向10.10.10.10傳送了大量TCP包。猜測可能是RaDa.exe想連線10.10.10.10,並訪問RaDa_commands.html,並且構成DDoS攻擊。
  

  由於出現了--help,推測這些是執行RaDa.exe時可新增的引數。下圖執行了20222411RaDa.exe.unpacked.exe --gui命令,進行了驗證。

  出現了get、put、screenshot、sleep等欄位,猜測有使主機截圖、睡眠等功能。

2.3.3識別並說明這個二進位制檔案所具有的不同特性

  ->該檔案被執行後,會在主機C盤自動建立資料夾,修改登錄檔,新增自啟動項。
  ->該檔案被執行後,可執行put、get、screenshot、sleep等命令。
  ->該檔案被執行後,將請求連線 http://10.10.10.10/ 網頁,獲得來自攻擊者的指令。
  ->該檔案被執行後,會發起DDoS Smurf攻擊。

2.3.4識別並解釋這個二進位制檔案中所採用的防止被分析或逆向工程的技術

  由實驗第一部分得知,檔案使用UPX加殼。

2.3.5對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由

  該惡意程式碼不會傳播且沒有偽裝行為與欺騙行為,沒有隱藏惡意目標,所以不是木馬、病毒以及蠕蟲。但這個程式可以獲得控制許可權,所以我認為它屬於後門程式。

2.3.6給出過去已有的具有相似功能的其他工具

  實驗二中我曾用msfvenom生成過的後門檔案Backdoor.exe與該程式的功能類似。

2.3.7可能調查出這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?

  可以,作者是Raul Siles和David Perez。在Windows下執行命令20222411Rada_unpacked.exe --authors,即可看到軟體的作者。

2.3.8給出至少5種檢測該惡意軟體的方法,例如基於特徵碼的方法,需要詳細介紹每種方法。

  1. 基於特徵碼的檢測方法
    原理:基於特徵碼的檢測方法是透過掃描目標檔案或記憶體中的二進位制資料,查詢與已知惡意軟體特徵碼相匹配的模式。這些特徵碼通常是惡意軟體程式碼中具有唯一性或代表性的位元組序列。
    實現方式:使用反病毒軟體或惡意軟體檢測工具,這些工具內建了一個龐大的特徵碼資料庫。當掃描到與資料庫中特徵碼匹配的資料時,即判定為惡意軟體。
    優缺點:該方法檢測速度快、準確率高,但只能檢測已知的惡意軟體,對於新的或變種的惡意軟體可能無法識別。
  2. 行為監測方法
    原理:惡意軟體在感染計算機後會表現出一些特殊的行為,如修改系統檔案、建立新檔案、傳送垃圾郵件等。行為監測方法透過分析計算機的行為和操作記錄,檢測出是否存在這些異常行為,從而判斷是否有惡意軟體的存在。
    實現方式:透過監控系統的關鍵位置(如登錄檔、系統資料夾等)以及網路流量,分析異常行為模式,並觸發警報或採取相應措施。
    優缺點:該方法能夠檢測未知的惡意軟體,但可能會受到正常軟體行為的干擾,導致誤報。
  3. 網路流量監測方法
    原理:惡意軟體通常會透過網路與外部伺服器進行通訊,傳輸有害資訊或接收遠端指令。網路流量監測方法透過監測計算機與外部伺服器的網路流量,檢測出是否存在惡意通訊。
    實現方式:使用網路流量分析工具或防火牆,監控並分析進出計算機的網路資料包,識別異常的網路行為或通訊模式。
    優缺點:該方法能夠實時檢測網路中的惡意活動,但可能需要較高的技術水平和資源投入。
  4. 基於簽名的檢測方法
    原理:基於簽名的檢測方法類似於基於特徵碼的檢測,但它更多地關注於檔案的整體結構或特定部分的簽名。這些簽名可以是檔案的雜湊值、特定區域的位元組序列等。
    實現方式:透過計算目標檔案的簽名,並與已知的惡意軟體簽名資料庫進行比對,從而判斷檔案是否惡意。
    優缺點:該方法能夠檢測一些變種或加密的惡意軟體,但同樣依賴於已知的簽名資料庫,對於新的惡意軟體可能無法識別。
  5. 沙盒模擬方法
    原理:沙盒模擬方法將待檢測檔案置於一個模擬的、可控的虛擬環境中執行,透過分析其行為以及函式呼叫來判斷其是否惡意。
    實現方式:使用沙盒技術建立一個隔離的虛擬環境,將待檢測檔案在其中執行,並監控其行為和函式呼叫。如果檔案表現出惡意行為(如修改系統檔案、建立惡意程序等),則判定為惡意軟體。
    優缺點:該方法能夠檢測未知的惡意軟體,並模擬其在實際環境中的行為。但執行沙盒環境可能需要較高的資源投入,且對於某些複雜的惡意軟體可能無法完全模擬其行為。

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

2.4.1IRC是什麼?當IRC客戶端申請加入一個IRC網路時將傳送哪個訊息?IRC一般使用哪些TCP埠?

(以下內容部分來自網路資料)
  1)IRC 是 Internet Relay Chat 的縮寫,是一種實時的網際網路聊天協議,允許使用者在各種主題的聊天室中進行交流。
  2)當 IRC 客戶端申請加入一個 IRC 網路時,將傳送一條格式為 "PASS \r\nNICK \r\nUSER :\r\n" 的訊息。其中, 是密碼, 是暱稱, 是使用者名稱, 是主機名, 是伺服器名, 是真實姓名。
  3)IRC伺服器明文傳輸通常在6667埠監聽,也會使用 6660—6669 埠。當攻擊者濫用IRC構建殭屍網路時,可能使用任意的埠構建IRC殭屍網路控制通道。

2.4.2殭屍網路是什麼?殭屍網路通常用於什麼?

  殭屍網路是由一組被駭客控制的計算機或其他網路連線裝置組成的網路。這些裝置通常被感染了惡意軟體,使駭客可以遠端控制它們,而所有這些裝置一起形成了一個龐大的網路,被稱為殭屍網路。
  殭屍網路通常被用於進行大規模的網路攻擊,如分散式拒絕服務(DDoS)攻擊。在這種攻擊中,駭客可以透過殭屍網路向特定目標傳送大量的請求,使目標伺服器無法正常工作,從而導致服務中斷或不可用。此外,殭屍網路也可以被用於傳送垃圾郵件、進行網路釣魚和其他惡意活動。

2.4.3蜜罐主機(IP地址:172.16.134.191)與哪些IRC伺服器進行了通訊?

  在kali虛擬機器上開啟資料來源botnet_pcap_file.dat,選擇選單欄中統計功能,開啟Destination and Ports介面。輸入篩選條件ip.src == 172.16.134.191 && tcp.dstport == 6667,可檢視結果。即共有五臺伺服器參與了通訊,IP地址為66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172、209.126.161.29。

2.4.4在這段觀察期間,多少不同的主機訪問了以209.196.44.172為伺服器的殭屍網路?

  在命令列輸入指令tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667',對資料包進行篩選分流。所生成的結果儲存與report.xml檔案中。

  輸入該命令即可獲得訪問以209.196.44.172為伺服器的殭屍網路的主機數。
cat 209.196.044.172.06667-172.016.134.191.01152 | grep --text "^: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: 這部分命令嘗試從指定的 IP 地址和埠範圍讀取資料流。
 grep --text "^:irc5.aol.com 353": 接著使用 grep 命令來篩選出包含特定模式 ^:irc5.aol.com 353 的行,這表示是 IRC 伺服器傳送的頻道資訊。
 sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]
x 😕/g": 使用 sed 命令來替換行中的特定模式,這樣是為了提取有用資訊或過濾掉不必要的內容。
 tr ' ' '\n' | tr -d "\15": 使用 tr 命令將空格轉換為換行符,並刪除控制字元。
 grep -v "^$": 使用 grep 命令過濾掉空行。
 sort -u: 使用 sort 命令對結果進行排序並去重。
 wc -l: 最後使用 wc 命令統計行數,計算最終結果的數量。

  得到的結果是,共有3461個主機訪問過伺服器。

2.4.5哪些IP地址被用於攻擊蜜罐主機?

  輸入下述指令,使用tcpdump指令查詢與蜜罐主機進行通訊的IRC伺服器。
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 > ipaddr.txt;wc -l ipaddr.txt

對於上述命令的解釋:
tcpdump:tcpdump是一個開源的網路資料包分析工具,可以在Linux和其他類Unix系統上執行。它可以捕獲網路介面上的資料包,並將其顯示或儲存下來,使用者可以使用tcpdump來檢視網路流量、分析網路問題、除錯網路應用程式等。
-n: 該選項令 tcpdump 在輸出時不要將網路地址轉換為主機名。
-nn: 該選項令 tcpdump 在輸出時不要將埠號轉換為服務名稱。
-r botnet_pcap_file.dat: 使用 -r 選項指定要讀取的資料包檔案為 botnet_pcap_file.dat
dst host 172.16.134.191: 這是過濾器規則,指定只輸出目標主機地址為 172.16.134.191 的資料包。
awk -F " " '{print $3}': 使用 awk 工具,以空格為分隔符,提取每行的第三列,即 IP 地址。
cut -d '.' -f 1-4: 使用 cut 工具,以 . 為分隔符,僅保留 IP 地址的前四個欄位(即前三個點分十進位制的部分)。
sort: 對提取出的 IP 地址進行排序。
uniq: 去除重複的 IP 地址。
more: 分頁顯示結果。
> ipaddr.txt: 將結果輸出到名為 ipaddr.txt 的檔案中。
wc -l ipaddr.txt: 使用 wc 命令統計 ipaddr.txt 檔案中的行數,即統計提取出的唯一 IP 地址數量。
  開啟ipaddr.txt,可以看到所有攻擊蜜罐主機的IP地址,共165個。

2.4.6攻擊者嘗試攻擊了哪些安全漏洞?

  繼續使用tcpdump工具,檢視攻擊者掃描了哪些TCP和UDP埠,且這些埠是開放的、響應的。
  命令如下:
  ·對TCP進行篩選: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
  ·對UDP進行篩選: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

  結果如圖所示,tcp有135、139、25、445、4899、80六個埠,udp有137埠。

2.4.7哪些攻擊成功了?如何成功的?

  接下來,對以上各個埠進行Wireshark抓包分析。
  1)135埠

  攻擊者僅測試了135埠的開放情況。
  2)139埠

  可以看到沒有異常資料交流。
  3)25埠

  同135埠,攻擊者僅透過TCP三次握手測試了25埠的開放情況。
  4)445埠

  在該埠的資料流中,我發現了一些端倪。
  首先,該埠出現了SVCCTL協議的通訊。svcctl漏洞是一個安全漏洞,允許匿名使用者連線到Windows服務控制管理器(SCM),進而可以列舉已安裝或正在執行的服務。攻擊者可以利用這個漏洞來匿名地啟動或停止Windows服務,具體的操作取決於服務的安全描述符(Security Descriptor)。這種漏洞會導致安全性問題和系統穩定性問題。
  其次,我觀察到了psexec.exe的執行。攻擊者透過445埠向蜜罐主機傳送含PSEXESVC.EXE的資料包,且將PSEXESVC.EXE地址改到系統目錄下,最後利用SVCCTL漏洞獲取目標主機。下圖為蜜罐主機發往攻擊主機的資料包。

  5)80埠

  在80埠的資料包中出現了蠕蟲攻擊的欄位。

3.問題及解決方案

  • 問題1:在vmware安裝Windows xp系統後,建立共享資料夾無法對映到檔案管理器中
  • 問題1解決方案:在Windows xp中安裝vmtools
  • 問題2:分析crackme2.exe後,要驗證時,由於我的電腦中命令列執行檔案要輸入.\才能執行,此時命令列第一個引數就改變了,無法得出正確結果
  • 問題2解決方案:借用同學電腦,ta的電腦命令列執行檔案直接輸檔名即可

4.學習感悟、思考等

各種工具如IDA pro、wireshark確實很強大,這讓我們進行網路攻防的時候更加方便快捷。這次實驗與以往不同,以往我們做的更多時攻擊,這次我們更多的是在做分析和防禦。防禦確實比攻擊難得多,就像分析兩個crackme檔案一樣,是一個解謎遊戲,它很複雜,需要你去找到各種蛛絲馬跡。同時我也意識到,魔高一尺道高一丈,我們要加強學習,把攻擊者抵擋在外。

相關文章