如何確定惡意軟件是否在自己的電腦中執(zhí)行過?
很不幸,你在自己的電腦里發(fā)現(xiàn)了一個惡意的可執(zhí)行程序!那么問題來了:這個文件到底有沒有執(zhí)行過?
在這篇文章中,我們會將注意力放在Windows操作系統(tǒng)的靜態(tài)取證分析之上,并跟大家討論一些能夠幫助你回答上面那個問題的方法以及證據(jù)源,其中涉及到的四大主要的證據(jù)源包括Windows Prefetch、注冊表、日志文件以及文件信息。
Windows Prefetch
Windows Prefetch(Windows 預(yù)讀取)是一個查找文件執(zhí)行證據(jù)的好地方。根據(jù)微軟的設(shè)計(jì)方案,Windows Prefetch的功能就是允許那些經(jīng)常需要使用到的程序打開得更加快。默認(rèn)設(shè)置下,它會在預(yù)讀取文件(存儲路徑為”C:\WindowsPrefetch”)中存儲最近執(zhí)行的128個文件的信息。一個預(yù)讀取文件的命名規(guī)則為”可執(zhí)行文件名+文件路徑的哈希+后綴名.pf”,預(yù)讀取文件中會保存文件的第一次和最后一次運(yùn)行日期、文件路徑和執(zhí)行次數(shù)等信息。所以說,如果你的惡意軟件文件名或路徑哈希出現(xiàn)在了一個預(yù)讀取文件(例如” DABEARS.EXE-12F3B52A.pf”)之中,那就說明這個惡意文件曾在你的電腦中執(zhí)行過了。
注:Windows Server默認(rèn)禁用了預(yù)讀取功能。
注冊表
沒錯,Windows注冊表可是一個巨大的“寶藏”,注冊表可以算是Windows系統(tǒng)能夠正常運(yùn)行的基石了。雖然注冊表非常“龐大”,但是我們接下來給出的表單卻并沒有那么復(fù)雜。因?yàn)槿绻_定一個文件是否執(zhí)行過,我們只需要檢查幾個重要的注冊表鍵即可:
1. ShimCache
微軟使用了ShimCache或“AppCompatCache”來識別應(yīng)用程序的兼容性問題。緩存數(shù)據(jù)能夠追蹤文件路徑、大小、最后修改時間和最后一次運(yùn)行的時間。如果一個文件以Windows進(jìn)程的形式執(zhí)行過,那么它的信息將會被記錄到ShimCache中,但是ShimCache中記錄的文件信息并不能100%證明一個文件執(zhí)行過,因?yàn)樗荒茏C明Windows曾與該文件交互過。下面這個注冊表鍵中包含了ShimCache數(shù)據(jù):
- HKLMSYSTEMCurrentControlSetControlSessionManagerAppCompatibilityAppCompatCache(for XP)
- HKLMSYSTEMCurrentControlSetControlSessionManagerAppCompatCacheAppCompatCache(for Non-XP)
2. MUICache
當(dāng)一個文件通過Windows Explorer(資源管理器)運(yùn)行,程序Shell會在MUICache中創(chuàng)建一個入口。Windows使用MUICache來存儲應(yīng)用程序名以及其他相關(guān)信息,獲取來的信息主要存儲在下面的注冊表鍵中:
- HKCUSoftwareMicrosoftWindowsShellNoRoamMUICache(for XP, 2000, 2003)
- HKCUSoftwareClassesLocal SettingsSoftwareMicrosoftWindowsShellMuiCache(for Vista, 7, 2008)
3. UserAssist
UserAssist可以追蹤可執(zhí)行程序以及資源管理器中打開的鏈接,UserAssist鍵能夠追蹤文件的最后一次執(zhí)行時間以及執(zhí)行次數(shù),并將信息存儲在下面這個注冊表鍵中:
- HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerUserAssist
UserAssist鍵的值對應(yīng)了可執(zhí)行程序的名稱以及文件路徑,并使用了ROT13加密。因此,如果你想直接通過搜索關(guān)鍵字來查找文件執(zhí)行的證據(jù)的話,在不解碼的情況下是無法做到的。目前也有很多工具可以解密這個注冊表鍵,例如RegRipper userassist.pl插件。
日志文件
為了確定一個文件是否執(zhí)行過,我們還可以根據(jù)日志文件的分析結(jié)果來判斷。首先我們來看一看Windows System Event Log(系統(tǒng)事件日志),因?yàn)檫@個日志文件記錄了服務(wù)的啟動信息。下圖顯示的事件(Event ID=”7035″)信息表明,一個管理員(SID=”-500″)運(yùn)行了PSEXECSVC遠(yuǎn)程執(zhí)行服務(wù):
當(dāng)一個服務(wù)啟動時,它通常會執(zhí)行ImagePath中定義的文件或一個已加載的服務(wù)DLL。比如說,”Netman”服務(wù)在執(zhí)行時使用了一個合法文件”netman.dll”。但是,如果注冊表中的ServiceDll(例如”tabcteng.dll”)包含一條指向后門的路徑,那么”Netman”服務(wù)將會執(zhí)行”tabcteng.dll”。所以,你可以通過分析ImagePath和ServiceDll的有效性來判斷是否有惡意服務(wù)啟動過。
如果Windows Event Log(事件日志)的審計(jì)設(shè)置開啟了Audit Process Tracking(審計(jì)進(jìn)程追蹤)功能,那么Windows Security Event Log(安全事件日志)中將會記錄大量關(guān)于進(jìn)程的信息,而這些信息絕對能夠證明一個文件是否執(zhí)行過。下面這兩張圖片顯示了惡意文件、相關(guān)進(jìn)程ID、父進(jìn)程ID和用戶名,這些信息可以幫助我們進(jìn)行進(jìn)一步分析:
XP EventID 592 – 進(jìn)程創(chuàng)建:
Windows Vista+記錄下了類似的進(jìn)程創(chuàng)建事件,EventID為4688:
在更新版本的Windows中,審計(jì)功能所能記錄的信息將更加精確化,并且微軟從Windows Server 2008 R2以及Windows 7中將這個功能整合到了Group Policy(組策略)中。
除此之外,基于主機(jī)的IPS或反病毒產(chǎn)品日志同樣可以表明一個文件是否執(zhí)行過,或者曾經(jīng)嘗試執(zhí)行過。下圖給出的是McAfee Access Protection日志中記錄下的一次訪問事件樣本:
Windows Scheduled Task Log(計(jì)劃任務(wù)日志)可以幫助我們判斷攻擊者是否使用了Windows的計(jì)劃任務(wù)功能來運(yùn)行惡意軟件。計(jì)劃任務(wù)的信息會被記錄在一個名叫”SchedLgU.txt”的日志文件中:
在Windows Vista+平臺中,計(jì)劃任務(wù)的執(zhí)行信息還會記錄在”Microsoft-Windows-TaskScheduler/Operational”日志中:
最后,如果一個程序崩潰了,那么Dr.Watson日志可以記錄下惡意任務(wù)的運(yùn)行信息:
文件功能
另一種判斷文件是否運(yùn)行過的方法就是尋找可疑的輸出文件。當(dāng)你在分析一個惡意文件時,它是否會創(chuàng)建任何的數(shù)據(jù)呢?比如說,如果你發(fā)現(xiàn)的這個惡意文件是一個鍵盤記錄器,然后你又在系統(tǒng)中發(fā)現(xiàn)了鍵盤記錄文件,則說明攻擊者已經(jīng)執(zhí)行過這個keylogger了。如果惡意軟件能夠與特定的域名進(jìn)行鏈接,那么瀏覽器的歷史記錄中肯定也會記錄下相關(guān)域名。下表中顯示的是我們在瀏覽器歷史紀(jì)錄中捕捉到的樣本,這個后門樣本使用了兩種通訊機(jī)制:
想要判斷惡意文件是否執(zhí)行過,我們可以分析文件的功能并在磁盤中尋找相應(yīng)功能的運(yùn)行結(jié)果/證據(jù)。分析惡意軟件的功能不僅可以幫助我們了解攻擊者的動機(jī)和最終目標(biāo),而且還有可能幫我們找出其他相關(guān)的惡意文件。
注:如果你在自己的系統(tǒng)中發(fā)現(xiàn)了惡意的可執(zhí)行文件,別忘了先將當(dāng)前系統(tǒng)內(nèi)存中的數(shù)據(jù)導(dǎo)出,你可以使用 MandiantRedline服務(wù) 捕捉并分析內(nèi)存數(shù)據(jù)。