TDCTF Academy Logo TDCTF ACADEMY

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:

  1. Packet List Panel (atas) - daftar semua paket yang tertangkap, menampilkan No., Time, Source, Destination, Protocol, Length, dan Info
  2. Packet Details Panel (tengah) - protocol tree dari paket yang dipilih, diuraikan per-layer (Frame, Ethernet II, IP, TCP, Application)
  3. 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:

  1. Set environment variable SSLKEYLOGFILE=/tmp/keys.log sebelum menjalankan browser
  2. Di Wireshark: Edit > Preferences > Protocols > TLS > (Pre)-Master-Secret log filename
  3. 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.

PADA HALAMAN INI