Network correlation
On this page
Network correlation links host-level events to network telemetry. Adversaries depend on the network for command-and-control and exfiltration (outbound) and for lateral movement (east-west: SMB, RDP, WinRM). Correlation surfaces that traffic by tying it back to the process that initiated it.
A single PowerShell PowerShell Microsoft's shell and scripting language: Windows PowerShell 5.1 on .NET Framework, cross-platform PowerShell 7 on .NET. The most abused interpreter on Windows (ATT&CK T1059.001). Triage tells: -EncodedCommand or -enc (Base64 of UTF-16LE text), -NoProfile, -WindowStyle Hidden, IEX with a download cradle, and an Office or browser parent. Script Block Logging (Event ID 4104) records de-obfuscated script content. process may look legitimate. A burst of HTTPS traffic may look harmless. Together, they show the process making regular, automated connections to a newly registered domain: the shape of beaconing Beaconing Periodic network communication from an infected host to a C2 server. Legitimate software beacons too (updaters, telemetry and EDR agents), so baseline known-good cadences before you pivot. , and a hypothesis neither event earned alone.
Two perspectives, one picture
Who initiated the connection?
- Which process opened the socket
- Under which user context it executed
- The command-line arguments that produced it
- What the process did locally before and after
Where does the traffic go?
- Destination IP, port, and ASN
- Frequency and cadence of communication
- TLS certificate properties and cipher choice
- How the destination compares to historical traffic
A beacon hiding in HTTPS
A workstation initiates outbound HTTPS connections from PowerShell at 03:15 local time.
Correlation reveals three signals that, in isolation, are not decisive:
- The PowerShell process launched outside the user’s normal working hours.
- Within seconds, the host established encrypted HTTPS sessions to a domain registered 48 hours earlier.
- The destination has low prevalence in historical DNS data, and the TLS client fingerprint ( JA4 JA4 The 2023 successor to JA3 from FoxIO (FoxIO-LLC/ja4). A TLS-client fingerprint that sorts ciphers and extensions before hashing, so it stays consistent across connections from the same client build despite randomization. It handles TLS 1.3 and marks the transport with a leading "t" (TLS over TCP), "q" (QUIC) or "d" (DTLS). Part of the JA4+ suite, which adds separate fingerprints such as JA4H (HTTP client) and JA4S (TLS server). JA4 itself is BSD-3-Clause open source; the other JA4+ methods use the FoxIO License (free for internal use, licensed for commercial products), so check before embedding them in a product. , or legacy JA3 JA3 A method (Salesforce, 2017) for fingerprinting TLS clients by hashing fields of the ClientHello (an MD5 of the version, ciphers, extensions, curves and point formats). Degraded against modern browsers: Chrome 110 (early 2023) began randomizing TLS extension order, which splits one client into many JA3 hashes. (JA3 already ignores GREASE values.) The salesforce/ja3 repository was archived in 2025; prefer JA4 for new detections. ) has never been seen on this host or elsewhere in the fleet.
Keep the two layers separate. What is observed: off-hours execution, a 48-hour-old domain, low prevalence, a never-seen client fingerprint. What is inferred: initial compromise and command-and-control. The combination earns that as the working hypothesis (the correlation is the alert), but it is the start of the investigation, not its verdict.
Why no single signal was decisive, and what decides
- PowerShell at 03:15 could be a developer working late.
- HTTPS to a new domain could be a new SaaS tool.
- Low-prevalence destinations exist legitimately.
- A never-seen fingerprint can be a newly installed tool built on Go, Python or a vendor SDK.
Each indicator on its own would be tuned out as noise. The combination crosses the alerting threshold. Even so, the whole set has a benign twin: a contractor’s late-night run of a just-installed vendor CLI against the vendor’s freshly launched endpoint matches all three. The decisive follow-ups separate the twins: what launched the process (parent, user, scheduled task, or interactive session), whether the cadence holds a fixed machine interval over hours, who registered and operates the destination, and whether anything else in the fleet talks to it.
Where each half comes from
Correlation is a join, and a join needs both halves and a key.
- Process half: Sysmon Event ID 3 (network connection) and 22 (DNS query), or the EDR’s network events. These carry the process, the user, and the
ProcessGuid. Sysmon’s network logging is off unless the configuration turns it on. - Wire half: proxy and secure web gateway logs, firewall logs, Zeek
conn,dnsandssllogs, NetFlow or IPFIX, and cloud flow logs such as VPC Flow Logs. - The join: host plus source port plus destination plus a time window. Behind NAT or an explicit proxy, the firewall sees only the translated address or the proxy itself; the proxy log holds the real client. The correlation join keys in Uncover cover the trap in detail.
Annotated sample: both halves of one connection
Trimmed and fictional; the field names are real. The same connection appears as a firewall syslog line on the formats and normalization page.
Process half, Sysmon Event ID 3 (network connection):
UtcTime=2026-03-10 14:22:05.001 ProcessGuid={6a1f0c3e-2b7d-65f0-4c1a-000000001a00} ProcessId=8128
Image=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe User=CORP\jdoe Protocol=tcp Initiated=true
SourceIp=10.20.4.17 SourcePort=51544 DestinationIp=198.51.100.23 DestinationPort=443Wire half, Zeek conn.log (JSON output):
{"ts":1773152525.004,"uid":"CjX4a21kP0nQ3Vv7Ue","id.orig_h":"10.20.4.17","id.orig_p":51544,
"id.resp_h":"198.51.100.23","id.resp_p":443,"proto":"tcp","service":"ssl",
"duration":0.41,"orig_bytes":517,"resp_bytes":3870,"conn_state":"SF"}- The join is the four-tuple (
SourceIp/id.orig_h,SourcePort/id.orig_p, destination address and port) within a few seconds. Zeek’stsis epoch seconds in UTC, the connection’s start; Sysmon’sUtcTimeis UTC too, so the 3 ms difference is sensor timing, not skew. - The Sysmon half names the process and its
ProcessGuid, which links back to the process tree. The Zeek half names nothing on the host. - Zeek’s
uidis the pivot inside Zeek: the same value inssl.loggives the server name and TLS details for this connection, anddns.logholds the lookup that preceded it. - This only works because the Zeek sensor sits inside the NAT boundary. A sensor outside it would see the firewall’s public address and a translated port, and the firewall’s NAT log would be the bridge.
What the wire still shows
TLS 1.3 encrypts the server certificate, and Encrypted Client Hello (ECH, RFC 9849) hides the SNI; DNS over HTTPS takes the lookup away from your DNS logs. Without TLS inspection, certificate properties come from active scans (JARM, JA4X, Certificate Transparency logs) rather than the session itself, and destination identity may reduce to an IP address and a CDN. Know which of these your sensors can still see before you weigh the certificate and SNI signals on this page.
Telemetry to analyze
Five telemetry views, each with its own signal patterns:
DNS queries
- Algorithmically generated ( DGA DGA Domain Generation Algorithm. A technique where malware computes domain names at runtime so command-and-control servers can rotate quickly to avoid blocklists. , ATT&CK T1568.002) domains: high-entropy labels, or dictionary-word mashups (
cityjulydish.example) that entropy scoring misses. Bursts of NXDOMAIN responses from one process are often the better tell. - Randomized subdomains
- Fast-flux patterns (many unrelated IPs across ASNs for one name); short TTLs alone are normal for CDNs and cloud load balancers.
Network connections
- Traffic to first-seen external destinations (never contacted by this host or the fleet before)
- Known malicious ranges from threat intelligence
- Unusual port usage, uncommon protocols
Data transfer patterns
- Automated beaconing (consistent sizes at consistent intervals, unlike irregular human-driven traffic)
- Sustained large outbound transfers off-hours
Protocol usage
- Tunneling or obfuscation (DNS over HTTPS bypassing inspection)
- TLS abuse (malformed certificates, unusual ciphers)
- Custom encryption layers
East-west traffic
- Workstation-to-workstation SMB, RDP, or WinRM from hosts that never initiate them (ATT&CK T1021)
- DCOM or remote service creation against many hosts in a short window
- Kerberos anomalies: a burst of service-ticket requests from one account, or tickets requested with weak (RC4) encryption
A finance workstation that normally talks only to internal ERP systems, suddenly opening TLS sessions to a low-reputation cloud storage provider after hours, is a strong exfiltration Exfiltration The unauthorized transfer of data out of the environment (ATT&CK TA0010): over the C2 channel, to cloud storage or a file-sharing service, by email, or through DNS. Triage signals are volume and destination: outbound bytes far above the host's baseline, a first-seen upload destination, and staging (archives appearing in temporary folders) shortly before the transfer. Confirmed exfiltration is an escalation criterion, and when the data is regulated it can start notification clocks. hypothesis. It stays a hypothesis until two questions are answered. What actually moved? (Byte counts show volume; only DLP or the storage provider’s object logs show content.) Did anyone authorize the destination? A sanctioned backup migration leaves the same trace. The decisive queries: which process opened the sessions, how the volume compares with the host’s own baseline, and who owns the destination tenant.
Correlation strategies
Three dimensions to weigh on every connection:
Connection metadata
Timestamps, source and destination IPs, ports, session durations, TLS cipher and handshake behavior, and TLS client fingerprints (JA4, or legacy JA3).
Traffic shape
Sizes, intervals, and byte ratios: fixed packet sizes and repetitive transmission intervals are the hallmarks of automated beaconing.
Destination reputation
Domain age, prevalence in the environment, threat intelligence overlap, geographic anomalies, certificate provenance.
A PowerShell process repeatedly reaching out via HTTPS to a newly registered domain using a self-signed TLS certificate carrying a generic common name is a classic obfuscated-C2 pattern. An internal tool polling a just-provisioned dev endpoint can match it field for field, which is why the pattern opens an investigation rather than closing one. The process’s parent and the destination’s owner are the queries that split the two. Do not require the shady certificate, though: modern commodity C2 fronts with valid certificates from free CAs or hides behind CDNs, which is why domain age, prevalence, and a fingerprint rare for this host carry more weight than certificate hygiene. Increasingly, C2 rides on reputable services (Telegram bots, GitHub, Cloudflare tunnels, cloud storage APIs; ATT&CK T1102), where domain age and reputation are useless. There, the questions are which process talks to the service and whether that process ever should. Without combining process-level context, network metadata, and reputation scoring, the same activity might pass for ordinary HTTPS traffic.
Command-and-control indicators
Adversaries hide C2 inside legitimate protocols (HTTPS, DNS; ATT&CK T1071), and current frameworks (Cobalt Strike, Sliver, Havoc, Mythic) make that the default. The automation underneath leaves fingerprints.
Timing patterns
Some frameworks ship with zero jitter (Cobalt Strike’s default) and careless operators leave it; others add jitter by default (Sliver adds up to 30 seconds), and most operators configure it. Plenty of legitimate software also polls on a fixed interval (update checks, agent heartbeats, telemetry), so cadence is a filter, not a verdict. Score periodicity per process and destination (a stable mean interval, consistent sizes, long-lived low-volume connections), baseline and allowlist known pollers, then ask whether that process should be polling that destination at all.
TLS certificates
Mismatched, self-signed, or generic-CN certificates still appear on cheap infrastructure, but valid certificates are now the norm for C2, so treat certificate hygiene as weak evidence. TLS client fingerprints (prefer JA4; JA3 is degraded by Chrome’s extension-order randomization) identify the TLS library and its configuration, not the application. A fingerprint shared with Windows SChannel, Go, or Python tells you little. A rare fingerprint on a host where it has never appeared is the signal.
DNS patterns
Bursts of failed (NXDOMAIN) lookups for generated domains, whether random-looking or word-based (DGA). Rapid IP rotation tied to a single domain (fast-flux). Domains registered in the last 30 days.
Exfiltration indicators
Large compressed transfers outside normal hours. Outbound spikes to low-reputation destinations, or to a cloud storage tenant the organization does not own (ATT&CK T1567.002).
C2 that borrows reputation
When the destination is a reputable SaaS, tunnel or RMM domain, reputation is useless. Pivot on the process (why is powershell or an unsigned binary talking to api.telegram.org or *.trycloudflare.com?), on the tenant (whose OneDrive?), and on sanctioned-tool inventory (is this RMM tool approved here?).
An internal database server that suddenly sends gigabytes of zipped data to a generic cloud storage provider at 02:30 is a strong signal that data is leaving. It is a hypothesis of theft, not proof of it. Volume, timing, and destination establish that something large moved somewhere unusual; they cannot establish intent, and a DBA’s ad-hoc backup to a newly provisioned storage tenant leaves the identical trace. What separates the cases: a change record or maintenance window, ownership of the destination, and the process and identity that initiated the transfer. If those come back empty on a database server, do not wait for a motive: an unexplained bulk transfer from a high-value asset is High impact at no less than Medium likelihood, so the matrix places the case at P2 or higher, and the Escalation decision escalates on the evidence you have.
Check yourself
A Zeek conn log shows 10.20.4.17 opening a TLS session to 198.51.100.23:443 every 60 seconds, give or take 4, for six hours. The EDR’s network events for that host show OneDriveStandaloneUpdater.exe and an unsigned svcupd.exe from %LOCALAPPDATA% both talking to port 443 in that window. Parse it before you open the answer: which half tells you what, and what would you query next?
One way to answer
The wire half gives the cadence (a 60-second interval with small jitter) but not the process. The process half names two candidates, so join on source port and time to see which process owns the periodic sessions. If it is svcupd.exe, the unsigned binary in a per-user path is the lead: hash it, find its creation event and parent, and check the destination’s prevalence across the fleet. If it is the OneDrive updater, the cadence is a known poller, and the question becomes whether that destination belongs to Microsoft. Either way, cadence alone was never the verdict.
Key takeaway
Network correlation moves you from isolated alerts to unified adversary visibility. State what you observed separately from what you infer, name the benign twin, and run the query that separates them. Map the chain from initial execution to external communication before lateral movement Lateral Movement Moving from the initial foothold to other hosts, identities or tenants to find sensitive data or reach higher-value targets (ATT&CK tactic TA0008). It usually rides legitimate remote-access protocols (RDP, SMB, WinRM, SSH) with stolen credentials, or replays a stolen session into a cloud or SaaS tenant, so the signal is an account authenticating where it does not normally go. Each hop widens the blast radius, and confirmed lateral movement is an escalation criterion. widens it. Containment Containment The incident-response phase between detection and eradication: isolate the affected hosts, revoke the compromised credentials, block the C2 destinations, freeze the situation so it stops getting worse while the investigation continues. In triage, preservation comes first: capture the volatile evidence and the artifacts a containment action would destroy, then take only the reversible actions the protocol pre-authorizes. Non-reversible actions, such as a credential reset or an OAuth grant revocation, need IR or owner approval unless the protocol lists them as pre-authorized for that scenario. is a criteria decision, not an inevitability: it follows an escalation made because a criterion is confirmed or the matrix places the case at P1 or P2, not whenever traffic looks strange.
Next up
File system activity
Persistence, payload deployment, ransomware staging, exfiltration staging. Tracking the file lifecycle and its metadata.
Read file systemTechnical details verified . Product names, defaults and retention change; check your own tenant.