คลัง
forensics

Disk Analysis

Disk Analysis วิเคราะห์ disk image (E01/dd/raw) เพื่อหาหลักฐาน — ไฟล์ที่ถูกลบ, ไฟล์ซ่อน, slack space, deleted partition บทนี้ลงลึกการ mount ทุก format, Sleuth Kit ครบคำสั่ง (mmls/fls/icat), file carving, การ recover, และจุดที่ flag/หลักฐานมักซ่อน (เนื้อหาเพื่อการศึกษา/ฝึกใน lab/CTF)

IntermediateAdvanced#disk#forensics#filesystem#carving#deleted-files#sleuthkit#ctf

1. หลักการ

Disk image เก็บทุก byte ของ disk รวมไฟล์ที่ถูกลบ (ยังอยู่จนถูกเขียนทับ), slack space (พื้นที่ท้าย cluster), unallocated space, และ partition ที่ลบ การวิเคราะห์คือ mount แบบ read-only แล้วสำรวจ + recover ไฟล์ที่ลบ + carve ไฟล์จาก raw bytes ตาม signature

เนื้อหานี้เพื่อการศึกษาในงาน forensics ที่ถูกต้อง (CTF, lab) เท่านั้น; mount read-only เสมอเพื่อรักษาหลักฐาน

2. ระบุ format และ mount

ดู partition + mount read-onlyLinux
# ดูชนิดไฟล์ + partition
file disk.img
fdisk -l disk.img
mmls disk.img                  # Sleuth Kit — partition layout + offset (sector)

# mount raw read-only
mkdir /mnt/d
mount -o ro,loop disk.img /mnt/d
# หลาย partition: ใช้ offset (start sector * 512)
mount -o ro,loop,offset=$((2048*512)) disk.img /mnt/d

# E01 (EnCase) → ต้อง ewfmount ก่อน
ewfmount disk.E01 /mnt/ewf
mount -o ro,loop /mnt/ewf/ewf1 /mnt/d

# VMDK/VHD → qemu-nbd หรือ guestmount
mmls ให้ offset ของแต่ละ partition (คูณ 512 = byte offset สำหรับ mount); E01 ต้อง ewfmount

3. Sleuth Kit — สำรวจ filesystem

fls / icat / istatLinux
# list ไฟล์ (รวมที่ถูกลบ * = deleted)
fls disk.img                   # root
fls -o 2048 disk.img           # ระบุ partition offset
fls -r -o 2048 disk.img        # recursive ทั้งหมด
fls -rd -o 2048 disk.img       # เฉพาะ deleted files

# ดึงไฟล์ตาม inode
icat -o 2048 disk.img 1234 > recovered_file   # inode 1234

# ดู metadata ของ inode
istat -o 2048 disk.img 1234

# timeline (ดูหัวข้อ Timeline Analysis)
fls -r -m / -o 2048 disk.img > bodyfile
fls -rd หา deleted files (เลข inode) → icat ดึงออกมา; เป็นหัวใจของ disk forensics

4. File carving (ดึงจาก raw bytes)

foremost / photorec / binwalkLinux
# foremost — carve ตาม file signature (magic bytes)
foremost -i disk.img -o output/
foremost -t jpg,pdf,zip -i disk.img -o out/   # เฉพาะชนิด

# photorec — interactive recover (เก่งหลาย format)
photorec disk.img

# binwalk — หา/แยกไฟล์ฝัง
binwalk disk.img
binwalk -e disk.img            # extract

# scalpel (คล้าย foremost)
scalpel -o out/ disk.img
carving ดึงไฟล์จาก magic bytes แม้ filesystem entry หาย — ดีเมื่อ fls/icat ไม่เจอ (ถูกลบจน metadata หาย)

5. หา flag/หลักฐานที่ไหน

  • ไฟล์ที่ถูกลบ: fls -rd → icat — flag มักซ่อนตรงนี้ (ลบแล้วคิดว่าหาย)
  • user folders: Desktop, Documents, Downloads, AppData
  • browser: history, cache, cookies, downloads
  • recycle bin: $Recycle.Bin (Windows), .Trash (Linux)
  • registry hive (Windows): SAM, SYSTEM, NTUSER.DAT (ดู credential/config)
  • logs: /var/log, Windows Event Logs (.evtx)
  • slack/unallocated: carve ด้วย foremost/photorec
  • hidden/system files: ls -la, attribute ซ่อน

