BAM / DAM¶
什麼是 BAM 與 DAM¶
Background Activity Moderator(BAM)與 Desktop Activity Moderator(DAM)是 Windows
服務(Windows 10 1709 及之後的版本),用來管理應用程式在背景中可以執行的動作。
它們會在 SYSTEM 登錄區中,依使用者保存每個程式最後一次執行的時間:
- 每位使用者一個機碼,以該使用者的 SID 命名;
- 每個程式一個值:其名稱為程式在其裝置上的路徑
(
\Device\HarddiskVolume3\Windows\System32\cmd.exe)或封裝應用程式的 ID (Microsoft.WindowsCalculator_8wekyb3d8bbwe); - 值資料的前 8 個位元組是其最後一次執行的時間(FILETIME)。
BAM 不需要使用者本身的登錄區,就能將程式與使用者及時間連結起來,而且它也會列出從卸除式 裝置與網路裝置執行的程式。
最佳結論:此程式的處理程序曾在此使用者的工作階段中 執行;它最後一次執行是在此時間。BAM 不會計算執行次數,而且在程式被刪除之後,項目仍可能保留。
位置¶
C:\Windows\System32\config\SYSTEM
ControlSet00N\Services\bam\State\UserSettings\<SID> Windows 10 1809 and later
ControlSet00N\Services\bam\UserSettings\<SID> Windows 10 1709 to 1803
ControlSet00N\Services\dam\State\UserSettings\<SID>
ControlSet00N\Services\dam\UserSettings\<SID>
每位使用者的機碼還有 Version 與 SequenceNumber 值;它們不是程式,因此會被略過。
從 1709 或 1803 升級的系統可能同時具有兩種配置。
請收集 SYSTEM 及其交易記錄檔,以及系統的 SAM 與 SOFTWARE:它們提供使用者名稱。
分析注意事項¶
- 每個程式與使用者只有一個時間。 只會保留最近一次的執行。Prefetch、Amcache 與 事件記錄可提供較早的執行紀錄。
- 近期活動。 據報導,一段時間未執行之程式的項目會在 Windows 啟動時被移除,因此 BAM 主要顯示近期活動:BAM 中沒有的程式,仍可能在很久以前執行過。
- 是裝置路徑,而非磁碟機代號。
\Device\HarddiskVolume3是 Windows 編號的第三個 磁碟區,而不是C:。DevicePath與Path會將裝置與其上的路徑分開;在寫出磁碟機代號 之前,請先以MountedDevices、$MFT或其他跡證比對該磁碟區。 - 並非所有程式。 BAM 與 DAM 追蹤的是使用者工作階段中的程式;服務大多不會出現。
S-1-5-18項目通常是安裝程式與登入畫面的處理程序(FirstLogonAnim.exe),而S-1-5-90-0-<n>項目則是 Desktop Window Manager(DWM-<n>)。 - 控制集。 預設會讀取 Windows 最後使用的控制集。
--all-control-sets會讀取所有控制集: 較舊的控制集可能保留目前控制集已不再有的項目。 - 使用者名稱。 本機帳戶的名稱取自
SAM(電腦的 SID 與帳戶的 RID);網域帳戶的名稱 則取自其在ProfileList中的設定檔資料夾。UserSource指出來源為何(sam、profile_list、well_known)。若沒有這些資料,就只會提供 SID。SAM中已不存在的 RID(已刪除的帳戶)則維持未命名。
使用 Juntei 剖析¶
Usage: juntei parse-registry bam <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SYSTEM hives
-f, --file <FILE> Parse one SYSTEM hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--all-control-sets Every control set, not only the one in use
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry bam -d evidence/ -o bam.csv
juntei parse-registry bam -f SYSTEM -t jsonl \
| jq 'select(.Path? // "" | test("\\\\(Users|ProgramData|Temp)\\\\"; "i"))'
摘要會列出每位使用者的 SID、名稱與項目數量,以及最後執行的程式(由新到舊)。
輸出欄位¶
| 欄位 | 判讀 |
|---|---|
Host、SourcePath |
主機,以及 SYSTEM 登錄區。 |
ControlSet、IsCurrentControlSet |
項目所在的控制集,以及它是否為 Windows 最後使用的控制集。 |
Moderator |
bam 或 dam。 |
UserSID、User、UserSource |
機碼所依據命名的 SID、使用者名稱,以及名稱的來源(sam、profile_list、well_known)。 |
Program |
Windows 所寫入的值名稱:裝置路徑或封裝應用程式的 ID。 |
DevicePath、Path |
對於裝置路徑,為裝置(\Device\HarddiskVolume3)及其上的路徑(\Windows\System32\cmd.exe);封裝應用程式則為空。 |
LastRunUTC |
程式最後一次執行的時間(精確至 100 奈秒)。 |
KeyPath、KeyLastWrittenUTC |
使用者的機碼及其最後寫入時間:即其任一項目最近一次更新的時間。 |
DataRaw |
當值不含時間時(非 REG_BINARY,或少於 8 個位元組),該值的位元組(十六進位)。 |
TransactionLogStatus、LogsApplied |
登錄復原脈絡。 |
Problems |
不含時間的資料,以及無法讀取的值。 |
調查策略¶
- 依
LastRunUTC排序,並查看位於使用者可寫入位置(\Users\、Downloads、Temp、ProgramData)、系統磁碟區以外的裝置上的程式,以及管理工具與遠端存取工具。 - 確認是哪位使用者執行了它們,以及與目前設定檔不相符的帳戶。
- 與 Prefetch(執行次數與較早的執行)、UserAssist(從 Explorer 啟動)、Amcache
與 ShimCache(存在跡證)、
$MFT(程式的檔案)以及事件記錄進行關聯分析。 - 使用
--all-control-sets,並以parse-registry read --recover-deleted找出已刪除的 BAM 值。
延伸資訊¶
超出範圍的最後執行 FILETIME 會讓 LastRunUTC 保持空白,並將原始值保留在 DataRaw 中,同時在 Problems 中附上說明。近期活動摘要會標示每台主機,並將不同登錄區/使用者的觀察結果分開保存。