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.用命令行創建一個計划任務
win+R
cmd
schtasks /create /TN netcontrol1227 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > C:\Users\Administrator\Desktop\netstatlog.txt"
TN是創建的計划任務名是netcontrol1227,sc表示計時方式,TR表示執行的指令,>表示輸出重定向
3.打開任務計划程序
“WIN+R”調出“運行”窗口,輸入“taskschd.msc”按回車
4.在常規中選擇使用最高權限運行,在條件中關閉電源限制
電源限制可以選擇性使用,此處只是為了收集更多的信息,所以關閉了電源限制
5.在操作欄清空參數,選擇批處理文件
6.等待一段時間后就可以得到想要的數據了
這個等待時間看個人心情
7.收集了較多數據后,停止任務,將所得數據在excel中進行分析
-
①新建excel,數據→自文本→選擇數據源→netcontrol1227.txt,勾選分隔符號
-
②勾選所有分隔符號
-
③列數據格式勾選常規→完成
-
④選擇要分析的列——>選擇插入——>選擇數據透視圖——>直接默認值確認
-
⑤右側選擇分析的日期,拖入下方的軸和值
同樣的方法,可以得到連接的外部ip地址的統計圖
分析結果
出現最多的是TCP,established,established意思是TCP連接成功,再下來就是[QQBrowser.exe],是瀏覽器發起了678次TCP連接,下面列舉出來連接最多的一些外部網站,端口基本上都是通過443端口(https)
Ⅱ.系統運行監控—sysmon
sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具,用來監視和記錄系統活動,並記錄到windows事件日志,可以提供有關進程創建,網絡鏈接和文件創建時間更改的詳細信息。
1.安裝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完成
3.打開日志
打開事件查看器(win+R運行eventvwr.msc)——>應用程序和服務日志->Microsoft->Windows->Sysmon->`Operational
這里可以點擊框內空白部分,然后用輸入法輸入一部分字母快速查找,也可以直接按字母表順序一直往下翻
打開kali,Win運行后門文件1227door.exe,回連到kali,kali執行shell獲取win10的cmd
再次查看日志
根據時間觀察對應的事件
可以在Sysmon的日志中看到進程創建
Ⅲ.惡意軟件分析
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地址變化了,所以網關找不到下一跳的目的地址,所以就返回此條綠字包:“我找不到你要到的目的地,你下車吧。”這樣包就被丟掉了~
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正好被拒絕了一次,然后再建立連接,這也真是神奇,貼心的電腦幫我把兩種情況都實現了。
-
現在來看看下面的詳細信息,因為用的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字節
* 可以看出來ncat是將后門程序分段傳輸過去的哈,我生成的后門程序大小為73802字節,不知道少的那216字節去哪了。
- 打開msfconsole,並設置打開kali監聽,並在Windows中啟動后門程序,抓包
閑着沒事算了一下傳輸的數據大小,看起來並沒有那么大(175174字節),可能是抓漏了吧
- getshell,並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
* 通過查看Running Processes、Opened Handles、Opened Ports,可以更直觀地看到后門程序的執行,以及它添加了哪些句柄和連接的是哪個端口。
這一串,就是后門程序添加的句柄
這里可以看到后門程序是通過``64902端口對192.168.43.183:1227`進行連接,這里可以看出后門采用的是反彈端口連接方式。
但是這里的分析有一個困難在於,很多信息,不論是注冊表還是文件抑或是應用程序,在查看的時候經常會看到“SysTracer not registered”,推測這可能是因為未激活軟件所以在試用階段不能使用其全部功能,所以提示軟件未注冊。雖然詳細信息無法探知,可至少知道哪里發生了變化,如果認真追究問題的話也是會很有指向性的。另外還可以像sysmon那樣,對比不同時期下本機的對外網絡連接情況,可以探知誰在兩個快照期間做了什么事情(啟用哪個端口和誰建立了連接)。
-
(一個沒有激活的軟件貌似最多只能創建5張快照,我就是。解決方法就是找到它的文件位置,刪掉,再重裝一遍)
-
對比快照Snapshot #2和快照Snapshot #3
由於我們在kali中執行了shell,並且執行了dir指令查看文件夾內容,相對應的這里會執行cmd.exe和conhost.exe
- 同時,系統刪除了一系列的dll,添加了相應的句柄。
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等軟件完成(當然這也是我淺嘗攻擊之后的想法,真實的攻擊肯定很復雜)。對於防守者,就這個實驗來說:我不僅需要計算機方面的知識,還需要網絡方面的知識。並且要了解得更深一些,不然都解析不出報文和檢測軟件抓到的異常數據。