1. 程式人生 > 其它 >20192408胡益琳 實驗四 惡意程式碼分析實踐報告

20192408胡益琳 實驗四 惡意程式碼分析實踐報告

實驗四 惡意程式碼分析實踐報告

1.實驗內容

  • 惡意程式碼檔案型別標識、脫殼與字串提取
  • 使用IDA Pro靜態或動態分析crackme1.exe與crakeme2.exe,尋找特定輸入,使其能夠輸出成功資訊。
  • 分析一個自制惡意程式碼樣本rada,並撰寫報告,回答問題。
  • 取證分析實踐

2.實驗過程

任務一 惡意程式碼檔案型別標識、脫殼與字串提取

  • 對提供的rada惡意程式碼樣本,進行檔案型別識別,脫殼與字串提取,以獲得rada惡意程式碼的編寫作者。
    • (1)使用檔案格式和型別識別工具,給出rada惡意程式碼樣本的檔案格式、執行平臺和加殼工具;

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

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

  • 使用file命令檢視rada.exe的檔案型別,可以看到它是一個32位的PE可執行檔案,GUI表示有圖形介面,intel 80386表示處理器架構
  • 使用PEiD開啟rada.exe檔案,可以看到檔案的入口點、檔案偏移、EP段等資訊,還可以看到檔案的加殼資訊,是版本為0.89.6的UPX殼
  • 用strings rada.exe檢視可列印字元,發現都是亂碼,是由於加殼導致
  • 用超級巡警軟體進行脫殼操作,可以看到也能識別出為0.89.6的UPX殼,脫殼後輸出為rada_unpacked.exe,可以根據輸出路徑找到脫殼後的檔案
  • 再次用strings rada_unpacked.exe指令檢視脫殼後的檔案,可以看到一些函式名,但並未發現作者名字
  • 使用IDA Pro Free開啟脫殼後的檔案

    點選Strings,經過查詢可以發現作者的名字和檔案編寫的日期

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

1.crackme1.exe

  • 首先執行crackme1.exe,對引數個數進行猜測,依次輸入0/1/2個引數,觀察程式輸出

    可以猜測程式大概率需要1個引數
  • 使用IDA Pro Free開啟crackme1.exe,點選Strings檢視字串

    可以看到1和3是之前輸入引數時出現過的,而第2條和第4條並未出現,猜測其中一個即為正確的口令,另一個為輸入正確後的反饋。
  • 在主頁面上點選View-Graphs-Function calls,檢視函式結構

    可以看到與printf直接相關的為sub_401280函式,在Functions中找到sub_401280函式,雙擊可以看到他的彙編程式碼
    如圖可以看到,sub_401280首先判斷引數個數,若不是一個則輸出"I think you are missing something."(左邊第一個紅色箭頭指向)若為一個引數且引數不為"I know the secret"則輸出"Pardon?What did you say?"(第二個紅色箭頭指向)若為一個引數且引數為"I know the secret"
    則輸出"You know how to speak to programs,Mr.Reverse—Engineer"(最右邊綠色箭頭指向)
  • 再次執行程式並輸入正確口令,驗證成功。

2.crackme2.exe

  • 與對crackme1.exe的分析類似,首先通過執行crackme2.exe猜測引數個數
  • 使用IDA Pro Free開啟crackme2.exe,點選Strings檢視字串

    同樣地,我們猜測口令和提示語句就在這些字串中
  • 用同樣的方式檢視函式結構,可以看到與fprintf和puts等輸出函式有關的仍為sub_401280
  • 找到sub_401280的流程圖,同樣第一步時判斷引數個數是否為2,若是則接著用strcmp函式對argc中第一個字串即程式名進行判斷,若為crackmeplease.exe則再將口令與"I know the secret"進行比對。

  • 將檔案複製為crackmeplease.exe,執行crackmeplease.exe輸入引數"I know the secret",即可輸出成功資訊

任務三 分析一個自制惡意程式碼樣本rada,並撰寫報告,回答問題。

  • 使用md5sum rada.exe命令得到二進位制檔案的MD5摘要值為caaa6985a43225a0b3add54f44a0d4c7
  • 開啟process explorer,雙擊執行該程式,在程序中找到rada_unpacked.exe,右鍵選擇Properties—Strings檢視。

    可以看到該程式有以下行為:
  • (1)使用http連線到10.10.10.10主機的一個叫做RaDa_commands.html的網頁上,進行一些上傳和下載操作,並在受害者C盤中建立資料夾“C:/RaDa/tmp”。
  • (2)將檔案rada.exe複製到C:\RaDa\bin\路徑下,並修改登錄檔設定為開機自啟動。
  • (3)該惡意程式中可執行DDos拒絕服務攻擊
  • (4)對主機的登錄檔進行了讀寫和刪除操作。

    還可以看到一些get、put、screenshot截圖、sleep休眠等指令,以及作者資訊與編寫年份。由這些指令功能可以推測這是個後門程式,可以遠端控制受害者電腦。
  • 開啟IDA,點選Strings,找到--authors雙擊進行分析


    可以看到流程圖如下,由sub_40AAA0進行判斷決定輸出的是Unknown argument還是Authors:Raul Siles & David Perze, 2004

    點選sub_40AAA0檢視流程圖,進一步判斷函式功能

    可以看到這個函式進行網絡卡配置資訊的查詢(紅色方框內的select語句)。該函式判斷程式是否在Vmware虛擬機器上執行,若是則輸出Unknown argument: --authors,否則輸出Authors:Raul Siles & David Perze, 2004。

