T1499.003

Application Exhaustion Flood

Adversaries may target resource-intensive features of web applications to cause a denial of service (DoS), denying availability to those applications. Unlike volumetric network-layer floods, application exhaustion attacks focus on Layer 7 features that consume disproportionate server resources per request — such as search functions, complex database queries, authentication endpoints, report generation, GraphQL resolvers, XML/SOAP processing, or file conversion operations. By repeatedly invoking these expensive operations, adversaries can exhaust CPU cycles, memory, database connection pools, or thread pools with relatively low request volumes, making the attack harder to distinguish from legitimate traffic spikes and more difficult to block at the network layer without application-aware controls.

Microsoft Sentinel / Defender
kusto
let TimeWindow = 5m;
let SingleIPThreshold = 300;
let AvgResponseThreshold = 5000;
let ResourceIntensiveEndpoints = dynamic([
    "/search", "/query", "/find", "/api/search", "/api/query",
    "/report", "/export", "/download", "/generate", "/convert",
    "/login", "/authenticate", "/auth", "/oauth", "/signin",
    "/graphql", "/api/graphql", "/api/v",
    "/wp-login.php", "/xmlrpc.php", "/wp-admin",
    "/rest/api", "/odata"
]);
W3CIISLog
| where TimeGenerated > ago(1h)
| where csUriStem has_any (ResourceIntensiveEndpoints) or TimeTaken > 5000
| summarize
    RequestCount = count(),
    AvgTimeTaken = avg(TimeTaken),
    MaxTimeTaken = max(TimeTaken),
    P95TimeTaken = percentile(TimeTaken, 95),
    UniqueEndpoints = dcount(csUriStem),
    StatusCodes = make_set(scStatus),
    Endpoints = make_set(csUriStem, 10),
    ServerErrorCount = countif(scStatus >= 500),
    RateLimitedCount = countif(scStatus == 429)
    by bin(TimeGenerated, TimeWindow), cIP, csHost
| where RequestCount > SingleIPThreshold
    or (AvgTimeTaken > AvgResponseThreshold and RequestCount > 50)
    or RateLimitedCount > 10
| extend IsHighRateFlood = RequestCount > SingleIPThreshold
| extend IsSlowExhaustion = AvgTimeTaken > AvgResponseThreshold
| extend ErrorRate = round(1.0 * ServerErrorCount / RequestCount, 2)
| extend ThreatScore = case(
    RequestCount > 1000 and AvgTimeTaken > 10000, 3,
    RequestCount > 500 or AvgTimeTaken > 8000, 2,
    1)
| project TimeGenerated, SourceIP = cIP, Host = csHost, RequestCount,
    AvgResponseMs = AvgTimeTaken, MaxResponseMs = MaxTimeTaken, P95ResponseMs = P95TimeTaken,
    UniqueEndpoints, StatusCodes, Endpoints, ServerErrorCount, RateLimitedCount,
    ErrorRate, IsHighRateFlood, IsSlowExhaustion, ThreatScore
| sort by ThreatScore desc, RequestCount desc
high severity medium confidence

Data Sources

Network Traffic: Network Traffic Flow Application Log: Application Log Content IIS Web Server Logs — W3CIISLog (Microsoft Sentinel)

Required Tables

W3CIISLog

False Positives

  • Legitimate high-traffic events such as product launches, marketing campaigns, or viral content causing genuine user spikes to search or landing pages
  • Authorized security scanning tools (Qualys, Tenable Nessus, OWASP ZAP) running web application vulnerability assessments that hammer form and API endpoints
  • Load testing tools (Apache JMeter, Gatling, Locust, k6) executing authorized performance tests against production or staging environments
  • Legitimate API clients or integration partners with high-frequency polling or batch processing workloads making hundreds of requests per minute
  • Search engine crawlers (Googlebot, Bingbot, Slurp) aggressively indexing resource-intensive dynamic pages or paginated search results

Unlock Pro Content

Get the full detection package for T1499.003 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections