บันทึก USN ($UsnJrnl:$J)¶
USN Journal คืออะไร¶
NTFS บันทึกการเปลี่ยนแปลงของไฟล์และไดเรกทอรีไว้ใน Update Sequence Number (USN) Change Journal เรคคอร์ดหนึ่งรายการสามารถอธิบายการสร้าง การขยาย/เขียนทับข้อมูล การเปลี่ยนแอตทริบิวต์หรือความปลอดภัย การเปลี่ยนชื่อ การปิด และการลบ โดยจัดเก็บ file reference, parent reference, ชื่อ, เหตุผล (reason), แอตทริบิวต์, timestamp และ USN ที่เพิ่มขึ้นอย่างต่อเนื่อง
journal นี้ยอดเยี่ยมสำหรับการสร้างลำดับการดำเนินการกับไฟล์ของผู้โจมตีที่เกิดขึ้นติดต่อกันขึ้นมาใหม่ โดยเฉพาะเมื่อ ไฟล์ถูกลบไปแล้ว journal บันทึก ว่าเมทาดาทา/เนื้อหามีการเปลี่ยนแปลง ไม่ใช่ไบต์ที่เปลี่ยนแปลง
ข้อสรุปที่ดีที่สุด: NTFS บันทึกเหตุผลการเปลี่ยนแปลงตามที่ระบุสำหรับ
ไฟล์ที่อ้างอิง ณ timestamp นั้น เหตุผลมักสะสมรวมกันจนถึงเรคคอร์ด CLOSE
ตำแหน่งและการเก็บรวบรวม¶
$J เป็น named stream ของเมทาดาทา NTFS ให้เก็บรวบรวมด้วยเครื่องมือนิติวิทยาศาสตร์ที่อ่านข้อมูลดิบได้ และให้เก็บรวบรวม
$MFT ของวอลุ่มเดียวกันด้วย เพราะเรคคอร์ด USN จัดเก็บ parent file reference แทนที่จะเป็นพาธที่สมบูรณ์
ข้อควรระวังสำหรับนักวิเคราะห์¶
- journal เป็นแบบวนรอบและมีขนาดจำกัด เรคคอร์ดเก่าจะถูกเขียนทับ
FILE_DELETEบอกว่า NTFS ประมวลผลการลบแล้ว เนื้อหาอาจยังกู้คืนได้จากที่อื่น- เหตุผลเช่น
DATA_OVERWRITEไม่ได้เปิดเผยไบต์ โพรเซส หรือผู้ใช้ที่รับผิดชอบ - เหตุผลหลายรายการอาจรวมอยู่ในเรคคอร์ดเดียว
CLOSEมักเป็นจุดสิ้นสุดของการเปลี่ยนแปลงที่สะสมไว้ - พาธเป็นสิ่งที่สร้างขึ้นใหม่ ไดเรกทอรีแม่อาจถูกเปลี่ยนชื่อ ถูกลบ หรือถูกนำกลับมาใช้ใหม่แล้ว
- sequence number ของ file reference มีความสำคัญ entry number เพียงอย่างเดียวอาจเชื่อมโยงไปยังรุ่น (generation) ที่ผิด
- การกู้คืนแบบ carving สามารถกู้เรคคอร์ดที่ถูกต้องได้โดยไม่มีบริบทของ journal ดั้งเดิม ให้รายงานความแตกต่างนี้ด้วย
วิเคราะห์ด้วย Juntei¶
Usage: juntei parse-ntfs usn-journal <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find $J files
-f, --file <FILE> Parse one $J, or any file with --carve
-m, --mft <FILE> Use the matching volume's $MFT for paths
--carve Search a disk image/unallocated file for records
Output:
-o, --output <PATH> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-ntfs usn-journal -f 'C/$Extend/$J' -m 'C/$MFT' -o usn.csv
juntei parse-ntfs usn-journal -d evidence/ -o usn-jsonl -t jsonl
juntei parse-ntfs usn-journal -f unallocated.bin --carve -o carved-usn.csv
ฟิลด์เอาต์พุต CSV¶
| ฟิลด์ | การตีความ |
|---|---|
Name |
ชื่อไฟล์/ไดเรกทอรีที่จัดเก็บในเรคคอร์ด USN นี้ ไม่ใช่พาธที่สมบูรณ์ |
Extension |
นามสกุลที่แยกจาก Name เพื่อความสะดวก อย่าใช้เป็นชนิดเนื้อหาที่เชื่อถือได้ |
EntryNumber, SequenceNumber |
NTFS reference ของไฟล์ ใช้ทั้งสองค่าเพื่อระบุรุ่นของเรคคอร์ด |
ParentEntryNumber, ParentSequenceNumber |
NTFS reference ของไดเรกทอรีแม่ ณ เวลาที่เปลี่ยนแปลง |
ParentPath |
พาธของไดเรกทอรีแม่ที่ Juntei สร้างขึ้นใหม่โดยคำนึงถึงเวลา เครื่องหมาย unknown หมายความว่า resolve ลำดับบรรพบุรุษไม่ได้ |
UpdateSequenceNumber |
ค่าลำดับของ USN มีประโยชน์สำหรับการเรียงลำดับที่คงที่และการเชื่อมโยงกับ Amcache/MFT |
UpdateTimestamp |
timestamp ที่จัดเก็บในเรคคอร์ด V2/V3 ให้ตรวจสอบ timestamp จากบริบทการ carving ด้วยวิธีเดียวกับเรคคอร์ดอื่น |
UpdateReasons |
แฟล็กการเปลี่ยนแปลงที่มีชื่อหนึ่งรายการขึ้นไป เชื่อมด้วย | ให้ตีความการผสมกันของแฟล็กร่วมกับ CLOSE |
FileAttributes |
แอตทริบิวต์ NTFS ที่บันทึก ณ เวลาที่เปลี่ยนแปลง บิตที่ไม่รู้จักจะยังเป็นเลขฐานสิบหก |
OffsetToData |
byte offset ในอินพุต จำเป็นสำหรับการตรวจสอบความถูกต้องและเรคคอร์ดที่ได้จากการ carving |
SourceFile |
journal/อิมเมจอินพุต ใช้แยกแยะโฮสต์และวอลุ่ม |
SourceInfo |
แฟล็กแหล่งที่มาที่อธิบายว่าการเปลี่ยนแปลงเข้ามาใน journal อย่างไร โดยปกติเป็นบริบท ไม่ใช่การระบุตัวผู้กระทำ |
SecurityID |
ดัชนี security identifier ของ NTFS สำหรับเรคคอร์ด ไม่ใช่ SID ของผู้ใช้ |
Version |
เวอร์ชันของเรคคอร์ด USN Juntei เขียน V2/V3 ลง CSV ส่วน JSON เก็บ extent การติดตามช่วงของ V4 ไว้ |
JSON/JSONL แสดง reference แบบ 128 บิตของ V3 ได้อย่างถูกต้อง และเก็บรักษาเรคคอร์ดการติดตามช่วงของ V4 และ extent ของเรคคอร์ดเหล่านั้น ให้ใช้รูปแบบนี้เมื่อฟิลด์ระดับต่ำที่เฉพาะเจาะจงตามเวอร์ชันมีความสำคัญ
กลยุทธ์การตรวจสอบ¶
- กรองตามเวลา ชื่อ นามสกุล พาธของไดเรกทอรีแม่ หรือ file reference
- เรียงลำดับตาม
UpdateSequenceNumberควบคู่กับเวลาเพื่อดูลำดับที่แน่นอนใน journal - จับคู่
RENAME_OLD_NAMEกับRENAME_NEW_NAMEสำหรับการย้าย/การเปลี่ยนชื่อ - ใช้
$MFTเพื่อตรวจสอบสถานะของเรคคอร์ด พาธ ขนาด และ timestamp - เชื่อมโยงการระบุโพรเซสจาก event log, EDR, Prefetch, บริการ/งานตามกำหนดเวลา หรือ Defender