2020-2021-2 網絡對抗技術 20181318 Exp4 惡意代碼分析


一、實驗目標

  1. 監控自己系統的運行狀態,看有沒有可疑的程序在運行。
  2. 分析一個惡意軟件,就分析Exp2或Exp3中生成后門軟件;分析工具盡量使用原生指令或sysinternals,systracer套件。
  3. 假定將來工作中你覺得自己的主機有問題,就可以用實驗中的這個思路,先整個系統監控看能不能找到可疑對象,再對可疑對象進行進一步分析,好確認其具體的行為與性質。

二、實驗內容

  • 系統運行監控

    • 使用如計划任務,每隔一分鍾記錄自己的電腦有哪些程序在聯網,連接的外部IP是哪里。運行一段時間並分析該文件,綜述分析結果。
    • 安裝配置sysinternals里的sysmon工具,設置合理的配置文件,監控自己主機的重點事可疑行為。
  • 分析該軟件在(1)啟動回連,(2)安裝到目標機(3)及其他任意操作時(如進程遷移或抓屏,重要是你感興趣)。該后門軟件

    • 讀取、添加、刪除了哪些注冊表項
    • 讀取、添加、刪除了哪些文件、
    • 連接了哪些外部IP,傳輸了什么數據

三、基礎知識

1. 惡意代碼

  • 定義:泛指指沒有作用卻會帶來危險的代碼,即使計算機按照攻擊者的意圖運行以達到惡意目的的指令集合。
    • 指令集合: 二進制執行文件, 腳本語言代碼, 宏代碼, 寄生在文件、啟動扇區的指令流
  • 特征:①本身是計算機程序 ②有惡意的目的 ③ 通過執行發生作用
  • 目的:技術炫耀/惡作劇、遠程控制、竊取私密信息、盜用資源、 拒絕服務/破壞,...
  • 常見的惡意代碼:計算機病毒、蠕蟲、惡意移動代碼、后門、特洛伊木馬、僵屍程序、Rootkit、邏輯炸彈...
    • 計算機病毒:需要傳播受感染的駐留文件來進行復制,一般需要宿主程序被執行或人為交互才能運行。普通病毒的傳染能力主要是針對計算機內的文件系統而言。
    • 蠕蟲:是一種通過網絡傳播的惡性病毒,它不使用駐留文件即可在系統之間進行自我復制,蠕蟲病毒的傳染目標是互聯網內的所有計算機。

2. schtasks

  • 定義:計划命令,程序以定期或在特定時間運行,在計划中添加和刪除任務,啟動和停止按需任務,以及顯示和更改計划任務。

  • schtasks.exe 工具與 控制面板 中的 "計划任務" 執行相同的操作。

  • 語法:schtasks +參數 參數如下:

    • change:更改任務
    • create:計划新的任務。
    • delete:刪除計划任務。
    • end:停止任務啟動的程序。
    • query:顯示計划在計算機上運行的任務。
    • run:立即啟動計划任務。
  • 實例

    `schtasks /create /TN netstat1318 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt`
    
    • TN:Task Name,本例中是netstat1318
    • SC:表示計時方式,我們以分鍾計時填MINUTE
    • MO:MOdifier
    • TR:Task Run,要運行的指令是 netstat
    • bn:b表示顯示可執行文件名,n表示以數字來顯示IP和端口
    • >:表示輸出重定向,將輸出存放在c:\netstatlog.txt文件中

    備注:

    /Tn/s 參數用於識別任務。 /Tr/ru/rp 參數指定可以更改的任務的屬性

    /Ru/rp 參數指定運行任務所用的權限。 /U/p 參數指定用於更改任務的權限。

  • 具體使用說明請參考Microsoft官方文檔

