Exp4 惡意代碼分析


Exp4 惡意代碼分析

一、實踐目標

1.系統運行監控
使用如計划任務,每隔一分鍾記錄自己的電腦有哪些程序在聯網,連接的外部IP是哪里。運行一段時間並分析該文件,綜述一下分析結果。目標就是找出所有連網的程序,連了哪里,大約干了什么(不抓包的情況下只能猜),你覺得它這么干合適不。如果想進一步分析的,可以有針對性的抓包。
安裝配置sysinternals里的sysmon工具,設置合理的配置文件,監控自己主機的重點事可疑行為。
2.惡意軟件分析
分析該軟件在(1)啟動回連,(2)安裝到目標機(3)及其他任意操作時(如進程遷移或抓屏,重要是你感興趣)。該后門軟件讀取、添加、刪除了哪些注冊表項,讀取、添加、刪除了哪些文件,連接了哪些外部IP,傳輸了什么數據

二、實踐內容

Ⅰ.系統運行監控—任務計划

先來學習一下schtasks的命令,貼上參考鏈接schtasks的命令

1.寫好腳本(實際上就是命令行語句)netcontrol1227.bat,再新建一個txt文檔netstatlog.txt用於接收數據

date /t >> C:\Users\Administrator\Desktop\netstatlog.txt
time /t >> C:\Users\Administrator\Desktop\netstatlog.txt
netstat -bn >> C:\Users\Administrator\Desktop\netstatlog.txt

圖2.1.1

2.用命令行創建一個計划任務

win+R
cmd
  schtasks /create /TN netcontrol1227 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > C:\Users\Administrator\Desktop\netstatlog.txt"

圖2.1.2

TN是創建的計划任務名是netcontrol1227,sc表示計時方式,TR表示執行的指令,>表示輸出重定向

3.打開任務計划程序

“WIN+R”調出“運行”窗口,輸入“taskschd.msc”按回車

圖2.1.3
圖2.1.4

4.在常規中選擇使用最高權限運行,在條件中關閉電源限制

電源限制可以選擇性使用,此處只是為了收集更多的信息,所以關閉了電源限制

圖2.1.5

圖2.1.6

5.在操作欄清空參數,選擇批處理文件

圖2.1.7
圖2.1.8

6.等待一段時間后就可以得到想要的數據了

這個等待時間看個人心情

圖2.1.9

7.收集了較多數據后,停止任務,將所得數據在excel中進行分析

  • ①新建excel,數據→自文本→選擇數據源→netcontrol1227.txt,勾選分隔符號
    圖2.1.10
    圖2.1.11

  • ②勾選所有分隔符號
    圖2.1.12
    圖2.1.13

  • ③列數據格式勾選常規→完成
    圖2.1.14

  • ④選擇要分析的列——>選擇插入——>選擇數據透視圖——>直接默認值確認
    圖2.1.15
    圖2.1.16

  • ⑤右側選擇分析的日期,拖入下方的軸和值
    圖2.1.17

同樣的方法,可以得到連接的外部ip地址的統計圖
圖2.1.18

分析結果

出現最多的是TCP,established,established意思是TCP連接成功,再下來就是[QQBrowser.exe],是瀏覽器發起了678次TCP連接,下面列舉出來連接最多的一些外部網站,端口基本上都是通過443端口(https)
圖2.1.19
圖2.1.20

Ⅱ.系統運行監控—sysmon

sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具,用來監視和記錄系統活動,並記錄到windows事件日志,可以提供有關進程創建,網絡鏈接和文件創建時間更改的詳細信息。

1.安裝sysmon

sysmon安裝包
sysmon配置文件

  • 確定監控目標
  • 進程創建ProcessCreate
過濾事件選項:
UtcTime, ProcessGuid, ProcessId, Image, CommandLine, CurrentDirectory, User, LogonGuid, LogonId, TerminalSessionId, IntegrityLevel, Hashes, ParentProcessGuid, ParentProcessId, ParentImage, ParentCommandLine
  • 進程創建時間FileCreatTime
過濾事件選項:
UtcTime, ProcessGuid, ProcessId, Image, TargetFilename, CreationUtcTime, PreviousCreationUtcTime
  • 網絡連接NetworkConnect
過濾事件選項:
UtcTime, ProcessGuid, ProcessId, Image, User, Protocol, Initiated, SourceIsIpv6, SourceIp, SourceHostname, SourcePort, SourcePortName, DestinationIsIpv6, DestinationIp, DestinationHostname, DestinationPort, DestinationPortName
  • 遠程線程創建CreateRemoteThread
過濾事件選項:
UtcTime, SourceProcessGuid, SourceProcessId, SourceImage, TargetProcessGuid, TargetProcessId, TargetImage, NewThreadId, StartAddress, StartModule, StartFunction
編寫配置文件

創建一個txt文件,寫好配置文件后將文件后綴改為.xml

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

    <FileCreateTime onmatch="exclude" >
      <Image condition="end with">chrome.exe</Image>
    </FileCreateTime>
    
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">chrome.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">winlogon.exe</TargetImage>
      <SourceImage condition="end with">powershell.exe</SourceImage>
    </CreateRemoteThread>
  </EventFiltering>
</Sysmon>

解釋一下:

  • onmatch選項只能設置為include或者exclude,exclude相當於白名單,不用記錄;include相當於黑名單
  • 第一行的sysmon版本號要跟使用的sysmon一致(當前版本是4.81)
  • Image condition根據自己使用的瀏覽器更改,如谷歌瀏覽器是“chrome.exe”,IE瀏覽器是“iexplore.exe”,火狐瀏覽器是“firefox.exe”,QQ瀏覽器是“QQBrowser.exe”,寫在exclude中就是不記錄由谷歌瀏覽器創建的進程
  • 進程創建時間類似,也是不創建瀏覽器創建進程的時間
  • 網絡連接過濾掉了瀏覽器的網絡連接、源IP為127.0.0.1(localhost)的網絡連接和目的端口為137的連接服務,且查看目的端口為80(http)和443(https)的網絡連接。
  • 137端口的主要作用是在局域網中提供計算機的名字或IP地址查詢服務,一般安裝了NetBIOS協議后,該端口會自動處於開放狀態
  • 127.0.0.1表示回環地址
  • 遠程線程創建記錄了目標為explorer.exe、svchost.exe、winlogon.exe和powershell.exe 的遠程線程
  • explorer.exe是Windows程序管理器或者文件資源管理器
  • svchost.exe是一個屬於微軟Windows操作系統的系統程序,是從動態鏈接庫 (DLL) 中運行的服務的通用主機進程名稱
  • winlogon.exe是Windows NT 用戶登陸程序,用於管理用戶登錄和退出
  • powershell.exe是專為系統管理員設計的新 Windows 命令行外殼程序。該外殼程序包括交互式提示和腳本環境,兩者既可以獨立使用也可以組合使用

2.啟動sysmon

cd進入包含sysmom.exe的文件夾
輸入指令.\Sysmon.exe -i sysmon1227.xml安裝Sysmon,點擊Agree

-i第一次啟動時用,之后更新xml配置可以-c完成

圖2.2.2
圖2.2.2

3.打開日志

打開事件查看器(win+R運行eventvwr.msc)——>應用程序和服務日志->Microsoft->Windows->Sysmon->`Operational

這里可以點擊框內空白部分,然后用輸入法輸入一部分字母快速查找,也可以直接按字母表順序一直往下翻

圖2.2.3
圖2.2.4

打開kali,Win運行后門文件1227door.exe,回連到kali,kali執行shell獲取win10的cmd

圖2.2.5

再次查看日志

根據時間觀察對應的事件
可以在Sysmon的日志中看到進程創建

圖2.2.6
圖2.2.7

Ⅲ.惡意軟件分析

1.用wireshark分析TCP包

我在Windows下使用wireshark抓不到kali的包,大家可以試一試。經嘗試,VMware使用橋接模式是可以抓到虛擬機的包的,詳細設置見文末。
如果大家也出現這個問題,可以直接跳到kali抓包部分。

ip.addr == 172.30.7.176                  這是更換網絡前的kali機的ip地址

我使用上述過濾命令過濾網絡包時,顯示不出任何信息。
然后,此處我更換了網絡,所以ip變了,如圖,主機ip192.168.123.235,kali機ip:192.168.123.93
此時因為我的后門程序一直在運行,所以主機一直在向虛擬機發送請求包,就是圖中黑色紅字部分
再來,大家還可以看見黑色綠字部分有一個192.168.254.1,這是內部網關,為什么會是內部網關返回信息給主機呢
因為主機發送請求后要先抵達內部網關,再發往虛擬機的網關,但是我的后門程序設置的反彈ip沒有修改,而kali的ip地址變化了,所以網關找不到下一跳的目的地址,所以就返回此條綠字包:“我找不到你要到的目的地,你下車吧。”這樣包就被丟掉了~
ip變了

圖2.2.8

kali中使用wireshark抓包分析

主機ip:192.168.43.141 虛擬機ip:192.168.43.183

  • 點擊右上方的kali圖標,搜索wireshark,進入wireshark
    搜索

  • 選擇需要監聽的網卡,雙擊即可開始監聽
    選擇網卡

  • ncat傳送后門程序

我這里用的payload是windows/meterpreter/reverse_tcp
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LPORT 1227
set LHOST 192.168.43.183

  • 注意看前兩行,先由kali端向主機端發送連接請求,被拒絕了,回了一個[rst,ack]包。
    再看3-5行,這是典型的tcp三次握手建立連接
    這里的包可以結合自己的操作看,從圖1.1正好被拒絕了一次,然后再建立連接,這也真是神奇,貼心的電腦幫我把兩種情況都實現了。
    1.1 傳送后門程序
    1.2 wireshark抓包

  • 現在來看看下面的詳細信息,因為用的tcp反彈式連接,所以基本上都是tcp包,詳細信息一次類推
    第一行,幀Frame447指的是要發送的數據塊,其中,所抓幀的序號為36838,捕獲字節等於傳送字節數:7354字節
    第二行,以太網,有線局域網技術,是數據鏈路層。源Mac地址為08:00:27:ca:97:51,目標Mac地址為0c:dd:24:8e:94:37
    第三行,IPV4協議,也稱網絡協議,是網絡層;源IP地址為192.168.43.183,目的IP地址為:192.168.43.141
    第四行,TCP協議,也稱傳輸控制協議,是傳輸層;源端口(55538);目標端口(12270);序列號(1);ACK是TCP數據包首部中的確認標志,對已接收到的TCP報文進行確認,值為1表示確認號有效;長度為7300字節
    第五行,數據共有7300字節
    1.3 tcp包信息分析

* 可以看出來ncat是將后門程序分段傳輸過去的哈,我生成的后門程序大小為73802字節,不知道少的那216字節去哪了。
計算了一下傳輸數據包的大小

  • 打開msfconsole,並設置打開kali監聽,並在Windows中啟動后門程序,抓包
    啟動監聽,並入侵后門
    計算了一下

閑着沒事算了一下傳輸的數據大小,看起來並沒有那么大(175174字節),可能是抓漏了吧

  • getshell,並dir后 的包
    dir

getshell並沒有獲得什么信息,而dir后主機發送了一個1140字節的數據包,這應該是該目錄的文件信息吧,正在尋找驗證方法。

2.通過Ⅰ中的任務計划分析


在shell.exe啟動后,通過上文中的程序找到了192.168.123.235(本機)向192.169.123.93(Kali虛擬機)的TCP包,由此可見在程序啟動后會隔一段時間就會發送TCP包。

3.使用SysTracer分析

systracer直接去官網下載就行了,安裝的時候點擊第一個,一直下一步就行了

  • systracer可以記錄下計算機某個時刻的狀態。然后過一段時間后再次記錄。通過比較兩次記錄中計算機的不同進行相應的分析。
  • 不要點擊stop!!!!!!!

使用教程
三張快照

這里的三張快照分別是before:沒有執行任何操作
connect:傳送了后門文件,並回連了kali
getshell:kali handle控制台getshell后進行了一系列操作(dir,date,mkdir 1227t4)

  • 對比快照before和快照connect
    在右下角選擇要對比的兩個快照,再點擊compare
    為了更清晰地知道我們的計算機被執行了什么操作,所以選中only differences
    如何比較
    only differences

* 通過查看Running Processes、Opened Handles、Opened Ports,可以更直觀地看到后門程序的執行,以及它添加了哪些句柄和連接的是哪個端口。
port
handle
這一串,就是后門程序添加的句柄
句柄
這里可以看到后門程序是通過``64902端口對192.168.43.183:1227`進行連接,這里可以看出后門采用的是反彈端口連接方式。
但是這里的分析有一個困難在於,很多信息,不論是注冊表還是文件抑或是應用程序,在查看的時候經常會看到“SysTracer not registered”,推測這可能是因為未激活軟件所以在試用階段不能使用其全部功能,所以提示軟件未注冊。雖然詳細信息無法探知,可至少知道哪里發生了變化,如果認真追究問題的話也是會很有指向性的。另外還可以像sysmon那樣,對比不同時期下本機的對外網絡連接情況,可以探知誰在兩個快照期間做了什么事情(啟用哪個端口和誰建立了連接)。

  • (一個沒有激活的軟件貌似最多只能創建5張快照,我就是。解決方法就是找到它的文件位置,刪掉,再重裝一遍)

  • 對比快照Snapshot #2和快照Snapshot #3
    cmd
    chost

由於我們在kali中執行了shell,並且執行了dir指令查看文件夾內容,相對應的這里會執行cmd.exe和conhost.exe

  • 同時,系統刪除了一系列的dll,添加了相應的句柄。
    del dll
    hadle

4.使用Process Explorer分析惡意軟件

下載Process Explorer v16.22並解壓
打開procexp.exe

不用在Windows端執行任何操作,就可以監聽到電腦上所有正在運行的程序

這里就抓到了我的后門程序,可以看出kali端get了shell還創建了一個文件夾(20191227)

當我們意識到這個是惡意程序時,我們就可以直接kill掉它

5.sandbox

Windows Sandbox雖然內置在Windows 18305中,要使用卻需要用戶自己手動添加,具體步驟:控制面板→程序和功能→啟用或關閉Windows功能→勾選Windows Sandbox,確認后安裝需要重啟系統。

  • 注意要win10或win11企業版或者專業版,家庭版是沒有沙盒這個功能的。想做的同學可以去mscn下載win10專業版操作系統


進入sandbox,可以看到它就跟一個新電腦一樣,你可以在里面隨便造,不影響宿主機

把課設做的惡意程序放進去跑了一下,被攻擊了

不過沙盒不會保留任何記錄,重啟變得嶄新

用了沙盒的同學vm ware可能會打不開,參考這篇博客,雖然不能解決共存問題,但是能來回切換。

三、實驗后回答問題

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

首先要監控的是網絡,可以就用schtasks設置任務,然后篩選出可疑的網絡行為。但凡攻擊者想進行遠程操作,建立了連接,就一定會被記錄到
然后檢測進程,比如攻擊者要抓肉雞DDOS或者挖礦,肯定會導致占用的CPU不正常(雖然我感覺應該很少抓PC)
還有要檢測文件的創建和刪除。如果攻擊者是通過小馬傳大馬的方式進行進一步的攻擊,檢測文件的創建和刪除可以防止進一步的攻擊,這個可以用schtasks,也可以用systracer。
最后是監控對驅動和硬件的調用,將損失盡量減少。
(2)如果已經確定是某個程序或進程有問題,你有什么工具可以進一步得到它的哪些信息。
答:Process Monitor可以看的很清楚這個進程的實施者、端口等等,如果能定位到具體的exe,可以進一步丟到vt上,或者用ida反編譯之類的深入研究

四、一些問題

1、系統運行監控中出現操作

關於實驗四的第一個小題中:記錄的txt文件提示“請求的操作需要提升”或者出現無法寫入,如果是最高權限運行,可以試一試改一下bat中的地址(改為其他盤片的地址)。還有,用戶名是中文的建議新創建一個文件夾(例如EX4),路徑最好不要出現中文。

2、VMware網卡設置

  • 這里需要改成你的網卡,我改的WiFi網卡,就抓WiFi的包
  • 如何查看WiFi網卡


    一直往下翻

五、實驗感悟

防御確實不如攻擊有意思,但是在現實生活中給我們合法攻擊的機會不多,所以我們現在才是走上了正軌。
“攻擊者只需找到防守者的一個漏洞就成功了,而防守者需要做到面面俱到”
現在對這句話的體會更加深刻了,但就知識面來說,進行攻擊時,我只需要知道計算機方面的知識,病毒的生產和制作都由msf和veil等軟件完成(當然這也是我淺嘗攻擊之后的想法,真實的攻擊肯定很復雜)。對於防守者,就這個實驗來說:我不僅需要計算機方面的知識,還需要網絡方面的知識。並且要了解得更深一些,不然都解析不出報文和檢測軟件抓到的異常數據。


免責聲明!

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



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