Jedno zapytanie może zawiesić serwer z PHP, ASP.NET-em, Javą, Pythonem czy Ruby na kilka godzin
Podczas ostatniego Chaos Communication Congress hakerzy rozmawiali nie tylko o budowie sieci własnych satelitów. W trakcie innej, nie mniej ciekawej prezentacji, Alexander Klink i Julian Wälde pokazali jak za pomocą odpowiedniego zapytania zawiesić dowolną stronę internetową.
Pomysł na przeprowadzenie ataku zrodził się w pokoju widocznym na poniższym zdjęciu. Siedząc na kanapach, paląc fajkę wodną i pijąc piwo oraz inne, bliżej nieokreślone napoje, hakerzy doprowadzili się do stanu, w którym ich efektywność wyszła poza skalę.
Wtedy właśnie powstała metoda ataku na webserwery, polegająca na zastosowaniu zapytania POST, zawierającego wiele parametrów. Większość języków programowania stara się stworzyć na ich podstawie tablicę mieszającą (potocznie „haszującą”). Jednak ponieważ parametry mają konfliktujące ze sobą nazwy, to złożoność procesu szybko rośnie, osiągając katastrofalne O(n^2). Oznacza to, że duża liczba konfliktujących parametrów może spowodować, że serwer będzie zajęty ich umieszczeniem w tablicy nawet przez kilka dobrych godzin.
Dla przykładu badacze podają, że 200 tysięcy kolidujących parametrów po 10 bajtów każdy daje 2 MB danych, wymagając 40 miliardów porównań tekstów i zajmuje procesorowi o taktowaniu 1Ghz przynajmniej 40 sekund.
Teoretycznie, przy większej liczbie parametrów, serwer może być zawieszony nawet na 288 minut (8 MB POST). Najbardziej narażone są na to serwery skonfigurowane z wysokimi parametrami post_max_size i max_input_time, czyli służące do wgrywania filmów czy zdjęć, gdzie ustawia się je zazwyczaj wyżej niż w typowej stronie, gdzie wynoszą odpowiednio 8 MB i 60 sekund.
Na atak narażone są wszystkie serwery Apache zaopatrzone w PHP 5 o rewizji mniejszej niż 321040 oraz niektóre serwery z PHP 4. Administratorzy IIS-a też nie mają powodów do radości. Na atak podatne jest również ASP.NET. IIS ogranicza czas wykonywania kodu przeważnie do 90 sekund. Jednak jeśli parametr został zmieniony, to czas zablokowania procesu może wynosić nawet 650 minut.
Problem dotyczy też Apache Tomcata i Geronimo, Jetty, Oracle Glassfisha, oraz innych serwerów na bazie Javy, Pythona, .NET Frameworka, Ruby i V8.
Jak się zabezpieczyć?
Rozwiązań problemu jest kilka. Po pierwsze można zastosować obejścia, takie jak obniżenie wielkości paczki POST, albo zmniejszenie czasu wykonywania kodu. Jednak nie zawsze jest to możliwe. Twórcy oprogramowania będą musieli poświęcić trochę czasu na naprawę błędu w kodzie haszowania. Póki co niektórzy wdrażają obejścia problemu.
W rewizji PHP 5.4.0 dodano parametr max_input_vars pozwalający ograniczyć liczbę parametrów POST. Domyślna wartość to tysiąc. Tomcat w wersji 7.0.23 i 6.0.35 z kolei domyślnie ogranicza liczbę parametrów do 10 tysięcy. Z kolei Microsoft opublikował porady dla użytkowników swoich technologii.
W najlepszej sytuacji są użytkownicy CRuby 1.9 i Perla, które korzystają już z losowych funkcji haszujących, uniemożliwiających atak i są definitywnym rozwiązaniem problemu.
Więcej znajdziecie w dokumencie przygotowanym przez Aleksandra Klinke i Juliana Wälde.
źródło: arstechnica.com, infoq.com, ccc.de
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Nazwa padła ofiarą szantażystów, inni polscy hosterzy też zagrożeni?
19
Premiera Diablo 3 wzbudziła dyskusję na temat gier, które zawsze chcą być online
19
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Nowy problem z Windows 8: bootuje się za szybko
10
Amerykańscy rodzice straszeni „e-narkotykami” dostępnymi w Sieci
21
Z okazji wypuszczenia akcji Facebooka przypomnijmy sobie, kim jest Zuckerberg
10
Blueseed: libertariańska sztuczna wyspa przyciągnęła już ponad sto startupów z całego świata
8
Rewolucja w Firefoksie, nowa łatka czterokrotnie ograniczyła zużycie pamięci
20
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
CVDazzle: makijaż jest w stanie pokonać automatyczne systemy ulicznego monitoringu
3
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Co czeka programistów po czterdziestce?
27
Ubuntu 12.04 LTS już dostępny: stabilna dystrybucja na następne pięć lat?
28
Społeczność
stop_gupota "Fanatyczny" Diablo 3 jest dopiero od 10 dni.
Mas Ciekawa informacja, ale akurat projekt wytopu stali przez chłopów to był...
_Igancio Poziom artykułu jest bardzo niski ! Niczego się nie dowiedziałem , wygląda...
voluu A ja mam problem. MIanowicie, po dodaniu kodu z tego poradnika miniaturki...
Sebek Pozycjonowanie stron za pośrednictwem firm oferujących
swoje usługi nie...
asdosad jak to zrobić na xp??
lol Jak ktoś tu wcześniej zauważył - artykuł jest o niczym, a właściwie ukrytą...
- Najdmen.pl: Konta www z wyłączonym licznikiem transferu od IONIC.pl (1)
- 2BE.PL: [Oferta] Promocja jak złoto w 2BE.PL (1)
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |











#1 niezalogowany i nieanonimowy 2012-01-04 15:19:49 0
IP: 83.19.12.[...] Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
#2 Ole 2012-01-04 15:54:59 0
IP: 82.177.76.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
#3 phpowiec 2012-01-04 17:27:35 0
IP: 95.108.73.[...] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
#4 mateooo 2012-01-05 12:21:04 0
IP: 31.6.128.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.26 Safari/535.11
#5 ToJa 2012-01-05 16:46:42 0
IP: 89.68.147.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
#6 hipertracker® 2012-01-09 09:08:25 0
IP: 109.77.130.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1