2018-2019-2 網絡對抗技術 20165318 Exp4 惡意代碼分析
原理與實踐說明
1.實踐目標
- 監控你自己系統的運行狀態,看有沒有可疑的程序在運行。
- 分析一個惡意軟件,就分析Exp2或Exp3中生成后門軟件;分析工具盡量使用原生指令或sysinternals,systracer套件。
- 假定將來工作中你覺得自己的主機有問題,就可以用實驗中的這個思路,先整個系統監控看能不能找到可疑對象,再對可疑對象進行進一步分析,好確認其具體的行為與性質。
2.實踐內容概述
- 系統運行監控
- 使用如計划任務,每隔一分鍾記錄自己的電腦有哪些程序在聯網,連接的外部IP是哪里。運行一段時間並分析該文件,綜述分析結果。
- 安裝配置sysinternals里的sysmon工具,設置合理的配置文件,監控自己主機的重點事可疑行為。
- 分析該軟件在(1)啟動回連,(2)安裝到目標機(3)及其他任意操作時(如進程遷移或抓屏,重要是你感興趣)。該后門軟件
- 讀取、添加、刪除了哪些注冊表項
- 讀取、添加、刪除了哪些文件
- 連接了哪些外部IP,傳輸了什么數據
3.基礎問題回答
-
如果在工作中懷疑一台主機上有惡意代碼,但只是猜想,所有想監控下系統一天天的到底在干些什么。請設計下你想監控的操作有哪些,用什么方法來監控。
- 使用windows自帶的schtasks指令設置一個計划任務,發現網絡連接異常
- 使用Sysmon,編寫配置文件,記錄有關的系統日志
- 使用Process Explorer工具,監視進程執行情況。
- 使用Process Monitor工具,監視文件系統、注冊表、進程/線程的活動。
-
如果已經確定是某個程序或進程有問題,你有什么工具可以進一步得到它的哪些信息。
- 使用systracer工具分析惡意軟件,查看其對注冊表和文件的修改。
- 使用Wireshark進行抓包分析,監視其與主機進行的通信過程。
- 使用Process Explorer工具或Process Monitor工具,監視文件系統、注冊表、進程/線程的活動。
實踐過程記錄
1.使用schtasks指令監控系統(使用如計划任務,每隔一分鍾記錄自己的電腦有哪些程序在聯網,連接的外部IP是哪里。運行一段時間並分析該文件,綜述分析結果)
-
使用
schtasks /create /TN netstat5318 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt"
命令創建計划任務netstat5318
TN
是TaskName的縮寫,我們創建的計划任務名是netstat5318;sc
表示計時方式,我們以分鍾計時填MINUTE;TR
=Task Run,要運行的指令是 netstatbn
,b
表示顯示可執行文件名,n
表示以數字來顯示IP和端口;>
表示輸出重定向,將輸出存放在c:\netstatlog.txt
文件中
-
在C盤中創建一個
netstat5318.bat
腳本文件,寫入以下內容date /t >> c:\netstat5318.txt time /t >> c:\netstat5318.txt netstat -bn >> c:\netstat5318.txt
-
打開任務計划程序,可以看到新創建的這個任務:
-
雙擊這個任務,點擊操作並編輯,將“程序或腳本”改為我們創建的
netstat5318.bat
批處理文件,確定即可。
-
還可以自行更改該任務的其他屬性,如在"條件"選項卡中可以看到,電源選項中默認操作為“只有在計算機使用交流電源時才啟動此任務”,那么使用電池電源時就會停止任務。這點需要格外注意,如果沒有修改默認操作,任務無論如何都無法執行可能只是因為拔掉了電源。,為了我們統計足夠多的數據,最好把這個取消掉
-
執行此腳本一定時間,就可以在netstat5318.txt文件中查看到本機在該時間段內的聯網記錄:
-
當記錄的數據足夠豐富時,停止任務,將所得數據在excel中進行分析,此過程要一直保持開機聯網狀態才能持續監控
-
等待一段時間(如一天),將存儲的數據通過excel表進行整理,過程參考可愛的學姐的博客
-
統計數據如下:
-
統計圖如下:
-
-
由統計數據可知,聯網最多的是是火狐瀏覽器對應的程序“firefox.exe”,排名第二的是“vmware.exe”,它虛擬機的進程。這里我們還可以找到微信、TIM、后門程序20165318_win7_騰訊電腦管家.exe這些連網的進程。
2.使用sysmon工具監控系統(安裝配置sysinternals里的sysmon工具,設置合理的配置文件,監控自己主機的重點事可疑行為。)
-
sysmon是微軟Sysinternals套件中的一個工具,使用sysmon工具前首先要配置文件。參考使用輕量級工具Sysmon監視你的系統該文章,創建配置文件
sysmon20165318.xml
。 -
可選擇的事件過濾器有 ProcessCreate 進程創建、FileCreateTime 進程創建時間、NetworkConnect 網絡鏈接、ProcessTermina 進程結束、DriverLoad 驅動加載、ImageLoad 鏡像加載、CreateRemoteTh 遠程線程創建、RawAccessRead 驅動器讀取、ProcessAccess 進程訪問、FileCreate 文件創建、RegistryEvent 注冊表事件、FileCreateStre 文件流創建等。
-
我比較感興趣的是進程創建ProcessCreate、進程創建時間FileCreatTime、網絡連接NetworkConnect、遠程線程創建CreateRemoteThread。
-
過濾器事件的選項:
- 進程創建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
- 進程創建ProcessCreate的過濾事件選項有:
-
我創建的配置文件
sysmon20165318.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">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
</ProcessCreate>
<ProcessCreate onmatch="include">
<ParentImage condition="end with">cmd.exe</ParentImage>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.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
相當於黑名單。 -
Image condition
這里要根據自己使用的瀏覽器更改,例如谷歌瀏覽器是“chrome.exe”,IE瀏覽器是“iexplore.exe”,火狐瀏覽器是“firefox.exe”我用的是360瀏覽器和火狐瀏覽器寫在exclude中就是不記錄由360瀏覽器和火狐瀏覽器創建的進程。想知道自己瀏覽器進程名,可以查看“netstat5318.txt”中的記錄。 -
進程創建時間類似,也是不創建瀏覽器創建進程的時間。
-
網絡連接過濾掉了瀏覽器的網絡連接、源IP為127.0.0.1的網絡連接和目的端口為137的連接服務,並查看目的端口為80(http)和443(https)的網絡連接。
- 137端口的主要作用是在局域網中提供計算機的名字或IP地址查詢服務,一般安裝了NetBIOS協議后,該端口會自動處於開放狀態。
- 127.0.0.1表示本機IP。
-
遠程線程創建記錄了目標為explorer.exe、svchost.exe、firefox.exe、winlogon.exe和powershell.exe 的遠程線程。
- explorer.exe是Windows程序管理器或者文件資源管理器
- svchost.exe是一個屬於微軟Windows操作系統的系統程序,是從動態鏈接庫 (DLL) 中運行的服務的通用主機進程名稱。
- winlogon.exe是Windows NT 用戶登陸程序,用於管理用戶登錄和退出。
- powershell.exe是專為系統管理員設計的新 Windows 命令行外殼程序。該外殼程序包括交互式提示和腳本環境,兩者既可以獨立使用也可以組合使用。
-
安裝sysmon:執行命令
sysmon.exe -i C:\sysmon20165318.xml
,成功安裝結果如下:
-
查看“事件查看器”,選擇日志的位置,
應用程序和服務日志/Microsoft/Windows/Sysmon/Operational
,在這里,我們可以看到按照配置文件的要求記錄的新事件,以及事件ID、任務類別、詳細信息等。
-
這個配置文件記錄的第一個日志就是打開
C:\sysmon20165318.xml
配置文件
-
分析日志,我分析的是自己生成的后門文件進行分析。
-
啟動回連到kali
-
找到運行后門文件相對應的日志,打開這個事件,可以看到其屬於“NetworkContect”。查看
詳細信息
,可以看到這個后門映像文件的具體位置、源IP和端口、目的IP和端口等
-
運行shell,getuid等命令之后,我們都會找到一個之前沒有出現過的C:\Windows\SysWOW64\cmd.exe程序如下圖所示,SysWOW64可以在64bit的Windows中運行32bit的程序,而Windows下的cmd.exe是64bit的,kali回連獲取的windows的cmd程序是32位的!
-
在執行完getuid指令后,出現了以下兩個日志,雖然在沒有運行后門之前這兩個指令也會出現,但是緊接着getuid指令后出現就讓人心存疑慮了
-
SearchFilterHost.exe是桌面搜索引擎的索引程序,其主要作用是建立快速索引文件,讓用戶能夠更好的搜索出電腦中的任意資料。它會在計算機空閑時自動掃描索引位置的文件名、屬性信息和給定類別的文件內容,這些索引位置默認包括桌面、收藏夾、開始菜單、系統目錄。
-
惡意軟件分析
- 靜態分析
- 文件掃描(VirusTotal、VirusScan工具等)
- 文件格式識別(peid、file、FileAnalyzer工具等)
- 字符串提取(Strings工具等)
- 反匯編(GDB、IDAPro、VC工具等)
- 反編譯(REC、DCC、JAD工具等)
- 邏輯結構分析(Ollydbg、IDAPro工具等)
- 加殼脫殼(UPX、VMUnPacker工具等)
3.使用VirusTotal分析惡意軟件
-
把生成的惡意代碼放在VirusTotal進行分析(也可以使用VirusScan工具),基本情況如下:
雖然有20個報毒,但是對比實驗三中生成的那些后門來說已經算是比較少的了。 -
查看這個惡意代碼的基本屬性:
可以看出它的SHA-1、MD5摘要值、文件類型、文件大小,以及TRiD文件類型識別結果。(注:TRiD通過讀取文件頭,根據特征碼進行文件類型匹配。)最神奇的是它可以查出來文件的編碼方式,可以看出我是用VC++進行編譯的! -
還可以看到加殼情況:
-
以及該惡意代碼的算法庫支持情況:
4.使用PEiD分析惡意軟件
> PEiD(PE Identifier)是一款著名的查殼工具,其功能強大,幾乎可以偵測出所有的殼,其數量已超過470種PE文檔的加殼類型和簽名。
-
先看一下沒有加殼的后門程序
-
再看一下加過壓縮殼的后門程序:
-
再看一下加過加密殼的后門程序:
-
我們可以看到,這個軟件雖然可以查到壓縮殼,但是竟然查不到加密殼!!!,說好的可以偵測出所有的殼呢(* ̄︶ ̄)
5.使用PE Explorer分析惡意軟件
PE Explorer是功能超強的可視化Delphi、C++、VB程序解析器,能快速對32位可執行程序進行反編譯,並修改其中資源。該軟件支持插件,你可以通過增加插件加強該軟件的功能,原公司在該工具中捆綁了UPX的脫殼插件、掃描器和反匯編器,可以查看程序頭部信息(默認界面)、程序靜態數據目錄、程序結頭信息、對程序反匯編等等,非常好用。
-
這里主要看文件引用的dll庫,可以通過
視圖->引入
進行查看,如下圖所示:
- KERNEL32.dll:控制着系統的內存管理、數據的輸入輸出操作和中斷處理。
- msvcrt.dll:是微軟編譯軟件的函數庫。
- USER32.dll:Windows用戶界面相關應用程序接口,用於包括Windows處理,基本用戶界面等特性,如創建窗口和發送消息。它是一個對系統很關鍵或很可疑的文件,易遭受木馬病毒破壞導致系統找不到此文件,出現錯誤提示框。
- WSOCK32.dll:Windows Sockets應用程序接口,用於支持很多Internet和網絡應用程序。是一個對系統很關鍵或很可疑的文件,易遭受木馬病毒破壞導致系統找不到此文件,出現錯誤提示框。
- 我使用該工具查看了實驗三生成的多個后門程序,發現使用veil生成的后門程序所引用的dll文件是最多的,而且所有的后門程序都會引用KERNEL32.dll這個文件。
- 動態分析
- 快照比對(SysTracer、Filesnap、Regsnap工具等)
- 抓包分析(WireShark工具等)
- 行為監控(Filemon、Regmon、ProcessExplorer工具等)
- 沙盒(NormanSandbox、CWSandbox工具等)
- 動態跟蹤調試(Ollydbg、IDAPro工具等)
6.使用Process Monitor分析惡意軟件
Process Monitor 是一款由 Sysinternals 公司開發的包含強大的監視和過濾功能的高級 Windows 監視工具,可實時顯示文件系統、注冊表、進程/線程的活動。
-
打開軟件,可以看到各個進程的詳細記錄,下圖是我的后門進程:(大家如果使用這個軟件,一定一定不要光靠肉眼去找,要善於利用查找,不然猶如大海撈針啊!!!)
-
進程的詳細信息如下:
-
我們還可以看到這個后門程序引用的各種其他的庫
7.使用Process Explorer分析惡意軟件
Process Explorer是由Sysinternals開發的Windows系統和應用程序監視工具,目前已並入微軟旗下。不僅結合了Filemon(文件監視器)和Regmon(注冊表監視器)兩個工具的功能,還增加了多項重要的增強功能。包括穩定性和性能改進、強大的過濾選項、修正的進程樹對話框(增加了進程存活時間圖表)、可根據點擊位置變換的右擊菜單過濾條目、集成帶源代碼存儲的堆棧跟蹤對話框、更快的堆棧跟蹤、可在 64位 Windows 上加載 32位 日志文件的能力、監視映像(DLL和內核模式驅動程序)加載、系統引導時記錄所有操作等。
-
靶機運行后門程序進行回連時,我們可以在 Process Explorer工具中查看到其記錄,我們可以看到這個程序運行時子程序中有
conhost.exe
這個程序,同樣的程序我們可以在cmd.exe
的子程序中看到,由此我們可以知道該程序是在命令行中運行的。
-
也可以詳細查看該進程使用的CPU,虛擬內存空間、物理內存空間、I/O等。
8.使用systracer分析惡意軟件
-
此實驗建議在兩台虛擬機中進行,windows虛擬機文件少,進行快照時間短,且易於分析。
-
下載SysTracer工具
-
點擊右側的take snapshot,存儲快照
- 快照一:未移植后門程序,保存為Snapshot #1
- 快照二:移植后門程序,保存為Snapshot #2
- 快照三:運行后門程序並在kali中實現回連,保存為Snapshot #3
- 快照四:在kali中使用
dir
指令,保存為Snapshot #4 - 快照五:在kali中使用
record_mic
指令,保存為Snapshot #5
-
通過右下角的
compare
鍵或者View Differences Lists
比對各快照,可以選擇Only Difference
只查看不同的項 -
對比快照一和快照二:增加了我的后門程序
20165318_backdoor.exe
,
-
這里可以看到很多增加,刪除,更新的鍵值和文件
-
對比快照二和快照三(后門啟動前與啟動后):
-
可以看到新增的后門進程,而且可以詳細看到其的目的IP和端口號、源IP和端口號以及連接的協議:
-
而且該后門程序生成了很多文件、目錄和鍵值
-
在
c:\Windows\Prefetch
目錄下增加了相關的文件
此外,如上圖所示,一些Systracer未授權的地方我們是沒法查看的。 -
對
HKEY_USER
和HKEY_CURRENT_USER
根鍵中的Software
子鍵進行了修改(HKEY_CURRENT_USER管理系統當前的用戶信息。在這個根鍵中保存了本地計算機中存放的當前登錄的用戶信息,包括用戶登錄用戶名和暫存的密碼。):
-
-
對比快照三和快照四:kali上執行
dir
指令- 對
key_local_machine
根鍵中的內容進行了修改(HKEY_LOCAL_MACHINE保存了注冊表里的所有與這台計算機有關的配置信息)
c:\Program Files\SysTracer\data
新增了snap003
- 對
-
對比快照四和快照五:kali上執行
record_mic
指令- 注冊表項中有以下變化:
- 新建了很多連接,其中有與后門程序相關的
Apache HTTP Server
- 進程中增加了這一項,而且是與多媒體有關的,我猜測應該是與
record_mic
指令相關
- 注冊表項中有以下變化:
-
此外我們可以通過查看后門軟件的“opened handles”(打開的句柄)來對比他們都做了什么
9.使用wireshark抓包分析惡意軟件
-
回連完成后結束捕獲,並把過濾規則設置為
ip.addr == 10.1.1.128
,這里我只想查看和虛擬機IP有關的數據包,所以把沒用的包過濾掉 -
我們可以看到有大量的TCP包,這其中有回連相關的包,之后我有用dir指令查看了靶機的當前目錄,傳輸了很多數據過來:
-
傳輸的數據包括Windows向Kali發出TCP同步請求包SYN,Kali給Windows發出的SYN同步請求包和確認包ACK,Kali給Windows傳的ACK包、PSH+ACK包等等(PSH表示有DATA數據傳輸)
實驗中遇到的問題及解決方法
- 在安裝sysmon是,出現以下問題:
- 因為我的配置文件中版本原來設置的是“3.10”,與我下載的sysmon版本不符,改成"4.20"之后就可以正常安裝了
- 因為我的配置文件中版本原來設置的是“3.10”,與我下載的sysmon版本不符,改成"4.20"之后就可以正常安裝了
實驗總結與體會
-
本次實驗在操作上沒有什么難度,主要是下載安裝軟件並應用,重點在於如何利用這些軟件分析惡意代碼。在不斷實踐的過程中,我掌握了很多種工具的用法,學會了如何讓計算機周期性執行一個任務,如果把命令行下的結果記錄到文件中、如何利用.bat文件顯示時間、如何利用excel分析數據、如何利用Sysmon監控自己感興趣的事件、如何寫配置文件、如何分析日志中的大量信息、如何利用多種工具對惡意代碼進行進一步分析。
-
尤其是在動態分析的時候,特別考驗我們的信息處理能力,明顯看到有很多不同,但是分析是又不知道該從何下手,不太清楚每一項具體代表什么含義,只能通過查閱資料,連蒙帶猜的進行分析。
-
通過自己動手實踐,實現了從攻擊者身份到檢測、分析者身份的轉變,更全面的理解了前兩次實驗中生成的后門程序到底在做什么,對惡意代碼有了更深入的理解。