คลัง
forensics

PCAP Analysis

PCAP Analysis วิเคราะห์ไฟล์ packet capture เพื่อหาหลักฐานในทราฟฟิกเครือข่าย — ข้อมูลที่ส่ง, credential, ไฟล์ที่โอน, การสื่อสารกับ C2 บทนี้ลงลึก triage ด้วย tshark/capinfos, การดึง protocol เฉพาะ, follow stream, export objects, การถอด credential, decrypt TLS, และ tunneling (เนื้อหาเพื่อการศึกษา/ฝึกใน lab/CTF)

IntermediateAdvanced#pcap#forensics#network#wireshark#tshark#extraction#ctf

1. หลักการ

PCAP บันทึก packet ที่วิ่งผ่านเครือข่าย ณ ช่วงเวลาหนึ่ง การวิเคราะห์คือหาว่ามีข้อมูลอะไรถูกส่ง โจทย์ CTF/IR มักซ่อนหลักฐานใน: ข้อมูล HTTP/FTP ที่ส่ง plaintext, ไฟล์ที่โอน, credential ที่ login, DNS query แปลกๆ (tunneling/exfil), หรือข้อมูลที่ encode

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

2. Triage (ภาพรวมก่อน)

capinfos + tshark statisticsLinux
# สถิติรวม (จำนวน packet, ช่วงเวลา, ขนาด)
capinfos capture.pcap

# protocol hierarchy — มี protocol อะไรบ้าง
tshark -r capture.pcap -q -z io,phs

# conversations — ใครคุยกับใคร, ปริมาณ
tshark -r capture.pcap -q -z conv,tcp
tshark -r capture.pcap -q -z conv,ip

# endpoints
tshark -r capture.pcap -q -z endpoints,ip
เริ่มจาก protocol hierarchy ดูว่ามี protocol อะไร แล้วเจาะตัวที่น่าสนใจ; conversations หา flow ที่ data เยอะ

3. ดึงข้อมูลตาม protocol (tshark)

ดึง field เฉพาะLinux
# HTTP requests
tshark -r cap.pcap -Y "http.request" -T fields -e http.host -e http.request.uri

# DNS queries (หา tunneling/exfil)
tshark -r cap.pcap -Y "dns.flags.response==0" -T fields -e dns.qry.name | sort -u

# FTP commands (credential plaintext)
tshark -r cap.pcap -Y "ftp.request" -T fields -e ftp.request.command -e ftp.request.arg

# ค้น keyword
tshark -r cap.pcap -Y 'frame contains "flag"'
strings capture.pcap | grep -iE 'flag|pass|user'

# POST data
tshark -r cap.pcap -Y 'http.request.method=="POST"' -T fields -e http.file_data
ดึง field ที่สนใจเป็น list; DNS query ยาว/เยอะผิดปกติ = tunneling; FTP/HTTP POST = credential

4. ดึงไฟล์และ credential

  • Follow Stream (Wireshark): คลิกขวา packet → Follow → TCP/HTTP Stream — เห็นบทสนทนาเต็ม (สลับ ASCII/Hex/Raw)
  • Export Objects: File → Export Objects → HTTP/SMB/TFTP/IMF — ดึงไฟล์/รูป/email ที่โอน
  • credential: filter http.request.method==POST, ftp.request.command=="PASS", telnet (plaintext)
  • NetworkMiner: ดึงไฟล์/รูป/credential/session อัตโนมัติจาก pcap (GUI)
  • Zeek (bro): สร้าง log สรุป (conn.log, http.log, dns.log, files.log) จาก pcap — ดี for IR
tshark export HTTP objects (CLI)Linux
# ดึงไฟล์ HTTP ออกมาทั้งหมด
tshark -r cap.pcap --export-objects http,extracted_files/
ls extracted_files/

# NetworkMiner (GUI) เปิด pcap → tab Files/Credentials อัตโนมัติ
--export-objects ดึงไฟล์จาก HTTP/SMB; NetworkMiner ทำให้อัตโนมัติพร้อม credential

5. TLS decrypt, tunneling, USB

  • TLS decrypt: ถ้ามี key log (SSLKEYLOGFILE) → Wireshark Preferences → Protocols → TLS → ใส่ไฟล์ → เห็น HTTPS plaintext; หรือมี private key ของ server (RSA, ไม่ใช่ PFS)
  • DNS tunneling: dns.qry.type==16 (TXT) หรือ subdomain ยาว/เยอะผิดปกติ → รวม query มา decode (มัก base32/hex)
  • ICMP tunneling: ดู data field ของ ICMP echo (มีข้อมูลซ่อน)
  • USB capture (HID keyboard): filter usb.capdata → ดึง keystroke แล้ว map HID code → ข้อความที่พิมพ์ (มี script สำเร็จรูป)
  • data ที่ encode: เจอ base64/hex ใน stream → decode

6. Quick Reference

  • triage: capinfos; tshark -z io,phs (protocol hierarchy)
  • ดึง: tshark -Y 'http.request'/'dns' -T fields -e field
  • ค้น: tshark -Y 'frame contains "flag"'; strings|grep
  • Follow TCP/HTTP Stream; Export Objects ดึงไฟล์
  • credential: POST data, FTP PASS; NetworkMiner อัตโนมัติ
  • TLS decrypt (SSLKEYLOGFILE); DNS/ICMP tunneling; USB HID keystroke

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

