如何確定惡意軟體是否在自己的電腦中執行過?
很不幸,你在自己的電腦裡發現了一個惡意的可執行程式!那麼問題來了:這個檔案到底有沒有執行過?
在這篇文章中,我們會將注意力放在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來儲存應用程式名以及其他相關資訊,獲取來的資訊主要儲存在下面的登錄檔鍵中:
HKCUSoftwareMicrosoftWindowsShellNoRoamMUICache(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服務捕捉並分析記憶體資料。