20199101 2019-2020-2 《網絡攻防實踐》第九周作業


惡意代碼安全攻防

說明:整個分析花費了我很長的時間,每個點基本都詳細分析了,篇幅較長。


0.總體結構


本次作業屬於哪個課程 網絡攻防實踐
這個作業要求在哪里 惡意代碼基礎知識和分析方法
我在這個課程的目標是 學習網絡攻防相關技術和原理
這個作業在哪個具體方面幫助我實現目標 學習惡意代碼安全攻防的相關知識

1.實踐內容


第九章的內容比較復雜,結構性不強,我主要從兩個方面介紹,惡意代碼基礎知識惡意代碼分析技術。其中分很多小點,如惡意代碼基礎知識分為計算機病毒、蠕蟲、RootKit等,而惡意代碼分析技術分為分析環境、分析方法、反匯編等知識。

  • 惡意代碼基礎知識
    惡意代碼簡單介紹
    計算機病毒
    網絡蠕蟲
    后門與木馬
    僵屍程序與僵屍網絡
    Rootkit
  • 惡意代碼分析技術
    惡意代碼分析基礎
    惡意代碼分析環境
    惡意代碼靜態分析
    惡意代碼動態分析

惡意代碼基礎知識


惡意代碼簡單介紹


  • 定義:Malware is a set of instructions that run on your computer and make your system do something that an attacker wants it to do.

  • 指令集合:二進制執行文件、腳本語言代碼、宏代碼、寄生在文件或者啟動扇區的指令流。

  • 目的:炫耀、遠程控制被攻擊主機、滿足施跳板攻擊或進一步傳播惡意代碼、竊取私人信息或機密信息、竊取計算存儲帶寬資源、拒絕服務等。

  • 類型:分為計算機病毒、蠕蟲、惡意移動代碼、后門、特洛伊木馬、僵屍程序、Rootkit等。這里就不具體講各個的定義或者是什么了,下面具體分開具體講。給出一個惡意代碼的分類依據

    類別 實例
    不感染的依附性惡意代碼 特洛伊木馬、邏輯炸彈
    不感染的獨立性惡意代碼 點滴器、繁殖器
    可感染的依附性惡意代碼 病毒
    可感染的獨立性惡意代碼 蠕蟲

計算機病毒


  • 定義:計算機病毒是一種能夠自我復制的代碼,通過將自身嵌入其他程序進行感染,而感染過程通常需要人工干預才能完成。這里必須記住:計算機病毒是借助人類幫助從一台計算機傳至另一台計算機,這也是其傳播機制。
  • 特性:感染性(本質特性)、潛伏性、可觸發性、破壞性、衍生性。
  • 感染及引導機制
    • 感染可執行文件(最為普遍的方式):前綴感染機制(病毒將自身復制到宿主程序的始端)、后綴感染機制(病毒將自身復制到宿主程序的末端)、插入感染機制(病毒在感染宿主程序時,病毒代碼放在宿主程序的中間)。
      vi1.png

    • 感染引導扇區:通過BIOS定位磁盤的主引導區,運行存儲的主引導記錄,接着從分區表中找到第一個活動分區,讀取並執行這個活動分區的分區引導記錄,而分區引導記錄負責裝載操作系統。

    • 感染數據文件(支持宏的數據文件):將自身以宏指令的方式復制到數據文件中,當被感染的數據文件被應用程序打開時,將自動執行宏病毒體,完成病毒的引導。


網絡蠕蟲


  • 定義:一種通過網絡自主傳播自我復制的獨立惡意代碼。(從這里就可以看出病毒和蠕蟲的區別)

  • 傳播機制:主動攻擊網絡服務漏洞、通過網絡共享目錄、通過郵件傳播。

  • 組成結構

    • 彈頭:利用目標系統安全漏洞入侵目標系統。包括緩沖區溢出攻擊、破壞目標系統服務中的內存結構、文件共享攻擊、利用電子郵件傳播、利用其它普通的錯誤配置。這里其實就是我們之前說的滲透攻擊模塊
    • 傳播引擎:通過在目標系統上執行傳播引擎指令,完成蠕蟲樣本的傳播。方式有FTP/TFTP/HTTP/SMB/直接傳送/單包等。
    • 目標選擇算法和掃描引擎:一旦蠕蟲在受害計算機中運行,目標選擇算法開始尋找新的攻擊目標,利用掃描引擎掃描每一個由目標選擇算法確定的地址,確定其是否可以被攻擊。包括電子郵件地址、主機列表、被信任的系統、網絡鄰居主機等。這里就是掃描策略
    • 有效載荷附加的攻擊代碼,執行一些特殊目地的操作。包括植入后門、安裝分布式拒絕服務攻擊代理、組建僵屍網絡、執行一個復雜計算等。

    vi2


