Response playbooks, investigation guides, and Atomic Red Team tests are Pro-only. Upgrade to unlock the full detection package for THREAT-Recon-ExternalVulnScannerBurstDetection.

Upgrade to Pro
THREAT-Recon-ExternalVulnScannerBurstDetection Microsoft Sentinel · KQL

Detect External Vulnerability Scanner Burst/Sweep Against Internet-Facing Assets in Microsoft Sentinel

This detection complements the general T1595.002 Vulnerability Scanning coverage with a focus on a specific behavioral signature: a single external source rapidly sweeping a high volume of distinct URIs, query parameters, or ports against internet-facing web/application assets within a short window. Rather than matching on scanner tool names or user-agent strings (which are trivially spoofed or stripped), this detection keys on rate and breadth — a burst of requests from one source IP hitting many unique paths/params/ports on a public-facing WAF, reverse proxy, or perimeter firewall in a tight time window is a strong behavioral indicator of automated vulnerability scanning regardless of tooling. Sandworm Team, APT41, and Magic Hound have all conducted large-scale internet-facing vulnerability scanning sweeps as a precursor to exploitation of public-facing applications (T1190), and this pattern is equally produced by commodity scanners, bug bounty researchers, and unauthorized red team activity. The detection is intentionally tool-agnostic and behavior-based — no CVE or vulnerability-specific payload matching is performed here since that is scan-target-dependent and better covered by WAF/IDS signature rules.

MITRE ATT&CK

Tactic
Reconnaissance

KQL Detection Query

Microsoft Sentinel (KQL)
kusto
// THREAT-Recon-ExternalVulnScannerBurstDetection
// External source sweeping many unique URIs/params/ports against internet-facing assets in a short window
let Lookback = 1h;
let UniqueUriThreshold = 40;
let RequestCountThreshold = 150;
let BurstWindowMinutes = 10;
CommonSecurityLog
| where TimeGenerated > ago(Lookback)
| where DeviceAction !in ("allow") or isnotempty(RequestURL)
| where isnotempty(SourceIP) and isnotempty(RequestURL)
| extend UriPath = tostring(split(RequestURL, "?")[0])
| extend QueryParams = tostring(split(RequestURL, "?")[1])
| summarize
    RequestCount = count(),
    UniqueUris = dcount(UriPath),
    UniqueParams = dcount(QueryParams),
    UniqueDestPorts = dcount(DestinationPort),
    UniqueDestHosts = dcount(DestinationHostName),
    StatusCodes = make_set(tostring(DeviceCustomNumber1), 10),
    SampleUris = make_set(UriPath, 15),
    FirstSeen = min(TimeGenerated),
    LastSeen = max(TimeGenerated)
    by SourceIP, bin(TimeGenerated, BurstWindowMinutes * 1m)
| where UniqueUris >= UniqueUriThreshold or RequestCount >= RequestCountThreshold
| extend DurationMinutes = datetime_diff('minute', LastSeen, FirstSeen)
| extend RequestsPerMinute = round(RequestCount * 1.0 / iff(DurationMinutes == 0, 1, DurationMinutes), 1)
| project FirstSeen, LastSeen, DurationMinutes, SourceIP, RequestCount, UniqueUris, UniqueParams,
          UniqueDestPorts, UniqueDestHosts, RequestsPerMinute, StatusCodes, SampleUris
| sort by RequestCount desc
medium severity medium confidence

Detects a single external source IP sweeping a high number of unique URIs/query parameters against internet-facing assets within a 10-minute burst window, using CommonSecurityLog (CEF-normalized WAF/firewall/proxy events). Fires purely on request volume and path uniqueness — no tool signature or user-agent matching required — so it catches scanners configured to evade signature-based detection. Requires perimeter WAF, reverse proxy, or firewall logs normalized into CommonSecurityLog with RequestURL and DestinationPort populated.

Data Sources

Network Traffic: Network Traffic ContentNetwork Traffic: Network Traffic FlowApplication Log: Application Log ContentCommonSecurityLog (CEF via Syslog from WAF/firewall/reverse proxy)Azure Web Application Firewall / Azure Front Door logsAWS WAF / CloudFront logs (via CEF forwarder)

Required Tables

CommonSecurityLog

False Positives & Tuning

  • Authorized vulnerability management scans (Nessus, Qualys, Tenable, Rapid7 InsightVM) from documented internal or contracted scanner IP ranges — maintain a scanner IP allowlist and suppress on SourceIP
  • Search engine crawlers and legitimate bots (Googlebot, Bingbot) can generate high-uniqueness URI patterns during a full site crawl — filter on known crawler IP ranges/ASNs and well-formed robots.txt-compliant User-Agents
  • Approved bug bounty program researchers or contracted penetration testers actively enumerating the application surface during a scoped engagement window
  • Load testing or synthetic monitoring tools (e.g., k6, Gatling, Pingdom, Datadog Synthetics) generating high request volume against many endpoints from a known source
  • API clients or SDKs with pagination bugs that retry many distinct resource IDs in a short window, resembling breadth-based scanning without malicious intent

Other platforms for THREAT-Recon-ExternalVulnScannerBurstDetection


Testing Methodology

Validate this detection against 2 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Simulate External Burst Scan Against a Web Endpoint with ffuf

    Expected signal: WAF/reverse-proxy access log entries showing 60 requests from the local test source in a short window, each with a distinct URI path (/test-path-1 through /test-path-60) and query parameter. If a firewall/CEF-normalized log pipeline is present, this appears as CommonSecurityLog entries with a shared SourceIP and high UniqueUris count within the burst window.

  2. Test 2Simulate Multi-Port Sweep Against a Single External-Facing Host

    Expected signal: Firewall/NetFlow connection logs showing a burst of connection attempts from the source IP to 12 distinct destination ports on the target host within seconds. Sysmon Event ID 3 (Network Connection) on the target if endpoint monitoring is present.

Unlock playbooks & atomic tests with Pro

Get the full detection package for THREAT-Recon-ExternalVulnScannerBurstDetection — response playbook and atomic red team tests, plus investigation guidance and hunting queries.

df00tech Pro — £29/user/month

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections