Network Forensics Lab
Four downloadable PCAP files, each built to exercise one real detection pattern: C2 beaconing, DNS tunneling, internal lateral movement, and a clean baseline for comparison. Open each one in Wireshark (or run the tshark commands provided) and work through the questions before revealing the analysis.
1. HTTP(S) C2 Beaconing
IntermediateA workstation (10.0.5.23) has connections to an external host on port 443 scattered through this capture. Determine whether this is ordinary HTTPS browsing or something else, and explain what convinced you either way.
Download 01-c2-beaconing.pcap (8 KB)Work through
- 1.How many distinct connections does 10.0.5.23 make to the external host, and what's the time delta between each one?
- 2.Is there a DNS query resolving the external IP anywhere in this capture? What does its absence (or presence) tell you?
- 3.Compare the size of the outbound request payload across each connection. What do you notice?
Useful filters
Isolate the suspicious host pair
ip.addr == 203.0.113.77Check for a preceding DNS lookup
dns.qry.name and ip.addr == 203.0.113.77tshark: list every connection's start time
tshark -r 01-c2-beaconing.pcap -Y "tcp.flags.syn==1 && tcp.flags.ack==0 && ip.dst==203.0.113.77" -T fields -e frame.time_relative2. DNS Tunneling / Exfiltration
IntermediateThis capture is almost entirely DNS traffic. Most of it goes to one domain. Work out whether this is normal DNS resolution traffic or something is being smuggled out over DNS, and how you'd tell the difference at a glance in a much larger capture.
Download 02-dns-tunneling.pcap (20 KB)Work through
- 1.Which domain receives the overwhelming majority of queries, and what record type is being requested?
- 2.Look at the subdomain labels in those queries. What's unusual about their length and character set compared to the handful of ordinary lookups also present in this capture?
- 3.What's the query rate to that domain, and how would a normal recursive resolver's caching behaviour differ from what you see here?
Useful filters
Isolate queries to the suspicious domain
dns.qry.name contains "datasync-cdn.net"Filter to TXT record queries specifically
dns and dns.qry.type == 16tshark: count queries per unique first label length
tshark -r 02-dns-tunneling.pcap -Y "dns.flags.response==0" -T fields -e dns.qry.name | awk -F. '{print length($1)}' | sort -n | uniq -c3. Internal Lateral Movement (SMB Sweep)
AdvancedThe same workstation from Exercise 1 shows up again here, this time talking to a lot of other internal hosts. Determine what it's doing and whether the pattern is consistent with normal file-share usage or with post-compromise reconnaissance.
Download 03-lateral-movement-smb-sweep.pcap (6 KB)Work through
- 1.How many distinct internal destination IPs does 10.0.5.23 contact, and on what port?
- 2.What's the total time window across all of these connection attempts?
- 3.What fraction of the attempts get a SYN-ACK versus a RST? What does that ratio suggest about how the source is behaving?
Useful filters
Isolate SMB connection attempts from the host
ip.src == 10.0.5.23 and tcp.port == 445 and tcp.flags.syn == 1See which targets actually accepted the connection
tcp.flags.syn == 1 and tcp.flags.ack == 1 and tcp.srcport == 445tshark: unique destination count and time span
tshark -r 03-lateral-movement-smb-sweep.pcap -Y "ip.src==10.0.5.23 && tcp.dstport==445 && tcp.flags.syn==1" -T fields -e ip.dst -e frame.time_relative4. Baseline: What Normal Looks Like
BeginnerNot every capture has something wrong in it. This one is ordinary browsing traffic — use it to calibrate what "normal" looks like against the previous three exercises, so you don't start pattern-matching noise as malicious in real investigations.
Download 04-baseline-clean.pcap (2 KB)Work through
- 1.How many distinct destinations does this host contact, and how are the connection intervals distributed compared to Exercise 1's beacon?
- 2.Does every TCP connection have a DNS lookup immediately before it?
- 3.What would make you suspicious in a capture like this one, if anything did?
Useful filters
List every destination contacted
ip.src == 10.0.5.23 and tcp.flags.syn == 1 and tcp.flags.ack == 0Confirm DNS-before-connect ordering
dns or (tcp.flags.syn==1 and tcp.flags.ack==0)