20199317 2019-2020-2 《網絡攻防實踐》第9周作業
- 2020 年 4 月 29 日
- 筆記
20199317 2019-2020-2 《網絡攻防實踐》第9周作業
1.實踐內容
1.1 惡意代碼基礎知識
1.1.1 惡意代碼定義與分類
-
惡意代碼定義:惡意代碼(Malware,或Malicious Code)指的是使計算機按照攻擊者的意圖執行以達到惡意目標的指令集。
惡意代碼是一組指令集,實現方式可以是二進制執行文件、腳本語言代碼、宏代碼,或是寄生在其他代碼或啟動扇區中的一段指令流。 -
惡意代碼類型:
1.1.2 計算機病毒
-
計算機病毒的定義:計算機病毒是指編製或者在計算機程序中插入的,破壞計算機功能或數據、影響計算機使用,並能自我複製的一組自我複製的一組計算機指令或者程序代碼。
-
計算機病毒的基本特性:感染性(最基本特性)、潛伏性、可觸發性、破壞性、衍生性。
-
計算機病毒的感染及引導機制:計算機病毒潛在的感染目標可分為可執行文件、引導扇區和支持宏指令的數據文件三大類
(1)可執行文件
以可執行文件作為宿主程序,當其被用戶運行時,依附在上面的病毒就可以被激活取得控制權。最普遍的三種對可執行文件的感染方式包括前綴感染機制、後綴感染機制和插入感染機制,其感染機制如下:
(2)引導扇區
通過感染引導區上的引導記錄,病毒就可以在系統啟動時先於操作系統便截取系統控制權。
(3)支持宏指令的數據文件:宏病毒感染數據文件的方式為將自身以宏指令的方式複製到數據文件中,因此當被感染的數據文件被應用軟件打開時,將自動執行宏病毒體,完成病毒的引導。 -
計算機病毒的傳播機制:病毒需要藉助人類的幫助從一台計算機傳播到另一台計算機,傳播渠道包括移動存儲、電子郵件及下載、共享目錄等。
1.1.3 網絡蠕蟲
-
網絡蠕蟲定義:網絡蠕蟲是一種可以自我複製的代碼,並且通過網絡傳播,通常無須人為干預就能傳播。
-
計算機病毒與網絡蠕蟲的特性對比:
-
蠕蟲的內部組成結構:
(1)「彈頭」:獲取目標系統訪問權,最常用的技術有:緩衝區溢出攻擊,文件共享攻擊,利用電子郵件傳播,利用其他普遍的錯誤配置。
(2)傳播引擎:完成蠕蟲樣本的傳播
(3)目標選擇算法和掃描引擎:目標選擇算法尋找新的攻擊目標,利用掃描引擎掃描掃描每一個由目標選擇算法確定的地址,確定是否可以被攻擊。
(4)有效載荷:即附加的攻擊代碼,為攻擊者在目標系統上執行一些特殊目的的操作。有效載荷可為空,也包括如下:植入後門,安裝分佈式拒絕服務攻擊代理,組件殭屍網絡,執行一個複雜的計算等。
1.1.4 後門與木馬
-
後門:後門是允許攻擊者繞過系統常規安全控制機制的程序,能夠按照攻擊者自己的意圖提供訪問通道。後門工具往往都利用了系統的自啟動功能,將自身加入到系統重啟機制中。
-
特洛伊木馬:簡稱木馬,是指一類看起來具有某個有用或善意目的,但實際掩蓋着一些隱藏惡意功能的程序。木馬程序可以用於:欺騙用戶或系統管理員安裝特洛伊木馬程序,這樣木馬程序就通過毫無戒備的用戶進入到計算機系統中;隱藏在計算機的正常程序中,將自己偽裝成看起來屬於該系統,使得用戶和管理員不會覺察到它的存在,通常與後門工具結合,成為木馬後門。
1.1.5 殭屍程序與殭屍網絡
-
殭屍網絡的定義:指攻擊者出於惡意目的,傳播殭屍程序控制大量主機,並通過一對多的命令與控制信道所組成的網絡。殭屍網絡區別於其他攻擊方式的基本特性是使用一對多的命令與控制機制,另外,殭屍網絡還具有惡意性和網絡傳播性。
-
殭屍程序的功能組成結構:
-
殭屍程序的命令與控制機制:基於IRC協議的命令與控制機制、基於HTTP協議的命令與控制機制和基於P2P協議的命令與控制機制這三大類。
1.1.6 Rootkit
-
Rootkit的定義:一類特洛伊木馬後門工具,通過修改現有的操作系統軟件,使攻擊者獲得訪問權並隱藏在計算機中。
-
Rootkit的特性:惡意的Rootkit程序將自身偽裝成恰當且普通的程序,這種偽裝和隱藏機制正是特洛伊木馬的定義特性;Rootkit還作為後門行使其職能,各種Rootkit通過後門口令、遠程Shell或其他可能的後門途徑,為攻擊者提供繞過正常機制的後門訪問通道,這正是後門工具的定義特性;具備替換或修改現有操作系統軟件進行隱藏的特性,這才是Rootkit的定義特性。
-
根據操作系統的分層,Rootkit可以運行在兩個不同的層次上,即用戶模式和內核模式。
用戶模式Rootkit修改的是操作系統用戶態中用戶和管理員所使用的一些內建程序和庫文件,內核模式Rootkit則直接攻擊操作系統最核心的內核,修改內核從而隱藏自身。
1.2 惡意代碼分析方法
1.2.1 惡意代碼分析技術概述
- 惡意代碼分析的關鍵點在於構造一個受控的分析環境,在通用代碼分析技術中一系列針對二進制程序的靜態和動態分析方法基礎上,通過進一步的技術手段來應對惡意代碼的對抗分析機制,推測出惡意代碼的目的,並確定其行為特徵。
1.2.2 惡意代碼分析環境
- 惡意代碼分析環境有:惡意代碼發燒友的分析環境,基於虛擬化構建惡意代碼分析環境,用於研究的惡意代碼自動分析環境。
1.2.3 惡意代碼靜態分析技術
-
利用靜態分析方法,能夠對惡意代碼的特性和目的有一個大體的了解,甚至能夠識別出惡意代碼的各個組成部分;而利用動態分析,實際上是激活一個受控分析實驗環境中的代碼,當一個代碼在實際系統中運行時,我們能夠更加迅速地了解其行為。
-
惡意代碼靜態分析的主要技術手段:
1.2.4 惡意代碼動態分析技術
-
在通過一些靜態分析方法查看與分析了惡意代碼示例,接下來將使用動態分析技術,將這些惡意代碼激活,以觀察它們是如何活動的。在惡意代碼分析的過程中,我們的惡意代碼分析實驗環境一定要與業務網絡和互聯網完全斷開,並在分析完之後儘快恢復惡意代碼運行平台,以清除惡意代碼所遺留的文件和系統影響。
-
在惡意代碼動態分析時,需要使用一些監控軟件和觀察惡意代碼的運行情況,常用惡意代碼動態分析監控技術和工具為:
-
惡意代碼動態分析的主要技術手段有:
2.實踐過程
實踐一:惡意代碼文件類型識別、脫殼與字符串提取
對提供的rada惡意代碼樣本,進行文件類型識別,脫殼與字符串提取,以獲得rada惡意代碼的編寫作者,具體操作如下。
(1)使用文件格式和類型識別工具,給出rada惡意代碼樣本的文件格式、運行平台和加殼工具。
(2)使用超級巡警脫殼機等脫殼軟件,對rada惡意代碼樣本進行脫殼處理。
(3)使用字符串提取工具,對脫殼後的rada惡意代碼樣本進行分析,從中發現rada惡意代碼的編寫作者是誰?
實踐過程
(1)在windowsXP下的命令行中使用file
命令對rada惡意代碼進行文件格式的識別,如下:
可以看到,rada的文件類型為32位操作系統下的PE文件,有圖形化界面。
使用PEiD對rada進行加殼識別,PEiD是用來查看Windows PE文件基本信息的工具
可以看到文件的入口點、文件偏移、EP段及加殼類型(UPX殼)
(2)使用strings RaDa.exe
命令查看脫殼之前的rada.exe中的可打印字符串
可以看到基本都是亂碼,而原因是該文件被加了殼
使用自動化工具——超級巡警之虛擬機自動脫殼器對該文件脫殼,如下:
然後使用strings RaDa.exe
命令查看脫殼之後的rada.exe中的可打印字符串
可以看到,產生了大量函數調用名及其他有用字符串。
(3)運行rada程序,並使用軟件process explorer
進行監控,查看程序屬性,發現作者名字Raul siles & David Perze
,寫於2004年。
實踐二:分析Crackme程序
實踐挑戰:使用IDA Pro靜態或動態分析crackmel.exe 與crackme2.exe,尋找特定的輸入,使其能夠輸出成功信息。
實踐過程
(1)在windowsXP下的cmd中直接運行crackme1.exe,嘗試輸入參數,如下:
可以確定該程序僅帶有一個參數。
(2)使用IDA pro工具打開crackme1.exe
首先查看程序中的明文字符串,發現了兩個在(1)中測試時沒有出現過的字符串:I know the secret
、You know how to speak to programs,Mr Reverse Engineer
。猜測前者為密碼,後者為成功的提示語。
驗證猜想,如下:
猜測驗證成功。
(3)接下來進行分析。首先看函數調用圖,view——graphs——function calls
。
可以看到strcmp
,還有printf
和fprintf
,即sub_401280為關鍵代碼。
重點分析sub_401280,找到sub_401280函數的流程圖,如下:
可以看到,該函數首先判斷參數個數是否為2,若參數個數不為2,也就是我們前面嘗試直接運行程序時,在crackme1.exe及crackme1.exe 1 2時都輸出I think you are missing something
;若參數個數為2,則將第二個參數與字符串I know the secret
作比較,正確則輸出You know how to programs
。
(4)在windowsXP下的cmd中直接運行crackme2.exe,嘗試輸入參數,如下:
可以確定該程序僅帶有一個參數。
(5)使用IDA pro工具打開crackme2.exe
首先查看程序中的明文字符串,猜測I know the secret
為密碼,crackmeplease.exe功能未知。
(6)進入分析階段。首先看函數調用圖發現關鍵函數:
發現關鍵函數還是sub_401280。
分析sub_401280,找到sub_401280函數的流程圖,如下:
可以看到,該函數首先判斷參數是否為2,若參數不為2,輸出I think you are missing something;
若參數為2,則進行crackmeplease.exe的比較,猜測密碼為crackmeplease.exe,於是
失敗。。。
試着觀察 crackmeplease.exe 程序段和 I know the secret 程序段,發現I know the secret 程序段多了一條指令add eax,4
,如果I know the secret是第一個參數,那麼減就是第0個參數,即程序名
驗證猜想,把程序名改為crackmeplease.exe試驗一下,如下:
通過了第二層判斷。
接着驗證crackmeplease.exe "I know the secret"
驗證成功。
實踐三:分析一個自製惡意代碼樣本rada,並撰寫分析報告
待分析二進制文件位置: rada.zip, 警告這個二進制文件是一個惡意代碼,因此必須採用一些預防措施來保證業務系統不被感染,建議在一個封閉受控的系統或網絡中理這個未知的實驗品。
回答問題:
- 提供對這個二進制文件的摘要,包括可以幫助識別同一樣本的基本信息。
- 找出並解釋這個二進制文件的目的。
- 識別並說明這個二進制文件所具有的不同特性。
- 識別並解釋這個二進制文件中所採用的防止被分析或逆向工程的技術。
- 對這個惡意代碼樣本進行分類(病毒、蠕蟲等),並給出你的理由。
- 給出過去已有的具有相似功能的其他工具。
獎勵問題: - 可能調查出這個二進制文件的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?
實踐過程
(1)使用md5sum
命令查看摘要信息, md5摘要值為caaa6985a43225a0b3add54f44a0d4c7
(2)打開process explorer軟件進行監測,啟動惡意軟件rada。右鍵查看其屬性,可以發現rada啟動後有如下行為:
1)通過HTTP協議請求10.10.10.10\RaDa\RaDa_commands.html
2)將文件RaDa.exe複製到了C:\RaDa\bin目錄下,並且新建了temp目錄。
3)修改註冊表,將rada設置為開機啟動。
依次按照「開始」——>「運行」——>輸入「regedit」——>回車打開註冊表編輯器
,然後依次打開HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
查看自啟動項
可以看到加入了RaDa: C:\RaDa\bin\RaDa.exe。
接着可以看到該程序對主機實行了DDOS拒絕服務攻擊。
總結:該惡意代碼將其自我複製到主機系統盤,並激活了自啟動,還試圖從一個HTML頁面獲取並解析命令,於是猜測這應該是一個後門程序。
繼續往下看,可以看到進行了對註冊表的讀寫和刪除操作
rada一直在後台運行,不會彈出任何窗口,它可以支持exe、put、get、screenshot、sleep等指令。
(3)對該文件脫殼之後,利用IDA Pro進行分析,首先就應該看字符串。在Type下篩選unicode類型
這一步重點分析VMware tools
雙擊字符串進行定位,找到其對應的函數sub_404FB0
。
接下來對函數sub_404FB0進行分析
可以看到,這個字符串被拷貝到變量dword_40C070,搜索這個變量對應的函數,找到是sub_40AAA0
查看函數sub_40AAA0流程圖
可以看到,這個函數首先進行網卡配置信息的查詢(Select * from win32_networkadapterconfi),然後確認dword_40C070
對應的字符是否存在,若存在,則判斷vmware tools是不是在註冊表裏面。
我們注意到當--authors
在我們的虛擬機上輸出的是Unknow argument,可是我們確實也能在明文字符串信息中找到作者的信息。這個時候我們觀察到--authors
參數對應的處理函數是sub_40B010,找到之後,我們打開Call Graph進行觀察,我們可以看到,這裡調用了sub_40AAA0
函數,也就是上面虛擬機對應的處理函數。然後我們發現,這裡的處理是如果是虛擬機就輸出Unknow argument
,如果不是,就輸出正確的作者信息。這種方式的採用是為防止被分析。
(4)從前邊的分析可以看出,這個樣本不具有傳播和感染的性質,也沒有將自己偽裝成有用的程序以欺騙用戶運行,所以也不屬於木馬,所以可能是後門程序
(5)與其相似的工具還有2004年發現的木馬Bobax,還有特洛伊木馬Setiri及其前輩GatSla。開發作者在實踐一已經給出。
實踐四: Windows 2000系統被攻陷並加入殭屍網絡
案例分析挑戰內容:
在2003年3月初,Azusa Pacific大學蜜網項目組部署了一一個未打任何補丁的Windows2000蜜罐主機,並且設置了一個空的管理員密碼。在運營的第一一個星期內,這台蜜罐主機就頻繁地被攻擊者和蠕蟲通過利用幾個不同的安全漏洞攻陷。在一次成功的攻擊之後,蜜罐主機加入到一個龐大的殭屍網絡中,在蜜罐主機運營期間,共發現了15164 個不同主機加入了這個殭屍網絡。這次案例分析的數據源是用Snort工具收集的該蜜罐主機5天的網絡流日誌,並通過編輯去除了一些不相關的流量並將其組合到了單獨的一個二進制網絡日誌文件中,同時IP地址和一些其他的特定敏感信息都已經被混淆以隱藏蜜罐主機的實際身份和位置。你的任務是分析這個日誌文件並回答以下給出的問題。
- IRC是什麼?當IRC客戶端申請加入一個IRC網絡時將發送哪個消息? IRC一般使用哪些TCP端口?
- 殭屍網絡是什麼?殭屍網絡通常用於什麼?
- 蜜罐主機(IP地址: 172.16.134.191) 與哪些IRC服務器進行了通信?
- 在這段觀察期間,多少不同的主機訪問了以209.196.44.172為服務器的殭屍網絡?
- 哪些IP地址被用於攻擊蜜罐主機?
- 攻擊者嘗試攻擊了哪些安全漏洞?
- 哪些攻擊成功了?是如何成功的?
實踐過程
(1)IRC,即互聯網中繼聊天,IRC協議基於客戶端——服務端模型,用戶運行IRC客戶端軟件連接到IRC服務器上,IRC服務器通過互相連接可構成龐大的IRC聊天網絡,並將用戶的消息通過聊天網絡發送到目標用戶或用戶群。
申請加入的時候要發送口令、昵稱和用戶信息:USER <username> <hostname> <servername> <realname>
、PASS <password>
、NICK <nickname>
。
明文傳輸時使用tcp 6667端口,ssl加密時用6697端口。
(2)殭屍網絡是指攻擊者出於惡意目的,傳播殭屍程序控制大量主機,並通過一對多的命令與控制信道所組成的網絡。殭屍網絡區別於其他攻擊方式的基本特性是使用一對多的命令與控制機制,另外,殭屍網絡還具有惡意性和網絡傳播性。
殭屍網絡通常用於拒絕服務攻擊、發送垃圾郵件、竊取秘密、濫用資源、殭屍網絡挖礦等
(3)使用Wireshark打開數據文件,因為IRC一般通過6667端口,於是設置過濾條件ip.src == 172.16.134.191 && tcp.dstport == 6667
。
篩選之後,我們可以找到五個IRC服務器,分別為:209.126.161.29
,66.33.65.58
,63.241.174.144
,217.199.175.10
,209.196.44.172
(4)使用命令tcpflow -r botnet_pcap_file 'host 209.196.44.172 and port 6667'
(讀取文件,篩選host和端口6667後進行分流)
執行完後,將獲得三個文件:172.016.134.191.01152-209.196.044.172.06667
、209.196.044.172.06667-172.016.134.191.01152
和report.xml
。
我們先看一下report.xml
這裡提到了172.016.134.191.01152-209.196.044.172.06667和209.196.044.172.06667-172.016.134.191.01152這兩個文件的相關信息,可以看到如下圖的內容,包括上述雙方的ip地址,端口,mac地址,通信時間
因為我們要找的是訪問 209.196.44.172的主機,故此處着重查看209.196.044.172.06667-172.016.134.191.01152文件,找到訪問209.196.44.172的主機數。相關指令有:
cat 209.196.044.172.06667-172.016.134.191.01152 | grep "^: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.輸出文件;
第二條grep搜索獲取昵稱輸出行;
第三條sed去除前綴,最後的g是全局的意思;
第四條tr將空格轉換為換行;
第五條tr -d刪除\r;
第六條grep -v就是NOT指令,去除空行;
第七條sort -u排序並去除重複;
最後一條wc -l輸出行數。
看到輸出,只統計出了5次結果。但正確結果應該是3457,不知道是為什麼。
(5)使用下面的指令查找端口並輸出到1.txt中
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | grep -v 'reply' | cut -d '.' -f 10 | cut -d ':' -f 1 | sort | uniq | more >1.txt; wc -l 1.txt
# 指令注釋
cut -d是指定字段的分隔符;
uniq命令用於檢查及刪除文本文件中重複出現的行列,一般與sort命令結合使用。
查找到148個被攻擊的端口
接下來找出所有的可能連接的主機的IP地址。輸入下面指令,這個指令的作用就是將連接IP地址輸出到2.txt中:
tcpdump -n -nn -r botnet_pcap_file 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
# 指令注釋
awk -F就是指定分隔符,可指定一個或多個,print後面做字符串的拼接。
總共有165個主機可能被用於入侵蜜罐。
(6)使用snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii
指令先查一下網絡流分佈情況。我們發現大部分都是TCP包,有一部分UDP包,所以我們首先應該篩選出響應的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端口。
可以看到TCP響應端口為135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)。
同樣的,利用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端口
可以看到能查到僅有137(netbios-ns)號端口響應。
接下來對上述端口進行分析,udp 137號端口是個在局域網中提供計算機的IP地址查詢服務,處於自動開放狀態,所以訪問這個端口肯定就是NetBIOS查點。
以tcp.port == 25 || tcp.port == 135
為過濾條件查看135號端口和25號端口
我們看到只是進行了連接,但是是沒有數據的交互的,所以這攻擊者可能是對這兩個端口進行了connect掃描。
接下來查看80端口,首先篩選tcp.dstport==80 && ip.dst == 172.16.134.191
。
可以看到,首先連接最多的就是24.197.194.106,他的行為就是不停的用腳本在攻擊IIS服務器的漏洞,從而獲取系統權限,正是因為用的腳本,所以才會有這麼多記錄。
第二個,是68.169.174.108訪問的80端口,屬於正常的HTTP訪問。最後還有一個192.130.71.66也是一個正常的訪問。
第三個,是210.22.204.101訪問的80端口,大量「C」表明攻擊者是想通過緩衝區溢出攻擊來獲得一個命令行。
第四個,是218.25.147.83訪問的80端口,大量「N」的出現,初步懷疑是緩衝區溢出攻擊。但是繼續往下看,你會看到c:\notworm,百度後發現是紅色代碼蠕蟲攻擊。
最後,查看80端口有沒有攻擊成功了,我們通過蜜罐主機80端口向外的流量進行分析,設置過濾條件tcp.srcport80 && ip.src 172.16.134.191 && http
發現蜜罐主機做的幾次回應均為一個iis服務器的默認頁面,所以80端口的這些攻擊均失敗。
接下來是TCP 139號端口
大部分都是連接的,但是很多空會話。同樣這個也沒有成功,這個應該是個SMB查點。
接下來分析TCP 445端口。
這個端口連接非常多,同時我們也能看到許多\samr, \srvsvc,查詢字符串後發現這是一個PSEXESVC.EXE字符串。
然後Wireshark中也能找到,是由61.111.101.78發起的,通過對這種字符串的搜索,發現這是一種Dv1dr32蠕蟲,這種蠕蟲正是通過IRC進行通信。
接下來找出口流量,發現每個IP地址連入的連接都有響應的回應,並且返回信息中含有\PIPE\ntsvcs,通過搜索可知,這是一個遠程調用,所以攻擊者肯定是獲得了權限,因此這個攻擊成功的。
最後分析TCP 4899端口。
我們發現,只有一個IP訪問過,即210.22.204.101。
查詢可得4899端口是一個遠程控制軟件radmin服務端監聽端口。
3.學習中遇到的問題及解決
- 問題1:實踐三中,做到Type下篩選unicode類型時,不知道怎麼修改。
- 問題1解決方案:選擇字符串界面的type字段,右鍵選擇Setup,在出現的Setup strings window 界面選擇Unicode
4.實踐總結
這次實踐的難度太大了,雖然做完了實踐但還是有很多地方不理解。。。
參考資料
- [《網絡攻防技術與實踐》(諸葛建偉著)]
- [老師的給的指導視頻]
- [ 多位同學的博客 ]