ACK flood: exhausting lookups rather than memory
An ACK flood sends packets that claim to belong to conversations already in progress. The difference from a SYN flood is where the cost lands: that one fills the queue of pending connections, while this one makes every device tracking sessions search its table for one that does not exist. Nothing is allocated; the search happens anyway.
Quick facts
- Layer
- Transport (4)
- Vector
- Packets referencing sessions that were never established
- Goal
- Consume lookup capacity on anything tracking state
- In your logs
- High packet rates, no new sessions, application idle
- Does a WAF stop it?
- No. No request exists; the traffic is below that layer
The reasoning is on attack layers.
Why a lookup is a resource
Devices that track connections keep a table of active sessions. When a packet arrives claiming to be part of one, the device has to find the matching entry before it can decide anything: whether to forward the packet, whether it is in sequence, whether it belongs to a permitted flow.
That search is the cost. It happens before the device learns that the session does not exist, which means traffic referring to nothing still consumes the same work as traffic referring to something. Multiply by a sufficient packet rate and the device spends its capacity looking things up.
Three consequences follow, and they explain why this vector persists alongside better-known ones.
Defences aimed at connection setup do not apply. The mechanism that avoids allocating memory for pending connections addresses a different stage. These packets do not ask to establish anything.
The target is often not the server. Firewalls, load balancers, and address translation devices all maintain session tables, and they are frequently the component with the least headroom. The server behind them can be entirely healthy while nothing reaches it.
Bandwidth may be unremarkable. The load is packets per second rather than bits per second, which is the same distinction described on volumetric attacks: a link can look far from full while the equipment carrying it is saturated.
RST floods: the same cost, plus a second risk
The mechanism is identical, and only the second-order effect differs.
A reset tells the other side that a conversation is over. Sent in volume toward sessions that do not exist, it produces the same lookup cost as the traffic above, and the defence is the same.
The additional concern is narrower. A reset that matches an existing session closely enough will terminate it, which turns the flood into an interruption of working connections rather than only a load problem. Protocol implementations validate resets strictly for this reason, and the validation is what makes the outcome unlikely but not impossible. The practical consequences are two: long-lived connections are the ones with exposure to consider, and encrypted transports that carry their own session integrity are less affected than plain ones.
Recognising it
Three signals, and the combination is what distinguishes this from its neighbours.
Packet rate is high while bandwidth is moderate. The ratio is the signature. Many small packets, not much data.
No new sessions are being established. Unlike a connection flood, the half-open state is not filling. Unlike a genuine traffic increase, the established count does not rise either.
Load appears on network equipment rather than on the server. Processor usage climbs on the firewall or balancer, and the application behind it reports nothing unusual because nothing is arriving.
That third signal is the one that misdirects investigations. Everything on the server looks correct, which sends people looking at the application while the constraint is a device they may not administer.
Mitigation by layer
Four measures, and the order matters more here than usual.
Drop non-matching packets as early as possible. The cheapest place to discard traffic referring to no session is the furthest point upstream that can make the decision. Each device it passes pays the lookup.
Prefer filtering that does not itself keep state. As on any attack in this family, a device that must track sessions to filter has the same exhaustible resource as the one it is protecting.
Ask upstream for a packet rate limit. Because the load is measured in packets rather than bits, a limit expressed in bandwidth may not engage at all while the equipment is already saturated. The limit has to be in the right unit to help.
Terminate connections where capacity is larger. Where sessions are established at an edge, the tables and the lookups under attack belong to that edge rather than to your equipment.
What does not help: request rules and challenges, since this traffic never reaches the stage where a request exists.
Why it is often part of something larger
Rarely the whole event, and knowing that changes what you look for.
Because the technique targets a different resource from a connection flood and a different one again from a bandwidth flood, combining them is straightforward and effective: one component fills the queue, another consumes lookups, a third fills the link. Each has a different remedy, and addressing one while the others continue produces the impression that nothing worked.
The practical response is to identify which resource is actually exhausted before choosing a measure, which is the point made on DDoS attack types, and the one to return to whenever a mitigation appears to have no effect.
Where the platform sits
Bridge WAF operates on requests, which is above the layer this attack targets. What applies is termination: when sessions are established at the platform's edge, the session tables and the lookups under attack are the platform's rather than your equipment's, and your origin receives traffic that already belongs to valid sessions. Which component covers which layer is a fair question to ask any provider. See what the platform offers at Bridge CDN.
Questions
What is an ACK flood?
An attack that sends packets claiming to belong to sessions which do not exist. Every one forces the devices in the path to search their session tables before concluding there is nothing to match, and the search is the cost, whatever the answer turns out to be.
How is it different from a SYN flood?
A SYN flood fills the queue of connections awaiting completion, and the defences for it work at connection setup. An ACK flood consumes the capacity to perform lookups instead, arriving after setup would have happened, so none of those defences apply to it.
Does a WAF stop ACK floods?
No. This traffic sits below the layer at which requests exist, so there is nothing for inspection to examine. The load also tends to land in front of the application rather than on it, which is why the server can look untroubled throughout.
Why does my server look fine?
Because the cost falls on whatever tracks sessions in front of it, typically a firewall or load balancer, and very little reaches the server itself. The machine you would naturally investigate is the one part of the path that is not under pressure.
Are RST floods the same thing?
The lookup cost is the same, and resets add a second concern on top of it. A reset that matches an existing session closely enough will end that session, so alongside the exhaustion there is the possibility of legitimate connections being torn down.
Will a bandwidth limit stop it?
Not reliably, and this catches people out. The pressure here is measured in packets per second while the limit is usually expressed in bits per second, so a flood of very small packets can exhaust the lookup capacity without ever approaching the configured threshold.
Above the layer this attack targets. What applies is termination: whose session tables pay the lookups.
off
No request is inspected. This traffic sits below the stage where a request exists.
monitor
Matches are recorded on requests, which this traffic never becomes.
block
Refusal applies to requests belonging to sessions that were actually established.
The firewall layer is included with Bridge CDN. Start in monitor: nothing is refused until you decide it should be.
Get started