后門與木馬


  • 后門定義:允許攻擊者繞過系統常規安全控制機制的程序,按照攻擊者自己的意圖提供通道。
  • 后門類型:本地特權提升、單個命令的遠程執行、遠程命令行解釋訪問器(NetCat)、遠程控制GUI(VNC、BO、冰河、灰鴿子)、無端口后門(ICMP后門,基於Sniffer非混雜模式或混雜模式的后門)。
  • 自啟動后門:Windows通過修改自啟動文件、注冊表自啟動項,Linux修改inittabrc.d/init.d文件。
  • 木馬定義:看起來具有某個有用或善意目的,但實際掩蓋着一些隱藏惡意功能的程序。
  • 木馬的偽裝技術:命名偽裝、使用軟件包裝工具、攻擊軟件發布站點、代碼下毒(開發者有意為之,后面的利益就不可知了)。

僵屍程序與僵屍網絡


  • 僵屍程序定義:攻擊者用於一對多控制目標主機的惡意代碼。

  • 僵屍網絡定義攻擊者傳播僵屍程序控制大量主機,並通過一對多的命令與控制信道所組成的網絡。(注意仔細品味幾種惡意程序的定義的黑體字,體會不同)

  • 僵屍網絡功能結構:主體功能分為命令控制模塊和傳播模塊,輔助功能分為信息竊取模塊、主機控制模塊、下載更新模塊、防分析檢測模塊。

  • 僵屍網絡類型:IRC僵屍網絡(基於IRC互聯網實時聊天協議構建)、HTTP僵屍網絡(Web網站方式構建)、P2P僵屍網絡(P2P協議構建)。

  • IRC僵屍網絡工作機制圖

    vi3


Rootkit


  • 定義:隱藏性惡意代碼形態,通過修改現有的操作系統軟件,使攻擊者獲得訪問權隱藏在計算機中。換句話說,就是root權限的kit工具包。

  • 用戶模式Rootkit:惡意修改操作系統在用戶模式下的程序/代碼,達到隱藏目的(木馬化操作系統用戶模式應用程序)。主要分為五種類型:提供后門訪問的二進制替換程序、隱藏攻擊者的二進制替換程序、用於隱藏但不替換的二進制程序、一些零散工具如網絡嗅探器、安裝腳本。

  • 內核模式Rootkit:惡意修改操作系統內核,從而達到更深的隱藏和更強的隱蔽性(對內核組件的惡意修改和木馬化)。主要有如下方式:文件和目錄隱藏、進程隱藏、網絡端口隱藏、混雜模式隱藏、改變執行方向、設備截取和控制。

  • Linux內核Rootkit:參考Linux Rootkit Learning這篇博文講的很好!。下圖所示是利用LKM機制實現Linux內核模式Rootkit,LKM就是可裝載內核模塊。下圖主要是通過insmod命令插入惡意內核模塊,然后進行系統調用表的修改。

    vi4


惡意代碼分析技術


惡意代碼分析基礎


  • 代碼分析:按需求使用一定的規則、方法和工具對計算機程序進行分析,以推導出其程序結構、數據流程和程序行為的處理過程。
  • 惡意代碼分析的技術方法主要包括靜態分析和動態分析兩類。
  • 分析良性代碼與分析惡意代碼的區別:(這也是為什么我們后面需要那么麻煩的原因)
    • 不能提前知道惡意代碼的目的。
    • 惡意代碼具有惡意的攻擊目的,會對所運行環境進行惡意破壞。
    • 惡意代碼分析在絕大數情況下不會擁有待分析程序的源代碼。
    • 惡意代碼目前都會引入大量各種各樣的對抗分析技術。

惡意代碼分析環境

  • 惡意代碼發燒友的分析環境:這個網絡拓撲圖真的沒什么好說的,就是利用一個集線器或者交換機把計算機連接在一起,在於成本低。

    vi5

  • 采用虛擬化技術構建惡意代碼分析環境:這是一般情況下我們使用的環境,其實也沒什么好說的,之前的博客都已經詳細說明了。主要重點是在進行惡意代碼分析時,一定要保證主機和虛擬機的隔離,防止主機收到傷害,同時最好讓你的整個主機也隔離網絡連接,不要玩火,人人有責!!!

    vi6

  • 用於研究的惡意代碼自動分析環境:專業人員使用的,分為靜態分析機、動態分析機、網絡分析機和綜合分析機。

    vi7


惡意代碼靜態分析


  • 定義:通過反病毒引擎掃描識別已知的惡意代碼家族和變種名,逆向分析惡意代碼模塊構成,內部數據結構,關鍵控制流程等,理解惡意代碼的機理,並提取特征碼用於檢測。
  • 惡意代碼靜態分析方法列表:后面會簡單解釋。這里同時提供一個博客主要是分析惡意代碼分析實戰
分析方法 目的 使用工具 難度
反病毒軟件掃描 標識已知惡意代碼 反病毒引擎,VirusTotal
文件格式識別 確定攻擊平台和類型 file,peid,FileAnalyzer
字符串提取 尋找惡意代碼分析線索 strings
二進制結構分析 初步了解二進制文件結構 binutils (nm, objdump)
反匯編 二進制代碼->匯編代碼 IDA Pro,GDB,VC 中高
反編譯 匯編代碼->高級語言 REC,DCC,JAD 中高
代碼結構與邏輯分析 分析二進制代碼組,理解二進制代碼邏輯結構 IDA Pro,Ollydbg
加殼識別和代碼脫殼 識別是否加殼及類型、對抗代碼混淆恢復原始代碼 UPX,VMUnpacker,手工
  • 反病毒軟件掃描:使用反病毒軟件對待分析樣本進行掃描。主要有卡巴斯基、賽門鐵克、瑞星、金山等。
  • 文件格式識別:依靠專業工具如file(確定惡意代碼目標平台和文件類型),peid(文件類型、編譯鏈接器、是否加殼),FileAnalyzer(分析Win32平台窗口程序中包含的特殊文件)等進行識別分析。
  • 字符串提取:主要提取的信息包括可能獲得的有用信息、惡意代碼實例名、幫助或命令行選項、用戶會話、后門口令、相關URL信息和Email地址、庫和函數調用。
  • 二進制結構分析nm指令在可執行文件中查找symbols重要元素。objdump主要功能有從可執行文件中限制不同類型的信息、編譯器類型、代碼段數據段位置、反匯編。
  • 代碼結構與邏輯分析:程序結構主要是了解Call Graph,即用戶函數、系統函數和函數調用關系。分析系統函數調用列表可在高層分析二進制程序的行為邏輯。程序邏輯主要是了解程序控制流圖(CFG),CFG完備地反映了一個程序的執行邏輯
  • 加殼識別和代碼脫殼:包括四個方面:加密(固定加密/解密器)、多樣性(多樣化解密器)、多態(多態病毒能夠通過隨機變換解密器從而使得每次感染所生成的病毒實例都具有唯一性)、變形(直接在病毒體上加入各種代碼混淆技術)。

惡意代碼動態分析


  • 定義:通過在受控環境中執行目標代碼,以獲取目標代碼的行為及運行結果。
  • 惡意代碼動態分析方法列表
分析方法 目的 使用工具 難度
快照比對 獲取惡意代碼行為結果 FileSnap,RegSnap,完美卸載
動態行為監控 實時監控惡意代碼動態行為軌跡 Filemon,Regmon,Process Explorer,lsof
網絡監控 分析惡意代碼網絡監聽端口及發起網絡會話 Fport, lsof,TDImon,ifconfig,tcpdump
沙盒 在受控環境下進行完整的惡意代碼動態行為監控與分析 Norman Sandbox,CWSandbox,FVM Sandbox 中高
動態跟蹤調試 單步調試惡意代碼程序,理解程序結構和邏輯 Ollydbg,IDAPro,gdb,SoftICE,systrace
  • 動態分析中的監視與控制行為監視即一系列監控軟件來控制和觀察惡意代碼的運行情況。網絡控制即與業務網絡和互聯網保持物理隔離。
  • 快照比對:分為四步:對“干凈”資源列表做快照、運行惡意代碼、對惡意代碼運行后的“臟”資源列表做快照、對比“干凈”和“臟”快照,獲取惡意代碼行為結果。
  • 動態行為監控:包括Notification機制(Win32/Linux系統本身提供的行為通知機制)和API Hooking技術(對系統調用或API調用進行劫持,監控行為)。
  • 網絡監控:主要監控四個方面,包括惡意代碼開放的本地端口、惡意代碼發起的網絡連接、控制惡意代碼網絡流和惡意代碼流行攻擊方式-ARP欺騙。
  • 沙盒:沙盒技術用於安全運行程序的安全環境,經常被用於執行和分析非可信的代碼。
  • 動態跟蹤調試:在程序的執行過程中進行二進制調試(Debugging)。

2.實踐過程


實踐一:惡意代碼靜態分析

任務:對提供的rada惡意代碼樣本(U盤或FTP/materials/course9下載),在WinXP_Attacker虛擬機中進行文件類型識別,脫殼與字符串提取,以獲得rada惡意代碼的編寫作者。

  • 使用文件格式和類型識別工具(file, PEid),給出rada惡意 代碼樣本的文件格式、運行平台和加殼工具。
  • 使用超級巡警脫殼機等脫殼軟件,對rada惡意代碼樣本進行 脫殼處理。
  • 使用字符串提取工具(strings、IDA Pro),對脫殼后的 rada惡意代碼樣本進行分析,從中發現rada惡意代碼的編寫作 者是誰?

Solution

  • 重要說明:在進行靜態分析的時候,請務必斷開與物理機的網絡連接,最好也斷開物理機與外部網絡的連接,即使rada惡意代碼並沒有惡意行為。

  • 實驗環境:WinXP Attacker虛擬機(安裝有cygwin以及基本的脫殼軟件和字符串提取工具)。

  • 首先利用file RaDa.exe命令查看RaDa.exe的文件類型,可知這是一個32位Windows PE可執行文件,並且有圖形化窗口。

    rada1

  • 下面來看看有沒有加殼,下面使用PEiD工具(查殼)來查看加殼的類型。在這里我們可以看到這個是一個版本為0.89.6的UPX殼(壓縮殼,更多內容參考UPX殼分析)。還可以看到文件的入口點、EP段、偏移、文件類型等信息。

    rada2

  • 下面用strings RaDa.exe查看RaDa.exe中可打印字符串,發現都是亂碼,這也驗證了這是一個加殼程序,所以下一步是我們要進行脫殼。

    rada3

  • 我們用超級巡警這個軟件進行脫殼,這里也識別出了是一個UPX殼,這個壓縮殼還是比較容易脫,脫完之后輸出為RaDa_unpacked.exe。自動脫殼實在是無聊,我簡直是工具人,那么找個帖子手動脫殼吧,掌握ESP定律,參考這個帖子新手脫殼必看基礎教程,作業寫不完了,先不拓展了,繼續。

    rada4

  • 脫殼結束,我們就可以進行分析啦!打開IDA Pro Free選擇脫殼之后的文件,一直next就行,可以看到如下信息。首先是作者的信息DataRescue sa/nv,甚至是郵箱都一目了然。同時這個程序是由MSVB編寫的。繼續往下是一些函數調用,甚至匯編代碼都一目了然。到這里本次實驗結束,結束之后就把內容打包,文件刪除吧。

    rada5

    rada6


