Automatic DoS mitigation
(streaming algorithms)
Marek Majkowski
marek@cloudflare.com @majek04
Slide 2
Slide 2 text
2
Who we are
Slide 3
Slide 3 text
3
Large network
Slide 4
Slide 4 text
4
Content neutral
Slide 5
Slide 5 text
5
DoS is a problem
DoS events per day
Slide 6
Slide 6 text
6
X
example.com
Defending from DoS is hard
Slide 7
Slide 7 text
• L3 - spoofed IP packets
• source IP addresses are fake
• very large
• this is what you hear in news
• L7 - fully established TCP connections
• IP reputation is effective
7
Two DoS types
• infinite data stream on input
• approximate
11
Streaming algorithms
Streaming
algorithm
Data stream Results
Slide 12
Slide 12 text
• sflow packets samples as input
• detected attacks on output
12
Attack detection is streaming!
Streaming
algorithms
Packet samples Attacks
Slide 13
Slide 13 text
• EWMA - Exponentially weighted moving average
• Counting rates of packets
• Space saving
• Known as Top-N or Heavy Hitters
• Simplified hierarchical heavy hitters
• Hyper log log
• Cardinality estimation - Counting unique things
13
Streaming algorithms
22
Better: EWMA
old load difference
dampening
factor
measurement
frequency
half-life time
Slide 23
Slide 23 text
23
Slide 24
Slide 24 text
24
Slide 25
Slide 25 text
• Smoothed average
• The same maths as Linux "load average"
• Charges slow (half-life)
• Discharges quickly
• Can be also used to count rates of packets
25
EWMA - summary
27
The problem: Memory
pps IP
12.2M 1.2.3.4
2.4M 42.1.2.4
0.01M 2.4.3.1
0.01M 192.168.1.1
...
Slide 28
Slide 28 text
• aka: heavy hitters
• A fixed-memory data structure
• That can "count" top-N items
• think: top url's, top customer IP's, etc
• Count-Min sketch, Space Saving
28
Top-N problem
Slide 29
Slide 29 text
29
Space saving
error count key
Slide 30
Slide 30 text
30
Space saving
error count key
0 1 Alice
Alice
Slide 31
Slide 31 text
31
Space saving
error count key
0 2 Alice
Alice
Slide 32
Slide 32 text
32
Space saving
error count key
0 2 Alice
0 1 Ben
Ben
Slide 33
Slide 33 text
33
Space saving
error count key
0 2 Alice
0 1 Ben
0 1 Charlie
Charlie
Slide 34
Slide 34 text
34
Space saving
error count key
0 2 Alice
0 1 Ben
0 1 Charlie
Eric?
Slide 35
Slide 35 text
35
Space saving
error count key
0 2 Alice
0 1 Ben
0 1 Charlie
Eric?
Slide 36
Slide 36 text
36
Space saving
error count key
0 2 Alice
1 0 Eric
0 1 Charlie
+
Eric
Slide 37
Slide 37 text
37
Space saving
error count key
0 2 Alice
1 1 Eric
0 1 Charlie
Eric
Slide 38
Slide 38 text
38
Space saving
error count key
0 2 Alice
1 1 Eric
0 1 Charlie
2
Counter?
1 .. 2
1
Slide 39
Slide 39 text
39
Slide 40
Slide 40 text
What about rates?
40
• It's hard
• was: GetAll()
• now: GetAll(time.Time)
• No longer O(1)
• Instead O(log n)