Reflection Amplification
Adversaries may attempt to cause a denial of service (DoS) by reflecting a high-volume of network traffic to a target using third-party server intermediaries (reflectors). The attacker sends UDP packets to publicly accessible servers with the victim's spoofed source IP address, causing those servers to direct large responses at the victim. This technique exploits protocols whose responses are significantly larger than requests — known as amplification. Prominent amplification vectors include DNS (ANY queries, amplification factor ~28–54x), NTP (monlist command, up to 700x), memcached UDP (up to 51,200x), SSDP (up to 30x), CLDAP/LDAP (up to 70x), and CharGen (up to 358x). Because UDP allows source IP spoofing without a three-way handshake, attackers can direct enormous response volumes at a victim with minimal bandwidth cost. Multiple compromised systems (botnets) are commonly used to multiply the effect. Impacts include network link saturation, upstream provider congestion, and complete unavailability of internet-facing services.
let AmplificationPorts = dynamic([53, 123, 11211, 1900, 389, 5353, 161, 19, 5683, 1434, 17, 520, 1194]);
let SamplingWindow = 5m;
let InboundFloodThreshold = 500;
let UniqueSourceThreshold = 25;
// Part 1: Victim-side detection — inbound flood from reflectors (CommonSecurityLog / firewall)
// Reflectors respond FROM amplification service ports TO the spoofed victim IP
let InboundFlood =
CommonSecurityLog
| where TimeGenerated > ago(1h)
| where Protocol =~ "UDP"
| where SourcePort in (AmplificationPorts)
| summarize
ConnectionCount = count(),
UniqueSourceIPs = dcount(SourceIP),
TotalBytesReceived = sum(ReceivedBytes),
AmplificationPortsSeen = make_set(SourcePort, 10),
SampleSourceIPs = make_set(SourceIP, 5)
by DestinationIP, bin(TimeGenerated, SamplingWindow)
| where ConnectionCount > InboundFloodThreshold or UniqueSourceIPs > UniqueSourceThreshold
| extend
DetectionType = "Inbound Reflection Flood (Victim)",
AttackType = case(
AmplificationPortsSeen has "53", "DNS Amplification",
AmplificationPortsSeen has "123", "NTP Amplification",
AmplificationPortsSeen has "11211", "Memcached Amplification",
AmplificationPortsSeen has "1900", "SSDP Amplification",
AmplificationPortsSeen has "389", "CLDAP Amplification",
AmplificationPortsSeen has "1434", "MSSQL/SSDP Amplification",
AmplificationPortsSeen has "161", "SNMP Amplification",
AmplificationPortsSeen has "5683", "CoAP Amplification",
AmplificationPortsSeen has "17", "CharGen Amplification",
"Generic Reflection Amplification"
),
GbReceived = round(toreal(TotalBytesReceived) / 1073741824.0, 3)
| project TimeGenerated, AffectedIP = DestinationIP, AttackType, DetectionType, ConnectionCount, UniqueSourceIPs, GbReceived, AmplificationPortsSeen, SampleSourceIPs;
// Part 2: Attacker/Bot-side detection — endpoint making high-volume outbound UDP to many amplification-port IPs
// This catches compromised hosts participating in a DDoS botnet
let OutboundAttack =
DeviceNetworkEvents
| where Timestamp > ago(1h)
| where Protocol =~ "Udp"
| where RemotePort in (AmplificationPorts)
| where RemoteIPType == "Public"
| summarize
ConnectionCount = count(),
UniqueDestinations = dcount(RemoteIP),
PortsTargeted = make_set(RemotePort, 10),
SampleDestIPs = make_set(RemoteIP, 5)
by DeviceName, LocalIP, InitiatingProcessFileName, bin(Timestamp, SamplingWindow)
| where UniqueDestinations > 50 or ConnectionCount > 1000
| extend
DetectionType = "Outbound to Amplifiers (Bot/Attacker)",
AttackType = case(
PortsTargeted has "53", "DNS Amplification Sender",
PortsTargeted has "123", "NTP Amplification Sender",
PortsTargeted has "11211", "Memcached Amplification Sender",
PortsTargeted has "1900", "SSDP Amplification Sender",
PortsTargeted has "389", "CLDAP Amplification Sender",
"Generic Amplification Sender"
),
GbReceived = 0.0
| project
TimeGenerated = Timestamp,
AffectedIP = LocalIP,
AttackType,
DetectionType,
ConnectionCount,
UniqueSourceIPs = UniqueDestinations,
GbReceived,
AmplificationPortsSeen = PortsTargeted,
SampleSourceIPs = SampleDestIPs;
InboundFlood
| union OutboundAttack
| sort by ConnectionCount desc Data Sources
Required Tables
False Positives
- Legitimate high-traffic DNS or NTP servers receiving large volumes of resolution requests from many clients — an authoritative DNS server may see hundreds of unique source IPs per minute normally
- CDN or load balancer nodes that legitimately receive high UDP traffic volumes from distributed clients
- Network scanning tools (nmap, masscan) running authorized reconnaissance that contact many amplification-port hosts in bulk
- Misconfigured or chatty IoT devices sending repeated SSDP or mDNS discovery packets that aggregate to threshold levels
- Cloud environments during peak load where auto-scaling triggers many simultaneous DNS lookups from newly spawned instances
References (13)
- https://attack.mitre.org/techniques/T1498/002/
- https://www.cloudflare.com/learning/ddos/dns-amplification-ddos-attack/
- https://www.cloudflare.com/learning/ddos/ntp-amplification-ddos-attack/
- https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/
- https://blog.cloudflare.com/reflections-on-reflections/
- https://pages.arbornetworks.com/rs/082-KNA-087/images/13th_Worldwide_Infrastructure_Security_Report.pdf
- https://www.cisa.gov/sites/default/files/publications/understanding-and-responding-to-ddos-attacks_508c.pdf
- https://learn.microsoft.com/en-us/azure/ddos-protection/ddos-protection-overview
- https://learn.microsoft.com/en-us/azure/network-watcher/nsg-flow-logs-overview
- https://docs.splunk.com/Documentation/StreamApp/latest/DeployStreamApp/AboutSplunkStream
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1498.002/T1498.002.md
- https://www.rfc-editor.org/rfc/rfc2827
- https://nvd.nist.gov/vuln/detail/CVE-2013-5211
Unlock Pro Content
Get the full detection package for T1498.002 including response playbook, investigation guide, and atomic red team tests.