實踐二:分析Crackme程序

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


  • 實驗環境:裝有IDA Pro的WinXP Attacker虛擬機。下面兩個程序都是靜態分析(利用IDA進行動態分析我不會啊)。

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

    crack1

  • 接下來利用IDA Pro打開這個程序分析,我們打開通過Strings窗口可以查看該程序中出現的字符串,我們發現了前面的兩種反饋信息,I think you are missing something.Pardon? What did you say?,這兩個我們之前已經見過了,很容易猜測,第一個是參數不對的返回情況,第二個是給的參數數量對了,但是具體的內容不對。還有兩個我們不知道啥意思,所以我們要繼續進行分析。同時,在這里我們應該要有一種敏感,就是看到字符串,那么字符串操作函數就要回想在你腦子里。

    crack2

  • 接下來看函數調用圖(Function Call),上面說了,要找字符串操作相關的函數,以及輸出函數,因為我們測試程序的時候明顯是有輸出的。如果你能理解,那么你肯定找的是下圖部分,可以看到字符串比較函數strcmp和輸出函數fprintfprintf。那么顯而易見,sub_401280這個函數就顯得至關重要了。

    crack3

  • 下面我們就看這個函數的匯編代碼了,其實匯編我也不大會,不過不打緊,能看懂基本操作就行了。打開這個函數,你就可以看到pushsubmove等操作,這些都是基本的匯編操作,想補以下就去網上稍微看看,我就不展開了,直入主題,首先push了ebp入棧,然后比較最后一個cmp比較函數參數是不是2(這里為什么是2?去學C吧)。

    crack4

  • 下面就是比較了,很容易看到左邊就是函數參數不為2的情況(不為2輸出的字符串也明顯與我們之前猜測的內容一致),右邊就是參數為2的情況。

    crack5

  • 進入右邊,發現又調用了一個字符串匹配函數strcmp,也就是講我們輸入的字符串與I know the secret進行比較,如果不匹配就輸出Pardon? What did you say?(這個我們之前已經見過啦)。那么正確,就輸出You know how to speak to programs, Mr. Reverse-Engineer

    crack6

    crack7

  • 根據上面的分析,我們去實驗吧,很明顯,我們得到了正確的結果。

    crack8

  • 接下來分析crackme2.exe。下面我就主要用IDA Pro進行分析,不猜測了。首先還是看明文字符串,有五個,自己先有個印象就好,下面我們還是要尋找字符串操作函數

    crac1

  • 我們首先還是打開call function,我們可以看到字符串比較函數strcmp和輸出函數fprintf以及輸入函數等。那么此時應該尋找,sub_401280這個函數了。

    crac2

  • 和上面一樣,找到這個函數的匯編代碼,同樣的,下面有判斷參數是否為2,如果不是,就返回I think you are missing something。這個不重要,下面我們着重看如果參數對了是什么樣子。

    crac3

    crac4

  • 下面的就是參數的個數對了的情況,這是啥?難道匹配這個字符串?千萬不要這樣子以為,注意這里比較的是什么?是ebp+arg_4,不是上面的ebp+arg_0了。那就是說我們這里匹配的不是執行參數了,那應該是什么呢?arg_4arg_0相差了4(變量定義的時候dword ptr 8dword ptr 0C),那么arg_0代表的是第一個參數,其實arg_4代表的就是第0個參數,也就是程序名(這里可能又有人要問為什么是4,32位平台堆棧指針每次4字節變化)。其實下面是可以驗證的,因為在下面進行第一個參數匹配的時候先執行了add eax, 4指令,也就是地址變回去了。

    crac5

  • 下面就是判斷失敗的輸出了。判斷成功的輸出,我們可以看到對第一個參數進行了匹配,那么這個應該就是我們的第1個參數應該輸入的值了。同時下面還給出了輸入第一個參數不對的情況。

    crac6

    crac7

    crac8

  • 分析了這么多,好像是分析完了,於是我們就去測試,首先呢copy crackme2.exe crackmeplease.exe給程序改個名字,然后輸入crackmeplease.exe "I know the secret"發現輸出了一個字符串We have a little secret: Chocolate,可是這個我們沒見過這個明文字符串啊。好吧,那我們繼續看看是怎么回事吧。

    crac9

  • 我們繼續往下看,又是一個判斷,而且這還是一個循環,左邊這個很明顯是跳出循環的條件。看右邊的,有個操作是xor eax 42h,這個指令是將eax0x42異或,網上看有個指令是add eax,offset unk_403080。那么就很簡單了,后面的操作就是unk_403080中的字符逐個與0x42進行異或運算。可以驗證0x15 xor 0x42對應的ascii碼是W。至此分析惡意代碼樣本實驗結束。

    crac10

    crac11


