SOP-34: Outbound Threat-Intelligence Matched Connection

·

A confirmed TI match — an outbound connection to an IP or domain with a threat intelligence indicator hit — is one of the highest-confidence alert types in a SOC. Unlike behavioural detections that require interpretation, a TI match means your endpoint contacted infrastructure that is known-bad from vetted intelligence sources: CISA KEV-linked C2, TAXII feed botnet nodes, MSTIC-published ransomware group infrastructure, or Defender TI-confirmed phishing drop sites. The key analyst task is not verifying the match (the TI feed did that) but determining the scope: which host, which process, what data was transmitted, and whether this is an isolated C2 callback or evidence of a broader compromise.

Key data sources: ThreatIntelligenceIndicator (Sentinel TI table — TAXII/STIX feed IOCs), DeviceNetworkEvents (MDE network telemetry with process attribution), DnsEvents (DNS resolution of indicator domains), CommonSecurityLog (proxy/firewall IOC match logs).

☰ Table of Contents

01 Background 02 Identification 03 Containment 04 Eradication 05 Escalation
🛠

01 — BACKGROUND

TECHNIQUE OVERVIEW
01
Technique Overview — C2 & Exfil via TI-Matched Infrastructure
MITRE T1071 / T1041

Threat actors use purpose-built or rented command-and-control (C2) infrastructure to issue commands to implants, receive stolen data, and stage payloads. These IPs and domains are catalogued by threat intelligence providers (MSTIC, Mandiant, Recorded Future, Talos) and published via STIX/TAXII feeds that Sentinel ingests into the ThreatIntelligenceIndicator table. A TI match fires when your network telemetry shows a connection to one of these known-bad endpoints. Common scenarios: Cobalt Strike team server callback (default port 443 to VPS IP), Qakbot/Emotet C2 rotation (frequent domain changes but TI feeds updated quickly), ransomware group payment panel or data leak site contact, and info-stealer exfil endpoint (often Telegram API or Dropbox API abuse).

FieldValue
MITRE TechniquesT1071 — Application Layer Protocol (C2 over HTTP/HTTPS/DNS)
T1041 — Exfiltration Over C2 Channel
Kill-chain PhaseCommand & Control / Exfiltration
Primary Log SourceThreatIntelligenceIndicator, DeviceNetworkEvents, DnsEvents
Secondary Log SourcesCommonSecurityLog (proxy IOC match), AzureFirewallNetworkRule (TI-based deny), Sysmon Event 3 (NetworkConnect with known-bad IP)
TI Feed Sources in SentinelMicrosoft Defender TI, MSTIC TAXII feed, MISP (custom connector), AlienVault OTX, Recorded Future (premium), abuse.ch URLhaus/Feodo Tracker
Default SeveritySEV2 minimum on any TI match. SEV1 if confirmed ransomware C2, APT indicator, or data exfil byte count >100 KB.

Not all TI indicators have equal confidence. Check the ThreatIntelligenceIndicator.ConfidenceScore field — scores below 50 have a higher false positive rate and warrant extra verification before isolating an endpoint. MSTIC-attributed APT indicators (confidence 80+) are near-certain and justify immediate containment.

🔍

02 — IDENTIFICATION

2 INDICATORS
▶ Investigation Workflow
I1
Sentinel TI Indicator Match — IP & Domain IOC Correlation
T1071
WHY CHECK

The ThreatIntelligenceIndicator table in Sentinel stores all IOCs from connected TI feeds. When joined against DeviceNetworkEvents or DnsEvents, it surfaces every host that contacted a known-bad IP or resolved a known-bad domain. The first check is the indicator's ConfidenceScore and ThreatType fields — a ConfidenceScore of 80+ from MSTIC or abuse.ch with ThreatType "C2" or "Botnet" requires no further validation; the match itself is your evidence. Separately check ExpirationDateTime — expired indicators (stale IOCs) have a much higher false positive rate as infrastructure gets repurposed.

📍 Portal Navigation — Microsoft Sentinel Threat Intelligence
portal.azure.com› Microsoft Sentinel› Threat Management› Threat Intelligence
portal.azure.com› Microsoft Sentinel› Logs› ThreatIntelligenceIndicator
  • 1In Threat Intelligence, search for the matched IP or domain. Review: Confidence Score, Threat Type (C2, Botnet, Phishing, Malware), Source (MSTIC, abuse.ch, OTX), and Tags (e.g. "Cobalt Strike", "Qakbot", "LockBit C2"). This context determines your response urgency.
  • 2Run the TI join KQL query below. Set the time range to Last 24 hours — also check if this IOC had earlier hits in the past 7 days that may have been missed (indicators often sit unmatched for days before escalating).
  • 3For each matching host, note InitiatingProcessFileName and InitiatingProcessCommandLine in DeviceNetworkEvents. A legitimate process (chrome.exe, Teams.exe) connecting to a C2 IP indicates browser/app compromise or proxy injection. A suspicious process (svchost.exe with unusual parent, rundll32.exe, a randomly-named binary) confirms active implant.
  • 4Check total bytes transferred (SentBytes + ReceivedBytes in DeviceNetworkEvents) — high received bytes indicate payload download; high sent bytes indicate exfiltration. Report the byte count to the data owner for breach notification assessment.
  • 5Search the same IOC across ALL devices in your fleet — a shared C2 IP hit across multiple hosts indicates a coordinated deployment (mass phishing campaign, supply chain compromise, lateral movement from patient zero).
Indicator ContextMeaningAction
ThreatType = C2, Confidence >= 70Confirmed C2 infrastructure — implant actively communicating with attackerIsolate host immediately
ThreatType = BotnetHost is a botnet member — may be conducting spam, DDoS, or credential stuffing on behalf of operatorIsolate + malware scan
ThreatType = RansomwareContact with ransomware group infrastructure — payment page, leak site, or stage-2 delivery endpointSEV1 — escalate now
Confidence < 50, ExpirationDateTime passedStale IOC — infrastructure likely repurposed; higher false positive risk; verify before isolatingVerify before action
Multiple hosts same IOC in <1hrCampaign-scale compromise — not isolated incident; coordinated implant or worm propagationSEV1 — enterprise IR
DETECTS: Outbound connections from any endpoint to TI-matched IPs — joins network telemetry against the full ThreatIntelligenceIndicator table with confidence and threat-type context
KQL — TI IP Match via DeviceNetworkEvents
let TIIndicators = ThreatIntelligenceIndicator | where TimeGenerated > ago(7d) | where Active == true | where isnotempty(NetworkIP) | project NetworkIP, IndicatorId, ThreatType, ConfidenceScore, Description, ExpirationDateTime, Tags; DeviceNetworkEvents | where Timestamp > ago(24h) | join kind=inner TIIndicators on $left.RemoteIP == $right.NetworkIP | project Timestamp, DeviceName, RemoteIP, RemotePort, RemoteUrl, InitiatingProcessFileName, InitiatingProcessCommandLine, SentBytes, ReceivedBytes, ThreatType, ConfidenceScore, Description, Tags | order by ConfidenceScore desc, Timestamp desc
DETECTS: DNS resolution of TI-matched malicious domains — identifies hosts that resolved known-bad FQDNs before the connection was established
KQL — TI Domain Match via DnsEvents
let TIDomains = ThreatIntelligenceIndicator | where TimeGenerated > ago(7d) | where Active == true | where isnotempty(DomainName) | project DomainName, ThreatType, ConfidenceScore, Description, Tags; DnsEvents | where TimeGenerated > ago(24h) | join kind=inner TIDomains on $left.Name == $right.DomainName | project TimeGenerated, ClientIP, Name, QueryType, ThreatType, ConfidenceScore, Description, Tags | order by ConfidenceScore desc, TimeGenerated desc
SPL — TI Match Correlation
index=network sourcetype=DeviceNetworkEvents | lookup threat_intel_iocs dest_ip OUTPUT threat_type, confidence, description | where isnotnull(threat_type) | table _time src_ip dest_ip dest_port InitiatingProcessFileName threat_type confidence description | sort -confidence
I2
C2 Beacon Pattern & Process-Level Attribution
T1041
WHY CHECK