回答以下問題:

(1)提供對這個二進位制檔案的摘要,包括可以幫助識別同一樣本的基本資訊;
MD5摘要值:caaa6985a43225a0b3add54f44a0d4c7
基本資訊:PE32 executable(GUI) Intel 80386 ,for MS Windows
(2)找出並解釋這個二進位制檔案的目的;
是一個後門程式。可以進行http請求,使攻擊者遠端連線被控主機並進行一些指令操作,同時還修改了登錄檔使得檔案具有開機自啟動功能,
(3)識別並說明這個二進位制檔案所具有的不同特性;
程式被執行時會將自身安裝到系統C盤中,並建立資料夾用來存放從攻擊主機下載到受控主機的檔案和從受控主機獲取的檔案;同時通過修改登錄檔的方式使得程式能夠開機自啟動;具有一定的隱蔽性。
(4)識別並解釋這個二進位制檔案中所採用的防止被分析或逆向工程的技術;
使用0.89.6版本的UPX殼進行加殼處理;通檢視網絡卡地址判斷系統是否執行在虛擬機器上,若是則隱藏作者資訊
(5)對這個惡意程式碼樣本進行分類(病毒、蠕蟲等),並給出你的理由;
後門程式。因為該程式不能自主傳播,且沒有偽裝成正常功能的程式,可以供攻擊者遠端連線並用指令操縱被控主機
(6)給出過去已有的具有相似功能的其他工具;
Bobax – 2004、Windows Update、海陽頂端等後門。
(7)可能調查處這個二進位制檔案的開發作者嗎?如果可以,在什麼樣的環境和什麼樣的限定條件下?
可能。在非VMware的虛擬機器或者Windows下輸入--authors引數可以顯示作者名字,通過ida或者Process Explorer檢視strings也可以找到作者名字是Raul Siles & David Perze,寫於2004年。

任務四 取證分析實踐

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

  • (1)IRC是什麼?當IRC客戶端申請加入一個IRC網路時將傳送那個訊息?IRC一般使用那些TCP埠?
    • IRC指的是因特網中繼聊天(Internet Relay Chat)。IRC使用者使用特定的使用者端聊天軟體連線到IRC伺服器,通過伺服器中繼與其他連線到這一伺服器上的使用者交流。
    • 申請時需要傳送口令,暱稱和使用者資訊。格式如下:USER 、PASS 、NICK 。
    • IRC伺服器明文傳輸通常在6667埠監聽,也會使用6660—6669埠。SSL加密傳輸在6697埠。
  • (2)殭屍網路是什麼?殭屍網路通常用於什麼?
    • 殭屍網路 Botnet 是指採用一種或多種傳播手段,將大量主機感染bot程式(殭屍程式)病毒,從而在控制者和被感染主機之間所形成的一個可一對多控制的網路。攻擊者通過各種途徑傳播殭屍程式感染網際網路上的大量主機,而被感染的主機將通過一個控制通道接收攻擊者的指令,組成一個殭屍網路。
    • 可以一對多地執行相同的惡意行為,往往被黑客用來發起大規模的網路攻擊,如分散式拒絕服務攻擊(DDoS)、海量垃圾郵件等,使得攻擊者能夠以極低的代價高效地控制大量的資源為其服務。
  • (3)蜜罐主機(IP地址:172.16.134.191)與那些IRC伺服器進行了通訊?
    • 使用Wireshark分析檔案botnet_pcap_file.dat,並設定的過濾條件ip.src == 172.16.134.191 and tcp.dstport == 6667 and tcp.flags.syn==1(由前面問題可知,IRC伺服器明文傳輸通常在6667埠監聽,所以條件包括6667埠)



      可以看到蜜罐主機與以下伺服器進行了通訊:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172

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

  • 在Kali內使用如下命令
apt-get install tcpflow   #出現tcpflow: command not found時安裝更新

tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"    #讀取檔案,篩選host和埠6667後進行分流


生成如下三個檔案:

  • 接著執行如下兩條問題,避免出現字元編碼問題,導致計數不準確
export LC_COLLATE='C'