實踐三:樣本分析,分析一個自制惡意代碼樣本

任務:現在你作為一名安全事件處理者的任務(如果你接受的話)就是深入分析這個二進制文件,並獲得盡可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最為重要的,請展示你獲取所有信息所采取的惡意代碼分析技術。

  • 提供對這個二進制文件的摘要,包括可以幫助識別同一樣本的基本信息。
  • 找出並解釋這個二進制文件的目的。
  • 識別並說明這個二進制文件所具有的不同特性。
  • 識別並解釋這個二進制文件中所采用的防止被分析或逆向工程的技術。
  • 對這個惡意代碼樣本進行分類(病毒、蠕蟲等),並給出你的理由。
  • 給出過去已有的具有相似功能的其他工具。
  • 可能調查出這個二進制文件的開發作者嗎?如果可以,在什么樣的環境和什么樣的限定條件下?

問題分析


  • 拿到一個程序第一步我們應該是干嘛,當然是打開他,在打開他之前,那這是一個惡意軟件,打開之前我們至少要打開監控工具吧。這也就是我們通常說的動態分析

  • 首先打開Filemon(文件),Regmon(注冊表),Wireshark(網絡)三個軟件進行監測。這個時候可以啟動這個惡意軟件了。(軟件在網上找的,古老)

  • 觀察Filemon我們可以看到程序文件RaDa.exe復制到了C:\RaDa\bin目錄下,並且新建了temp目錄。

    rad2

  • 繼續觀察Regmon,我們可以看到進行了很多注冊表的操作,其中其中有一個時在自啟動項里面加入了RaDa: C:\RaDa\bin\RaDa.exe

    rad3

    rad5

  • 繼續看Wireshark給我們的結果,時不時的訪問10.10.10.10,而且是80端口,估計是訪問某個html頁面,這個我也沒看懂,但是這個惡意軟件肯定是和網絡有關的無疑了。動態分析給我們的信息是在太少了,只能靜態分析了。

    rad4

  • 下面就是靜態分析了。首先准備工作一氣呵成:摘要filestrings脫殼

  • 利用md5sum RaDa.exe指令得到其md5摘要值為caaa6985a43225a0b3add54f44a0d4c7。利用file RaDa.exe識別出這是32位PE文件,並且還是個GUI文件,當時打開怎么沒反應,難道是要參數?同時這是一個加殼文件,可以用strings RaDa.exe輸出看是不是全部亂碼。

  • 下面我們超級巡警進行脫殼,這是一個UPX殼,並且成功脫殼。

    ra1

    ra2

  • 脫殼之后就是利用IDA Pro進行分析了。那么按照之前靜態分析的套路,我們首先就應該看字符串。

  • 首先你應該把Type改成unicode類型,不出意外你肯定會看到下列這些字符串。看下面幾種字符串,首先第一張圖明顯就是命令行參數了,可以自己逐個試一下,看看都有什么含義。第二張圖我們看到是一個版本作者的字符串。第三張圖可以看到是一個注冊表的字符串,但是這里有兩個,還有一個VMware tools值得我們注意。最后一張圖的字符串時RaDa_commands.html,很明顯,這個應該就是我們之前進行訪問的那個html網頁了。看明文字符串能帶給我們很多信息,篩選重要的字符串對於我們分析來說至關重要。

    ra6

    ra7

    ra8

    ra9

  • 字符串看完下一步我們就看匯編代碼邏輯了。首先我們還是看命令行參數的代碼邏輯。我們可以看到命令行參數都在sub_405E40這個函數中,這個函數應該就是處理命令行參數的。最下面給出每個命令行參數的詳細解釋,我也沒有一個一個分析。

    ra3

    ra4

