Wireshark: Analisis Trafik Jaringan Mendalam
Pengertian Wireshark
Wireshark adalah network protocol analyzer (packet sniffer) yang paling populer di dunia. Wireshark menangkap (capture) dan menampilkan paket data yang melintas di jaringan secara real-time, memungkinkan analisis mendalam terhadap ribuan protokol jaringan - dari HTTP, DNS, TCP, TLS, hingga protokol industri seperti Modbus dan DNP3.
Wireshark tersedia dalam dua mode: GUI
(Wireshark) untuk analisis interaktif dan
CLI (tshark dan tcpdump) untuk
otomatisasi dan penggunaan di server headless. Wireshark juga
dilengkapi command-line utility editcap dan
mergecap untuk manipulasi file pcap.
Antarmuka dan Navigasi
Layout Utama
Saat membuka Wireshark, Anda akan melihat tiga panel utama:
- Packet List Panel (atas) - daftar semua paket yang tertangkap, menampilkan No., Time, Source, Destination, Protocol, Length, dan Info
- Packet Details Panel (tengah) - protocol tree dari paket yang dipilih, diuraikan per-layer (Frame, Ethernet II, IP, TCP, Application)
- Packet Bytes Panel (bawah) - hex dump dan representasi ASCII dari paket mentah
Filter Toolbar
Toolbar filter berwarna hijau (valid) atau merah (syntax error) sangat penting untuk navigasi:
# Filter dasar - hanya tampilkan HTTP traffic
http
# Filter dengan IP source tertentu
ip.src == 192.168.1.100
# Filter dengan port tertentu
tcp.port == 443
# Kombinasi filter
ip.src == 192.168.1.100 and http
# Negasi - tampilkan semua KECUALAI traffic DNS
!dns
Capture Filters vs Display Filters
Wireshark memiliki dua jenis filter yang sering tertukar:
Capture Filters (BPF - Berkeley Packet Filter)
Capture filter diterapkan sebelum paket ditangkap - paket yang tidak cocok tidak akan masuk ke buffer. Sintaksnya menggunakan format BPF klasik, sama seperti tcpdump.
# BPF: hanya traffic ke/dari host tertentu
host 192.168.1.1
# BPF: hanya traffic port 80
port 80
# BPF: traffic TCP saja
tcp
# BPF: gabungan - traffic HTTP ke subnet tertentu
dst net 192.168.1.0/24 and port 80
# BPF: menangkap SYN dan RST paket saja
tcp[tcpflags] & (tcp-syn|tcp-rst) != 0
Cara setting di GUI:
Capture > Options > Capture Filter - atau
langsung di input BPF.
Display Filters
Display filter diterapkan setelah paket berada di buffer. Sintaksnya berbasis protocol field dan jauh lebih ekspresif:
# Display filter: semua paket HTTP GET
http.request.method == "GET"
# Display filter: paket dengan response code 404
http.response.code == 404
# Display filter: TLS handshake dengan SNI tertentu
tls.handshake.extensions_server_name contains "example.com"
# Display filter: paket dengan flag TCP SYN (tanpa ACK)
tcp.flags.syn == 1 and tcp.flags.ack == 0
# Display filter: DNS query ke domain tertentu
dns.qry.name == "www.target.com"
# Display filter: cari paket dengan payload tertentu
frame contains "admin"
Tips: Display filter jauh lebih fleksibel - gunakan sebanyak mungkin. Capture filter hanya berguna untuk mengurangi volume data pada high-traffic interfaces.
Analisis Protokol
TCP Handshake dan Flags
Analisis TCP tiga arah handshake:
# Filter: tampilkan SYN, SYN-ACK, dan ACK
tcp.flags.syn == 1
- Paket 1: Client $\to$ Server [SYN] - Seq=0, Flags=0x002
- Paket 2: Server $\to$ Client [SYN, ACK] - Flags=0x012
- Paket 3: Client $\to$ Server [ACK] - Flags=0x010
Perhatikan kolom SEQ dan ACK - Wireshark menampilkan relative sequence number (mulai dari 0) untuk memudahkan pembacaan.
HTTP Traffic Analysis
# Filter: semua request HTTP
http.request
# Filter: request dengan metode POST
http.request.method == "POST"
# Follow HTTP Stream (via GUI): Right-click > Follow > TCP Stream
Wireshark juga mendeteksi pola mencurigakan:
# Deteksi SQL injection attempt
http.request.uri matches "select|union|insert|drop|--"
# Deteksi XSS attempt
http.request.uri matches "<script>|alert\\(|onerror="
DNS Analysis
# Filter: semua query DNS
dns.flags.response == 0
# Filter: query tipe A (IPv4)
dns.qry.type == 1
# Filter: respons dengan NXDOMAIN
dns.flags.rcode == 3
# Cari DNS tunneling - query ke domain dengan subdomain sangat panjang
dns.qry.name matches "^.{50,}"
TLS Decryption
Dengan SSL key log file, Wireshark dapat mendekripsi traffic TLS:
- Set environment variable
SSLKEYLOGFILE=/tmp/keys.logsebelum menjalankan browser - Di Wireshark:
Edit > Preferences > Protocols > TLS > (Pre)-Master-Secret log filename - Pilih file
/tmp/keys.log
# Filter: handshake TLS dengan SNI tertentu
tls.handshake.type == 1 and tls.handshake.extensions_server_name contains "example.com"
Follow Stream
Fitur Follow Stream memungkinkan Anda merekonstruksi percakapan lengkap antara dua host:
- TCP Stream: Rekonstruksi percakapan TCP utuh (HTTP, SMTP, FTP)
- UDP Stream: Rekonstruksi stream UDP (DNS, DHCP, Syslog)
- TLS Stream: Rekonstruksi setelah dekripsi
Cara akses GUI: Klik kanan paket $\to$ Follow $\to$ TCP/UDP/TLS Stream.
Output bisa ditampilkan dalam berbagai format:
- ASCII: Untuk teks biasa (HTTP, SMTP)
- Hex Dump: Untuk data biner
- C Arrays: Untuk embedding dalam kode C
- Raw: Untuk ekspor ke file biner
# Via tshark: ekstrak HTTP stream
tshark -r capture.pcap -z follow,tcp,ascii,0
Statistics
Wireshark menyediakan berbagai fitur statistik bawaan yang sangat berguna:
Protocol Hierarchy
# GUI: Statistics > Protocol Hierarchy
# Menampilkan distribusi protokol dalam capture
Conversations
# GUI: Statistics > Conversations
# Menampilkan daftar percakapan (pasangan IP:port) dengan volume traffic
# Terminal via tshark
tshark -r capture.pcap -z conv,tcp
IO Graph
# GUI: Statistics > IO Graph
# Grafik throughput traffic sepanjang waktu - sangat berguna untuk deteksi DDoS
# Atur interval (1ms - 1min) sesuai kebutuhan
Endpoints
# GUI: Statistics > Endpoints
# Melihat semua IP address yang muncul dalam capture
tshark - Wireshark CLI
tshark adalah versi command-line dari Wireshark. Sangat
berguna untuk scripting dan analisis batch.
Capture Dasar
# Capture live pada interface eth0
sudo tshark -i eth0
# Capture dengan filter BPF
sudo tshark -i eth0 -f "port 80"
# Capture dengan display filter
sudo tshark -i eth0 -Y "http"
# Capture dengan limit jumlah paket (100 paket)
sudo tshark -i eth0 -c 100
Analisis File Pcap
# Statistik protokol
tshark -r capture.pcap -z io,phs
# Ekstrak field tertentu (contoh: HTTP host + URI)
tshark -r capture.pcap -Y http.request -T fields -e http.host -e http.request.uri
# Output JSON
tshark -r capture.pcap -T json
# Hitung paket per IP tujuan
tshark -r capture.pcap -T fields -e ip.dst | sort | uniq -c | sort -rn
# Ekstrak file dari HTTP object
tshark -r capture.pcap --export-objects "http,/tmp/extracted/"
tcpdump - Packet Capture Klasik
tcpdump adalah tool CLI yang lebih ringan dari tshark
dan tersedia di hampir semua distribusi Linux.
# Capture semua traffic pada interface eth0
sudo tcpdump -i eth0
# Capture 50 paket, simpan ke file
sudo tcpdump -i eth0 -c 50 -w capture.pcap
# Capture dengan filter port
sudo tcpdump -i eth0 port 443
# Membaca file pcap
tcpdump -r capture.pcap
# Output verbose dengan hex dump
tcpdump -r capture.pcap -X
# Filter dengan ekspresi kompleks
tcpdump -r capture.pcap 'tcp port 80 and (src 192.168.1.0/24 or dst 192.168.1.0/24)'
Contoh Analisis Nyata
1. Mendeteksi SQL Injection dari Pcap
SQL injection biasanya meninggalkan jejak di URL atau POST body yang mengandung karakter single quote, SQL keywords, atau komentar SQL.
# Filter: cari request dengan '--' atau 'OR' dalam URL
tshark -r capture.pcap -Y "http.request and (http.request.uri contains \"'\" or http.request.uri contains \"--\")" -T fields -e http.host -e http.request.uri
# Analisis HTTP stream yang mengandung "union select"
tshark -r capture.pcap -Y "http.request.uri contains \"union\" and http.request.uri contains \"select\"" -T json
Tanda-tanda SQLi dalam pcap:
- Multiple single quotes dalam URL
(
id=1' OR '1'='1) - Komentar SQL (
--,#,/*) - Waktu respons yang abnormal (untuk time-based blind SQLi)
- Error message dari database server dalam HTTP response
2. Mendeteksi Port Scan
# Filter: SYN packet tanpa ACK (SYN scan awal)
tshark -r capture.pcap -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
# Hitung jumlah SYN ke port berbeda dari satu source
tshark -r capture.pcap -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" -T fields -e tcp.dstport | sort -n | uniq
# Deteksi FIN scan
tshark -r capture.pcap -Y "tcp.flags.fin == 1 and tcp.flags.syn == 0 and tcp.flags.ack == 0 and tcp.flags.rst == 0"
# Statistik jumlah port yang di-scan per source IP
tshark -r capture.pcap -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" -T fields -e ip.src -e tcp.dstport | awk '{print $1}' | sort | uniq -c | sort -rn
Indikator port scan:
- Banyak SYN ke port berbeda dalam waktu singkat
- Tidak ada ACK setelah SYN-ACK (connect scan setengah jadi)
- Paket dengan flag FIN, Xmas, atau Null
- Pola sequential pada destination port
3. Mendeteksi C2 (Command and Control) Traffic
Traffic C2 biasanya berusaha menyamar sebagai traffic normal - namun memiliki pola khas.
# Filter: traffic HTTP ke domain yang mencurigakan (IP asing tanpa DNS legitimate)
tshark -r capture.pcap -Y "http.request and !dns" -T fields -e ip.dst -e http.host
# Cari beaconing - request periodik ke endpoint yang sama
tshark -r capture.pcap -Y "http.request" -T fields -e frame.time_relative -e http.host -e http.request.uri > /tmp/http_requests.txt
# Analisis interval waktu antar request
awk '{print $1}' /tmp/http_requests.txt | awk '{diff=$1-prev; if(NR>1) print diff; prev=$1}'
# Deteksi DNS tunneling - query sangat panjang
tshark -r capture.pcap -Y "dns.qry.name and dns.flags.response == 0" -T fields -e dns.qry.name | awk 'length > 50'
# Deteksi non-HTTP traffic pada port 80
tshark -r capture.pcap -Y "tcp.port == 80 and !http" -T fields -e ip.src -e ip.dst -e data.len
Indikator C2 umum:
- Beaconing dengan interval tetap (setiap 60 detik tepat)
- User-Agent tidak lazim (tidak ada browser umum)
- POST ke endpoint statis dengan body terenkripsi/base64
- DNS query ke domain dengan nama subdomain sangat panjang (DNS tunnelling)
- Traffic pada port non-standar tetapi protokol tidak dikenali
4. Rekonstruksi Sesi HTTP
# Ekstrak semua HTTP request beserta responsenya
tshark -r capture.pcap -z follow,tcp,ascii,0
tshark -r capture.pcap -z follow,tcp,ascii,1
# (ulangi dengan nomor stream yang berbeda)
# Ekstrak file yang didownload
tshark -r capture.pcap --export-objects "http,/tmp/extracted/"
Kesimpulan
Wireshark adalah alat yang sangat esensial untuk memahami apa yang sebenarnya terjadi di jaringan. Kemampuan untuk menangkap, memfilter, dan menganalisis paket data memberikan visibilitas yang tidak bisa diberikan oleh tools lain. Dari debugging aplikasi jaringan hingga analisis forensik dan deteksi intrusi - Wireshark (dan saudara CLI-nya tshark/tcpdump) harus menjadi toolkit utama setiap security professional.
Penguasaan display filters dan capture filters adalah kunci produktivitas - tanpa filter yang tepat, analisis manual ribuan paket menjadi tidak praktis. Mulailah dengan contoh-contoh konkret seperti analisis SQLi, port scan, dan C2 traffic untuk membangun intuisi.