Jump Lists¶
Jump Lists คืออะไร¶
Jump Lists เป็นข้อมูลเบื้องหลังเมนูที่แสดงจากรายการแอปพลิเคชันบนแถบงาน (taskbar) และเมนู Start โดย Automatic Jump Lists เป็นประวัติที่ Windows จัดการเองของรายการที่แอปพลิเคชันใช้ ส่วน Custom Jump Lists เป็น หมวดหมู่และงาน (task) ที่แอปพลิเคชันกำหนดเอง ทั้งสองแบบสามารถฝังโครงสร้าง LNK ที่มีพาธเป้าหมาย เวลา บริบทวอลุ่ม/เครือข่าย MFT reference และอาร์กิวเมนต์สำหรับเรียกใช้ไว้ได้
เรคคอร์ดแบบอัตโนมัติสามารถเปิดเผยไฟล์หรือโฟลเดอร์ที่แอปพลิเคชันเปิด ลำดับ/เวลาการใช้งานล่าสุด จำนวนการโต้ตอบ และสถานะการปักหมุด ส่วนลิสต์แบบกำหนดเองสามารถเปิดเผยหน้า "ที่ปิดล่าสุด" หรืองานของแอปพลิเคชัน ซึ่งรวมถึงอาร์กิวเมนต์คำสั่งที่เป็นอันตรายได้
ข้อสรุปที่ดีที่สุด: แอปพลิเคชันเจ้าของได้บันทึกหรือแสดง รายการ/งานนั้นใน Jump List พฤติกรรมแตกต่างกันไปตามแอปพลิเคชัน ให้ยืนยันการเรียกใช้งาน/การเข้าถึงจริง
ตำแหน่งและการเก็บรวบรวม¶
%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations\*.automaticDestinations-ms
%APPDATA%\Microsoft\Windows\Recent\CustomDestinations\*.customDestinations-ms
คำนำหน้าชื่อไฟล์แบบเลขฐานสิบหกคือ AppID ให้เก็บรวบรวมทั้งสองไดเรกทอรีและเก็บรักษาพาธ
โปรไฟล์ผู้ใช้ไว้ ลิสต์แบบอัตโนมัติเป็นคอนเทนเนอร์ OLE Compound File ที่มีสตรีม DestList และสตรีม LNK
ที่มีหมายเลขกำกับ ส่วนลิสต์แบบกำหนดเองใช้รูปแบบหมวดหมู่/ลิงก์ของตัวเอง
ข้อควรระวังสำหรับนักวิเคราะห์¶
- คำอธิบาย AppID มาจากการจับคู่ที่รู้จัก AppID ที่ไม่รู้จักไม่ได้น่าสงสัยในตัวเอง
- ฟิลด์
LastModified/ เวลาใช้งานล่าสุดเป็นของรายการใน DestList ซึ่งต่างจากเวลาของเป้าหมายที่ฝังอยู่ - จำนวนการโต้ตอบมีเฉพาะในเวอร์ชันที่รองรับ และไม่ใช่จำนวนการเปิดทั้งหมด
- การปักหมุดทำให้รายการคงอยู่เกินกว่าลำดับความล่าสุดตามปกติ การล้างข้อมูลหรือการตั้งค่าแอปพลิเคชันอาจลบรายการอื่นออกไป
- ลิสต์อาจมีสตรีมที่ล้าสมัย/ไม่ได้ผูกอยู่ หรือไบต์จากลิสต์แบบกำหนดเองที่ยาวกว่าซึ่งมีอยู่ก่อนหน้า
- อาร์กิวเมนต์และพาธของ LNK ที่ฝังอยู่เป็นข้อมูลที่ผู้โจมตีควบคุมได้ การเชื่อมโยงกับแอปพลิเคชันเป็นเพียงบริบท ไม่ใช่ความน่าเชื่อถือ
วิเคราะห์ด้วย Juntei¶
Usage: juntei parse-file jump-lists <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find automatic/custom destination files
-f, --file <FILE> Parse one Jump List
--code-page <CP> ANSI code page for embedded links
Output:
-o, --output <PATH> Directory of CSV tables, or JSON/JSONL file
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-file jump-lists -d evidence/ -o jump-list-csv
juntei parse-file jump-lists -f sample.automaticDestinations-ms -t jsonl | jq .
เมื่อใช้ auto-parse ตาราง CSV คือ FileAndFolderOpening/JumpLists-AutomaticDestinations.csv
และ FileAndFolderOpening/JumpLists-CustomDestinations.csv ซึ่งอยู่ใต้คอมพิวเตอร์แต่ละเครื่องโดยตรง
log ที่ใช้ร่วมกันคือ JumpLists-logs.txt ในหมวดหมู่นั้น manifest จะแสดงพาธที่แน่นอน
ใน OutputFiles การส่งออก CSV แบบเดี่ยวจะคง AutomaticDestinations.csv และ
CustomDestinations.csv ไว้ในไดเรกทอรีที่คุณเลือก การส่งออกแบบอัตโนมัติในรูปแบบ JSON และ JSONL เป็น
ไฟล์ JumpLists.json หรือ JumpLists.jsonl ไฟล์เดียว โดยโครงสร้างเรคคอร์ดไม่เปลี่ยนแปลง
ฟิลด์ CSV ของ AutomaticDestinations¶
| กลุ่มฟิลด์ | ฟิลด์และการตีความ |
|---|---|
| ต้นทาง | SourceFile, SourceCreated, SourceModified, SourceAccessed: คอนเทนเนอร์ Jump List และเวลาในระบบไฟล์ของคอนเทนเนอร์ |
| แอปพลิเคชัน | AppId, AppIdDescription: AppID จากชื่อไฟล์และการจับคู่กับแอปพลิเคชันที่รู้จัก อย่าอนุมานตัวตนจากแฮชที่ไม่รู้จัก |
| คอนเทนเนอร์ | HasSps, DestListVersion, LastUsedEntryNumber: โครงสร้าง/เวอร์ชันของ DestList และบริบทของส่วนหัว |
| ลำดับ | MRU, EntryNumber: ตำแหน่งการใช้งานล่าสุดและตัวระบุรายการ/สตรีมแบบเลขฐานสิบหก |
| เมทาดาทาการใช้งาน | CreationTime, LastModified, InteractionCount, PinStatus, PinPosition: วงจรชีวิต/การใช้งาน/สถานะการปักหมุดใน DestList ให้ตีความตามเวอร์ชัน |
| โฮสต์/พาธ | Hostname, MacAddress, Path, DisplayPath: ตำแหน่งของเป้าหมายและบริบทการติดตาม โฮสต์/MAC ไม่ใช่ข้อมูลระบุตัวผู้กระทำเพียงลำพัง |
| ID การติดตาม | FileBirthDroid, FileDroid, VolumeBirthDroid, VolumeDroid: ใช้เชื่อมโยงเป้าหมายที่ถูกย้ายและการติดตามของ LNK ที่ฝังอยู่ |
| หมายเหตุ | Notes: แจ้งเกี่ยวกับสตรีมที่ไม่ได้ผูกอยู่ ข้อมูลหลงเหลือที่กู้คืนได้ หรือบริบทอื่นจากพาร์เซอร์ |
| LNK ที่ฝังอยู่ | TargetCreated, TargetModified, TargetAccessed, FileSize, RelativePath, WorkingDirectory, FileAttributes, HeaderFlags, DriveType, VolumeSerialNumber, VolumeLabel, LocalPath, CommonPath, TargetIDAbsolutePath, TargetMFTEntryNumber, TargetMFTSequenceNumber, MachineID, MachineMACAddress, TrackerCreatedOn, ExtraBlocksPresent, Args: ตีความตามที่อธิบายไว้ใน ทางลัด LNK |
| LNK เพิ่มเติม | NetworkPath, Name, IconLocation: ฟิลด์เครือข่ายและการแสดงผลจากทางลัดที่ฝังอยู่ |
| การตรวจสอบความถูกต้อง | Problems: สตรีมที่หายไป การถูกตัดทอน จำนวนที่ไม่ตรงกัน หรือลิงก์ที่เสียหาย |
ฟิลด์ CSV ของ CustomDestinations¶
เอาต์พุตแบบกำหนดเองเริ่มต้นด้วย SourceFile, SourceCreated, SourceModified, SourceAccessed, AppId,
AppIdDescription และ EntryName (ชื่อหมวดหมู่หรือ Tasks) ตามด้วยฟิลด์ LNK ที่ฝังอยู่ทั้งหมด
ที่แสดงไว้ด้านบน แล้วตามด้วย Notes, NetworkPath, Name, IconLocation และ Problems
JSON/JSONL จะเก็บรักษาข้อมูลเพิ่มเติม ได้แก่ ส่วนหัว DestList, score/checksum/property store ของแต่ละรายการ,
DestListPropertyStore, สตรีมของ compound file, หมวดหมู่แบบกำหนดเอง, ไบต์หลังหมวดหมู่สุดท้าย
และฟิลด์ที่ซ้อนอยู่ของ LNK ที่ฝังอยู่ทุกรายการ
กลยุทธ์การตรวจสอบ¶
- ระบุผู้ใช้และโปรไฟล์ต้นทาง จากนั้นจับคู่ AppID กับแอปพลิเคชันอย่างระมัดระวัง
- เรียงรายการแบบอัตโนมัติตาม
LastModifiedและMRUและแยกรายการที่ปักหมุดออก - ตรวจทานพาธ แชร์บนเครือข่าย serial ของวอลุ่มแบบถอดได้ MFT reference และอาร์กิวเมนต์
- ตรวจสอบ
Notesและลิงก์ที่ไม่ได้ผูกอยู่/หลงเหลือ เพราะรายการที่ถูกลบหรือรายการก่อนหน้าอาจยังคงอยู่ที่นั่น - เชื่อมโยงกับ RecentDocs, LNK ใน Recent แบบเดี่ยว, Prefetch, SRUM,
$MFTและ event log