
PEAK Baseline Threat Hunt dashboards for Security Onion 3.0 — covering DNS, HTTP, TLS, SMB, Kerberos, SSH, RDP, DCE/RPC, LDAP, Modbus, DNP3, Suricata, and more
Importable Kibana saved-object dashboards implementing the Splunk PEAK Baseline Threat Hunt methodology for cyber threat hunt (CTH) and incident response (IR) operations. Built and validated against Security Onion 3.0.0 with Zeek NSM and Suricata data in Elasticsearch.
Each dashboard follows a consistent two-phase design:
Every dashboard includes:
Dashboards are designed to serve both experienced hunters who know the protocol and analysts learning it — the markdown panels document normal behavior so the dashboard functions as a teaching aid as well as a hunt tool.
The PEAK Framework (Prepare, Execute, Act with Knowledge) is a structured threat hunting methodology developed by Splunk. These dashboards implement the Baseline Hunt model from the PEAK framework:
Prepare → Define hypothesis; identify data sources; understand normal behavior
Execute → Baseline the data; surface statistical deviations; investigate anomalies
Act → Document findings; create detections; update the baseline
Knowledge → Feed results back into future hunt planning
The key insight of PEAK Baseline Hunts is that you cannot find evil until you know what normal looks like. Every panel in these dashboards is designed with that principle in mind — top-frequency tables define normal, and least-frequency tables expose what doesn't fit.
For more detail on the PEAK framework, see the Splunk PEAK Threat Hunting Framework.
.ndjson file for the dashboard(s) you want to importEach file is fully self-contained — it includes the dashboard, all visualizations, and any saved searches. No dependencies on external saved objects.
Index pattern requirement: Dashboards use the
logs-*index pattern, which is the default for Security Onion 3.0 imports. Verify this index pattern exists in your Kibana instance before importing.
PEAK-Baseline-Conn.ndjsonProtocol: Network Connections (Zeek conn.log) | Filter: tags:conn
The foundation of any network baseline. Covers all TCP/UDP/ICMP connection records regardless of protocol. Hunt surface: rare IP pairs and port combinations, long-duration connections (beaconing), high byte-count flows to unusual destinations, rarely-seen destination ports.
Key fields: source.ip, destination.ip, destination.port, network.transport, network.protocol, network.bytes, event.duration, connection.state, hash.ja4t
MITRE: T1071 (C2), T1048 (Exfil), T1571 (Non-Standard Port), T1572 (Protocol Tunneling)
PEAK-Baseline-DNS.ndjsonProtocol: DNS (Zeek dns.log) | Filter: tags:dns
DNS is the most query-able data source in the environment and one of the most abused by adversaries. Hunt surface: rare queried domains (DGA, new C2 infrastructure), high-entropy domain names, unusual query types (TXT, ANY, NULL — tunneling indicators), rare resolvers, NX-domain storms.
Key fields: dns.question.name, dns.question.type, dns.response_code, source.ip, destination.ip
MITRE: T1071.004 (DNS C2), T1568 (Dynamic Resolution), T1048.003 (DNS Exfil), T1583 (Acquire Infrastructure)
PEAK-Baseline-HTTP.ndjsonProtocol: HTTP/HTTPS (Zeek http.log) | Filter: tags:http or tags:http2
Web traffic baseline covering user-agents, URI patterns, status codes, and host distributions. Hunt surface: rare or malformed user-agents (tool fingerprints), unusual HTTP methods, rare external hosts receiving POST data, URI paths associated with known frameworks (Cobalt Strike, Metasploit), JA4H fingerprints.
Key fields: url.domain, url.path, http.request.method, http.response.status_code, user_agent.original, source.ip, destination.ip, hash.ja4h
MITRE: T1071.001 (HTTP C2), T1566 (Phishing), T1105 (Tool Transfer), T1059 (Scripted Execution via Web)
PEAK-Baseline-TLS.ndjsonProtocol: TLS/SSL (Zeek ssl.log) | Filter: tags:ssl
TLS session metadata — versions, cipher suites, certificate subjects, and JA3/JA4 fingerprints. Hunt surface: old/weak TLS versions (1.0/1.1), self-signed or unusual certificate subjects, rare JA3/JA4 client fingerprints (malware tool signatures), expired certificates, TLS to non-standard ports.
Key fields: tls.version, tls.cipher, tls.client.server_name, tls.server.subject, tls.server.issuer, hash.ja3, hash.ja3s, hash.ja4, hash.ja4s
MITRE: T1573 (Encrypted Channel), T1071 (C2), T1587.003 (Self-Signed Certs)
PEAK-Baseline-SMB.ndjsonProtocol: SMB (Zeek smb_mapping.log + smb_files.log) | Filter: tags:smb_mapping or tags:smb_files
Combined dashboard covering both SMB share mappings and file operations. Hunt surface: access to administrative shares (ADMIN$, C$, IPC$), rare share paths, unusual file access patterns, clients accessing shares they've never previously touched, lateral movement file staging.
Key fields: smb.path, smb.share_type, file.action, file.name, file.path, source.ip, destination.ip
MITRE: T1021.002 (SMB/Windows Admin Shares), T1570 (Lateral Tool Transfer), T1039 (Data from Network Shared Drive)
PEAK-Baseline-Kerberos.ndjsonProtocol: Kerberos (Zeek kerberos.log) | Filter: tags:kerberos
Active Directory authentication baseline. Hunt surface: Kerberoasting (TGS requests for service accounts, especially RC4 cipher), AS-REP Roasting (requests without pre-auth), pass-the-ticket indicators, unusual encryption types, rare client/service name pairs, authentication failures.
Key fields: kerberos.request_type, kerberos.client, kerberos.service, kerberos.success, kerberos.error_code, kerberos.cipher, kerberos.forwardable, source.ip, destination.ip
MITRE: T1558.003 (Kerberoasting), T1558.004 (AS-REP Roasting), T1550.003 (Pass-the-Ticket)
PEAK-Baseline-FTP.ndjsonProtocol: FTP (Zeek ftp.log) | Filter: tags:ftp
FTP command and response baseline. Hunt surface: anonymous authentication (ftp/anonymous username), rare FTP commands (especially SITE, CHMOD, DELE), unusual reply codes, FTP to non-standard ports, rare external FTP servers receiving data.
Key fields: ftp.command, ftp.user, ftp.argument, server.reply_code, server.reply_message, source.ip, destination.ip
MITRE: T1048 (Exfil over Alt Protocol), T1071 (C2), T1105 (Tool Transfer)
PEAK-Baseline-SSH.ndjsonProtocol: SSH (Zeek ssh.log) | Filter: tags:ssh
SSH session baseline including client/server version strings and HASSH fingerprints. Hunt surface: rare SSH clients or server banners (tool fingerprints), anomalous cipher/MAC algorithm selections, HASSH fingerprints matching known attack tools (Paramiko, Metasploit), SSH to non-standard ports, rare source → destination pairs.
Key fields: ssh.client, ssh.server, ssh.version, ssh.cipher_algorithm, ssh.kex_algorithm, ssh.authentication.success, hash.hassh, ssh.hassh_server
MITRE: T1021.004 (SSH Lateral Movement), T1071 (C2), T1110 (Brute Force)
PEAK-Baseline-RDP.ndjsonProtocol: RDP (Zeek rdp.log) | Filter: tags:rdp
Remote Desktop baseline. Hunt surface: RDP from external/geo-unusual source IPs, low certificate counts (self-signed), unusual security protocols, RDP without NLA (Network Level Authentication), rare source → destination pairs for admin access.
Key fields: rdp.result, rdp.cookie, rdp.security_protocol, rdp.certificate_count, source.ip, destination.ip, source.geo.*
MITRE: T1021.001 (Remote Desktop Protocol), T1133 (External Remote Services), T1563.002 (RDP Hijacking)
PEAK-Baseline-SMTP.ndjsonProtocol: SMTP (Zeek smtp.log) | Filter: tags:smtp
Email traffic baseline. Hunt surface: rare sender domains in smtp.helo, unusual mail_from addresses, high-volume senders to external destinations, SMTP without TLS (smtp.tls:false), transaction depth anomalies, webmail clients to non-standard mail servers.
Key fields: smtp.helo, smtp.mail_from, smtp.recipient_to, smtp.last_reply, smtp.tls, smtp.is_webmail, source.ip, destination.ip
MITRE: T1566 (Phishing), T1048 (Exfil via Email), T1071 (C2 via Mail Protocol)
PEAK-Baseline-NTLM.ndjsonProtocol: NTLM (Zeek ntlm.log) | Filter: tags:ntlm
NTLM authentication baseline for detecting credential attacks. Hunt surface: NTLM authentication where Kerberos should be used (legacy auth or forced downgrade), unusual workstation → server authentication pairs, rare domain names, high NTLM failure rates (spray/brute), SMB relay indicators.
Key fields: user.name, host.domain, ntlm.server.nb.name, ntlm.server.dns.name, source.ip, destination.ip
MITRE: T1110 (Brute Force), T1557.001 (NTLM Relay), T1550.002 (Pass-the-Hash), T1187 (Forced Authentication)
PEAK-Baseline-DCE-RPC.ndjsonProtocol: DCE/RPC (Zeek dce_rpc.log) | Filter: tags:dce_rpc
Windows RPC call baseline for detecting lateral movement and credential attacks. Hunt surface: drsuapi endpoint (DCSync — T1003.006), svcctl endpoint (remote service creation), atsvc / ITaskSchedulerService (remote scheduled tasks), samr/lsarpc from non-DC hosts (credential dump), rare operations from workstations.
Pre-filtered panels for drsuapi and svcctl endpoints make this the fastest path to DCSync detection in the environment.
Key fields: dce_rpc.endpoint, dce_rpc.operation, dce_rpc.named_pipe, source.ip, destination.ip
MITRE: T1003.006 (DCSync), T1569.002 (Remote Services), T1053.005 (Scheduled Tasks), T1021.003 (DCOM)
PEAK-Baseline-LDAP.ndjsonProtocol: LDAP (Zeek ldap_search.log) | Filter: tags:ldap_search
Active Directory query baseline for detecting enumeration tools. Hunt surface: high result-count queries from workstations (BloodHound/SharpHound bulk enumeration), rare LDAP filter strings (tool-specific syntax), unusual base objects (trustedDomain, AdminSDHolder, msDS-AllowedToDelegateTo), rare client hosts querying LDAP.
Key fields: ldap.result, ldap.domain, ldap.object, ldap.common_name, ldap_search.filter, ldap_search.scope, ldap_search.result_count
MITRE: T1087 (Account Discovery), T1069 (Permission Groups Discovery), T1482 (Domain Trust Discovery)
PEAK-Baseline-WireGuard.ndjsonProtocol: WireGuard VPN (Zeek wireguard.log) | Filter: tags:wireguard
WireGuard tunnel baseline. In environments where WireGuard is not authorized, every event in this dashboard is a finding. Hunt surface: unauthorized initiating hosts, unknown external endpoints, unestablished sessions (failed handshakes), WireGuard on non-standard ports.
Key fields: wireguard.established, wireguard.initiations, wireguard.responses, source.ip, destination.ip
MITRE: T1572 (Protocol Tunneling), T1090 (Proxy), T1048 (Exfiltration over Alt Protocol), T1133 (External Remote Services)
PEAK-Baseline-x509.ndjsonProtocol: X.509 Certificates (Zeek x509.log) | Filter: tags:x509
Certificate observation baseline. Note: x509 logs contain certificate attributes only — no source/destination IPs. Correlate findings with the TLS dashboard for connection context. Hunt surface: self-signed certificates (subject = issuer), rare or unknown CAs, weak key lengths (RSA < 2048), deprecated signing algorithms (MD5, SHA1), rogue CA certificates (basic_constraints.ca:true from unknown issuers), rare SAN DNS domains.
Key fields: x509.certificate.subject, x509.certificate.issuer, x509.certificate.serial, x509.certificate.key.type, x509.certificate.key.length, x509.certificate.signing_algorithm, x509.san_dns, x509.basic_constraints.ca, hash.sha256
MITRE: T1573.002 (Asymmetric Crypto C2), T1587.003 (Digital Certificates), T1588.004 (Obtain Certificates)
PEAK-Baseline-Files.ndjsonProtocol: Zeek Files (Zeek files.log) | Filter: tags:file
File transfer baseline covering all protocols that carry files (HTTP, SMTP, SMB, FTP, etc.). Hunt surface: rare or unexpected MIME types — especially application/x-dosexec (PE executable), application/x-msdownload, ZIP/RAR archives from external sources — rare file senders, unusual delivery protocols (non-HTTP/SMTP analyzers), large outbound transfers. MD5 and SHA1 hash tables provided for threat intelligence cross-reference.
Key fields: file.mime_type, file.source, file.analyzer, file.bytes.seen, hash.md5, hash.sha1, source.ip, destination.ip
MITRE: T1105 (Ingress Tool Transfer), T1566 (Phishing), T1048 (Exfiltration), T1560 (Archive Collected Data)
PEAK-Baseline-Suricata.ndjsonProtocol: Suricata IDS/IPS Alerts | Filter: event.module:suricata
Suricata alert baseline for noise reduction and high-signal detection. The rare signatures table is the primary hunt entry point — single-occurrence rules are the highest-priority investigation surface. Hunt surface: rare alert signatures (not in baseline noise), critical severity alerts (severity 1), blocked traffic (IPS mode), unknown alert source IPs, alert category patterns (lateral movement, C2, exploit categories).
Key fields: rule.name, rule.category, rule.severity, rule.action, event.severity_label, source.ip, destination.ip, network.transport
MITRE: Varies by rule. Key categories: T1021 (Lateral), T1071 (C2), T1190 (Exploit Public App), T1566 (Phishing)
⚠️ ICS Dashboard Note: Modbus and DNP3 have NO authentication and NO authorization in their baseline implementations. Any unauthorized host sending commands to a PLC, RTU, or IED is a critical finding regardless of whether the command succeeded. Treat anomalies in these dashboards as incidents, not alerts.
PEAK-Baseline-Modbus-Summary.ndjsonProtocol: Modbus/TCP Session Summary (Zeek modbus.log) | Filter: tags:modbus
Lower-volume, higher-level view of Modbus activity — one record per PDU transaction. Use as the entry point dashboard for Modbus hunts: authorized master inventory, function code distribution, traffic volume baseline. When you identify a suspicious master→slave pair, pivot to PEAK-Baseline-Modbus.ndjson for register-level detail.
Key fields: modbus.function, source.ip, destination.ip, destination.port
MITRE ICS: T1843 (Program Upload), T1846 (Remote System Discovery), T1855 (Unauthorized Command Message)
PEAK-Baseline-Modbus.ndjsonProtocol: Modbus/TCP Register Detail (Zeek modbus_detailed.log) | Filter: tags:modbus_detailed
Register and coil-level detail — one record per individual Modbus read/write operation. Use for deep-dive analysis after identifying suspicious hosts in the Summary dashboard. Hunt surface: write operations to specific registers from unauthorized hosts, address ranges outside normal operational parameters, rare function codes, register address probing (sequential address access patterns).
Key fields: modbus.function, modbus.address, source.ip, destination.ip, destination.port
MITRE ICS: T1855 (Unauthorized Command Message), T1856 (Spoof Reporting Message), T1801 (Monitor Process State)
PEAK-Baseline-DNP3.ndjsonProtocol: DNP3 Session + Data Objects (Zeek dnp3.log + dnp3_objects.log) | Filter: tags:dnp3 or tags:dnp3_objects
Combined dashboard covering DNP3 session-level requests and data object detail. Common in electric utilities, water/wastewater, and oil & gas SCADA environments. Hunt surface: unauthorized master hosts sending READ requests, Class 0 polls from unknown hosts (full outstation data dump = recon), unusual object types being requested, anomalous function codes (COLD_RESTART, WARM_RESTART, STOP_APPLICATION). Pre-filtered panel for disruptive function codes. Pivot to DNP3 Control for relay command analysis.
Key fields: dnp3.fc_request (session), dnp3.function_code (objects), dnp3.object_type, source.ip, destination.ip
MITRE ICS: T1801 (Monitor Process State), T1846 (Remote System Discovery), T1814 (Denial of Service), T1858 (Change Operating Mode)
PEAK-Baseline-DNP3-Control.ndjsonProtocol: DNP3 Control Relay Commands (Zeek dnp3_control.log) | Filter: tags:dnp3_control
Highest-risk ICS dashboard in this collection. Every record represents a command to change the physical state of a field device (relay actuation, breaker open/close, valve command). Modeled on the DNP3 SELECT→OPERATE pattern used in real-world ICS attacks (see: 2015 Ukraine power grid attack).
Hunt surface: unauthorized commanding hosts (should be 1–2 known SCADA servers maximum), DIRECT_OPERATE commands (bypasses SELECT confirmation safety step), Trip/Close operations (breaker-level consequence), index numbers outside documented control point list, execute_count > 1 (repeated actuation), timing parameters outside operational norms.
Every record in this dashboard should be corroborated against authorized change management records.
Key fields: dnp3.function_code, dnp3.block_type, dnp3.operation_type, dnp3.trip_control_code, dnp3.index_number, dnp3.execute_count, dnp3.on_time, dnp3.off_time
MITRE ICS: T1855 (Unauthorized Command Message), T1831 (Manipulation of Control), T1836 (Modify Parameter), T1816 (Device Restart/Shutdown)
Tested against: Security Onion 3.0.0
Elasticsearch version: 8.x
Kibana object format: Legacy aggregation-based visualizations (not Lens)
Index pattern: logs-*
Visualization types used: metric, table, line, pie, tagcloud, markdown, saved search
Object versioning: typeMigrationVersion: 8.5.0 (viz), 10.5.0 (search), 10.2.0 (dashboard) | coreMigrationVersion: 8.8.0
Field mappings were validated against live Elasticsearch data from Security Onion 3.0.0 imports. All fields used in visualizations are confirmed present in the indexed fields block of their respective data streams.
1. Start with PEAK-Baseline-Conn → Establish overall network baseline, identify unknown talkers
2. Follow protocols of interest → Use protocol-specific dashboards for deep dives
3. Surface rare values → Least-frequent tables in each dashboard are your primary hunt targets
4. Pivot on findings → Use saved searches to drill to raw events
5. ICS environments → Run Modbus Summary → Modbus Detail → DNP3 → DNP3 Control
6. Alert triage → Use Suricata dashboard: start with rare signatures, not top signatures
These dashboards are provided for defensive security operations use. Field mappings and design patterns are specific to Security Onion 3.0 with Zeek/Suricata. Adaptation may be required for other deployments.
| Dashboard File | Protocol | Zeek Log(s) | Filter |
|---|
| PEAK-Baseline-Conn.ndjson | Network Connections | conn.log | tags:conn |
| PEAK-Baseline-DNS.ndjson | DNS | dns.log | tags:dns |
| PEAK-Baseline-HTTP.ndjson | HTTP/HTTPS | http.log | tags:http or tags:http2 |
| PEAK-Baseline-TLS.ndjson | TLS/SSL | ssl.log | tags:ssl |
| PEAK-Baseline-SMB.ndjson | SMB | smb_mapping.log, smb_files.log | tags:smb_mapping or tags:smb_files |
| PEAK-Baseline-Kerberos.ndjson | Kerberos | kerberos.log | tags:kerberos |
| PEAK-Baseline-FTP.ndjson | FTP | ftp.log | tags:ftp |
| PEAK-Baseline-SSH.ndjson | SSH | ssh.log | tags:ssh |
| PEAK-Baseline-RDP.ndjson | RDP | rdp.log | tags:rdp |
| PEAK-Baseline-SMTP.ndjson | SMTP | smtp.log | tags:smtp |
| PEAK-Baseline-NTLM.ndjson | NTLM | ntlm.log | tags:ntlm |
| PEAK-Baseline-DCE-RPC.ndjson | DCE/RPC | dce_rpc.log | tags:dce_rpc |
| PEAK-Baseline-LDAP.ndjson | LDAP | ldap_search.log | tags:ldap_search |
| PEAK-Baseline-WireGuard.ndjson | WireGuard | wireguard.log | tags:wireguard |
| PEAK-Baseline-x509.ndjson | X.509 Certificates | x509.log | tags:x509 |
| PEAK-Baseline-Files.ndjson | Zeek Files | files.log | tags:file |
| PEAK-Baseline-Suricata.ndjson | Suricata IDS/IPS | alerts | event.module:suricata |
| PEAK-Baseline-Modbus-Summary.ndjson | Modbus Session | modbus.log | tags:modbus |
| PEAK-Baseline-Modbus.ndjson | Modbus Detail | modbus_detailed.log | tags:modbus_detailed |
| PEAK-Baseline-DNP3.ndjson | DNP3 Session + Objects | dnp3.log, dnp3_objects.log | tags:dnp3 or tags:dnp3_objects |
| PEAK-Baseline-DNP3-Control.ndjson | DNP3 Control Relays | dnp3_control.log | tags:dnp3_control |