前幾天一路從 $MFT、$Recycle.Bin 看到 LNK、Jump List 等等,其實已經碰過不少 Windows Artifact。
但看到這裡,很容易會有一個問題:
這些東西到底什麼時候要看?
這次在加拿大上課時,老師用一個我覺得很好記的方式整理 Windows Artifacts。大致可以分成四個方向:
Windows Artifacts
│
├─ What RAN? 跑過什麼?
│ ├─ Prefetch
│ ├─ AmCache
│ ├─ ShimCache
│ └─ Event Logs
│
├─ What was OPENED? 開過什麼?
│ ├─ LNK
│ ├─ Jump Lists
│ ├─ Shellbags
│ └─ Recent
│
├─ What was DELETED? 刪過什麼?
│ ├─ $Recycle.Bin
│ ├─ $MFT
│ ├─ $UsnJrnl
│ └─ Shadow Copies
│
└─ Where it CONNECTED? 連過哪裡?
├─ Browser Data
├─ Network / Wi-Fi
├─ USB History
└─ Firewall Logs
例如今天拿到一台電腦,想知道使用者有沒有執行某支程式,就可以先往 Prefetch、AmCache、ShimCache、Event Logs 這條線找。
如果問題變成「使用者最近有沒有開過某個檔案」,則可以往 LNK、Jump List、Recent 這類 Artifact 看。
如果想知道某支程式有沒有出現在系統裡、是否留下執行相關痕跡,可以先從 Prefetch、AmCache、ShimCache 和 Event Logs 開始找。
DAY 19 介紹過 Windows 的 Prefetch 原本是用來加速程式啟動,但其中也可能留下程式執行相關資訊。
常見位置:
C:\Windows\Prefetch\
裡面通常會看到:
*.pf
從 Prefetch 可以關注程式是否曾經執行、執行時間、執行次數,以及啟動時使用到的檔案與資料夾。
所以即使某個可疑的 .exe 已經被刪掉,Prefetch 還是可能留下它曾經出現過的線索。
AmCache 也是 Windows 中常被拿來分析 Application 的 Artifact,其中可能包含 Executable Path、File Metadata、SHA-1 等程式相關資訊。
因此,即使原始 Executable 已經不存在,AmCache 中仍可能留有和它相關的紀錄。
ShimCache 又常被稱為 AppCompatCache,和 Windows 的 Application Compatibility 機制有關,也可能留下 Executable 曾經存在於系統中的資訊。
不過要特別注意,看到 ShimCache 紀錄,不代表單靠這一筆就能直接證明程式一定執行過。
實際分析時,通常還是會和 Prefetch、AmCache、Event Log 等其他 Artifact 一起比對。
Windows Event Logs 記錄的是系統、安全性以及 Application 發生的各種事件。
常見位置:
C:\Windows\System32\winevt\Logs\
檔案通常是:
*.evtx
裡面可能包含登入行為、權限使用、帳號或 Policy 異動、Process 啟動、Service 安裝、Scheduled Task、Network Activity 和 Firewall Event。
所以 Event Logs 不只可以拿來看「跑過什麼」,後面做登入、網路或 Timeline 分析時也常會用到。
這一組就和前兩天的內容很有關係,常見的 Artifact 包括 LNK、Jump Lists、Shellbags 和 Recent。
DAY16、DAY17 我們了解一個 LNK 裡可能會留下 Target File Path、Target File Size、Timestamp、Volume Serial Number、Machine / Host Information 和 Object ID 等資訊。
所以如果想知道使用者曾經接觸過哪些檔案,LNK 是很重要的一條線索。
DAY18 提到 Jump List 和 Windows 工作列中的「最近開啟」內容有關。
像是 Word 最近開過哪些文件、PDF Reader 最近看過哪些 PDF,都可能留下相關紀錄。
因此,LNK 比較像是在看 「這個檔案留下了什麼資訊?」,Jump List 則可以換個角度,看 「這個 Application 最近開過什麼?」
Shellbags 比較偏向 Folder Browsing 的使用痕跡,也就是使用者曾經透過 Windows Explorer 瀏覽過哪些位置。
所以即使某個資料夾後來已經不存在,某些瀏覽相關資訊仍可能留在 Windows 裡。
Windows 也會保留各種最近使用紀錄。
其實前面看的 LNK、Jump List,都可以放在「最近使用行為」這條線上理解。
因此,如果想確認「使用者有沒有打開過這份文件」,通常不會只看單一 Artifact,而是會把 LNK、Jump List、Recent,甚至 $MFT 的資訊一起比對,看不同地方留下來的紀錄能不能互相對上。
這一組其實前面已經碰過不少,常見的 Artifact 包括 $Recycle.Bin、$MFT、$UsnJrnl 和 Shadow Copies。
DAY15 提到,當使用者透過 Windows 正常刪除檔案時,可能會留下 $Rxxxxxx 和 $Ixxxxxx。其中 $I 可以提供 Original Path、Original File Size 和 Deletion Time。
所以即使使用者已經按下 Delete,系統還是可能留下不少資訊。
DAY13、DAY14 裡,我們看過 NTFS 中每個檔案都會有對應的 MFT Record。即使檔案被刪除,相關 Record 也不一定會立刻從磁碟上消失。
因此 $MFT 可以幫助我們了解檔案名稱、檔案大小、Timestamp、Record Number 和 Allocation Status,甚至還能進一步從 Data Run 找到原本 File Data 所在的位置。
$UsnJrnl 是 NTFS 用來記錄檔案系統變更的 Journal。
檔案被建立、修改、重新命名或刪除,都可能在這類變更紀錄中留下線索。
所以有時候 $MFT 看到的是檔案現在或殘留的狀態,而 $UsnJrnl 則可以從另一個角度看檔案系統曾經發生過哪些變化。
Windows 的 Volume Shadow Copies 可能保留某個時間點的 Snapshot。
如果現在的檔案已經被修改、刪除或覆蓋,有時候還能從較早的 Shadow Copy 找到不同版本。
最後一組是 Browser Data、Network / Wi-Fi、USB History 和 Firewall Logs。
這類 Artifact 比較像是在回答:這台電腦和外面的世界發生過什麼互動?
Browser 本身就會留下不少 Artifact,例如 History、Download、Cache 和 Cookie。
透過這些紀錄,可以了解使用者曾經造訪哪些網站、下載過什麼,以及大概在什麼時間發生。
如果要調查釣魚、惡意下載或資料外洩,Browser Artifact 就會是一條很重要的線索。
Windows 也可能留下和網路連線相關的紀錄,例如曾經使用過哪些 Wi-Fi、Network Profile,或系統當時的網路活動。
這些資訊放進 Timeline 之後,也可能幫助判斷這台電腦當時處在哪個網路環境。
USB 也是很常見的調查方向。
例如懷疑有人利用 USB 把公司資料帶走,就可以先從系統留下的 USB Device 與裝置識別資訊開始找,再和檔案 Timestamp、LNK 或 Event Log 等 Artifact 一起比對。
Firewall Log 可以提供另一個 Network Activity 的角度,例如 Source / Destination、IP、Port、Connection,以及 Blocked / Allowed 等資訊。
所以「連過哪裡」通常也不會只看一個地方,而是可能把 Browser、Network、Firewall,甚至前面 Memory Analysis 用過的 netscan 一起拿來比對。