1. 程式人生 > 其它 >實踐八 惡意程式碼分析實踐

實踐八 惡意程式碼分析實踐

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

1.實踐內容

1.1淺談惡意程式碼檢測分析

  • 惡意程式碼分類
           現有的惡意程式碼變種,在實現上可大致分為兩類:一類是基於基礎技術的共用,惡意程式碼開發人員通過重用基礎模組實現變種;一類是惡意程式碼專門針對現有防範技術而設計開發的混淆技術。
           混淆技術按實現機理,可分為兩類:一類是干擾反彙編的混淆,使反彙編無法得到正確結果,從而阻礙進一步分析;另一類是指令/控制流混淆,此類混淆技術通常採用垃圾程式碼插入、暫存器重分配、等價指令替換及程式碼變換等方式,改變程式碼的語法特徵,隱藏其內部邏輯關係。
           從混淆技術產生作用的層面,可將其分為程式碼層混淆和行為層混淆兩類:程式碼層混淆通過變形、壓縮等方式,模糊、隱藏或改變原有程式碼特徵,從而使基於程式碼特徵的檢測失效;行為層混淆則通過垃圾行為插入、執行順序變換及等價行為替換等方式,改變行為序列或執行流程,使基於行為序列或流程圖的檢測失效。
  • 惡意程式碼檢測
           惡意程式碼檢測方法,可以分為基於啟發式(heuristic-based)的檢測和基於特徵(signature-based)的檢測兩大類。
           基於啟發式的檢測方法,通過比較系統上層資訊和取自核心的系統狀態來識別隱藏的檔案、程序及登錄檔資訊.還有一些研究工作通過監控系統特定資源來識別惡意程式碼。根據預先設定的規則判斷惡意程式碼存在的可能性,其優勢在於可檢測新惡意程式碼樣本;但其規則的生成依賴於分析人員的經驗,在應用中易引發高誤報及漏報率,因此在實際檢測系統中應用較少。基於特徵的檢測方法,則根據由惡意程式碼中提取的特徵進行檢測,與基於啟發式的檢測方法相比嗎,具有效率高、誤報率低等優點,因此被廣泛應用於惡意程式碼檢測工具之中,是目前惡意程式碼檢測比較常見的方法。
           傳統的特徵檢測,大多采用基於程式碼特徵的檢測方法,該方法從已有惡意程式碼樣本中提取程式碼語法(syntactic)特徵用於檢測,此類特徵通常精確匹配單一樣本,惡意程式碼使用簡單混淆方法即可繞過相應檢測。並且,不同變種需使用不同特徵進行描述,特徵庫資料量往往十分龐大,且在出現變種時需及時、不斷地更新。目前很多商用防毒軟體就是採取的此類方法。
           此後,提出了基於行為特徵的檢測方法,通過提取惡意程式碼執行的行為作為特徵進行檢測。此方法著眼於惡意程式碼的實際行為,因此可避免僅針對程式碼的混淆方法的影響,不過無法抵禦等價行為替換等行為層混淆方法的干擾。
           基於語義的檢測方法的提出,為更好地對抗混淆技術、檢測變種提供了可能。通過分析當前的混淆技術原理可以發現,混淆技術具有改變程式碼語法特徵,但是,其仍保留行為語義的特點。利用這一特點,通過抽象語義特徵來實施檢測,可以提高對惡意程式碼變種的檢測能力。
  • 惡意程式碼分析
           惡意程式碼分析,一般分為靜態分析和動態分析兩種。
           靜態分析會首先對可執行程式進行反彙編,在此基礎上,分析並提取程式碼的特徵資訊。可以看出,靜態分析本身並不需要實際執行程式碼,因此,不會對系統產生實質上的危害。但是,由於靜態所分析的程式碼不一定是最終執行的程式碼,可能消耗大量時間於無用程式碼。於此同時,靜態分析對反彙編技術的依賴也導致了其侷限性。首先,惡意程式碼可使用各種混淆技術阻礙反彙編分析,主要有重排、加殼、垃圾程式碼插入等方法,有很多工作都試圖將混淆程式碼恢復為混淆前的程式碼,來提高檢測能力。但很多時候不能解決暫存器重分配、等價替換等其他混淆手段。
           動態分析,則是在程式碼執行過程中進行分析,直接執行所分析的程式碼,但動態分析一次執行過程只能獲取單一路徑行為,而一些惡意程式碼存在多條執行路徑,有一部分工作建立系統快照遞迴探索多執行路徑的方法,使得動態分析方法有所進步。此外還開發了一系列動態分析工具來輔助人工分析如CWSandbox等。
    另外,也有兩者結合的混合分析方法,如針對間諜軟體(spyware)的行為特徵,利用動態分析監控元件與瀏覽器的互動確定程式碼區域,然後靜態分析檢查該程式碼區域,識別系統呼叫資訊等來檢測惡意程式碼。
           常見的序列描述法,針對程式碼或行為的先後次序,易受程式碼混淆手段的干擾;常用的還有控制流程圖(control flow graph,簡稱CFG)描述法,侷限於程式碼執行順序,易受順序無關操作調換等混淆方法的干擾。有一部分工作在解決垃圾程式碼插入及程式碼順序變換等問題,但還未能完全解決等價程式碼替換的干擾問題。
           目前還有許多工作利用深度學習來檢測惡意程式碼,通過蒐集大量的良性資料和VirusShare樣本庫中的惡意資料,來對模型進行訓練,使其學會如何區分良性和惡意的Windows可執行檔案。這方面的工作有很多,同時也面臨著許多獨特的挑戰,例如上萬級別長度的API呼叫序列等,還有待我們去解決,以及去推廣神經網路的普適性。

1.2殭屍網路

  • 何為殭屍網路?
           殭屍網路 Botnet 是指採用一種或多種傳播手段,將大量主機感染bot程式(殭屍程式)病毒,從而在控制者和被感染主機之間所形成的一個可一對多控制的網路。
           攻擊者通過各種途徑傳播殭屍程式感染網際網路上的大量主機,而被感染的主機將通過一個控制通道接收攻擊者的指令,組成一個殭屍網路。之所以用殭屍網路這個名字,是為了更形象地讓人們認識到這類危害的特點:眾多的計算機在不知不覺中如同中國古老傳說中的殭屍群一樣被人驅趕和指揮著,成為被人利用的一種工具。
  • 網路特點
           首先這是一個可控制的網路,這個網路並不是指物理意義上具有拓撲結構的網路,它具有一定的分佈性,隨著bot程式的不斷傳播而不斷有新位置的殭屍計算機新增到這個網路中來。殭屍病毒被人放到計算機時機器會滴滴的響上2秒。

           其次,這個網路是採用了一定的惡意傳播手段形成的,例如主動漏洞攻擊,郵件病毒等各種病毒與蠕蟲的傳播手段,都可以用來進行Botnet的傳播,從這個意義上講,惡意程式bot也是一種病毒或蠕蟲。
           最後,這也是Botnet的最主要的特點,就是可以一對多地執行相同的惡意行為,比如可以同時對某目標網站進行分散式拒絕服務(DDos)攻擊,同時傳送大量的垃圾郵件等,而正是這種一對多的控制關係,使得攻擊者能夠以極低的代價高效地控制大量的資源為其服務,這也是Botnet攻擊模式近年來受到黑客青睞的根本原因。在執行惡意行為的時候,Botnet充當了一個攻擊平臺的角色,這也就使得Botnet不同於簡單的病毒和蠕蟲,也與通常意義的木馬有所不同。這裡我們可以引用國內外一些研究者的一些定義。殭屍網路是攻擊者出於惡意目的,傳播殭屍程式bot以控制大量計算機,並通過一對多的命令與控制通道所組成的網路,我們將之稱之為殭屍網路,botnet。

2.實踐過程

動手實踐任務一

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

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

  • 實驗環境: WinXPattacker
  • 將下載好的RaDa.exe程式放到WinXPattacker虛擬機器當中,用file Rada.exe命令檢視一下檔案型別
  • 繼續在當前介面操作,用strings RaDa.exe命令檢視一下字串,發現亂碼,說明檔案被加殼。再使用PEiD工具檢視RaDa.exe的基本資訊

  • 下一步是我們要進行脫殼。(超級巡警工具對檔案進行脫殼,該工具有這個殼的樣本庫,可以自動脫殼,省去了手工脫殼的麻煩,並在惡意程式同目錄下生成了一個脫殼以後的程式)
  • 再用strings RaDa_unpacked.exe檢視脫殼後的RaDa.exe,可以看到產生大量函式呼叫名以及其他有用字串,但是並未查詢到作者資訊
  • 再用 IDA PRO Free 開啟一下脫殼後的程式,可以看到作者資訊和釋出時間,還有郵箱

動手實踐任務二:分析Crackme程式

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

Crackme1.exe:

  • 對 crackme1.exe 進行執行,猜測引數執行,可以發現一個引數輸入與其他的引數輸入得到的輸出明顯不一樣,所以可以猜測這個程式的輸入是一個引數。

    利用IDA Pro開啟程式分析,通過Strings視窗可以檢視該程式中出現的字串,發現 I think you are missing something. 和 Pardon? What did you say? 前面見過了,* * 猜測第一個是引數不對的返回情況,第二個是給的引數數量對了,但是具體的內容不對。還有兩個不知道意思,所以繼續進行分析。
  • 驗證一下猜想

Crackme2.exe:

  • 回到IDA,發現I have ...越過了第一層判斷,回到第一層判斷,猜測“crackmeplease.exe”是密碼。
  • 驗證:把程式名改為crackmeplease.exe試驗一下,通過了第二個判斷,最終出現了字串明文中沒有的資訊,猜測成功。

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

  • 首先檢視摘要和檔案型別,執行md5sum RaDa.exe指令得到其md5摘要值如下,再利用file RaDa.exe識別出這是32位PE檔案,並且還是個GUI檔案
  • 開啟之前用過的監視工具 process explorer 和 wireshark 開啟監聽,並執行惡意程式RaDa.exe,分析其程式執行詳細資訊。通過HTTP協議請求 10.10.10.10RaDaRaDa_commands.html ,連線到目標為10.10.10.10的主機下的一個名為RaDa_commands的網頁,之後又下載和上傳檔案到 C:/RaDa/tmp 。將檔案 RaDa.exe 複製到了 C:RaDain 目錄下,可以看出該惡意程式碼將其自我複製到主機系統盤,並激活了自啟動,還試圖從一個HTML頁面獲取並解析命令,故猜測這應該是一個後門程式。往下看可以發現該惡意程式對主機實行了DDos拒絕服務攻擊。
  • 再往下看可以發現該惡意程式對主機的登錄檔進行了讀寫和刪除操作。
  • 再往下看可以看到一些指令,exe 在宿主主機中執行指定的命令,get下載,put上傳,screenshot截圖,sleep休眠。
  • 使用wireshark進行分析,可以看到受害主機向目標主機 10.10.10.10 傳送了大量的資料包
  • 再開啟 IDA Pro 進行簡單分析,首先檢視字串 string ,string裡把unicode選中檢視字串。這時可以檢視到很多的字串,點選這些字串就可以找到呼叫的函式。
  • 看一下VMware tools的意思,雙擊選中的字串進行定位:
  • 發現其呼叫函式為 sub_404FB0

答案梳理:

①提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊。
摘要為caaa6985a43225a0b3add54f44a0d4c7
使用了UPX加殼工具進行了加殼處理,加殼方式: UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo

②找出並解釋這個二進位制檔案的目的。
這個二進位制檔案通過網路獲取指令,連線網際網路時,該惡意程式就會通過http請求連線到指定主機,進行接受攻擊者指令操作,並且攻擊者可以完全控制該系統,所以這應該是一個後門程式。

③識別並說明這個二進位制檔案所具有的不同特性。
該程式啟動之後將自己複製到c盤之中,並且每過一段時間就會嘗試與10.10.10.10建立tcp連線。

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

⑤對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由。
不具有自主傳播模組,不具有傳播和感染的性質,所以它不屬於病毒和蠕蟲;也沒有將自己偽裝成有用的程式以欺騙使用者執行,不是木馬。並且該程式執行需攻擊者遠端傳送指令,故猜測是一個後門程式。

⑥給出過去已有的具有相似功能的其他工具。
Bobax——2004也是使用HTTP協議從指定的伺服器下載命令檔案,然後解析並執行其中的指令。

⑦可能調查出這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?
可以,作者Raul siles和David Perze,他們在2004年編寫完成。

取證分析實踐:Windows 2000系統被攻破並加入殭屍網路
任務:分析的資料來源是用Snort工具收集的蜜罐主機5天的網路資料來源,並通過編輯去除了一些不相關的流量並將其組合到了單獨的一個二進位制網路日誌檔案中,同時IP地址和其他特定敏感資訊都已經被混淆以隱藏蜜罐主機的實際身份和位置。回答下列問題:
(1)IRC是什麼?當IRC客戶端申請加入一個IRC網路時將傳送哪個訊息?IRC一般使用哪些TCP埠?

  • 定義:IRC是Internet Relay Chat的英文縮寫,中文一般稱為“網際網路中繼聊天" 。
  • 工作原理:您只要在自己的PC上執行客戶端軟體,然後通過因特網以IRC協議連線到一臺IRC伺服器上即可。它的特點是速度非常之快,聊天時幾乎沒有延遲的現象,並且只佔用很小的頻寬資源。
  • IRC是一種公開的協議,採用TCP和SSL協議。一個IRC伺服器可以連線其他的IRC伺服器以擴充套件為一個IRC網路。
  • 連線方式:IRC使用者通過客戶端軟體和伺服器相連。大多數的IRC伺服器不需要客戶註冊登入,但在連線前必須設定好暱稱(nickname)。IRC是一個分散式的客戶端/伺服器結構。通過連線到一個IRC伺服器,我們可以訪問這個伺服器以及它所連線的其他伺服器上的頻道。IRC頻道存在於一個IRC伺服器上。一個頻道類似於一個聊天室,頻道名稱必須以#符號開始,例如#irchelp。IRC機器人是一些執行在後臺或者伺服器上的程式,通過登陸某一個頻道,分析接受到的內容並做出相應的動作。
  • 當IRC客戶端申請加入一個IRC網路時,傳送nickname。
  • 一般使用6667(6660~6669)埠。

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

  • 定義:IRC語境下的殭屍網路是指IRC機器人連線成的IRC網路;採用一種或多種傳播手段,將大量主機感染bot程式(殭屍程式)病毒,從而在控制者和被感染主機之間所形成的一個可一對多控制的網路 。
  • 用處:通常用於DDos攻擊、分散式掃描、暴力密碼破解等。

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

  • 由於IRC協議使用TCP連線,要找出與蜜罐主機通訊的IRC主機,可以利用建立TCP連線的三次握手過程進行分析。

  • 只需要找出蜜罐主機向哪些機器的IRC埠傳送過SYN包,即可找出蜜罐主機試圖通訊的IRC伺服器。

  • IRC協議最常用的埠為6667,在WireShark中對日誌檔案進行分析,可以看到除了6667外其他埠上沒有資料包,因此這裡所有的IRC資料都使用的是6667埠。利用如下命令過濾出蜜罐主機向6667埠傳送的SYN包,過濾條件為:ip.src == 172.16.134.191 && tcp.dstport == 6667

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

  • 發現蜜罐主機與5臺IRC伺服器進行了連線,分別是:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172。

  • tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"tcpflow分流篩選指定host與埠6667,產生了三個檔案,分別是:209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、report.xml。根據題目要求重點檢視第一個檔案。

  • 使用管道命令進行篩選,得到3462個。grep搜尋獲取暱稱輸出行;sed:去除字首;tr:將空格轉換為換行;tr -d刪除\r;grep -v:去除空行;sort -u排序並去除重複;wc -l:輸出行數
    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

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

  • 使用tcpdump查詢可能連線主機ip的地址,uniq命令用於檢查及刪除文字檔案中重複出現的行列,輸出到1.txt中,檢視ip.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 > ip.txt;wc -l ip.txt

  • 檢視ip.txt,其中的ip地址可能被用於攻擊蜜罐主機

  • 然後使用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埠,即SYN/ACK標誌為1

  • 再用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埠

    (6)攻擊者嘗試了哪些安全漏洞?哪些攻擊成功了?是如何成功的

  • 開啟wireshark對各個埠進行分析,過濾http請求,發現攻擊者嘗試了溢位、目錄穿越等攻擊,但均未成功

  • 過濾445埠,發現執行了\System32\PSEXESVC.EXE,其他埠也未發現攻擊成功

3.學習中遇到的問題及解決

  • 問題1: 在使用tcpflow命令時,執行失敗
  • 問題1解決方案:執行sudo apt-get install tcpflow 命令安裝即可

4.實踐總結

       本週實踐主要是對惡意程式碼進行檢測和分析,通過使用一些小工具,來實現了對惡意程式型別的識別,同時也懂得了如何利用巡警工具去進行脫殼處理。接下來理解了如何對惡意程式碼進行分類,以及對殭屍網路有了初步的理解。之後還需多實踐,通過實際操作來加深對網路攻防知識的認知。