สมมติเพิ่งได้ไฟล์ .pcap/.pcapng มา มีแค่ Kali เปล่าๆ ยังไม่รู้จะเริ่มตรงไหน ทำตามนี้ทีละขั้นตั้งแต่ดูภาพรวมจนดึง flag ออกมา

  1. 1พิมพ์ capinfos capture.pcap ดูภาพรวม (จำนวน packet/ช่วงเวลา/ขนาดไฟล์)
  2. 2พิมพ์ tshark -r capture.pcap -q -z io,phs ดู protocol hierarchy ว่ามี protocol อะไรเด่น
  3. 3พิมพ์ tshark -r capture.pcap -q -z conv,tcp ดูว่าใครคุยกับใครเยอะสุด
  4. 4เปิดไฟล์จริงด้วย wireshark capture.pcap แล้วลอง filter http.request หรือ ftp
  5. 5คลิกขวา packet ที่น่าสนใจ → Follow → TCP/HTTP Stream อ่านบทสนทนาเต็ม
  6. 6File → Export Objects → HTTP ดึงไฟล์ที่ถูกโอนออกมาเป็นไฟล์จริง
  7. 7ค้น flag ตรงๆ: tshark -r capture.pcap -Y 'frame contains "flag"'
  8. 8เช็ค DNS แปลกๆ: tshark -r capture.pcap -Y "dns.flags.response==0" -T fields -e dns.qry.name | sort -u
  9. 9ถ้าเป็น USB capture: filter usb.capdata แล้วใช้ script map HID keycode เป็นข้อความ
  10. 10ถ้าเจอ TLS/HTTPS เข้ารหัสหมด เช็คว่าโจทย์แถม SSLKEYLOGFILE หรือ private key มาไหม
protocol เด่นคืออะไร → ไปทางนั้น
protocol hierarchy (io,phs) เห็น protocol อะไรเด่น
ส่วนใหญ่เป็น HTTP/FTP/Telnet (plaintext)n2
ส่วนใหญ่เป็น DNS ผิดปกติ (จำนวน/ความยาว query)n3
เป็น USB capture (มี usb.capdata)n4
เป็น TLS/HTTPS เข้ารหัสเกือบหมดn5
Follow Stream / Export Objects เจอไฟล์หรือ credential ไหม
✅ เจอ→ เปิดไฟล์ที่ export หรือใช้ credential ต่อ จบ
❌ ไม่เจอ→ ลอง strings capture.pcap | grep -i flag หรือดู stream อื่นเพิ่ม
รวม dns.qry.name แล้ว decode (base32/hex) เจอข้อความไหม
✅ เจอ→ ประกอบข้อความจาก subdomain ที่ decode ได้ จบ
❌ ไม่เจอ→ อาจไม่ใช่ tunneling ย้อนกลับไปดู protocol อื่นใน hierarchy
map usb.capdata เป็น keystroke เจอข้อความไหม
✅ เจอ→ อ่าน keystroke ที่พิมพ์ (มักเป็น flag/รหัสผ่าน) จบ
❌ ยังไม่ชัด→ เช็ค byte offset ของ HID report ให้ถูก (มักเป็น byte 3-8)
มี SSLKEYLOGFILE หรือ private key คู่โจทย์ไหม
✅ มี→ ใส่ใน Wireshark Preferences > TLS แล้วอ่าน plaintext จบ
❌ ไม่มี→ decrypt ไม่ได้ — โฟกัส metadata แทน (SNI, cert CN, ขนาด/เวลา)
ยังหา flag ไม่เจอเลย ต้องการอะไรต่อ
อยากใช้ display filter/GUI ที่ลึกกว่านี้toWireshark
โจทย์มี memory dump คู่กัน (process ที่สร้าง traffic นี้)toVol
ต้องเรียงเวลา event ทั้งหมดtoTimeline
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
ดูภาพรวม/สถิติcapinfos, tsharkapt install wireshark-
เปิด/กรองแบบ GUIwiresharkapt install wireshark-
Follow stream/export ไฟล์wireshark--
สร้าง log สรุป (conn/http/dns)zeek (bro)apt install zeek-
ดึงไฟล์/credential อัตโนมัติ-git clone NetworkMiner (mono)-
decode DNS tunneling/base32--CyberChef (From Base32/Hex)
crack/ดูรหัสที่เจอjohn, hashcat-crackstation.net
map USB HID keystroke-git clone usbkeyboard scripts-
🚑 ถ้าตันสนิท ลองท่าถัดไป:
• อยาก display filter/GUI ที่ลึกกว่านี้ → ไป Wireshark (Forensics)
• มี memory dump คู่โจทย์ที่สร้าง traffic นี้ → ไป Volatility
• ต้องเรียงเวลา event ทั้งหมด (รวม pcap) → ไป Timeline Analysis
• ไฟล์ที่ดึงออกมามี metadata น่าสน (ผู้แต่ง/GPS) → ไป Metadata Collection

โน้ตของฉัน

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