1. 程式人生 > 其它 >20212813 2021-2022-2 《網路攻防實踐》實踐八報告

20212813 2021-2022-2 《網路攻防實踐》實踐八報告

一、實踐內容

本次實踐的內容為惡意程式碼分析,為順利完成本次實踐,需要了解的知識包括:對於惡意程式碼的基本瞭解和分類以及惡意程式碼分析方法。利用惡意程式碼技術,攻擊者能夠將系統攻擊過程進行自動化與規模化,從而在更短的時間內對更多的網路使用者構成危害。正因為如此,網際網路使用者或許可能感受不到網路協議攻擊與濫用,也可能不用擔心伺服器遭遇滲透入侵,但卻不得不面對惡意程式碼所帶來的安全威脅與困擾。

1、惡意程式碼的定義與分類

  • 計算機病毒:一種能夠自我複製的程式碼,通過嵌入其他程式進行感染,需要人工干預傳播
    
  • 蠕蟲:與計算機病毒相比,不需要嵌入其他宿主程式中,可以自主執行
    
  • 惡意移動程式碼:可以自動從遠端主機下載並在本地執行的輕量級程式,常在web端實現
    
  • 後門:可以繞開正常的安全控制機制,為攻擊者提供訪問的程式碼
    
  • 特洛伊木馬:偽裝成有用軟體,但是內含惡意目標的惡意程式碼
    
  • 殭屍網路:使用殭屍程式構建的執行一對多命令的攻擊網路。
    
  • 核心套件:用以獲取並保持最高控制權的一類惡意程式碼。
    

2、惡意程式碼分析方法

惡意程式碼分析技術主要問題:

  • 不能事先知道惡意程式碼的目的是什麼
    
  • 惡意程式碼具有惡意的攻擊目的
    
  • 惡意程式碼在絕大多數時候不會具有原始碼
    
  • 惡意程式碼會引入大量的對抗分析技術
    

惡意程式碼靜態分析技術

  • 反病毒掃描:通過匹配現有的已知的病毒進行判斷病毒的種類、家族和變種資訊。
    
  • 檔案格式識別:獲得惡意軟體執行的平臺等資訊
    
  • 字串提取:獲取惡意程式碼例項名、幫助或命令列選項、使用者會話、後門口令、相關URL、E-mail資訊和包含庫檔案和函式呼叫。
    
  • 二進位制結構分析:獲取程式的頭部摘要資訊、目標檔案執行架構、重定位入口、符號表入口、不同的程式碼段、編譯程式碼時使用的程式等。
    
  • 反彙編與反編譯:將二進位制程式,轉化成彙編程式碼和高階語言程式碼。
    
  • 程式碼結構與邏輯分析:獲取函式呼叫關係圖和程式控制流圖。
    
  • 加殼識別與程式碼脫殼:對程式碼進行加密、多樣性、多型和變形的機制。
    

二、實踐過程

(一)動手實踐任務一

對提供的rada惡意程式碼樣本,進行檔案型別識別,脫殼與字串提取,以獲得rada惡意程式碼的編寫作者,具體操作如下:

(1)使用檔案格式和型別識別工具,給出rada惡意程式碼樣本的檔案格式、執行平臺和加殼工具;
(2)使用超級巡警脫殼機等脫殼軟體,對rada惡意程式碼樣本進行脫殼處理;
(3)使用字串提取工具,對脫殼後的rada惡意程式碼樣本進行分析,從中發現rada惡意程式碼的編寫作者是誰?

1、檔案格式和型別識別

對於檔案格式和型別識別,我們可以使用file命令獲取。file命令可以用來檢視檔案資訊或型別,WinXPattacker上可以使用該命令。在命令提示符下輸入file rada.exe,可以看到Rada.exe為一個32位Windows的可執行檔案,且有GUI圖形介面:

2、脫殼處理

直接使用WinXPattacker上已有的超級巡警脫殼機工具對rada.exe進行脫殼處理,生成rada_unpacked.exe檔案:

3、尋找編寫作者

在WinXPattacker使用IDA工具開啟脫殼處理後的rada_unpacked.exe檔案,進入Strings頁面,在String列右擊開啟Setup,勾選Unicode編碼:


之後便可以在這一列找到Authors:Raul Siles & David Perez,2004,即編寫作者。

(二)動手實踐任務二

任務:在WinXP Attacker虛擬機器中使用IDA Pro靜態或動態分析crackme1.exe和crackme2.exe,尋找特定的輸入,使其能夠輸出成功資訊。

1、crackme1.exe分析

對於crackme1.exe的分析使用的是Ollydbg工具,這也是反彙編工作的常用工具。首先在沒有引數的情況下執行一下程式,結果如下,只顯示了一行字串:

這裡我們點選除錯->引數,可以為程式設定執行引數:

重新執行程式之後我們找到main函式入口(使用Ollydbg找到main函式入口的方式可以參考我的這篇部落格,工具的百度雲盤在這,提取碼為jbkv,以管理身份開啟吾愛破解.exe即可),往下翻一翻可以看到這四行不同的字串,因此可以推測這一部分就有我們所需要的資訊:

00401280處設定斷點(F2),看到call函式我們可以推測,呼叫的兩個函式是用來處理輸入的引數的,下面的cmp [arg.1],0x2用來判斷引數的個數是否為兩個,之後是一個跳轉je Xcrackme1.004012D2,若不為則往下執行輸出列印字串I think……

若為兩個引數則跳轉到地址004012D2,對第二個引數和字串I know the secret進行比較:


之後通過test eax,eax上下的程式碼段進行判斷並跳轉,字串正確則輸出You know……,否則輸出Pardon?……

執行測試結果如下圖所示:

2、crackme2.exe分析

對於crackme2.exe分析使用的是要求的IDA工具,該工具在WinXPattacker可以找到。crackme1.exe採用的是動態分析,通過程式執行過程來看輸入輸出對應關係,crackme2.exe的分析中,我們使用IDA開啟該程式,然後開啟View->Graphs->Flow chart,可以檢視該程式的流程圖,靜態分析程式的執行步驟:

可以看到,程式首先檢查傳入的引數個數是否為2個,若不是則輸出列印I think……,若是則判斷第一個引數是否為crackmeplease.exe,若不是則輸出列印字串I have an ……,若是則對第二個採納數進行判斷:

若第二個引數不為字串I know the secret,則輸出列印Pardon?……,若是則輸出列印We have a little……

程式執行測試結果如下:

(三)分析實踐任務一

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

1、分析

該檔案的md5摘要如下圖所示:

首先開啟wireshark、Process Monitor對rada.exe執行進行監視,能夠看到rada.exe在C盤中添加了相關檔案,新增的結果是success,在C盤下也能夠找到這些檔案:

接下來使用脫殼工具對rada.exe進行脫殼處理:

使用IDA開啟脫殼後的程式,在string視窗顯示二進位制檔案中能夠搜尋到的字串,步驟同動手實踐任務一一樣:

在這些找到的字串中,能夠看到以下這些眼熟的字串,包括一個IP地址、C盤資料夾路徑等:

通過這個IP地址,在程式碼中找到引用的地方,結合參考資料和分析,可以推測該程式通過http訪問10.10.10.10/Rada下的RaDa_commands的網頁,在靶機上建立一個資料夾“C:/RaDa/tmp”來儲存下載的檔案:

通過Flow chart檢視,可以看到該程式判斷了三個私有網段:192.168.、172.16.、10.,也就是說確保伺服器在私有網段中,然後到伺服器去取命令檔案:


下面則是程式的一些具體引數及其功能,例如getputName等:

2、回答

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

該檔案的md5摘要為caaa6985a43225a0b3add54f44a0d4c7

(2)找出並解釋這個二進位制檔案的目的;

通過上邊的分析,我們可以知道這個程式可以通過網路獲取指令,並執行,不具備自主傳播模組,由此可知,這個應該是後門程式或殭屍網路程式。

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

初次安裝的時候會進行初始化的相關操作,添加註冊列表、移動檔案位置至C盤,建立網路連線接收指令。
持續執行階段:維持與伺服器的網路連線,解析網路指令,執行網路指令,等待一段時間繼續執行。

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

採用了UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo的加殼方式,直接被一鍵脫殼。

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

首先此二進位制程式不具有自主傳播模組,所以它不屬於病毒和蠕蟲;此程式未進行偽裝,所以也不是木馬;若攻擊者僅僅用此程式進行遠端控制,那麼就是後門程式;若再次基礎上加入殭屍網路,則就是殭屍程式。

(6)給出過去已有的具有相似功能的其他工具;

木馬Bobax,特洛伊木馬Setiri、GatSla

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

如上文所述,可以通過--authors引數獲取相關作者資訊Authors: Raul Siles & David Perez, 2004。使用IDA中的string檢視檢視,或者在非vmware環境下執行--authors引數

(四)分析實踐任務二

