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

惡意代碼安全攻防

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


0.整體結構


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

1.實踐內容


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

  • 惡意代碼基礎知識
    惡意代碼簡單介紹
    計算機病毒
    網絡蠕蟲
    後門與木馬
    殭屍程序與僵屍網絡
    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.linux

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

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

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

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

計算機病毒


  • 定義:計算機病毒是一種可以自我複製的代碼,經過將自身嵌入其餘程序進行感染,而感染過程一般須要人工干預才能完成。這裏必須記住:計算機病毒是藉助人類幫助從一臺計算機傳至另外一臺計算機,這也是其傳播機制。
  • 特性:感染性(本質特性)、潛伏性、可觸發性、破壞性、衍生性。
  • 感染及引導機制
    • 感染可執行文件(最爲廣泛的方式):前綴感染機制(病毒將自身複製到宿主程序的始端)、後綴感染機制(病毒將自身複製到宿主程序的末端)、插入感染機制(病毒在感染宿主程序時,病毒代碼放在宿主程序的中間)。
      vi1.pngshell

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

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


網絡蠕蟲


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

vi2.png


後門與木馬


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

殭屍程序與僵屍網絡


  • 殭屍程序定義:攻擊者用於一對多控制目標主機的惡意代碼。
  • 僵屍網絡定義攻擊者傳播殭屍程序控制大量主機,並經過一對多的命令與控制信道所組成的網絡。(注意仔細品味幾種惡意程序的定義的黑體字,體會不一樣)
  • 僵屍網絡功能結構:主體功能分爲命令控制模塊和傳播模塊,輔助功能分爲信息竊取模塊、主機控制模塊、下載更新模塊、防分析檢測模塊。
  • 僵屍網絡類型:IRC僵屍網絡(基於IRC互聯網實時聊天協議構建)、HTTP僵屍網絡(Web網站方式構建)、P2P僵屍網絡(P2P協議構建)。
  • IRC僵屍網絡工做機制圖

vi3.png


Rootkit


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

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

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

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

    vi4.png


惡意代碼分析技術


惡意代碼分析基礎


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

惡意代碼分析環境

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

vi5.png

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

    vi6.png

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

vi7.png


惡意代碼靜態分析


  • 定義:經過反病毒引擎掃描識別已知的惡意代碼家族和變種名,逆向分析惡意代碼模塊構成,內部數據結構,關鍵控制流程等,理解惡意代碼的機理,並提取特徵碼用於檢測。
  • 惡意代碼靜態分析方法列表:後面會簡單解釋。這裏同時提供一個博客主要是分析惡意代碼分析實戰
分析方法 目的 使用工具 難度
反病毒軟件掃描 標識已知惡意代碼 反病毒引擎,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.png

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

    rada2.png

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

    rada3.png

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

    rada4.png

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

    rada5.png

    rada6.png


實踐二:分析Crackme程序

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


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

  • 首先分析crackme1.exe。對crackme1.exe進行執行,猜想參數執行,能夠發現一個參數輸入與其餘的參數輸入獲得的輸出明顯不同,因此能夠猜想這個程序的輸入是一個參數

    crack1.png

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

    crack2.png

  • 接下來看函數調用圖(Function Call),上面說了,要找字符串操做相關的函數,以及輸出函數,由於咱們測試程序的時候明顯是有輸出的。若是你能理解,那麼你確定找的是下圖部分,能夠看到字符串比較函數strcmp和輸出函數fprintfprintf。那麼顯而易見,sub_401280這個函數就顯得相當重要了。

    crack3.png

  • 下面咱們就看這個函數的彙編代碼了,其實彙編我也不大會,不過不打緊,能看懂基本操做就好了。打開這個函數,你就能夠看到pushsubmove等操做,這些都是基本的彙編操做,想補如下就去網上稍微看看,我就不展開了,直入主題,首先push了ebp入棧,而後比較最後一個cmp比較函數參數是否是2(這裏爲何是2?去學C吧)。

    crack4.png

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

    crack5.jpg

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

    crack6.jpg

    crack7.jpg

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

    crack8.png

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

    crac1.png

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

    crac2.png

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

    crac3.jpg

    crac4.jpg

  • 下面的就是參數的個數對了的狀況,這是啥?難道匹配這個字符串?千萬不要這樣子覺得,注意這裏比較的是什麼?是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.jpg

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

    crac6.jpg

    crac7.jpg

    crac8.jpg

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

    crac9.png

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

    crac10.jpg

    crac11.jpg


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

任務:如今你做爲一名安全事件處理者的任務(若是你接受的話)就是深刻分析這個二進制文件,並得到儘量多的信息,包括它是如何工做的,它的目的以及具備的能力,最爲重要的,請展現你獲取全部信息所採起的惡意代碼分析技術。

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

問題分析


  • 拿到一個程序第一步咱們應該是幹嗎,固然是打開他,在打開他以前,那這是一個惡意軟件,打開以前咱們至少要打開監控工具吧。這也就是咱們一般說的動態分析

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

  • 觀察Filemon咱們能夠看到程序文件RaDa.exe複製到了C:\RaDa\bin目錄下,而且新建了temp目錄。

    rad2.png

  • 繼續觀察Regmon,咱們能夠看到進行了不少註冊表的操做,其中其中有一個時在自啓動項裏面加入了RaDa: C:\RaDa\bin\RaDa.exe

    rad3.png

    rad5.png

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

    rad4.png

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

  • 利用md5sum RaDa.exe指令獲得其md5摘要值爲caaa6985a43225a0b3add54f44a0d4c7。利用file RaDa.exe識別出這是32位PE文件,而且仍是個GUI文件,當時打開怎麼沒反應,難道是要參數?同時這是一個加殼文件,能夠用strings RaDa.exe輸出看是否是所有亂碼。

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

    ra1.png

    ra2.png

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

  • 首先你應該把Type改爲unicode類型,不出意外你確定會看到下列這些字符串。看下面幾種字符串,首先第一張圖明顯就是命令行參數了,能夠本身逐個試一下,看看都有什麼含義。第二張圖咱們看到是一個版本做者的字符串。第三張圖能夠看到是一個註冊表的字符串,可是這裏有兩個,還有一個VMware tools值得咱們注意。最後一張圖的字符串時RaDa_commands.html,很明顯,這個應該就是咱們以前進行訪問的那個html網頁了。看明文字符串能帶給咱們不少信息,篩選重要的字符串對於咱們分析來講相當重要。

    ra6.jpg

    ra7.jpg

    ra8.jpg

    ra9.jpg

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

    ra3.jpg

    ra4.jpg

參數 做用
--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.jpg

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

    ra12.jpg

    ra10.jpg

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

    rada9.jpg

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

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

    radas1.jpg

    radas2.jpg

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

    radas4.jpg

    radas5.jpg

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

    radas7.jpg

    radas6.jpg


問題解答


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

  • 問題一: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.png


問題四:在這段觀察期間,多少不一樣的主機訪問了以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.png

  • 下面咱們輸入以下指令進行搜索有多少主機鏈接。下面講解這個指令:首先這個指令確定是管道鏈接的,第一條是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.png


問題五:哪些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


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


  • 攻擊了哪些安全漏洞首先要了解攻擊了哪些端口,使用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分析方面。
  • 日誌分析的重要性在於化繁爲簡,分門別類,提取有效信息。
  • 文本搜索匹配真的能作不少事。

參考資料

相關文章
相關標籤/搜索