After confirming the IOC match, the second investigation layer is the communication pattern from the matched host. A legitimate one-off DNS resolution of a malicious domain (from clicking a phishing link that didn't load) has a very different risk profile from a persistent beacon: regular connections to the same C2 IP every 60 seconds with consistent byte counts. Beacon analysis reveals dwell time (how long the implant has been active), communication protocol (HTTP POST = command execution results; HTTPS = encrypted C2 channel), and urgency of containment (active C2 session vs dormant implant vs completed payload delivery).

📍 Portal Navigation — MDE Advanced Hunting
security.microsoft.com› Hunting› Advanced Hunting
  • 1Run the beacon pattern query for the matched IOC IP. Look at the time interval between successive connections from the same host — a standard deviation of <30 seconds in connection intervals is a strong beaconing signature. Cobalt Strike default jitter is 30%, so intervals vary but cluster around a base (60s, 300s, 600s are common defaults).
  • 2Check InitiatingProcessFileName for the beacon — known malware parent processes: rundll32.exe, regsvr32.exe, mshta.exe, wscript.exe, cscript.exe, unusual svchost.exe (check its exact commandline — should be svchost.exe -k netsvcs etc., not arbitrary args), and 0-character/random-name binaries in TEMP.
  • 3Pivot to DeviceProcessEvents to build the full process tree: what launched the beaconing process, and what did the beaconing process launch. This reconstructs the attack chain from initial access through to current implant activity.
  • 4Review SentBytes and ReceivedBytes totals over the beacon history. High ReceivedBytes on initial beacon connections = payload staging. High SentBytes later = active exfiltration. Low symmetric byte counts = heartbeat-only (minimal risk; implant waiting for commands).
PatternMeaningRisk
Regular interval connections (<30s jitter)Active C2 beacon — implant is alive and checking in; attacker has active accessCRITICAL
Large ReceivedBytes on first connectionPayload staging — additional malware component downloaded from C2HIGH
Large SentBytes bursts at irregular intervalsExfiltration events — data being sent to C2; calculate volume for breach notificationHIGH
Single connection, no follow-onOne-off resolution/redirect — may be phishing link click rather than active implantMEDIUM
DETECTS: Beacon regularity analysis — measures connection interval consistency to distinguish C2 implant beacons from normal browsing traffic
KQL — C2 Beacon Interval Analysis
let IOC_IP = "REPLACE_WITH_MATCHED_IOC_IP"; DeviceNetworkEvents | where Timestamp > ago(48h) | where RemoteIP == IOC_IP | sort by DeviceName asc, Timestamp asc | serialize | extend PrevTimestamp = prev(Timestamp, 1) | where DeviceName == prev(DeviceName, 1) | extend IntervalSeconds = datetime_diff('second', Timestamp, PrevTimestamp) | summarize ConnectionCount = count(), MeanIntervalSec = round(avg(IntervalSeconds),0), StdDevSec = round(stdev(IntervalSeconds),0), TotalSentBytes = sum(SentBytes), TotalReceivedBytes = sum(ReceivedBytes), BeaconingProcess = any(InitiatingProcessFileName), ProcessCmd = any(InitiatingProcessCommandLine) by DeviceName | where ConnectionCount > 3 | order by StdDevSec asc
SPL — Beacon Interval Consistency Check
index=network sourcetype=DeviceNetworkEvents dest_ip="REPLACE_WITH_IOC_IP" | sort src_ip, _time | streamstats window=2 current=true last(_time) as prev_time by src_ip | eval interval_sec=_time - prev_time | stats count, avg(interval_sec) as mean_interval, stdev(interval_sec) as stdev_interval, sum(bytes_out) as total_sent by src_ip, InitiatingProcessFileName | where count > 3 | sort stdev_interval
🚫

03 — CONTAINMENT

DECISION + ACTIONS
C1
Containment Verdict & Action Decision
IMMEDIATE
▲ Containment Decision Matrix
CONFIRMEDHigh-confidence TI match (score ≥70) + beacon pattern confirmed + suspicious process identified — isolate host immediately via MDE. Add IOC IP/domain to firewall deny list and DNS block. Preserve memory image before isolation if possible.
SUSPECTEDTI match confirmed but only single connection, no ongoing beacon — add IOC to block list immediately, monitor host for 24 hours for recontact or secondary IOC. No isolation yet unless high-value host (DC, file server).
FALSE POSITIVELow-confidence IOC (score <50), indicator expired, or infrastructure known repurposed (shared CDN/hosting IP) — document, do not isolate, tune TI feed quality. Submit feedback to the IOC provider if it's a confirmed false positive.
  • 1IOC block everywhere: Add the matched IP/domain to your firewall deny list, DNS sinkhole/RPZ, and web proxy block list simultaneously. This ensures no other host can reach the same infrastructure even if more hosts are compromised.
  • 2Fleet-wide IOC scan: Before isolating the one identified host, run the fleet-wide TI join query to find all other hosts that contacted the same IOC. Isolating one host while others are still beaconing defeats the purpose of containment.
  • 3Memory image before isolation: For confirmed beacon, initiate memory acquisition via MDE Live Response (run MemoryDump.exe) before isolating. The running implant process and its injected code will be captured — essential for malware analysis and IOC extraction.
⚖

04 — ERADICATION

CLEANUP & RECOVERY
E1
Implant Removal & Infrastructure Blocking
ERADICATE
  • 1Implant removal: Use MDE Live Response to terminate the beaconing process, collect the binary for analysis, and delete it. Run run antimalware-scan.exe /full and cross-check with YARA rule scan if the malware family is known (e.g., Cobalt Strike YARA rules are publicly available).
  • 2Persistence removal: Search for persistence mechanisms installed by the implant — scheduled tasks, registry Run keys, services, WMI subscriptions. Use the DeviceProcessEvents timeline to identify any persistence-installation commands run by the malware.
  • 3IOC enrichment and sharing: Submit the confirmed IOC with additional context (process attribution, byte volumes, timing) to your MISP instance and relevant ISACs. Extract any new IOCs from the memory dump (injected PE, additional C2 IPs, mutexes, registry keys) to expand detection coverage.
  • 4Dwell time calculation: Check the first occurrence of the IOC connection in logs going back 90 days (use long-term storage query). The gap between first contact and detection is the dwell time — this drives the scope of forensic investigation and data loss assessment.
△

05 — ESCALATION

THRESHOLDS & CONTACTS
ES1
Escalation Thresholds & Notification
ESCALATE
ConditionActionSeverity
High-confidence C2 IOC match + beacon confirmedEscalate to SOC Lead — full IR playbook; isolate host; extract and analyze implantSEV2
Ransomware group IOC match (LockBit, ALPHV, Cl0p)Escalate to CISO immediately — potential pre-ransomware staging; invoke business continuity planSEV1
TI match with large SentBytes (>10 MB)Escalate to CISO + Legal — confirmed data exfiltration; initiate breach notification assessment (GDPR/NZ Privacy Act clock starts)SEV1
Multiple hosts same IOC (>3 hosts)Escalate to CISO — campaign-scale compromise; isolate all affected hosts simultaneouslySEV1
Single connection, low confidence IOCMonitor only; add to watchlist; no escalation needed unless behaviour continuesSEV4

CyberHawk Threat Intel

CyberHawk Threat Intel

Built by Rudra Verma | Senior Cyber Security Architect & Researcher

▶ YouTube 🎥 TikTok 𝕏 Twitter / X 📤 Telegram
Web App (Free) All SOPs Courses

"They can't exploit you if you are the Exploit."

Authorized security research & penetration testing only. Unauthorized use is illegal.