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 หรือ guestmountmmls ให้ 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 > bodyfilefls -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.imgcarving ดึงไฟล์จาก 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พิมพ์ file disk.img เช็คว่าเป็น raw/E01/อื่นๆ
- 2พิมพ์ mmls disk.img ดู partition table + offset ของแต่ละ partition (หน่วย sector)
- 3mount แบบ read-only: mount -o ro,loop,offset=$((2048*512)) disk.img /mnt/d (แทน 2048 ด้วย offset ที่ mmls บอก)
- 4ถ้าเป็น E01: ewfmount disk.E01 /mnt/ewf ก่อน แล้วค่อย mount /mnt/ewf/ewf1 ต่อ
- 5เดินดูไฟล์ปกติใน /mnt/d ก่อน (Desktop, Documents, Downloads, browser cache)
- 6หาไฟล์ที่ถูกลบ: fls -rd -o 2048 disk.img ดูรายการ inode ที่มีเครื่องหมาย *
- 7ดึงไฟล์ที่เจอ: icat -o 2048 disk.img
> recovered_file แล้วเปิดดู - 8ถ้ายังไม่เจอ carve จาก raw bytes: foremost -i disk.img -o out/ หรือ photorec disk.img
- 9ค้น flag ตรงๆ ทั้ง image: strings disk.img | grep -i flag
- 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 ไม่ใช่ disk→toVol
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| ดู partition/offset | sleuthkit (mmls) | apt install sleuthkit | - |
| mount E01 | ewf-tools (ewfmount) | apt install ewf-tools | - |
| mount VMDK/VHD | qemu-utils, libguestfs-tools | apt install qemu-utils libguestfs-tools | - |
| list/กู้ไฟล์ลบ | sleuthkit (fls, icat, istat) | - | - |
| carve raw bytes | foremost, photorec (testdisk), binwalk | apt install foremost testdisk binwalk | - |
| GUI ครอบ CLI เดียวกัน | autopsy | apt install autopsy | - |
| ค้น string/flag | strings, grep | - | CyberChef |
| เช็ค hash เทียบไฟล์รู้จัก | md5sum, hashdeep | apt install hashdeep | virustotal.com |
🚑 ถ้าตันสนิท ลองท่าถัดไป:
• ต้องเรียงลำดับเวลาการกระทำทั้งหมด (ใครทำอะไรก่อนหลัง) → ไป Timeline Analysis
• image นี้จริงๆ คือ memory dump ไม่ใช่ disk → ไป Volatility
• เจอเอกสาร/รูปในดิสก์ที่มี metadata น่าสน (ผู้แต่ง/GPS) → ไป Metadata Collection
• อยาก workflow แบบ GUI ครบวงจร (ingest module + report) → เปิด Autopsy
• ต้องเรียงลำดับเวลาการกระทำทั้งหมด (ใครทำอะไรก่อนหลัง) → ไป Timeline Analysis
• image นี้จริงๆ คือ memory dump ไม่ใช่ disk → ไป Volatility
• เจอเอกสาร/รูปในดิสก์ที่มี metadata น่าสน (ผู้แต่ง/GPS) → ไป Metadata Collection
• อยาก workflow แบบ GUI ครบวงจร (ingest module + report) → เปิด Autopsy
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้