13.6 Network Device & Service Log Forensics: Firewall, IDS, Honeypot, Router, DHCP, Switch, VPN, DNS & SSH
Key Takeaways
- Cisco IOS syslog messages follow the %FACILITY-SEVERITY-MNEMONIC format with severity levels 0 (emergency) through 7 (debugging); level 6 (informational) is the level that carries ACL denies and interface state changes needed for investigations.
- DHCP lease logs are what convert a historical IP address into a specific MAC address and hostname; the Windows DHCP server writes DhcpSrvLog-<Day>.log with event ID 10 for a new lease, 11 for a renewal, 12 for a release, and 15 for NACK.
- SSH authentication evidence lives in /var/log/auth.log on Debian-family systems and /var/log/secure on RHEL-family systems, where Accepted publickey lines record the key fingerprint that identifies which key authenticated.
- A honeypot generates zero false positives by definition — any interaction is unauthorized — which makes Cowrie session transcripts and Dionaea malware captures unusually high-value evidence.
- Router and switch configuration is volatile: the running configuration lives only in RAM, so a reboot destroys attacker changes unless the config was captured live or archived off-device.
13.6 Network Device & Service Log Forensics: Firewall, IDS, Honeypot, Router, DHCP, Switch, VPN, DNS & SSH
Quick Answer: Blueprint Domain 5 requires analyzing firewall, IDS, honeypot, router, and DHCP logs, then Cisco switch, VPN, and DNS server logs, then investigating SSH logs, and analyzing SMTP and SNMP traffic. Each device answers a different investigative question. Firewall and IDS logs answer what was attempted. DHCP logs answer who owned an IP address at a point in time — the single most important attribution step in any network case. Router and switch logs answer how traffic moved. VPN logs answer who was remote. DNS logs answer what the host tried to reach. SSH logs answer which credential or key authenticated.
Syslog: The Common Container
Almost every network device exports through syslog, so the format is worth memorizing.
| Standard | Structure |
|---|---|
| RFC 3164 (BSD, legacy) | <PRI>TIMESTAMP HOSTNAME TAG: MESSAGE — no year, no time zone, second granularity |
| RFC 5424 (modern) | <PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID [STRUCTURED-DATA] MSG — ISO 8601 timestamp with offset and fractional seconds |
PRI = Facility × 8 + Severity. Severity runs 0 Emergency, 1 Alert, 2 Critical, 3 Error, 4 Warning, 5 Notice, 6 Informational, 7 Debug.
[!IMPORTANT] RFC 3164's missing year and time zone is a recurring forensic trap. A legacy syslog line reads
Sep 14 03:21:44with no year and no offset. Correlating it against a UTC-stamped web log requires knowing the device's configured time zone and the year, both of which must be documented from the device configuration — not assumed.
Firewall and IDS/IPS Logs
Firewall logs record the connection decision: 5-tuple, action (permit/deny/drop), interface, rule or ACL identifier, and byte/packet counts on session teardown.
| Platform | Characteristic record |
|---|---|
| Cisco ASA | %ASA-6-302013 built inbound TCP connection; %ASA-6-302014 teardown with duration and bytes; %ASA-4-106023 deny by access-group |
| iptables/netfilter | Kernel IN= OUT= SRC= DST= PROTO= SPT= DPT= lines in kern.log |
| pfSense/OPNsense | filterlog CSV with rule number, interface, action, and full tuple |
| Palo Alto / Fortinet | Comma- or key-value traffic logs with application identification and bytes-sent/received |
The forensically decisive field is usually bytes. A teardown record showing 4 GB sent outbound to an unfamiliar destination on port 443 is exfiltration evidence even when payload was never captured.
IDS/IPS logs record signature matches. Snort and Suricata write alert entries carrying the SID (signature ID), GID, revision, classification, priority, and the triggering 5-tuple; Suricata's eve.json additionally emits protocol, TLS/JA3, HTTP, DNS, and file-extraction records that make it a partial substitute for full packet capture.
- An IDS alert is a signature match, not proof of compromise. Validate it against the packet capture or the destination host's own logs.
- Tuned-out or disabled signatures explain silence. Always retrieve the ruleset state at the time of the incident, not the current one.
Honeypot Logs
A honeypot has no production purpose, so every interaction is unauthorized by construction — the false-positive rate is effectively zero, which is why honeypot evidence carries disproportionate weight.
| Honeypot | Captures |
|---|---|
| Cowrie | Full SSH/Telnet session transcripts, keystroke timing, credentials tried, files downloaded via wget/curl, TTY replay logs |
| Dionaea | Malware binaries dropped over SMB, HTTP, FTP, MSSQL |
| Conpot | ICS/SCADA protocol interaction (Modbus, S7comm) |
| T-Pot | Multi-honeypot platform aggregating the above with Elastic dashboards |
Cowrie's TTY replay files reconstruct the attacker's session keystroke-by-keystroke, including typing errors and pauses — evidence of live human interaction rather than automation, which matters for both attribution and sentencing.
DHCP Logs: The Attribution Keystone
An IP address in a web log is meaningless on a dynamic internal network without the lease record that bound it to a host.
| Server | Location and format |
|---|---|
| Windows DHCP Server | %SystemRoot%\System32\dhcp\DhcpSrvLog-<Day>.log — comma-delimited: ID, Date, Time, Description, IP Address, Host Name, MAC Address |
| ISC dhcpd (Linux) | /var/log/syslog or /var/log/messages — DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK, DHCPNAK, DHCPRELEASE |
| Infoblox/appliances | Syslog export plus a queryable lease history database |
Windows DHCP event IDs to know: 10 new lease assigned, 11 lease renewed, 12 lease released, 13 IP found in use on network, 14 lease request could not be satisfied, 15 lease denied (NACK), 24 database cleanup.
[!WARNING] Windows DHCP logs rotate weekly by file name (
DhcpSrvLog-Mon.log…DhcpSrvLog-Sun.log), overwriting the same weekday file each week. An incident discovered eight days late may have already lost its lease record. Preserve DHCP logs in the first hour of any network investigation.
The correlation chain is: web/proxy log (IP + timestamp) → DHCP lease (IP + MAC + hostname at that timestamp) → switch CAM/MAC address table or 802.1X authentication (MAC + physical port) → asset inventory (host + assigned user).
Router and Switch Logs
Cisco IOS syslog format: %FACILITY-SEVERITY-MNEMONIC: message-text, for example %SEC-6-IPACCESSLOGP: list 101 denied tcp 203.0.113.44(4221) -> 10.0.2.15(3389), 1 packet.
Forensically valuable IOS messages:
| Message | Meaning |
|---|---|
%SEC-6-IPACCESSLOGP | ACL permit/deny with full tuple |
%LINK-3-UPDOWN / %LINEPROTO-5-UPDOWN | Interface state change — physical device connect/disconnect |
%SYS-5-CONFIG_I | Configuration changed, with the user and source (console/vty) |
%SYS-5-RESTART / %SYS-5-RELOAD | Reboot, which destroys the running configuration |
%PORT_SECURITY-2-PSECURE_VIOLATION | Unauthorized MAC on a secured port — rogue device indicator |
%DOT1X-5-FAIL | 802.1X authentication failure |
Switch-specific evidence: the CAM/MAC address table (show mac address-table) maps MAC to physical port — but it is volatile, aging out in about 5 minutes by default. Capturing it requires live collection during the incident. The ARP cache (show ip arp) maps IP to MAC with a default 4-hour timeout.
[!IMPORTANT] The running configuration exists only in RAM.
show running-configreflects live state;show startup-configreflects NVRAM. An attacker who modifies the running config without writing it leaves evidence that a reboot silently erases. Live capture ofshow running-config,show mac address-table,show ip arp,show users, andshow loggingis the network equivalent of a RAM dump, and it must precede any remediation reboot.
VPN Logs
VPN concentrators answer who was remote, from where, for how long, and with what internal address.
Essential fields: username, authentication result and method (password, certificate, MFA token), public source IP with geolocation, assigned internal tunnel IP, session start and end, bytes transferred, and client posture.
The pivot that matters: the assigned tunnel IP is what appears in every internal log. Attribution requires joining the internal activity to the VPN session that held that tunnel IP at that moment. Because tunnel addresses are recycled from a pool, the timestamp is as essential as the address.
Characteristic findings: impossible travel (two authentications from distant countries minutes apart), a single account with concurrent sessions from different sources, and authentication success from a source that never appears in the account's history.
DNS Server Logs
DNS is the highest-yield low-volume telemetry in an investigation because nearly every attacker action begins with a name resolution.
| Source | Content |
|---|---|
| Windows DNS debug log / Analytical ETW | Per-query client IP, query name, type, response code |
BIND querylog | client 10.0.2.15#54321: query: evil.example.com IN A + |
| Passive DNS / resolver telemetry | Historical name-to-address mappings for pivoting |
Detection patterns:
- DNS tunneling — abnormally long labels, high-entropy subdomains, heavy
TXT/NULLquery volume, and sustained query rate to a single second-level domain. Exfiltration over DNS is encoded in the query name, so query length distribution is the tell. - DGA (domain generation algorithm) — bursts of
NXDOMAINresponses for high-entropy names as malware cycles candidate domains before finding the live one. The domain that finally resolves is the C2. - DNS hijacking/spoofing — responses for a known domain returning an unexpected address, or an endpoint querying a resolver that is not the sanctioned one (a rogue resolver configured by malware).
- Fast flux — very low TTLs with a rapidly rotating address set for one name.
SSH Logs
| Distribution family | Authentication log |
|---|---|
| Debian/Ubuntu | /var/log/auth.log |
| RHEL/CentOS/Fedora | /var/log/secure |
| systemd journal | journalctl -u sshd (binary; export with journalctl -o export) |
Record types to parse:
Accepted password for jsmith from 203.0.113.44 port 51422 ssh2
Accepted publickey for root from 198.51.100.7 port 40112 ssh2: RSA SHA256:8Lc9k...
Failed password for invalid user admin from 203.0.113.44 port 51388 ssh2
Disconnected from authenticating user root 203.0.113.44 port 51390 [preauth]
Accepted publickey ... SHA256:<fingerprint>is the highest-value line in the file: the fingerprint identifies which key authenticated, which can be matched against~/.ssh/authorized_keysentries across the estate to trace attacker key implantation.Failed password for invalid user Xmeans the account does not exist — automated scanning.Failed password for Xon a real account is targeted.- Correlate with
wtmp/btmp/lastlog(parsed vialast,lastb), shell history files, and~/.ssh/authorized_keysmodification times.
SMTP and SNMP Traffic
SMTP traffic analysis reveals mass outbound mail from a non-mail host (compromised spam relay), MAIL FROM values inconsistent with the organization's domains, and large attachments leaving on port 25/587 as an exfiltration channel. Capture of the DATA phase yields full message content including headers and attachments.
SNMP is frequently overlooked. Community strings in SNMPv1/v2c travel in cleartext, so a capture containing public or private exposes device enumeration and potential configuration write access. A host performing SNMP GETBULK walks across the address space is conducting network reconnaissance; SNMPv3 with authPriv is the remediation, and its absence is itself a finding.
A proxy log records data exfiltration from internal address 10.0.2.15 on a DHCP-assigned corporate LAN. Nine days after the exfiltration, the responder opens the investigation. Which single evidence source is most urgent to preserve, and why is the delay critical?
During live triage of a compromised Cisco switch, the network team wants to reboot the device to clear a suspected implant before the forensic examiner arrives. What must be captured first, and what is the specific evidentiary risk of rebooting?
An examiner reviewing /var/log/secure finds: 'Accepted publickey for root from 198.51.100.7 port 40112 ssh2: RSA SHA256:8Lc9k2...'. Why is this line more investigatively valuable than an equivalent 'Accepted password' entry?