คลัง
forensics

Timeline Analysis

Timeline Analysis เรียงเหตุการณ์จากหลักฐานตามเวลาเพื่อสร้างลำดับว่าเกิดอะไรขึ้นเมื่อไหร่ บทนี้ลงลึก MACB timestamps, การสร้าง filesystem timeline (Sleuth Kit) และ super timeline (Plaso) ที่รวมหลายแหล่ง, การวิเคราะห์, การตรวจ timestomping, และเครื่องมือ (เนื้อหาเพื่อการศึกษา/ฝึกใน lab/CTF)

IntermediateAdvanced#timeline#forensics#super-timeline#plaso#mactime#timestomping#ctf

1. หลักการและ MACB times

ทุกไฟล์มี timestamp — MACB: Modified (แก้เนื้อหา), Accessed (เข้าถึง), Changed (แก้ metadata/MFT), Born/Created (สร้าง) การเรียง event ตามเวลาช่วยตอบว่า 'attacker ทำอะไรตามลำดับไหน' เช่น เห็นไฟล์ malware ถูกสร้าง → ตามด้วย log การรัน → ตามด้วยไฟล์ที่ถูกขโมย — ปะติดปะต่อเป็นเรื่องราวของเหตุการณ์

เนื้อหานี้เพื่อการศึกษาในงาน forensics ที่ถูกต้อง (CTF, lab) เท่านั้น

2. Filesystem timeline (Sleuth Kit)

fls + mactimeLinux
# สร้าง bodyfile (MAC times ของทุกไฟล์)
fls -r -m / disk.img > bodyfile
fls -r -m / -o 2048 disk.img > bodyfile    # ระบุ partition offset

# แปลง bodyfile เป็น timeline (เรียงเวลา)
mactime -b bodyfile -d > timeline.csv      # -d = CSV
mactime -b bodyfile -d 2024-01-01..2024-01-31 > jan.csv   # ช่วงเวลา

# อ่าน: แต่ละบรรทัด = เวลา + [MACB] + ไฟล์
fls -m สร้าง bodyfile; mactime เรียงตามเวลา → เห็นว่าไฟล์ไหนถูกแตะเมื่อไหร่

3. Super timeline (Plaso/log2timeline)

Filesystem timeline มีแค่ MAC times Plaso สร้าง 'super timeline' ที่รวม timestamp จากหลายแหล่ง: filesystem + Windows registry + Event Logs + browser history + LNK files + prefetch + อื่นๆ — ภาพรวมเหตุการณ์ที่ละเอียดกว่ามาก

log2timeline + psortLinux
# สร้าง super timeline (เก็บทุกแหล่งจาก image)
log2timeline.py timeline.plaso disk.img
# หรือจาก mount point
log2timeline.py timeline.plaso /mnt/d

# แปลงเป็น CSV (เรียง + กรอง)
psort.py -o l2tcsv -w supertimeline.csv timeline.plaso

# กรองช่วงเวลา
psort.py -o l2tcsv -w filtered.csv timeline.plaso \
  "date > '2024-01-01 00:00:00' AND date < '2024-01-02 00:00:00'"

# กรองเฉพาะบาง source
psort.py timeline.plaso "parser contains 'winevtx'"
Plaso รวม filesystem+registry+evtx+browser+prefetch+LNK; psort เรียง/กรอง; ไฟล์ใหญ่ — กรองช่วงเวลาที่สนใจ

4. วิเคราะห์ timeline + timestomping

  • หาจุดเริ่มต้น (initial access): ไฟล์/event แรกที่น่าสงสัย
  • ดู event รอบเวลานั้น: อะไรเกิดก่อน/หลัง (download → execute → persist → exfil)
  • timestomping: timestamp ที่ถูกแก้ให้ปลอม — สัญญาณ: B (created) ใหม่กว่า M (modified) ผิดธรรมชาติ, หรือ timestamp ลงท้าย .000000000 (วินาทีกลม) ผิดปกติ
  • เทียบ $STANDARD_INFORMATION vs $FILE_NAME (NTFS): ถ้าต่างกัน = timestomping (tool แก้ได้แค่ $SI ไม่แก้ $FN)
  • correlate หลายแหล่ง: filesystem + registry + evtx ยืนยันกัน
เปิด CSV ด้วย Timeline Explorer (Eric Zimmerman) — กรอง/เรียง/ค้นง่ายกว่าเปิดใน spreadsheet; mactime/Plaso CSV รองรับ

5. Quick Reference

  • MACB: Modified/Accessed/Changed/Born
  • filesystem timeline: fls -r -m / → mactime -b bodyfile -d
  • super timeline: log2timeline.py → psort.py (รวมหลายแหล่ง)
  • Plaso รวม: filesystem+registry+evtx+browser+prefetch+LNK
  • กรองเวลา: psort 'date > ... AND date < ...'
  • timestomping: B>M ผิดปกติ; $SI vs $FN ต่างกัน (NTFS)
  • เปิด CSV ด้วย Timeline Explorer

🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ

สมมติโจทย์ถามว่า 'เกิดอะไรขึ้นก่อนหลัง' มีแค่ Kali เปล่าๆ กับ disk image/log มา ทำตามนี้ทีละขั้นเพื่อเรียงเหตุการณ์ตามเวลา

  1. 1รวบรวมหลักฐานที่มีให้ครบก่อน (disk image / registry hive / evtx / browser history)
  2. 2สร้าง bodyfile จาก disk image: fls -r -m / -o 2048 disk.img > bodyfile
  3. 3แปลงเป็น timeline: mactime -b bodyfile -d > timeline.csv
  4. 4เปิด timeline.csv ดูคร่าวๆ (less/spreadsheet หรือ Timeline Explorer ถ้ามี)
  5. 5ถ้าต้องละเอียดกว่านั้น (รวม registry/evtx/browser ด้วย): log2timeline.py timeline.plaso disk.img
  6. 6แปลงเป็น CSV: psort.py -o l2tcsv -w supertimeline.csv timeline.plaso
  7. 7กรองเฉพาะช่วงเวลาที่สงสัย: psort.py -o l2tcsv -w filtered.csv timeline.plaso "date > '2024-01-01 00:00:00' AND date < '2024-01-02 00:00:00'"
  8. 8หา timestomping: เทียบ B (created) กับ M (modified) ว่าผิดธรรมชาติไหม
  9. 9ถ้าเป็น NTFS เทียบ $STANDARD_INFORMATION กับ $FILE_NAME ต่างกันไหม (ต่างกัน = ถูกแก้ timestamp)
  10. 10correlate event กับหลักฐานอื่น (pcap timestamp, memory dump timestamp) ให้ตรงกัน
จาก bodyfile ธรรมดา ไปจนถึง super timeline
มี disk image ให้สร้าง bodyfile ได้ไหม
✅ มีn2
❌ ไม่มี image มีแต่ log/evtx ตรงๆ→ ข้ามไปสร้าง super timeline ด้วย log2timeline ชี้ตรงไปที่ไฟล์เหล่านั้นได้เลย
mactime timeline.csv เห็นลำดับชัดไหม
✅ ชัด เจอช่วงเวลาที่น่าสงสัย→ ไล่ดู event รอบนั้น (ก่อน/หลัง) หา flag
❌ MAC times อย่างเดียวไม่พอn3
log2timeline.py สร้าง super timeline ได้ไหม
✅ ได้ พบ event จากหลายแหล่งn4
❌ error/ไฟล์ใหญ่เกินรัน→ กรองเฉพาะ --parsers ที่จำเป็น หรือรันเฉพาะ mount point ที่สนใจ
psort กรองช่วงเวลาที่สงสัย เจอ flag/เบาะแสไหม
✅ เจอ→ จบ ปะติดปะต่อเรื่องราวจาก event เหล่านี้
❌ ไม่เจอn5
เช็ค timestomping ($SI vs $FN, B>M ผิดปกติ) เจอไหม
✅ เจอ timestamp ถูกแก้→ นั่นคือเบาะแส (ไฟล์ที่ attacker พยายามซ่อน) จบ
❌ ไม่เจอn6
ยังไม่เจอ ต้องการอะไรต่อ
ยังไม่ได้ดู deleted files/carve ให้ครบtoDisk
มี memory dump คู่กัน ต้องดู timestamp จาก process/registry ใน RAMtoVol
มี pcap คู่กัน ต้องเทียบเวลา connectiontoPcap
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
สร้าง bodyfile จาก disk imagesleuthkit (fls -m)apt install sleuthkit-
เรียง bodyfile เป็น timelinesleuthkit (mactime)--
สร้าง super timeline (หลายแหล่ง)-apt install plaso-tools หรือ pip install plaso-
เปิด/กรอง/เรียง CSV สะดวก-git clone EricZimmerman/Timeline Explorer (.NET)-
ตรวจ NTFS $SI/$FN เจาะจง-git clone analyzeMFT-
ค้น event/flag ใน CSVgrep, awk--
เทียบเวลากับ pcaptshark, wireshark--
🚑 ถ้าตันสนิท ลองท่าถัดไป:
• ยังไม่ได้กู้ deleted files/carve ให้ครบ → ไป Disk Analysis
• มี memory dump คู่กัน อยากดู timestamp จาก process/registry ใน RAM → ไป Volatility
• มี pcap คู่กัน ต้องเทียบเวลา connection → ไป PCAP Analysis

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้