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พิมพ์ capinfos capture.pcap ดูภาพรวม (จำนวน packet/ช่วงเวลา/ขนาดไฟล์)
- 2พิมพ์ tshark -r capture.pcap -q -z io,phs ดู protocol hierarchy ว่ามี protocol อะไรเด่น
- 3พิมพ์ tshark -r capture.pcap -q -z conv,tcp ดูว่าใครคุยกับใครเยอะสุด
- 4เปิดไฟล์จริงด้วย wireshark capture.pcap แล้วลอง filter http.request หรือ ftp
- 5คลิกขวา packet ที่น่าสนใจ → Follow → TCP/HTTP Stream อ่านบทสนทนาเต็ม
- 6File → Export Objects → HTTP ดึงไฟล์ที่ถูกโอนออกมาเป็นไฟล์จริง
- 7ค้น flag ตรงๆ: tshark -r capture.pcap -Y 'frame contains "flag"'
- 8เช็ค DNS แปลกๆ: tshark -r capture.pcap -Y "dns.flags.response==0" -T fields -e dns.qry.name | sort -u
- 9ถ้าเป็น USB capture: filter usb.capdata แล้วใช้ script map HID keycode เป็นข้อความ
- 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, tshark | apt install wireshark | - |
| เปิด/กรองแบบ GUI | wireshark | apt 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
• อยาก display filter/GUI ที่ลึกกว่านี้ → ไป Wireshark (Forensics)
• มี memory dump คู่โจทย์ที่สร้าง traffic นี้ → ไป Volatility
• ต้องเรียงเวลา event ทั้งหมด (รวม pcap) → ไป Timeline Analysis
• ไฟล์ที่ดึงออกมามี metadata น่าสน (ผู้แต่ง/GPS) → ไป Metadata Collection
หัวข้อที่เชื่อมโยง
Wireshark (Forensics)อยู่ใน workflowWireshark Playbookอยู่ใน workflowVolatilityอยู่ใน workflowTimeline Analysisอยู่ใน workflowMemory Analysisอยู่ใน workflowAutopsyอยู่ใน workflowHandshake Analysisเครื่องมือเดียวกันDisk AnalysisเทคนิคเดียวกันBLE Attacksเครื่องมือเดียวกันMetadata AnalysisเทคนิคเดียวกันExifToolเทคนิคเดียวกันBinwalkเทคนิคเดียวกัน
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้