export LC_CTYPE='C'
  • 利用如下指令進行搜尋有多少主機連線(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


如圖,得到結果是3457
(5)哪些IP地址被用於攻擊蜜罐主機?

  • 使用如下指令找出所有連線主機的IP地址(cut -d是指定欄位的分隔符,uniq命令用於刪除文字檔案中重複出現的行),將結果輸出到2.txt檔案中,wc -l 2.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 > 2.txt;wc -l 2.txt


如圖可以看到生成的2.txt檔案,所有可能連線到主機的IP地址有165個


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

  • 使用snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii指令檢視網路流分佈情況

    可以看到大部分都是TCP包,極少部分是UDP包。
    接下來進一步篩選出響應的TCP和UDP包,命令如下(注意TCP包的篩選指令多了響應0x12的條件)
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包
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包


可以看到TCP響應埠為135、139、25、445、4899、80
UDP響應埠為137

  • 使用wireshark開啟botnet_pcap_file.dat,首先檢視TCP的135和25埠,篩選條件為tcp.port135 || tcp.port25

    可以看到這兩個埠只是進行了連線,並沒有資料的互動,猜測攻擊者對這兩個埠進行了connect掃描
  • 接下來分析TCP 139埠,可以看到大部分都是連線,並沒有資料的傳遞,猜測應該只是進行了SMB服務的查點
  • 下一個是445埠,設定過濾條件ip.dst172.16.134.191 and tcp.dstport445

    在61.111.101.78發起的請求中發現了PSEXESVC.EXE,這是一種Dv1dr32蠕蟲,通過IRC進行通訊

    為判斷蠕蟲攻擊是否成功,使用ip.dst==61.111.101.78檢視從蜜罐發往攻擊主機的資料包,可以看到results:Acceptance,且返回資訊中含有\PIPE\lsass,攻擊者可以進行遠端呼叫。而且以後的資料包中含有很多response字樣,猜測是被控主機在響應攻擊者的命令。

    再看發往蜜罐的報文,其中包含了很多SVCCTL的報文。經過搜尋得知Windows的svcctl MSRPC介面用於同SCM(服務控制管理器)通訊。svcctl漏洞允許匿名使用者連線到SCM,然後就可以列舉所安裝的或正在執行的服務。進一步驗證了攻擊成功。
  • 再看TCP的4899埠,設定條件為ip.dst172.16.134.191 and tcp.dstport4899

    查資料得知,4899埠是一個遠端控制軟體Radmin服務端監聽的埠,經常被黑客用來控制被控機
  • 接著看TCP的80埠,設定篩選條件ip.dst172.16.134.191 and tcp.dstport80 and http
  • 可以看到210.22.204.101向蜜罐傳送了一長串C,可能是在進行緩衝區溢位攻擊
  • 同時,24.197.194.106發起了很多次連線,這是用指令碼不停地攻擊IIS伺服器的漏洞,從而獲取系統許可權。
  • 此外,在218.25.147.83向蜜罐傳送的資料包中發現了C:\notworm,經過查詢可以瞭解到它是一個紅色程式碼蠕蟲攻擊

  • 使用tcp.srcport == 80 && ip.src== 172.16.134.191 && http篩選從蜜罐80埠往外發送的資料包,可以看見蜜罐主機均以IIS伺服器的預設頁面作為迴應,說明80埠的攻擊均失敗了。
  • 最後一個是UDP的137埠,137埠主要用於“NetBIOS Name Service”(NetBIOS名稱服務),猜測這裡主要用來進行NetBIOS查點。

    (7)那些攻擊成功了?是如何成功的?
  • 來自61.111.101.78的PSEXESVC.EXE,即Dv1dr32蠕蟲攻擊成功了。是通過向對TCP445埠傳送含有PSEXESVC.EXE的資料包,且將PSEXESVC.EXE地址改到系統目錄下攻擊成功的。攻擊成功後通過利用SVCCTL漏洞獲取目標主機服務。

3.問題及解決方法

  • 問題1:使用IDA時對彙編程式碼不夠了解,無法正確分析程式的函式邏輯
  • 問題1解決方法:通過向同學請教,發現可以檢視虛擬碼更好地瞭解函式結構即對輸入引數的要求,同時還須加強對彙編語句的掌握。
  • 問題2:進行取證分析實踐時,統計多少不同的主機訪問了以209.196.44.172為伺服器的殭屍網路時存在重複計數的問題。
  • 問題2解決方法:
    使用如下兩句指令避免出現字元編碼問題導致重複計數;
export LC_COLLATE='C'
export LC_CTYPE='C'

4.學習感悟、思考等

這次實驗任務量大、分析內容複雜,很多地方都需要對組合語言的熟練掌握,造成了一定的困難。在以後的學習中還要加強對組合語言的學習。同時通過這次實驗學會了使用各種工具來檢視檔案型別、對加殼檔案進行脫殼操作、顯示程式的函式邏輯等,對於惡意程式碼的結構和功能有了更深的理解。