Apache DDoS támadás megállítása

Apache DDoS támadás megállítása

Számtalan módszert használnak Apache webszerver elleni DDoS támadásra, ezek kivédésére egy általánosan használható módszeren és egy konkrét példán keresztül ismertetnénk a slowloris támadás egy lehetséges kivédését a saját rendszerünkben.

A slowloris DDoS támadás

A slowloris DDoS (Distributed Denial of Service attack) támadás lényege, hogy HTTP kérésekkel bombázzák a szervert, esetlegesen SSLStrip kérésekkel kombinálva. A támadás hatására a szerver kapcsolatok nyitott állapotban maradnak, a több irányú kapcsolat hatására elfogynak a kiszolgáló szálak, így a valódi kapcsolatok elutasításra kerülnek. Kompromittált botnet-eket, proxy szervereket használnak a többszálú támadásra, így nagyon sok IP címről, időközönként visszatérve, a böngészőben való újratöltést szimulálva működnek.

Mi a lassú DoS támadás működése

A lassú DoS (Denial of Service attak) támadás, más néven a Slowloris támadás során HTTP GET, vagy POST kérésekkel bombázzák a webszervert, hogy lefoglalják az összes rendelkezésre álló kapcsolatát.

A lassú HTTP DoS támadás kihasználja, a thread-bázisú webszerverek sérülékenységét, hogy fogadnia kell a teljes fejlécet a kapcsolat létesítéséhez. Néhány thread-alapú webszerver, mint pl. az apache timeout is van a HTTP kérések küldésére. Amennyiben ezt – az alap 300s – timeoutot meghaladó kérés esetén a kliensnek újra kell küldenie az adatokat.

Ezen helyzet kihasználhatósága abban rejlik, hogy a rosszindulatú felhasználó több, számos kapcsolat nyit és a korábbiakat nem zárja le. Mivel ez a HTTP kapcsolat nyitott marad, így lehetőség nyílik a szerver felé hamis adatok küldésére és ez addig tarthat, amíg a felhasználó le nem zárja a kapcsolatot. Amennyiben ezen kapcsolatok számával képes a teljes rendelkezésre álló kapcsolati lehetőség elhasználni és ezt fenntartani, a szerver új kapcsolatokat nem képes fogadni, tehát teljesül a szolgáltatás megtagadás.

Ez lehetővé teszi a támadó számára, hogy korlátozza a webszerverhez való hozzáférést.

Védelem slowloris DDoS támadás ellen

Példa egy slowloris DDoS támadásra

examplec.com:80 182.186.210.137 - - [11/Dec/2013:17:52:53 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 190.237.61.107 - - [11/Dec/2013:17:52:58 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 182.15.160.42 - - [11/Dec/2013:17:53:00 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 181.209.150.38 - - [11/Dec/2013:17:53:04 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 39.53.196.60 - - [11/Dec/2013:17:53:04 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 190.56.254.24 - - [11/Dec/2013:17:53:06 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 46.34.190.27 - - [11/Dec/2013:17:53:06 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 95.35.61.180 - - [11/Dec/2013:17:53:08 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 181.135.151.95 - - [11/Dec/2013:17:53:08 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 181.65.159.93 - - [11/Dec/2013:17:53:09 +0100] "POST / HTTP/1.0" 200 12468 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 2.187.65.168 - - [11/Dec/2013:17:53:10 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 183.177.125.73 - - [11/Dec/2013:17:53:11 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 190.152.202.52 - - [11/Dec/2013:17:53:11 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 200.28.79.32 - - [11/Dec/2013:17:53:12 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 2.186.215.186 - - [11/Dec/2013:17:53:12 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 151.250.236.98 - - [11/Dec/2013:17:53:12 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 188.135.29.252 - - [11/Dec/2013:17:53:14 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 151.250.236.98 - - [11/Dec/2013:17:53:17 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 181.114.79.55 - - [11/Dec/2013:17:53:18 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 151.246.38.224 - - [11/Dec/2013:17:53:18 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 193.242.194.9 - - [11/Dec/2013:17:53:19 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 201.219.23.10 - - [11/Dec/2013:17:53:21 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
examplec.com:80 2.191.64.54 - - [11/Dec/2013:17:53:22 +0100] "POST / HTTP/1.1" 200 12506 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

Mint látható a fenti log részletből, az example.com webszervert (weboldalt) a 80-as porton támadnak, több IP címről, rövid időn belül több POST HTTP kérést küldve a szerver felé.

Példa a kivédésre fail2ban használatával

Az /etc/fail2ban/filter.d/apache-slowloris.conf tartalma

# Fail2Ban configuration file
# Author: Neunet 
# $Revision: 1 $
#

[Definition]
# Option:  failregex
# Notes.:  Regexp to catch spacial Apache slowloris attempts.
# Values:  TEXT
#
failregex = ^.*:80 <HOST> -.*\"(GET|POST).* "Mozilla\/4.0 \(compatible; MSIE 6.0; Windows NT 5.1; SV1\)"

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

A /etc/fail2ban/jail.conf vonatkozó tartalma

[apache-slowloris]
enabled = true
port    = http,https
filter  = apache-slowloris
logpath = /var/log/apache2/other_vhosts_access.log
maxretry = 2
bantime  = 36000

Ezen fail2ban konfigurációk segítségével biztosíthatjuk, hogy az adott failregex találatok esetén látható IP címek, amennyiben a alap 60s-on belül 2x érkezik akkor az adott IP címet 36000s időtartamra iptables segítségével tiltsunk ki.

Ez természetesen egy egyedi támadásra lehet megoldás, hosszú távon más, hatásosabb megoldást kell találnunk.

Védelem slowloris DDoS támadás ellen apache modulok

Számos megoldás létezik a lassú HTTP támadás megelőzésére és kivédésére, vagy a hatásának a csökkentésére. Lehetséges a terhelés szabályozók (Load Balancer) és tűzfal megoldásokkal (pl. iptables) is csökkenteni az ilyen DoS támadások hatását. Most az Apache webszerver modul három megoldását sorolnánk csak röviden fel:

  • mod_reqtimeout : az apache 2.2.15 óta alapból települő modul. szabályozható vele a kliens kapcsolat ideje. 408-as apache errort küld a szerver ennek túllépésekor
  • mod_qos : egy apache szolgáltatás minőségi modul, ami lehetővé tesz bizonyos ellenőrzési mechanizmusokat, amelyen keresztül priorizálni lehet a különböző HTTP  kéréseket.
  • mod_security : egy nyílt forráskódú Web Application Firewall (WAF), gyakorlatilag az apache webszerverünk elé kerülő tűzfal megoldás, amellyel képesek vagyunk szabályok összeállításával bizonyos funkciókat engedélyezni, tiltani.

 

Comments are closed.