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 พร้อม transaction log และ SAM กับ SOFTWARE ของระบบ ซึ่งใช้ระบุชื่อ
ผู้ใช้
ข้อควรระวังสำหรับนักวิเคราะห์¶
- หนึ่งเวลาต่อโปรแกรมและผู้ใช้ เก็บไว้เฉพาะการทำงานครั้งล่าสุดเท่านั้น ส่วนการทำงานครั้งก่อน ๆ ให้ดูจาก Prefetch, Amcache และ event log
- กิจกรรมล่าสุด มีรายงานว่ารายการของโปรแกรมที่ไม่ได้ทำงานมาระยะหนึ่งจะถูก ลบออกเมื่อ 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>) - Control set โดยค่าเริ่มต้นจะอ่าน control set ที่ Windows ใช้ล่าสุด
--all-control-setsจะอ่านทุกชุด control set ที่เก่ากว่าอาจเก็บรายการที่ชุดปัจจุบันไม่มีแล้ว - ชื่อผู้ใช้ ชื่อของบัญชีภายในเครื่องมาจาก
SAM(SID ของคอมพิวเตอร์และ RID ของ บัญชี) ส่วนชื่อของบัญชีโดเมนมาจากโฟลเดอร์โปรไฟล์ในProfileListโดยUserSourceระบุแหล่งที่มา (sam,profile_list,well_known) หากไม่มีข้อมูลเหล่านี้จะแสดงเพียง SID เท่านั้น RID ที่ไม่มีอยู่ในSAMแล้ว (บัญชีที่ถูกลบ) จะไม่มีชื่อ
วิเคราะห์ด้วย 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 |
control set ที่มีรายการนั้น และเป็นชุดที่ 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 ns) |
KeyPath, KeyLastWrittenUTC |
คีย์ของผู้ใช้และเวลาเขียนล่าสุด คือการอัปเดตครั้งล่าสุดของรายการใดรายการหนึ่งในคีย์ |
DataRaw |
ไบต์ของค่า (hex) เมื่อไม่มีเวลาอยู่ ได้แก่ ไม่ใช่ REG_BINARY หรือมีน้อยกว่า 8 ไบต์ |
TransactionLogStatus, LogsApplied |
บริบทการกู้คืนรีจิสทรี |
Problems |
ข้อมูลที่ไม่มีเวลา และค่าที่อ่านไม่ได้ |
กลยุทธ์การตรวจสอบ¶
- เรียงตาม
LastRunUTCแล้วดูโปรแกรมในตำแหน่งที่ผู้ใช้เขียนได้ (\Users\,Downloads,Temp,ProgramData) บนอุปกรณ์อื่นที่ไม่ใช่วอลุ่มระบบ และเครื่องมือดูแลระบบและ เครื่องมือเข้าถึงระยะไกล - ตรวจสอบว่าผู้ใช้คนใดเรียกใช้โปรแกรมเหล่านั้น และบัญชีที่ไม่ตรงกับโปรไฟล์ปัจจุบัน
- เชื่อมโยงกับ Prefetch (จำนวนครั้งที่ทำงานและการทำงานครั้งก่อน), UserAssist (การเริ่มจาก Explorer), Amcache
และ ShimCache (การมีอยู่),
$MFT(ไฟล์ของโปรแกรม) และ event log - ใช้
--all-control-setsและparse-registry read --recover-deletedสำหรับค่า BAM ที่ถูกลบ
รายละเอียดเพิ่มเติม¶
- libyal winreg-kb: Background activity moderator (BAM)
- Microsoft: Security identifiers (SID ที่รู้จักกันทั่วไป)
- ys-registry-parser
FILETIME ของการทำงานล่าสุดที่อยู่นอกช่วงจะทำให้ LastRunUTC ว่าง และเก็บรักษาค่าเดิมไว้ใน DataRaw พร้อมคำอธิบายใน Problems สรุปกิจกรรมล่าสุดจะระบุแต่ละโฮสต์และแยกข้อมูลที่สังเกตได้จากแต่ละไฮฟ์/ผู้ใช้ออกจากกัน