3.sysmon

  • sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具。它以系統服務和設備驅動程序的方法安裝在系統上,並保持常駐性。

  • sysmon用來監視和記錄系統活動,並記錄到windows事件日志,可以提供有關進程創建,網絡鏈接和文件創建時間更改的詳細信息。

  • 可選擇的事件過濾器有:

    • ProcessCreate 進程創建
    • FileCreateTime 進程創建時間
    • NetworkConnect 網絡鏈接
    • ProcessTermina 進程結束
    • DriverLoad 驅動加載
    • ImageLoad 鏡像加載
    • CreateRemoteTh 遠程線程創建
    • RawAccessRead 驅動器讀取
    • ProcessAccess 進程訪問
    • FileCreate 文件創建
    • RegistryEvent 注冊表事件
    • FileCreateStre 文件流創建

    詳細說明請參考使用輕量級工具sysmon監視你的系統

  • 監控系統的基本操作可分為以下三步:

    • 確定要監控的目標:寫好過濾條件(相當於白名單),多多益善,信任的程序盡量不要記到日志里(日志多了不好分析)。
    • 寫好配置文件.xml文件
      • 記錄所有網絡連接就可以簡單寫為<NetworkConnect>*</NetworkConnect>
      • exclude相當於白名單,凡是未聲明的都記錄下來。include相當於黑名單。
      • 注意規則大小寫敏感。
    • 啟動sysmon

四、實驗過程

1.使用schtasks指令監控系統(使用如計划任務,每隔一分鍾記錄自己的電腦有哪些程序在聯網,連接的外部IP是哪里。運行一段時間並分析該文件,綜述分析結果)

  • 在命令行中輸入以下命令,創建任務計划netstat1318

    `schtasks /create /TN netstat1318 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt`
    

    image

  • 在C盤中創建一個netstat1318.bat腳本文件,寫入以下內容

    date /t >> c:\netstat1318.txt
    time /t >> c:\netstat1318.txt
    netstat -bn >> c:\netstat1318.txt
    
  • 在任務計划程序中找到計划任務

  • 編輯計划任務,使其運行正確的腳本文件,也就是我們剛剛編寫的.bat

image

  • 編輯完成后,右鍵選擇運行,此時可以在C盤目錄下看到以下三個文件

image

  • 執行腳本一定時間,就可以在netstat1318.txt文件中查看到本機在該時間段內的聯網記錄:

image

  • 當記錄比較長的時間后,我們已經獲得比較豐富分記錄數據,此時停止任務,將所得數據在Excel中進行分析。

    • 導入文本數據:新建excel文件->選擇上方“數據”->選擇“導入數據”->選擇“導入數據”->選擇“直接打開數據文件”

    image

    • 選擇數據源文件:在C盤中選中netstat1318.txt

      image

    • 依次選擇其他編碼、分隔符號,然后將分隔符號的所有選項都選中,點擊完成即可

      image
      image

  • 創建數據透視圖

    • 選中我們所要分析的列,選擇“插入”——數據透視圖——新工作表

    image

    • 在新的工作表中,在右側字段列表中篩選我們不需要的字段

    image

    • 將字段列表拖到下方的中,就生成了我們所需的數據透視圖

    image

image

  • 分析
    • 從圖中可以看出連網最多的就是Edge瀏覽器,連接的外部地址是我打開的相關頁面的,大多為http和https連接
    • 第二個多的就是VMware,這是因為在做實驗,打開了虛擬機
    • 接着可以看到有WeChat、wps、typora、sougou等程序,在做實驗的時候這些確實在使用,且連網了
    • 有一個叫做QQPCTray.exe的連網頻率也比較高,查資料后知道它是騰訊公司推出的qq電腦管理程序軟件。該程序是對用戶的系統進行安全檢測、修復漏洞及木馬查殺等功能。
    • 還有一個叫做sesvc.exe的進程,它是360瀏覽器的進程,因為今天在教室連接教學樓wifi的時候使用了360瀏覽器,所以出現此進程也是正常的。
    • 還可以看到實驗二中生成的后門程序20181318_backdoor也進行連網了,這是因為我在后續的實驗中嘗試與kali機進行回連。
      • 從下圖中我們可以看到,目的地址和端口號就是我們在用msf生成后門程序時所設定的,ip=kali機地址,端口=1318
        image

2.使用sysmon工具監控系統(安裝配置sysinternals里的sysmon工具,設置合理的配置文件,監控自己主機的重點事可疑行為。)

(1)明確要監控的目標,我在這里選擇的是:進程創建ProcessCreate、進程創建時間FileCreatTime、網絡連接NetworkConnect、遠程線程創建CreateRemoteThread。

(2)寫好配置文件sysmon2018138.xml,內容如下:

<Sysmon schemaversion="4.12">
  <!-- Capture all hashes -->
  <HashAlgorithms>*</HashAlgorithms>
  <EventFiltering>
    <!-- Log all drivers except if the signature -->
    <!-- contains Microsoft or Windows -->
    <ProcessCreate onmatch="exclude">     
      <Image condition="end with">msedge.exe</Image> 
      <Image condition="end with">360se.exe</Image>
    </ProcessCreate>

    <ProcessCreate onmatch="include"> 
      <ParentImage condition="end with">cmd.exe</ParentImage>
    </ProcessCreate>

    <FileCreateTime onmatch="exclude" >
      <Image condition="end with">msedge.exe</Image>
      <Image condition="end with">360se.exe</Image>
    </FileCreateTime>
    
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">msedge.exe</Image>
      <Image condition="end with">360se.exe</Image>
      <SourcePort condition="is">137</SourcePort>
      <SourceIp condition="is">127.0.0.1</SourceIp>
    </NetworkConnect>

    <NetworkConnect onmatch="include">     
      <DestinationPort condition="is">80</DestinationPort>      
      <DestinationPort condition="is">443</DestinationPort>    
    </NetworkConnect>

    <CreateRemoteThread onmatch="include">
      <TargetImage condition="end with">explorer.exe</TargetImage>
      <TargetImage condition="end with">svchost.exe</TargetImage>
      <TargetImage condition="end with">firefox.exe</TargetImage>
      <TargetImage condition="end with">winlogon.exe</TargetImage>
      <SourceImage condition="end with">powershell.exe</SourceImage>
    </CreateRemoteThread>
  </EventFiltering>
</Sysmon>

參數解釋:

  • exclude相當於白名單,不用記錄。include相當於黑名單。

  • ProcessCreate:進程創建。Image condition要根據自己使用的瀏覽器更改。由於我使用的是360和edge瀏覽器,所以在我的配置文件中,排除了(不記錄)進程名為msedge.exe和360se.exe的進程。但是要記錄以cmd.exe結尾的進程記錄。

  • FileCreatTime:進程創建時間。這里排除(不記錄)瀏覽器進程的創建時間。

  • NetworkConnect:網絡連接。過濾掉(不記錄)瀏覽器的網絡連接,源IP地址為127.0.0.1、源端口為137的連接服務。包含(記錄)目的端口為80(http)和443(https)的網絡連接。

    • 137端口:提供局域網中ID或IP查詢服務,一般安裝了NetBIOS協議后,該端口會自動處於開放狀態。
    • 127.0.0.1:環回地址,表示本機。
  • CreateRemote:遠程線程創建。記錄的線程如下:

    • explorer.exe:Windows程序管理器或者文件資源管理器
    • svchost.exe:一個屬於微軟Windows操作系統的系統程序,是從動態鏈接庫 (DLL) 中運行的服務的通用主機進程名稱。
    • winlogon.exe:Windows NT 用戶登陸程序,用於管理用戶登錄和退出。
    • powershell.exe:專為系統管理員設計的新 Windows 命令行外殼程序。該外殼程序包括交互式提示和腳本環境,兩者既可以獨立使用也可以組合使用。

(3)啟動sysmon(要以管理員的身份運行命令行)

  • 輸入命令Sysmon64.exe -i sysmon20181318.xml,安裝sysmon,結果如下:

image

  • 查看“事件查看器”,選擇日志的位置,應用程序和服務日志/Microsoft/Windows/Sysmon/Operational

image

在這里,我們可以看到按照配置文件的要求記錄的新事件,以及事件ID、任務類別、詳細信息等。

  • 我們隨意選中一條日志進行分析
    image
    image
    從圖中可以看到進程號、路徑、源ip、源端口、目的ip、目的端口(80),使用的是http協議

  • 運行我們在實驗二中生成的后門程序20181318_backdoor.exe,並啟動回連到kali虛擬機中。我們可以在事件查看器中找到此條日志
    image

  • 緊接着,我在msf監聽環境下,輸入了shell指令,獲得了Windows的cmd,日志如下:
    image
    在獲取到命令行后,我發現了一條有關conhost.exe的記錄
    image
    Conhost.exe進程是微軟為其Vista以及Win7、Windows 2008(服務器版)系統定義的系統文件,在系統中被稱為“控制台窗口主機”。其功能主要是為命令行程序(cmd.exe)提供類似於Csrss.exe進程的圖形子系統等功能支持,

  • 然后又輸入了ipconfig指令,日志如下:
    image
    我們可以發現,此時的路徑變為了SysWOW64,這是個什么文件夾呢?與system32有什么區別和聯系呢?

    • SysWow64文件夾,是64位Windows,用來存放32位Windows系統文件的地方。
    • Windows下面的命令行是64位的,而kali回連獲得的是32位的,所以會出現此條日志。
  • 在事件查看器中,我們可以發現許多svchost.exe的記錄。svchost.exe 是從動態鏈接庫 (DLL) 中運行的服務的通用主機進程名稱。這個程序對系統的正常運行是非常重要,而且是不能被結束的。許多服務通過注入到該程序中啟動,所以會有多個該文件的進程。

  • 我們還可以發現,RuntimeBroker.exe的占比也很高,查資料知道, Runtimebroker.exe是Win10系統的一個核心進程,用來進行Metro App權限管理的一個進程。

  • SearchFilterHost.exe的出現頻率也很高,它是桌面搜索引擎的索引程序,其主要作用是建立快速索引文件,讓用戶能夠更好的搜索出電腦中的任意資料。它會在計算機空閑時自動掃描索引位置的文件名、屬性信息和給定類別的文件內容,這些索引位置默認包括桌面、收藏夾、開始菜單、系統目錄。

3.使用VirusTotal分析惡意軟件

  • 把生成的后門程序在VirusTotal進行分析(也可以使用VirusScan工具),結果如下:52/69,被殺軟查出來的比率還是蠻高的

image

  • 繼續查看此惡意軟件的基本屬性,可以看出它的SHA-1、MD5摘要值、文件類型、文件大小,以及TRiD文件類型識別結果。

image

  • 還可以看到此軟件的頭部、各個節的相關信息,以及引入的動態鏈接庫

image

  • 如果是加了殼的程序,還可以看出它使用的加殼的相關信息。

4.使用PEiD分析

  • PEiD(PE Identifier)是一款著名的查殼工具,其功能強大,幾乎可以偵測出所有的殼,其數量已超過470種PE文檔的加殼類型和簽名。

  • 首先我們用它來檢查最普通的后門程序20181318_backdoor.exe
    image
    發現什么也沒有查到,這是正確的結果

  • 接着我們來檢查一下使用了壓縮殼的軟件
    image
    發現他查到了壓縮殼的相關信息

  • 再來檢查經過壓縮殼又加上了加密殼的軟件
    image
    誒,結果和上面的一樣,只查出來了壓縮殼的信息,這是為什么呢?難道peid檢查不出來加密殼嗎?

  • 最后檢查一下只用了加密殼的軟件
    image
    結果證明,他確實檢查不出來加密殼的存在,我猜測是他不認識這個殼,它的庫里面沒有這個殼的相關信息,看來它的功能也不是那么強大。

5.使用PE Explorer分析

  • PE Explorer是一款資源編輯器,它支持直接查看、修改軟件的資源,包括菜單、對話框、字符串表等,軟件還具備有W32DASM 軟件的反編譯能力和PEditor軟件的PE文件頭編輯功能。

  • 我們用它打開1318_upx.exe,我們可以看到這個軟件的文件頭信息(基本信息),比如節對齊粒度、文件對齊粒度、時間戳、映像基址ImageBase等等

image

  • 我們通過視圖還可以查看數據目錄、節頭等詳細信息

image

image

image

  • 通過視圖——引入可以查看此軟件引用的dll

image

  • 相關dll說明

    • kernel32.dll:Windows 中非常重要的32位動態鏈接庫文件,屬於內核級文件。它控制着系統的內存管理、數據的輸入輸出操作和中斷處理,當Windows啟動時,kernel32.dll就駐留在內存中特定的寫保護區域,使別的程序無法占用這個內存區域。
    • user32.dll:Windows用戶界面相關應用程序接口,用於包括Windows處理,基本用戶界面等特性,如創建窗口和發送消息。它是一個對系統很關鍵或很可疑的文件,易遭受木馬病毒破壞導致系統找不到此文件,出現錯誤提示框。
    • msvcrt.dll:微軟在windows操作系統中提供的C語言運行庫執行文件。
    • wsock.dll:Windows Sockets應用程序接口,用於支持很多Internet和網絡應用程序。

    我檢查其他幾個后門程序后發現,他們都引用了kernel32.dll,可以看出他對於后門程序的重要性

6.使用Process Monitor分析

  • Process Monitor 是一款由 Sysinternals 公司開發的包含強大的監視和過濾功能的高級 Windows 監視工具,可實時顯示文件系統、注冊表、進程/線程的活動。總體來說,Process Monitor相當於Filemon+Regmon,其中的Filemon專門用來監視系統中的任何文件操作過程,而Regmon用來監視注冊表的讀寫操作過程。

  • 打開軟件,可以看到此時計算機各個進程的詳細記錄,包括時間、進程名、進程ID、操作、路徑等。下圖是我的后門進程20181318_backdoor.exe
    image

  • 后門進程的事件屬性如下:
    image

  • 后門進程引用的各種庫如下:
    image

7.使用systracer動態分析

點擊右側的take snapshot,拍攝快照。點擊start開始,不用點擊stop,當拍攝完畢會自動停止。我們總共截了以下四張快照:

  • 快照一:未移植后門程序,保存為Snapshot #1
  • 快照二:移植后門程序,保存為Snapshot #2
  • 快照三:運行后門程序並在kali中實現回連,保存為Snapshot #3
  • 快照四:在kali中使用dir指令,保存為Snapshot #4
  • 快照五:在kali中使用record_mic指令,保存為Snapshot #5

接下來我們對比快照,分析惡意軟件在執行過程中系統有哪些變化

  • 通過右下角的compare鍵或者View Differences Lists比對各快照,可以選擇Only Difference只查看不同的項,在右下角可以選擇對比哪兩張快照

  • 對比快照一和快照二(后門程序移植前后)

image

image

發現增加了我的后門程序

image

image

可以看到增加、刪除了一些文件、目錄,鍵值也有變化

  • 對比快照二和快照三(后門程序運行前后)
    點擊application,在opened ports中我們能看到后門連接的相關信息

image

opened handles中,可以看見增加了一些文件,也刪除了一些文件

image

loaded dll中,啟動后門程序后增加和刪除的dll文件

image

c:\Windows\Prefetch目錄下相關文件有變動

image

  • 對比快照三和快照四(kali機輸入dir)

我們可以看到在輸入dir后,VMware有增加和刪除的操作

image

loaded dll中,可以看到增加和刪除的dll文件

image

  • 對比快照四和快照五(kali機輸入record_mic)

可以發現注冊表有變化

image

新建了很多連接,其中有與后門程序相關的Apache HTTP Server

image

loaded dll中,可以看到增加和刪除的dll文件

image

8.使用wireshark抓包分析惡意軟件

  • 運行后門20181318_backdoor.exe,在kali中回連。把過濾規則設置為ip.addr == 192.168.174.129,只留下與kali機有關的包

  • 我們可以看到前三個包為TCP連接的三次握手
    image

  • 在kali中輸入dir,發現wireshark又捕獲到了許多PSH+ACK包,可以判斷有數據在傳輸
    image

五、實驗后問題回答

1.如果在工作中懷疑一台主機上有惡意代碼,但只是猜想,所有想監控下系統一天天的到底在干些什么。請設計下你想監控的操作有哪些,用什么方法來監控。

  • 使用windows自帶的schtasks指令,設置一個計划任務,監視系統進程的運行情況。在一段時間后,將所得數據在Excel中得到數據透視圖,繼續進行分析。
  • 使用Sysmon,編寫配置文件,記錄有關的系統日志
  • 使用Process Explorer工具,監視進程執行情況。
  • 使用Process Monitor工具,監視文件系統、注冊表、進程/線程的活動。
  • 使用SysTracer,一定時間間隔拍攝一張快照,對比不同快照,查看是否有可疑行為

2.如果已經確定是某個程序或進程有問題,你有什么工具可以進一步得到它的哪些信息。

  • 靜態分析

    • 使用virustotal或virscan,對惡意軟件進行分析,可以得到它的基本屬性、頭部、各個節以及引用的鏈接庫的信息
    • 使用PEiD,查看惡意軟件是否加殼,加的什么殼
    • 使用PE Explorer,查看惡意軟件的PE頭、數據目錄、節頭表信息,以及引用的鏈接庫的信息
    • 使用String工具,分析惡意程序是否包含可疑字符串
  • 動態分析

    • 使用SysTracer,查看此惡意軟件對注冊表和文件的修改
    • 使用Wireshark抓包,分析惡意軟件的通信過程
    • 使用Process Explorer或Process Monitor,監視文件系統、注冊表,分析惡意軟件的活動

六、實驗中的問題

  1. 在編輯好任務計划后,右擊運行,在c盤目錄下一直不出來netstat1318.txt文件
  • 原因:在編輯任務計划時,“條件”選項卡中電源選項的默認操作為“只有在計算機使用交流電源時才啟動此任務”,在使用電池電源時停止任務。而我在做實驗時並沒有給電腦充電,所以任務計划一直沒有運行。
    image
  • 解決方法:將此默認設置勾選掉,這樣電腦就算不充電也可以正常運行任務計划。
  1. 在安裝sysmon的時候出現以下報錯:
    image
  • 原因:在配置文件sysmon20181318.xml中,版本號寫的不對
  • 解決方案:將xml文件的第一行,版本號改為3.10即可
    image
  1. 不知道為什么,所有的后門程序都無法回連kali虛擬機了
    image
  • 解決方案:將kali的網絡配置換為橋接模式

七、實驗心得

這次實驗做的真的是頭大,感覺做之前的准備工作沒有做好,導致做的時候一頭霧水。本次實驗用到了很多工具,之前都沒有使用過,而且這些軟件都是英文的,所以也花了很長時間在研究工具的使用上。這個SysTracer真是坑人,竟然只能抓五張快照,多抓就告訴沒有內存了。

本次實驗的重點是使用這些軟件進行惡意軟件的分析,做完整個實驗,我學到了一些監視計算機系統的方法,比如說用windows自帶的schtasks指令設置一個計划任務,可以獲取當前所有進程的網絡連接情況;使用Sysmon,記錄有關的系統日志......靜態分析我覺得還比較容易,但是動態分析就完全不行了。我覺得最難理解的就是SysTracer這個軟件抓到的快照對比分析,可能是因為我對本身系統就不夠了解,所以不知道每個地方出現的差異都是什么,不能准確地分析為什么會出現這些差異,整個實驗做下來都是看學長學姐和課題負責人的博客依葫蘆畫瓢、來蒙帶猜,以后還是需要加強這方面的學習。


免責聲明!

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



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