參數 作用
--verbose 顯示Starting DDoS Smurf remote attack
--visible 決定在獲取html文件時,IE窗口是否可見
--server 指定命令文件控制服務器的ip地址、訪問協議及目錄等,默認是http://.10/RaDa
--commands 指定命令文件,默認是RaDa_commands.html
--cgipath 指定服務器上cgi文件的根目錄,默認是cgi-bin
--cgiget 指定負責文件上傳的cgi腳本,默認是upload.cgi
--cgiput 指定負責文件下載的cgi腳本,默認是download.cgi
--tmpdir 指定臨時文件夾的位置,默認是C:\RaDa\tmp
--period 指定兩次向服務器請求命令文件的時間間隔,默認是60秒
--cycles 指定多少次向服務器請求命令文件后退出,默認是0(沒有限制)
--help 輸出版權信息
--gui 使用該參數會使樣本出現一個GUI窗口
--installdir 指定樣本的安裝路徑,默認是C:\RaDa\bin
--noinstall 使用該參數,樣本將不會安裝、也不會添加注冊表
--uninstall 卸載樣本
--authors 如果確認不是在VMware的虛擬機中運行,則顯示樣本的作者;否則顯示參數不存在
  • 繼續根據線索分析,我們知道RaDa_commands.html這個字符串極其重要,因為我們看到有網絡訪問,那么我們就去尋找這個字符串對應的函數了。首先我們肯定很簡單的能尋找到這個字符串對應的函數是sub_404FB0,我們進入這個函數,看黃色部分的匯編代碼,很容易知道他是被拷貝到dword_40C030這個變量中了。還能看到很多其他的字符串拷貝(這些字符串就是默認的一些值)。

    ra11

  • 那么我們肯定也非常容易找到這個dword_40C030變量對應的函數了(鼠標放在上面就有了),也就是函數sub_4052C0 ,找到這個函數,並且打開其Call Graph方便查看。這里我們看到判斷了三個網段分別為192.168.172.16.10.,很明顯,這是三個私有網段,也就是說確保服務器在私有網段中,然后到服務器去取命令文件。

    ra12

    ra10

  • 有命令文件就一定有命令,那么下面就是一些具體的命令以及其功能。其實sleep應該是我們之前在做動態分析的時候最能感知的。

    rada9

    命令 功能
    exe 在宿主主機中執行指定的命令
    put 將宿主主機中的指定文件上傳到服務器
    get 將服務器中的指定文件下載到宿主主機中
    screenshot 截取宿主主機的屏幕並保存到tmp文件夾
    sleep 停止活動一段時間
  • 最后一部分分析,就是關於我們找到的字符串中有Vmware Tools,所以我們猜測這個程序是不是對虛擬機有所檢測(還是要說一下字符串對我們的分析來說至關重要)。

  • 首先我們找到該字符串對應的函數sub_404FB0,在這個函數中,這個字符串被拷貝到變量dword_40C070,繼續尋找這個變量對應的函數,找到是sub_40AAA0。接下來我們主要看看這個函數干嘛了以及哪里調用了這個函數。

    radas1

    radas2

  • 我們看到這個函數進行了網卡配置信息的查詢(Select),然后進行了右邊就確認dword_40C070對應的字符是否存在,並進行了Mac地址查詢,注冊表的查看等操作(Wscript.shell)。也就是判斷vmware tools是不是在注冊表里面。

    radas4

    radas5

  • 我們注意觀察當--authors在我們的虛擬機上輸出的是Unknow argument,可是我們確實也能在明文字符串信息中找到作者的信息。這個時候我們觀察到--authors參數對應的處理函數是sub_40B010,找到之后,我們打開Call Graph進行觀察,結果就顯而易見意見了,這里調用了sub_40AAA0函數,也就是上面虛擬機對應的處理函數,我們發現,這里的處理是如果是虛擬機就輸出Unknow argument,如果不是,就輸出正確的作者信息。到此,我們的分析部分也就結束了。

    radas7

    radas6


問題解答


分析部分其實已經講了非常透徹了,下面簡要梳理答案。

  • 問題一:md5摘要值為caaa6985a43225a0b3add54f44a0d4c7。32位PE GUI可執行程序,同時這是一個UPX加殼文件。

  • 問題二:通過上面的分析,我們知道用戶上網,就得到了攻擊者的指令,並且攻擊者可以完全控制該系統(指令),所以這應該是一個后門程序或者僵屍程序。

  • 問題三RaDa.exe被執行時,它會將自身安裝到系統C盤中,並通過修改注冊表的方式使得每次系統啟動,啟動后主要就是以下過程:

    • 從指定的web服務器請求指定的web頁面。
    • 解析獲得的web頁面,獲取其中的指令。
    • 執行解析出來的指令,主要的指令上面給出。
    • 等待一段時間后繼續按照這個循環執行。
  • 問題四:防分析技術如下:

    • UPX加殼,答案提到的手動修改沒有仔細研究。
    • 通過查看網卡的MAC地址以及查看VMware Tools的注冊表項 來判斷操作系統是否運行在VMware虛擬機上,如果是,則使用—-authors參數時將不會輸出作者信息。
    • Starting DDoS Smurf remote attack字符串可能讓別人聯想這是DDos攻擊。
  • 問題五:首先這個樣本不具有傳播和感染的性質,所以它不屬於病毒和蠕蟲。然后它也沒有將自己偽裝成有用的程序以欺騙用戶運行,所以他也 不屬於木馬。所以我認為他是一個后門程序或者僵屍程序

  • 問題六:Bobax,2004年發現的木馬,也是使用HTTP協議從指定的服務器下載命令文件,然后解析並執行其中的指令。還有特洛伊木馬Setiri。

  • 問題七:很簡單了,作者在上面的分析中給出了是Raul silesDavid Perze於2004年編寫的。


實踐四:取證分析,Windows 2000系統被攻破並加入僵屍網絡