任務:分析的資料來源是用Snort工具收集的蜜罐主機5天的網路資料來源,並通過編輯去除了一些不相關的流量並將其組合到了單獨的一個二進位制網路日誌檔案中,同時IP地址和其他特定敏感資訊都已經被混淆以隱藏蜜罐主機的實際身份和位置。

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

  • IRC是Internet Relay Chat 的英文縮寫,中文一般稱為網際網路中繼聊天,相比於ICQ來說,它更具人性化,而且是即時式的聊天,更接近真實的聊天情景,它的特點是速度快。

  • 所有使用者可以在一個被稱為"Channel"(頻道)的地方就某一話題進行交談或密談。每個IRC的使用者都有一個Nickname(暱稱),所有的溝通就在他們所在的Channel內以不同的Nickname進行交談。申請加入的時候要傳送口令、暱稱和使用者資訊:USER 、PASS 、NICK ;對於曾經註冊過的靶機,直接通過JOIN指令加入對應的頻道,指令如下JOIN

  • IRC通常使用6660 - 6669埠進行監聽,其中6667是明文埠,此外額外佔用一個埠6697進行SSL加密傳輸;由於此處的埠號並不唯一,這就導致難以通過埠號進行檢測,這裡使用協議過濾的相關內容,對NICK、JOIN等IRC指令進行過濾。

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

  • 殭屍網路是指採用一種或多種傳播手段,將大量主機感染bot程式(殭屍程式)病毒,從而在控制者和被感染主機之間所形成的一個可一對多控制的網路。

  • 主要用於:攻擊者可以向自己控制的所有bots傳送指令,讓它們在特定的時間同時開始連續訪問特定的網路目標,從而達到DDos的目的;利用Botnet傳送大量的垃圾郵件,而且傳送者可以很好地隱藏自身的IP資訊;才外還有監聽使用者敏感資訊、記錄鍵盤輸入資訊、擴散新的惡意軟體和偽造點選量,騙取獎金或操控網上投票和遊戲等。

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

通過了解IRC我們可以知道,通訊埠為6660 - 6669,經過依次過濾,使用的埠為6667,過濾條件為ip.addr == 172.16.134.191&&tcp.port == 6667,可以得到的IRC伺服器地址為:
66.33.65.5863.241.174.144217.199.175.10209.196.44.172209.126.161.29

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

這裡分成兩部分進行統計,首先我們先獲取209.196.44.172與172.016.134.191之間的所有的IRC資料包。這裡使用命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",產生了三個檔案:

report.xml檔案裡提到了其他兩個檔案的相關資訊,可以看到如下圖的內容,包括上述雙方的ip地址,埠,mac地址,通訊時間等等:

接下來檢視209.196.044.172.06667-172.016.134.191.01152檔案,在當前主機進入到IRC的頻道之後,頻道會將當前頻道中所有的主機的資訊都發送過來,我們可以從其中的資料包中計算當前頻道共有多少主機,這裡我們使用管道命令進行篩選,得到3461個(grep搜尋獲取暱稱輸出行;sed:去除字首;tr:將空格轉換為換行;tr -d刪除\r;grep -v:去除空行;sort -u排序並去除重複;wc -l:輸出行數),共有3461臺主機:

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

利用tcpdump篩選可能被用於攻擊蜜罐主機的ip輸出儲存到20212813zzx_result.txt,命令為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 > 20212813zzx_result.txt;wc -l 20212813zzx_result.txt

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

利用tcpdump篩選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 | uniqtcpdump -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:

得到埠後,使用wireshark的analayse的協議分級功能,可以檢視嗅探得到資料包的協議分級,如下圖所示,下一步排查的重點協議為TCP:IRC、HTTP(80)、NETBIOS session(SMB)(139);UDP:NETBIOS(137)、RPC(1434)

使用wireshark依次過濾篩選以上重點埠進行分析:

(1)TCP埠80,過濾條件ip.dst==172.16.134.191 && tcp.dstport==80 && http

能看出所有關於80埠的相關攻擊的資訊,包括null.ida為標識的WEB-IIS ISAPI、dafault.ida為標識的code red,發現這是一個紅色程式碼蠕蟲攻擊:

(2)TCP埠445,過濾條件ip.dst==172.16.134.191 && tcp.dstport==445

從抓包結果中分析可執行檔案:PSEXESVC.EXE。當客戶端執行該可執行檔案後,攻擊方就可以遠端控制執行檔案的主機,然後獲取許可權:

還有針對IPC$ \samr \svcctl \r_server.exe admdll.dll raddrv.dll進行的普通查點、口令猜測、MSRPC-SVCCTL服務列舉漏洞等攻擊:

(3)TCP埠139,過濾條件ip.dst==172.16.134.191 && tcp.dstport==139

有NBSS包和SMB包以及TCP包,若干個個不同的IP訪問了這個埠,分別是81.50.177.167、80.181.116.202、68.154.11.82、68.152.53.138、210.214.49.227等,能夠發現很多時候他們的攻擊指令是相同的,即使攻擊機的IP地址不同,可以確定的是,他們都沒有攻擊成功:

(4)UDP埠1434,過濾條件ip.dst==172.16.134.191 && udp.dstport==1434

可以看到這是一串遠端呼叫協議的相關資料包,查閱相關資料後,知道這是名為SQL Slammer的蠕蟲病毒:

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

總結以上分析,能夠看到針對TCP445埠的PSEXESVC攻擊-(IP:61.111.101.78)是成功的,其他均失敗。

三、學習中遇到的問題及解決

  • 問題1:分析實踐任務不知從哪入手
  • 問題1解決方案:參考資料和部落格後按照前人的步驟進行分析。

四、實踐總結

本次動手實踐和分析實踐都有一定難度,尤其是分析實踐,需要找準分析思路,使用合適的工具並查閱相關的資料,對個人能力的提升有很大幫助。