如何確定惡意軟體是否在自己的電腦中執行過?
很不幸,你在自己的電腦里發現了一個惡意的可執行程序!那麼問題來了:這個文件到底有沒有執行過?
在這篇文章中,我們會將注意力放在Windows操作系統的靜態取證分析之上,並跟大家討論一些能夠幫助你回答上面那個問題的方法以及證據源,其中涉及到的四大主要的證據源包括Windows Prefetch、註冊表、日誌文件以及文件信息。
Windows Prefetch
Windows Prefetch(Windows 預讀取)是一個查找文件執行證據的好地方。根據微軟的設計方案,Windows Prefetch的功能就是允許那些經常需要使用到的程序打開得更加快。默認設置下,它會在預讀取文件(存儲路徑為」C:WindowsPrefetch」)中存儲最近執行的128個文件的信息。一個預讀取文件的命名規則為」可執行文件名+文件路徑的哈希+後綴名.pf」,預讀取文件中會保存文件的第一次和最後一次運行日期、文件路徑和執行次數等信息。所以說,如果你的惡意軟體文件名或路徑哈希出現在了一個預讀取文件(例如」 DABEARS.EXE-12F3B52A.pf」)之中,那就說明這個惡意文件曾在你的電腦中執行過了。
註:Windows Server默認禁用了預讀取功能。
註冊表
沒錯,Windows註冊表可是一個巨大的「寶藏」,註冊表可以算是Windows系統能夠正常運行的基石了。雖然註冊表非常「龐大」,但是我們接下來給出的表單卻並沒有那麼複雜。因為如果要確定一個文件是否執行過,我們只需要檢查幾個重要的註冊表鍵即可:
1. ShimCache
微軟使用了ShimCache或「AppCompatCache」來識別應用程序的兼容性問題。緩存數據能夠追蹤文件路徑、大小、最後修改時間和最後一次運行的時間。如果一個文件以Windows進程的形式執行過,那麼它的信息將會被記錄到ShimCache中,但是ShimCache中記錄的文件信息並不能100%證明一個文件執行過,因為它只能證明Windows曾與該文件交互過。下面這個註冊表鍵中包含了ShimCache數據:
HKLMSYSTEMCurrentControlSetControlSessionManagerAppCompatibilityAppCompatCache(
for
XP)HKLMSYSTEMCurrentControlSetControlSessionManagerAppCompatCacheAppCompatCache(
for
Non-XP)更多關於ShimCache的內容,請參考Andrew Davis的【這篇文章】以及Mandiants的【會議報告】。
2. MUICache
當一個文件通過Windows Explorer(資源管理器)運行,程序Shell會在MUICache中創建一個入口。Windows使用MUICache來存儲應用程序名以及其他相關信息,獲取來的信息主要存儲在下面的註冊表鍵中:
HKCUSoftwareMicrosoftWindowsShellNoRoamM
UICache
(for
XP,2000
,2003
)HKCUSoftwareClassesLocal SettingsSoftwareMicrosoftWindowsShellMuiCache(
for
Vista,7
,
2008
)關於MUICache的更多內容,請參考windowsir的【這篇文章】。
3. UserAssist
UserAssist可以追蹤可執行程序以及資源管理器中打開的鏈接,UserAssist鍵能夠追蹤文件的最後一次執行時間以及執行次數,並將信息存儲在下面這個註冊表鍵中:
HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerUserAssist
UserAssist鍵的值對應了可執行程序的名稱以及文件路徑,並使用了ROT13加密。因此,如果你想直接通過搜索關鍵字來查找文件執行的證據的話,在不解碼的情況下是無法做到的。目前也有很多工具可以解密這個註冊表鍵,例如RegRipper userassist.pl插件【點我獲取】。
日誌文件
為了確定一個文件是否執行過,我們還可以根據日誌文件的分析結果來判斷。首先我們來看一看Windows System Event Log(系統事件日誌),因為這個日誌文件記錄了服務的啟動信息。下圖顯示的事件(Event ID=」7035″)信息表明,一個管理員(SID=」-500″)運行了PSEXECSVC遠程執行服務:
當一個服務啟動時,它通常會執行ImagePath中定義的文件或一個已載入的服務DLL。比如說,」Netman」服務在執行時使用了一個合法文件」netman.dll」。但是,如果註冊表中的ServiceDll(例如」tabcteng.dll」)包含一條指向後門的路徑,那麼」Netman」服務將會執行」tabcteng.dll」。所以,你可以通過分析ImagePath和ServiceDll的有效性來判斷是否有惡意服務啟動過。
如果Windows Event Log(事件日誌)的審計設置開啟了Audit Process Tracking(審計進程追蹤)功能,那麼Windows Security Event Log(安全事件日誌)中將會記錄大量關於進程的信息,而這些信息絕對能夠證明一個文件是否執行過。下面這兩張圖片顯示了惡意文件、相關進程ID、父進程ID和用戶名,這些信息可以幫助我們進行進一步分析:
XP EventID 592 – 進程創建:
Windows Vista+記錄下了類似的進程創建事件,EventID為4688:
在更新版本的Windows中,審計功能所能記錄的信息將更加精確化,並且微軟從Windows Server 2008 R2以及Windows 7中將這個功能整合到了Group Policy(組策略)中。關於審計策略設置的更多信息請參考微軟給出的【這份文檔】。
除此之外,基於主機的IPS或反病毒產品日誌同樣可以表明一個文件是否執行過,或者曾經嘗試執行過。下圖給出的是McAfee Access Protection日誌中記錄下的一次訪問事件樣本:
Windows Scheduled Task Log(計劃任務日誌)可以幫助我們判斷攻擊者是否使用了Windows的計劃任務功能來運行惡意軟體。計劃任務的信息會被記錄在一個名叫」SchedLgU.txt」的日誌文件中:
在Windows Vista+平台中,計劃任務的執行信息還會記錄在」Microsoft-Windows-TaskScheduler/Operational」日誌中:
最後,如果一個程序崩潰了,那麼Dr.Watson日誌可以記錄下惡意任務的運行信息:
文件功能
另一種判斷文件是否運行過的方法就是尋找可疑的輸出文件。當你在分析一個惡意文件時,它是否會創建任何的數據呢?比如說,如果你發現的這個惡意文件是一個鍵盤記錄器,然後你又在系統中發現了鍵盤記錄文件,則說明攻擊者已經執行過這個keylogger了。如果惡意軟體能夠與特定的域名進行鏈接,那麼瀏覽器的歷史記錄中肯定也會記錄下相關域名。下表中顯示的是我們在瀏覽器歷史紀錄中捕捉到的樣本,這個後門樣本使用了兩種通訊機制:
想要判斷惡意文件是否執行過,我們可以分析文件的功能並在磁碟中尋找相應功能的運行結果/證據。分析惡意軟體的功能不僅可以幫助我們了解攻擊者的動機和最終目標,而且還有可能幫我們找出其他相關的惡意文件。
註:如果你在自己的系統中發現了惡意的可執行文件,別忘了先將當前系統內存中的數據導出,你可以使用MandiantRedline服務捕捉並分析內存數據。
* 參考來源:fireeye, FB小編Alpha_h4ck編譯,轉載請註明來自FreeBuf.COM
※挖洞經驗 | 記一次針對Twitter(Periscope)API 的有趣挖洞經歷
※Xshellghost技術分析 – 入侵感染供應鏈軟體的大規模定向攻擊
※《網路安全法》執法案例匯總
※「移花接木」偷換廣告:HTTPS劫匪木馬每天打劫200萬次網路訪問
TAG:FreeBuf |
※如何判斷自己身體是否缺水?
※還需要證明進化是否真實嗎?不信看你自己的身體
※如何判斷自己是否有抑鬱症?
※如何觀察自己的行為是否有過失?
※戰爭場上屍體真的能擋子彈嗎?答案其實是否定的,並不安全!
※怎麼判斷自己是否是熱性體質?
※自己是否是濕熱體質?又該如何調理?
※如何判斷自己的皮膚是否是過敏
※想知道自己體內是否存在濕氣,可以看看身體是否有這些癥狀
※健身,如何正確看待,你是否有自己的一套評判體系?
※你的努力,是否真心實意?
※如何能自己判定是否得高血壓?
※如何定義「存在」?如何判斷那些模稜兩可的事物是否存在?
※找回自己|讓自己陷入情緒的事,是否真的重要?
※我們怎麼判斷自己是否需要斷聯?
※如何確定男朋友的是否還愛著自己
※如何判斷自己是否健康?
※酸性體質是真的嗎?如何判斷體質是否偏酸性,怎麼平衡自己的體質
※挑戰核心信念:我們是否誤解了地球的固體中心是如何形成的?
※一定不要忽視身體這忽然的變化,你可能要注意腦溢血是否「找上門」了!