任務:數據源是Snort收集的蜜罐主機5天的網絡數據源,並去除了一些不相關的流量,同時IP地址和其他敏感信息被混淆。回答下列問題

  • IRC是什么?當IRC客戶端申請加入一個IRC網絡時將發送哪個消息?IRC一般使用哪些TCP端口?
  • 僵屍網絡是什么?僵屍網絡通常用於干什么?
  • 蜜罐主機(IP:172.16.134.191)與哪些IRC服務器進行了通信?
  • 在這段觀察期間,多少不同的主機訪問了以209.196.44.172為服務器的僵屍網絡。
  • 哪些IP地址被用於攻擊蜜罐主機?
  • 攻擊者嘗試了哪些安全漏洞?
  • 哪些攻擊成功了?是如何成功的?

問題一:IRC是什么?當IRC客戶端申請加入一個IRC網絡時將發送哪個消息?IRC一般使用哪些TCP端口?


  • 因特網中繼聊天(Internet Relay Chat),簡稱IRC。IRC的工作原理非常簡單,您只要在自己的PC上運行客戶端軟件,然后通過因特網以IRC協議連接到一台IRC服務器上即可。IRC特點是通過服務器中繼與其他連接到這一服務器上的用戶交流。通過IRC簡介了解IRC的相關內容。
  • 注冊時需要發送的消息有三種,分別是口令,昵稱和用戶信息。格式如下:USER <username> <hostname> <servername> <realname>PASS <password>NICK <nickname>。注冊完成后,客戶端就使用JOIN信息來加 入頻道,格式如下:JOIN <channel>
  • IRC服務器明文傳輸通常在6667端口監聽,也會使用6660—6669端口。SSL加密傳輸在6697端口。
  • 注意:攻擊者濫用IRC構建僵屍網絡時,可能使用任意的端口構建IRC僵屍網絡控制信道,那么基於端口識別服務不再可靠,要進行基於應用協議特征進行識別(如USER/NICK)。

問題二:僵屍網絡是什么?僵屍網絡通常用於干什么?


  • 僵屍網絡是攻擊者出於惡意目的傳播僵屍程序控制大量主機,並通過一對多的命令與控制信道所組成的網絡。
  • 僵屍網絡,是互聯網上受到黑客集中控制的一群計算機,往往被黑客用來發起大規模的網絡攻擊,如分布式拒絕服務攻擊(DDoS)、海量垃圾郵件等,同時黑客控制的這些計算機所保存的信息也都可被黑客隨意“取用”。

問題三:蜜罐主機(IP:172.16.134.191)與哪些IRC服務器進行了通信?


  • 使用Wireshark打開數據文件,並設置過濾條件ip.src == 172.16.134.191 && tcp.dstport == 6667,因為我們上面的分析知道IRC通過6667端口,篩選之后,我們可以找到五個IRC服務器,分別為:

    • 209.126.161.29
    • 66.33.65.58
    • 63.241.174.144
    • 217.199.175.10
    • 209.196.44.172

    win1


問題四:在這段觀察期間,多少不同的主機訪問了以209.196.44.172為服務器的僵屍網絡。


  • 說明:這里先不要用kali嘗試了,在kali下tcpflow輸出的文件用grep命令有點問題(grep不到全部的字符串),這里坑了我很久,所以我就直接用在macOS上做了。估計是文件編碼的問題,如果有誰知道麻煩告知,謝謝。

  • 這里還是主要參考答案方法3的思路。首先我們用tcpflow進行分流,指令為tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"這條指令的含義就是讀取文件,篩選host和端口6667后進行分流。生成了一個report文件和兩個分流的文件,當然我們主要看的就是209.開頭的文件。從這個文件中找到有多少個主機訪問了209.196.44.172

    JfuuVI.png

  • 下一步,由於macOS字符編碼的問題,參考RE error: illegal byte sequence on Mac OS X。所以使用sed命令可能導致illegal byte sequence問題。所以限先執行以下兩條指令export LC_COLLATE='C'export LC_CTYPE='C'。同時下面會用到很多Linux指令,建議大家參考Linux菜鳥教程查看相關的教程。

win4

  • 下面我們輸入如下指令進行搜索有多少主機連接。下面講解這個指令:首先這個指令肯定是管道連接的,第一條是cat命令,連接209.輸出文件。第二條grep搜索獲取昵稱輸出行。第三條sed去除前綴,最后的g是全局的意思。第三條tr將空格轉換為換行。第四條tr -d刪除\r。第五條grep -v就是NOT指令,去除空行。第六條sort -u排序並去除重復。最后一條wc -l輸出行數。所以看到輸出我們就知道總共有3457個主機訪問了以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

win5


問題五:哪些IP地址被用於攻擊蜜罐主機?


  • 因為蜜罐的特殊性,只要是進入蜜罐的流量都應該被認為是攻擊。所以首先明確被攻擊的端口。使用下面的指令查找端口並輸出到1.txt中,如圖所示,查找到148個被攻擊的端口。大部分指令上面講過了,我們看cut -d是指定字段的分隔符,uniq命令用於檢查及刪除文本文件中重復出現的行列,一般與sort命令結合使用。

tcpdump -n -nn -r botnet_pcap_file '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

JfWfKK.png

JfW2gx.png

  • 下面我們使用下面的指令找出所有的可能連接的主機的IP地址。這個指令的作用就是將連接IP地址輸出到2.txt中,我們看到總共有165個主機可能被用於入侵蜜罐。其中awk -F就是指定分隔符,可指定一個或多個,print后面做字符串的拼接。

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