6. Quick Reference

  • mmls (partition+offset) → mount -o ro,loop,offset=N*512
  • E01 → ewfmount ก่อน; VMDK → qemu-nbd
  • deleted: fls -rd -o OFFSET → icat -o OFFSET img INODE
  • carve: foremost/photorec/binwalk -e (จาก raw bytes)
  • หา flag: deleted files, user folders, registry hive, recycle bin
  • Autopsy = GUI ครอบ Sleuth Kit (ดูหัวข้อแยก)

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

สมมติเพิ่งได้ disk image มาไฟล์เดียว มีแค่ Kali เปล่าๆ ไม่มี GUI ให้พึ่งก็ทำได้ ทำตามนี้ทีละขั้นด้วย CLI ล้วนๆ

  1. 1พิมพ์ file disk.img เช็คว่าเป็น raw/E01/อื่นๆ
  2. 2พิมพ์ mmls disk.img ดู partition table + offset ของแต่ละ partition (หน่วย sector)
  3. 3mount แบบ read-only: mount -o ro,loop,offset=$((2048*512)) disk.img /mnt/d (แทน 2048 ด้วย offset ที่ mmls บอก)
  4. 4ถ้าเป็น E01: ewfmount disk.E01 /mnt/ewf ก่อน แล้วค่อย mount /mnt/ewf/ewf1 ต่อ
  5. 5เดินดูไฟล์ปกติใน /mnt/d ก่อน (Desktop, Documents, Downloads, browser cache)
  6. 6หาไฟล์ที่ถูกลบ: fls -rd -o 2048 disk.img ดูรายการ inode ที่มีเครื่องหมาย *
  7. 7ดึงไฟล์ที่เจอ: icat -o 2048 disk.img > recovered_file แล้วเปิดดู
  8. 8ถ้ายังไม่เจอ carve จาก raw bytes: foremost -i disk.img -o out/ หรือ photorec disk.img
  9. 9ค้น flag ตรงๆ ทั้ง image: strings disk.img | grep -i flag
  10. 10ถ้าอยากได้ GUI สำรวจง่ายกว่า พิมพ์ autopsy เปิดครอบ Sleuth Kit ตัวเดียวกัน
ไล่หา flag ใน disk image ด้วย CLI
mmls อ่าน partition table ได้ไหม
✅ ได้ เห็น offset ปกติn2
❌ ไม่รู้จัก format/error→ เช็คว่าเป็น E01 (ewfmount ก่อน) หรือ VMDK/VHD (qemu-nbd/guestmount ก่อน)
mount แล้วเดินดูไฟล์ปกติ เจอ flag ไหม
✅ เจอตรงๆ→ จบ อ่าน flag ได้เลย
❌ ไม่เจอn3
fls -rd หา deleted files
✅ เจอ inode น่าสงสัย→ icat ดึงออกมาดูเนื้อหา
❌ ไม่เจอ/ไม่มั่นใจn4
carve ด้วย foremost/photorec/binwalk
✅ carve ได้ไฟล์แปลกๆ→ เปิดไฟล์ที่ carve ได้ตรวจสอบทีละไฟล์
❌ ยังไม่เจอn5
ยังไม่เจอ ต้องการอะไรต่อ
อยากเรียงลำดับเวลาการกระทำทั้งหมดtoTimeline
อยากได้ GUI สำรวจง่ายกว่า CLI→ เปิด autopsy (ครอบ Sleuth Kit ชุดคำสั่งเดียวกัน)
สงสัยว่า image นี้จริงๆ เป็น memory dump ไม่ใช่ disktoVol
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
ดู partition/offsetsleuthkit (mmls)apt install sleuthkit-
mount E01ewf-tools (ewfmount)apt install ewf-tools-
mount VMDK/VHDqemu-utils, libguestfs-toolsapt install qemu-utils libguestfs-tools-
list/กู้ไฟล์ลบsleuthkit (fls, icat, istat)--
carve raw bytesforemost, photorec (testdisk), binwalkapt install foremost testdisk binwalk-
GUI ครอบ CLI เดียวกันautopsyapt install autopsy-
ค้น string/flagstrings, grep-CyberChef
เช็ค hash เทียบไฟล์รู้จักmd5sum, hashdeepapt install hashdeepvirustotal.com
🚑 ถ้าตันสนิท ลองท่าถัดไป:
• ต้องเรียงลำดับเวลาการกระทำทั้งหมด (ใครทำอะไรก่อนหลัง) → ไป Timeline Analysis
• image นี้จริงๆ คือ memory dump ไม่ใช่ disk → ไป Volatility
• เจอเอกสาร/รูปในดิสก์ที่มี metadata น่าสน (ผู้แต่ง/GPS) → ไป Metadata Collection
• อยาก workflow แบบ GUI ครบวงจร (ingest module + report) → เปิด Autopsy

โน้ตของฉัน

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