25/8/2011
Błąd w przetwarzaniu nagłówka Range obecny w serwerach Apache 2.2.* pozwala na zdalne unieruchomienie pracy webserwera (atak DoS). Atakujący nie musi posiadać wielkiego botnetu, wystarczy jeden komputer i poniższy skrypt.
Exploit na Apache 2.2.* – Apache Killer
Skrypt z exploitem został opublikowany na liście Full Disclosure przez Kingcope’a. Atak polega na wysyłaniu do serwera zapytań z nagłówkiem Range przyjmującym więcej niż jeden zakres bajtów. Nagłówek Range pozwala pobrać konkretne wycinki pliku i służy m.in. do wznowienia przerwanych transferów danych. Jeśli jednak jednocześnie zdefiniuje się kilka nieposortowanych zakresów, żądanie przetwarzane jest w nieoptymalny sposób przez a_byternage_filter() — dla każdego zakresu tworzony jest odrębny bucket, co powoduje wyczerpanie dostępnej pamięci.Jak na razie brak oficjalnego patcha, ale istnieje obejście problemu (poza oczywiście wykrywaniem i ubijaniem żądań tego typu na IPS/IDS/WAF). Pomóc może odpowiednia konfiguracja mod_rewrite, zabraniające więcej niż jednego zakresu dla nagłówka Range.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC]
RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(\s*,\s*[0-9]*-[0-9]*)+
RewriteRule .* - [F]
Co ciekawe, zastrzeżenia do implementacji nagłówka Range już w 2007 roku miał …Michał Zalewski. Przy czym Michał zwracał wtedy uwagę na możliwość generowania olbrzymiej ilości danych (bandwidth amplification), a Kingcope wymierzył swój atak w pamięć serwera (memory corruption).
Aktualizacja 22:54
Apache opublikowało oficjalne oświadczenie zawierające opisy kilku obejść problemu.
przecież to news sprzed kilku dni…
https://niebezpiecznik.pl/post/hakin9-hacked/#comment-41943
To czesio weź i załóż blog i pisz takie newsy natychmiast po tym jak się pojawią. Nie zapomnij podać linku dodam sobie do ulubionych : ))))
memory corruption? fajnie by było
Dziwię się, że dopiero teraz stało się to publiczne – o tym exploicie było wiadomo już od 2.2.9.
Ciekawostką jest to, że niektórzy administratorzy chcąc “zwiększyć wydajność” apacza zwiększają ilość workerów. W wielu przypadkach potrafią zwiększyć go nawet do 100, mając pamięci na raptem 25.
P.S.
To ile “wakacyjnych hostinków” stoi na apache? ;-)
Pozostaje czekać na patcha bo puki co…
Reading state information… Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
…nic nie widać ;]
Niebezpiecznik działa. Skrypt najwyraźniej nie ;-)
kolo mozesz zastosowac workaroud ktore podał autor, ale pamietac trzeba ze te ustawiania mod_rewirte sa oddzielna dla kazdej wirtualki z osobna.
Żaden problem, panel administracyjny na hostingu mam swojego autorstwa, dodać parę linijek do każdej nowej i już istniejącej “vhostki” nie będzie żadnym problemem ;]
a o slowloris rsnake’a nie wspominacie?
[…] Kamil Rojewski dnia sie.25, 2011, w kategorii sieć Niebezpeicznik poinformował o wykryciu dziury w serwerze Apache 2.2 polegającym na spreparowaniu nagłówka Range zapytania, […]
Lepsze rozwiązanie z mod_headers:
SetEnvIf Range (,[^,]*){5,} bad-range=1
RequestHeader unset Range env=bad-range
Wystarczy wrzucić do httpd.conf’a -wyłączy NIEPRAWIDŁOWE Range globalnie dla wszystkich virtual hostów (dużo łatwiejsze do wdrożenia niż regułka rewrite).
@tim
Przetestowane na virtualce i sposob autora smiga, niestety Twój nie. Testowałeś to ? Wystarczyło u ciebie:
SetEnvIf Range (,[^,]*){5,} bad-range=1
RequestHeader unset Range env=bad-range
?
Ok kwestia rozwiązana. Działa doskonale, fakt, lepsze to niż wklepywanie rewritea do 150 vhostów :)
To wymaga włączonego mod_headers i śmiga dobrze – po aktywowaniu nie udało mi się zamieszczonym na stronie skryptem zabić apachego.
portaudit -Fda nic nie pokazuje. Albo nie jest to takie groźne, ale zespół od security jeszcze śpi…
Kilka oficjalnych tymczasowych rozwiązań:
http://article.gmane.org/gmane.comp.apache.announce/58
No dobrze, a czy można to wyśledzić zerkając w logi?
Z difolta nie, chyba ze logujesz naglowki. W linku Borysa masz:
Option 1: (Apache 2.0 and 2.2)
# Drop the Range header when more than 5 ranges.
# CVE-2011-3192
SetEnvIf Range (,.*?){5,} bad-range=1
RequestHeader unset Range env=bad-range
# optional logging.
CustomLog logs/range-CVE-2011-3192.log common env=bad-range
Czyli zbieramy listę hostingów i teoretycznie nawet nie trzeba się chować za proxy, czy jakimś VPNem ;)
snortowy team tez nie spi :)
http://vrt-blog.snort.org/2011/08/this-is-why-we-have-nice-things.html
Chyba nie wszystkie wersje są podatne….
Host does not seem vulnerable
próbowałem na 2.2.3, 2.2.19, 2.0.63, 2.3.13,
tylko na ostatnim udało się przeprowadzić atak…
http://lwn.net/Articles/456289/
Niestety jednak chyba wszystkie, skrypt ma problem z vhostami. ;/
No dobra ale kto dzisiaj jest na tyle pro że używa apache?=] Ciekawi mnie jakie bugi są np nginx albo litle speed
Karol! LOL! Jesteś PRO!
a kto używa cherokee i dlaczego nie? ;)
jest już łatka
[…] ma problemy, przyczyną mogą być ataki DoS (nie DDoS) na web serwer — niedawno pisaliśmy o Apache Killerze, a kilka miesięcy wcześniej o ataku […]
Podawanie danych osobowych osób które nie jako pomagają na
tej stronie mija się z celem. – nie ważne czy jest sławny, czy nie,
ale internet to nie gąbka. Niech sam decyduje czy woli być sławny i
narażać się na nadmierne zainteresowanie, czy zostać w ukryciu jak
większość szaraków.