JfWg81.png

JfWRv6.png


問題六、七:攻擊者嘗試了哪些安全漏洞?哪些攻擊成功了?是如何成功的?


  • 攻擊了哪些安全漏洞首先要了解攻擊了哪些端口,使用snort -r botnet_pcap_file -c /etc/snort/snort.conf -K ascii指令先查一下網絡流分布情況。我們發現大部分都是TCP包,有一部分UDP包,所以我們首先應該篩選出響應的TCP端口和UDP端口

JfObTI.png

  • 利用下面的指令篩選出蜜罐主機相應的TCP端口,指令上面都講過了,差不多,多了一個篩選條件就是響應0x12。輸出可以看到TCP響應端口為135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)。同樣的,將指令協議部分改成udp就可以查詢udp端口響應,我們能查到僅有137(netbios-ns)號端口響應。

tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

JfX6gS.png

  • 下面就是就上面幾個端口進行逐個分析,先說明udp 137號端口,這個是個在局域網中提供計算機的IP地址查詢服務,處於自動開放狀態,所以訪問這個端口肯定就是NetBIOS查點了
  • 接下來我們看tcp 135號端口和25號端口,我們看到只是進行了連接,但是是沒有數據的交互的,所以這攻擊者可能是對這兩個端口進行了connect掃描。

JhuzgU.png

  • 然后看TCP 80端口,首先利用Wireshark進行篩選tcp.dstport==80 && ip.dst == 172.16.134.191,首先連接最多的就是24.197.194.106這個IP,他的行為就是不停的用腳本在攻擊IIS服務器的漏洞,從而獲取系統權限,正是因為用的腳本,所以才會有這么多記錄。

JhMfl8.png

  • 接下來是68.169.174.108訪問的80端口,好吧,都是正常的HTTP訪問,並無異常。同時,最后還有一個192.130.71.66也是一個正常的訪問,就不再敘述了。

JhQVXD.png

  • 接下來是210.22.204.101訪問的80端口,這么多C是什么情況,看來攻擊者是想通過緩沖區溢出攻擊來獲得一個命令行了。

JhQRE9.png

  • 最后一個訪問80端口的是218.25.147.83,看到這么多N我還以為是緩沖區溢出攻擊呢,但是繼續往下看,你會看到c:\notworm,稍微百度下你就會發現這是一個紅色代碼蠕蟲攻擊。

Jhldqe.png

  • 最后就是看80端口有沒有攻擊成功了,我們通過蜜罐主機80端口向外的流量進行分析,發現蜜罐主機做的幾次回應均為一個iis服務器的默認頁面,所以80端口的這些攻擊均失敗。

Jh1j6f.png

  • 接下來是TCP 139號端口。這個也比較簡單,雖然有很多連接到這個端口的,但是基本都是一樣的,大部分都是連接,然后很多空會話,同樣這個也沒有成功,這個應該是個SMB查點。

Jh87RI.png

  • 下面分析與139端口關系極其密切的TCP 445端口。這個端口連接非常多,同時我們也能看到許多\samr, \srvsvc,這些都是基本的查點,這里確實不好找,建議用strings查詢相關的字符串進行分析,或者就像我一樣硬看,查詢字符串后很容易發現一個PSEXESVC.EXE字符串,同時你在Wireshark中也能找到,是由61.111.101.78發起的,通過對這種字符串的搜索,發現這是一種Dv1dr32蠕蟲,這種蠕蟲正是通過IRC進行通信。那么我們怎么判斷是不是攻擊成功了呢?我們同樣找出口流量,發現每個IP地址連入的連接都有響應的回應,並且返回信息中含有\PIPE\ntsvcs,通過搜索可知,這是一個遠程調用,所以攻擊者肯定是獲得了權限,因此這個攻擊成功的。

JhNWUU.png

JhaQld.png

  • 最后還剩一個TCP 4899端口。只有一個IP訪問過,即210.22.204.101。可以查得4899端口是一個遠程控制軟件radmin服務端監聽端口,這個軟件不是木馬,應該是上面攻擊成功后上載的這個軟件方便控制。到此,我們的分析就結束啦。

Jhd334.png


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


  • 問題一:對匯編代碼的了解不夠,導致分析過程可能存在不完整、不完全正確的部分。
  • 問題一解決方案:稍微復習了一下匯編的指令。
  • 問題二:tcpflow分流的編碼,kali下用grep無法識別。
  • 問題二解決方案:在自己的macOS上沒有問題。

4.學習感悟、思考

  • 其實每次做實驗,感覺都有很多東西可以擴展,特別是單純使用工具感覺無聊的時候,但是一擴展就要看很多東西,作業又很多,感覺解放生產力會更好。
  • 這次實驗真的比較難,很多內容我雖然弄懂了,但是還有一些深層和細節不懂,強烈希望老師能講解下。
  • 很多內容沒有按照答案的思路來分析,但是感覺比答案稍微簡介點,尤其用Wireshark分析方面。
  • 日志分析的重要性在於化繁為簡,分門別類,提取有效信息。
  • 文本搜索匹配真的能做很多事。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM