一、實驗目標
- 監控自己系統的運行狀態,看有沒有可疑的程序在運行。
- 分析一個惡意軟件,就分析Exp2或Exp3中生成后門軟件;分析工具盡量使用原生指令或sysinternals,systracer套件。
- 假定將來工作中你覺得自己的主機有問題,就可以用實驗中的這個思路,先整個系統監控看能不能找到可疑對象,再對可疑對象進行進一步分析,好確認其具體的行為與性質。
二、實驗內容
-
系統運行監控
- 使用如計划任務,每隔一分鍾記錄自己的電腦有哪些程序在聯網,連接的外部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,本例中是netstat1318SC
:表示計時方式,我們以分鍾計時填MINUTEMO
:MOdifierTR
:Task Run,要運行的指令是 netstatbn
: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`
-
在C盤中創建一個
netstat1318.bat
腳本文件,寫入以下內容date /t >> c:\netstat1318.txt time /t >> c:\netstat1318.txt netstat -bn >> c:\netstat1318.txt
-
在任務計划程序中找到計划任務
-
編輯計划任務,使其運行正確的腳本文件,也就是我們剛剛編寫的.bat
- 編輯完成后,右鍵選擇運行,此時可以在C盤目錄下看到以下三個文件
- 執行腳本一定時間,就可以在netstat1318.txt文件中查看到本機在該時間段內的聯網記錄:
-
當記錄比較長的時間后,我們已經獲得比較豐富分記錄數據,此時停止任務,將所得數據在Excel中進行分析。
- 導入文本數據:新建excel文件->選擇上方“數據”->選擇“導入數據”->選擇“導入數據”->選擇“直接打開數據文件”
-
選擇數據源文件:在C盤中選中netstat1318.txt
-
依次選擇其他編碼、分隔符號,然后將分隔符號的所有選項都選中,點擊完成即可
-
創建數據透視圖
- 選中我們所要分析的列,選擇“插入”——數據透視圖——新工作表
- 在新的工作表中,在右側字段列表中篩選我們不需要的字段
- 將字段列表拖到下方的軸和值中,就生成了我們所需的數據透視圖
- 分析
- 從圖中可以看出連網最多的就是Edge瀏覽器,連接的外部地址是我打開的相關頁面的,大多為http和https連接
- 第二個多的就是VMware,這是因為在做實驗,打開了虛擬機
- 接着可以看到有WeChat、wps、typora、sougou等程序,在做實驗的時候這些確實在使用,且連網了
- 有一個叫做QQPCTray.exe的連網頻率也比較高,查資料后知道它是騰訊公司推出的qq電腦管理程序軟件。該程序是對用戶的系統進行安全檢測、修復漏洞及木馬查殺等功能。
- 還有一個叫做sesvc.exe的進程,它是360瀏覽器的進程,因為今天在教室連接教學樓wifi的時候使用了360瀏覽器,所以出現此進程也是正常的。
- 還可以看到實驗二中生成的后門程序20181318_backdoor也進行連網了,這是因為我在后續的實驗中嘗試與kali機進行回連。
- 從下圖中我們可以看到,目的地址和端口號就是我們在用msf生成后門程序時所設定的,ip=kali機地址,端口=1318
- 從下圖中我們可以看到,目的地址和端口號就是我們在用msf生成后門程序時所設定的,ip=kali機地址,端口=1318
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,結果如下:
- 查看“事件查看器”,選擇日志的位置,
應用程序和服務日志/Microsoft/Windows/Sysmon/Operational
在這里,我們可以看到按照配置文件的要求記錄的新事件,以及事件ID、任務類別、詳細信息等。
-
我們隨意選中一條日志進行分析
從圖中可以看到進程號、路徑、源ip、源端口、目的ip、目的端口(80),使用的是http協議 -
運行我們在實驗二中生成的后門程序20181318_backdoor.exe,並啟動回連到kali虛擬機中。我們可以在事件查看器中找到此條日志
-
緊接着,我在msf監聽環境下,輸入了shell指令,獲得了Windows的cmd,日志如下:
在獲取到命令行后,我發現了一條有關conhost.exe的記錄
Conhost.exe進程是微軟為其Vista以及Win7、Windows 2008(服務器版)系統定義的系統文件,在系統中被稱為“控制台窗口主機”。其功能主要是為命令行程序(cmd.exe)提供類似於Csrss.exe進程的圖形子系統等功能支持, -
然后又輸入了ipconfig指令,日志如下:
我們可以發現,此時的路徑變為了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,被殺軟查出來的比率還是蠻高的
- 繼續查看此惡意軟件的基本屬性,可以看出它的SHA-1、MD5摘要值、文件類型、文件大小,以及TRiD文件類型識別結果。
- 還可以看到此軟件的頭部、各個節的相關信息,以及引入的動態鏈接庫
- 如果是加了殼的程序,還可以看出它使用的加殼的相關信息。
4.使用PEiD分析
-
PEiD(PE Identifier)是一款著名的查殼工具,其功能強大,幾乎可以偵測出所有的殼,其數量已超過470種PE文檔的加殼類型和簽名。
-
首先我們用它來檢查最普通的后門程序20181318_backdoor.exe
發現什么也沒有查到,這是正確的結果 -
接着我們來檢查一下使用了壓縮殼的軟件
發現他查到了壓縮殼的相關信息 -
再來檢查經過壓縮殼又加上了加密殼的軟件
誒,結果和上面的一樣,只查出來了壓縮殼的信息,這是為什么呢?難道peid檢查不出來加密殼嗎? -
最后檢查一下只用了加密殼的軟件
結果證明,他確實檢查不出來加密殼的存在,我猜測是他不認識這個殼,它的庫里面沒有這個殼的相關信息,看來它的功能也不是那么強大。
5.使用PE Explorer分析
-
PE Explorer是一款資源編輯器,它支持直接查看、修改軟件的資源,包括菜單、對話框、字符串表等,軟件還具備有W32DASM 軟件的反編譯能力和PEditor軟件的PE文件頭編輯功能。
-
我們用它打開1318_upx.exe,我們可以看到這個軟件的文件頭信息(基本信息),比如節對齊粒度、文件對齊粒度、時間戳、映像基址ImageBase等等
- 我們通過視圖還可以查看數據目錄、節頭等詳細信息
- 通過視圖——引入可以查看此軟件引用的dll
-
相關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
-
后門進程的事件屬性如下:
-
后門進程引用的各種庫如下:
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
只查看不同的項,在右下角可以選擇對比哪兩張快照 -
對比快照一和快照二(后門程序移植前后)
發現增加了我的后門程序
可以看到增加、刪除了一些文件、目錄,鍵值也有變化
- 對比快照二和快照三(后門程序運行前后)
點擊application
,在opened ports
中我們能看到后門連接的相關信息
在opened handles
中,可以看見增加了一些文件,也刪除了一些文件
在loaded dll
中,啟動后門程序后增加和刪除的dll文件
在c:\Windows\Prefetch
目錄下相關文件有變動
- 對比快照三和快照四(kali機輸入dir)
我們可以看到在輸入dir后,VMware有增加和刪除的操作
在loaded dll
中,可以看到增加和刪除的dll文件
- 對比快照四和快照五(kali機輸入record_mic)
可以發現注冊表有變化
新建了很多連接,其中有與后門程序相關的Apache HTTP Server
在loaded dll
中,可以看到增加和刪除的dll文件
8.使用wireshark抓包分析惡意軟件
-
運行后門20181318_backdoor.exe,在kali中回連。把過濾規則設置為
ip.addr == 192.168.174.129
,只留下與kali機有關的包 -
我們可以看到前三個包為TCP連接的三次握手
-
在kali中輸入dir,發現wireshark又捕獲到了許多PSH+ACK包,可以判斷有數據在傳輸
五、實驗后問題回答
1.如果在工作中懷疑一台主機上有惡意代碼,但只是猜想,所有想監控下系統一天天的到底在干些什么。請設計下你想監控的操作有哪些,用什么方法來監控。
- 使用windows自帶的schtasks指令,設置一個計划任務,監視系統進程的運行情況。在一段時間后,將所得數據在Excel中得到數據透視圖,繼續進行分析。
- 使用Sysmon,編寫配置文件,記錄有關的系統日志
- 使用Process Explorer工具,監視進程執行情況。
- 使用Process Monitor工具,監視文件系統、注冊表、進程/線程的活動。
- 使用SysTracer,一定時間間隔拍攝一張快照,對比不同快照,查看是否有可疑行為
2.如果已經確定是某個程序或進程有問題,你有什么工具可以進一步得到它的哪些信息。
-
靜態分析
- 使用virustotal或virscan,對惡意軟件進行分析,可以得到它的基本屬性、頭部、各個節以及引用的鏈接庫的信息
- 使用PEiD,查看惡意軟件是否加殼,加的什么殼
- 使用PE Explorer,查看惡意軟件的PE頭、數據目錄、節頭表信息,以及引用的鏈接庫的信息
- 使用String工具,分析惡意程序是否包含可疑字符串
-
動態分析
- 使用SysTracer,查看此惡意軟件對注冊表和文件的修改
- 使用Wireshark抓包,分析惡意軟件的通信過程
- 使用Process Explorer或Process Monitor,監視文件系統、注冊表,分析惡意軟件的活動
六、實驗中的問題
- 在編輯好任務計划后,右擊運行,在c盤目錄下一直不出來netstat1318.txt文件
- 原因:在編輯任務計划時,“條件”選項卡中電源選項的默認操作為“只有在計算機使用交流電源時才啟動此任務”,在使用電池電源時停止任務。而我在做實驗時並沒有給電腦充電,所以任務計划一直沒有運行。
- 解決方法:將此默認設置勾選掉,這樣電腦就算不充電也可以正常運行任務計划。
- 在安裝sysmon的時候出現以下報錯:
- 原因:在配置文件sysmon20181318.xml中,版本號寫的不對
- 解決方案:將xml文件的第一行,版本號改為3.10即可
- 不知道為什么,所有的后門程序都無法回連kali虛擬機了
- 解決方案:將kali的網絡配置換為橋接模式
七、實驗心得
這次實驗做的真的是頭大,感覺做之前的准備工作沒有做好,導致做的時候一頭霧水。本次實驗用到了很多工具,之前都沒有使用過,而且這些軟件都是英文的,所以也花了很長時間在研究工具的使用上。這個SysTracer真是坑人,竟然只能抓五張快照,多抓就告訴沒有內存了。
本次實驗的重點是使用這些軟件進行惡意軟件的分析,做完整個實驗,我學到了一些監視計算機系統的方法,比如說用windows自帶的schtasks指令設置一個計划任務,可以獲取當前所有進程的網絡連接情況;使用Sysmon,記錄有關的系統日志......靜態分析我覺得還比較容易,但是動態分析就完全不行了。我覺得最難理解的就是SysTracer這個軟件抓到的快照對比分析,可能是因為我對本身系統就不夠了解,所以不知道每個地方出現的差異都是什么,不能准確地分析為什么會出現這些差異,整個實驗做下來都是看學長學姐和課題負責人的博客依葫蘆畫瓢、來蒙帶猜,以后還是需要加強這方面的學習。