Linux за българи: Форуми

Сигурност => Системна Сигурност => Темата е започната от: dejuren в Aug 27, 2011, 18:53



Титла: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: dejuren в Aug 27, 2011, 18:53
В http-сървъра Apache е нaмерена ($2) опасна уязвимост, позволяваща предизвикването на  отказ от обслужване через изчерпване на цялата достъпна памет. Опасността от уязвимостта се задълбочава от това, че за нея е достъпен готов експлоит, позволяващ атакa от една машина с генерация на минимален трафик. При отсътствие на отделни лимити за размера на отделената от Apache памет след изпълнение на експлоита следва пълно изчерпване на паметта с вход в безкрайно свoпиране без възможност за достъп до конзола.

Проблемът е предизвикан от грешка ($2) в реализацията на поддръжката на зареждането на части от файла в указан диапазон (например, след прекъсване на съединение може да се извика зареждане от определена позиция). Грешката е свързана с това, че при обработка на заявка, съдържаща голямо число диапазони (например, "Range:bytes=0-,5-1,5-2,5-3,...,5-1000") в съчетание с използване на gzip-компресия на върнатия резултат се изразходва твърде много памет. Например, ако в заглавната част Range се предадат 1000 диапазона, то Apache се опитва отделно да компресира всеки диапазон. Всяка операция компресия изисква много памет (дори за компресиране на един байт се отделя буфер за компресия на блока), в резултат е лесно да се изчерпи цялата налична памет. За успешна атака е достатъчно изпращането на около 50 подобни заявки със съставен Range на сървър.

Проблемът присъства в Apache 2.2.x, включително и последния релиз 2.2.19. Поправка засега е достъпна във вид на пач ($2). Има и няколко способа за временна защита, не изискващи прекомпилация на Apache. Например може принудително да се почиства ($2) заглавната част Range с помощта на mod_header ("RequestHeader unset Range" и "RequestHeader unset Request-Range") или да се блокират ($2) дълги последователности Range через mod_rewrite:

Код:

   # Вариант 1:
   RewriteEngine On
   RewriteCond %{HTTP:Range} bytes=0-[0-9]+, [NC,OR]
   RewriteCond %{HTTP:Range} bytes=([0-9-],){4,} [NC,OR]
   RewriteCond %{HTTP:Range} bytes=[0-9,-]+,0-(,|$) [NC]
   RewriteRule .? http://%{SERVER_NAME}/ [NS,L,F]

   # Вариант 2:
   RewriteEngine On
   RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC]
   RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(\s*,\s*[0-9]*-[0-9]*)+
   RewriteRule .* - [F]

   # Вариант 3:
   RewriteEngine On
   RewriteCond %{HTTP:Range} bytes=0-.* [NC]
   RewriteRule .? http://%{SERVER_NAME}/ [R=302,L]



Интересно е, че теоретическата възможност за подобна атака известния полски експерт по компютърна безопасност работещ в Google Михал Залевски (Michal Zalewski),  е съобщил ($2) още преди 4 години, но проблемът по някакви причини не е бил приет сериозно и поправки не са били внесени.

Разработчиците на  Apache публикуваха ($2) официален отчет за уязвимостта, в който посочват, че в мрежата е регистрирана вълна DoS-атаки, базирани на тази уязвимост. Обновяване за Apache 2.0.x 2.2.x се планира да бъде пуснато в течение  на 48 часа, следователно трябва да бъде достъпно в рамките на следващите няколко часа. Клонът Apache 1.3.x също е уязвим за проблема, но обновление за него няма да се прави, тъй като поддръжката му е прекратена. На администраторите се препоръчва срочно да приложат посочените по-долу обходни методи за защита.

Забележка: Уязвимостта също може да се експлoатира ($2) чрез хедър 'Request-Range', затова приведените методи за защита са неефективни (трябва да се добави в конфигурацията "RequestHeader unset Request-Range" за блокиране на работата на устарелия хедър Reqest-Range, исползван само в Netscape Navigator 2-3 и MSIE 3).


  • Исползване на SetEnvIf за Apache 2.0 и 2.2:
Код:
  # Премахваме заглавната част Range, ако в нея има повече от 5 диапазона
  SetEnvIf Range (?:,.*?){5,5} bad-range=1
  RequestHeader unset Range env=bad-range
  RequestHeader unset Request-Range
  # добавяме в лог за опитите за атака
  CustomLog logs/range-CVE-2011-3192.log common env=bad-range

  • Исползване на mod_rewrite за Apache 1.3 и 2.x:
Код:
   RewriteEngine on
   RewriteCond %{HTTP:range} !(bytes=[^,]+(,[^,]+){0,4}$|^$)
   RewriteRule .* - [F]
   RequestHeader unset Request-Range
  • Ограничение на максималния размер на поле чрез директивата "http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize>LimitRequestFieldSize 200", където 200 е размера на параметрите в байтове. Внимание, този параметър действа за всички полета, което може да доведе до проблеми, например при исползване на големи cookie.
  • Исползване на mod_headers за пълна забрана на заглавния Range - "RequestHeader unset Range". Този метод може да доведе до неработоспособност на някои приложениякато програми за зареждане на файлове, PDF и плейери на поточно видео;
  • Исползване на специален модул mod_rangecnt ($2) (готови сборки ($2) за някои редки платформи), контролиращ числото диапазони във директивата Range.

Update: Обновлението 2.2.20 е достъпно ($2)


Титла: Re: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: edmon в Aug 27, 2011, 23:28
Код:
#Apache httpd Remote Denial of Service (memory exhaustion)
#By Kingcope
#Year 2011
#
# Will result in swapping memory to filesystem on the remote side
# plus killing of processes when running out of swap space.
# Remote System becomes unstable.
#

Тва го пробвах върху няколко АПАЧА и не ги бутна!!


Титла: Re: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: sickmind в Aug 28, 2011, 16:05
Хммм.... странно!!
имаш ли инсталиран пакета: libparallel-forkmanager-perl
аз го пробвах срещу дебиан стейбъл, апачето започна да използва всички процесори след по малко от 5 секунди, а след десетина започна да пълни swap'a много бързо!


usage: perl killapache.pl <host> [numforks]
example: perl killapache.pl www.example.com 50

едит: ако искаш дай си IP адрес'а и кажи в колко часа да го пусна, ти само наблюдавай машината ;)

edit2: пробвах го срещу убунту - отново успех, не зная коя версия е apache'то защото не е моя машината но утре ще питам :Р


Титла: Re: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: b2l в Aug 28, 2011, 16:16
Disable mod_deflate, add LimitRequestFieldSize 1024 in apache.conf.


Титла: Re: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: n00b в Aug 29, 2011, 02:05
Това с полетата 1024 може да създаде проблем ако приложение използва повече и по-дълги cookies.


Титла: Re: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: sickmind в Aug 29, 2011, 09:16
Аз си реших проблема с метода SetEnvIf


Титла: Re: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: gat3way в Aug 29, 2011, 10:17
Те дългите cookies винаги са били проблем, защото apache така или иначе има лимит на request size-а. Едно време беше модерно да се гавриш с хората като си правиш killer hyperlink към сайт с някаква XSS уязвимост през GET параметър. Примерно новинарски сайт - пращаш на някой познат уж някаква новина, и когато той го отвори, javascript кода сетва едно cookie с огромен lifetime и дължина няколко хиляди байта - повече въпросният сайт няма отваряне докато не си изчистиш cookie-тата. Като го отвориш излиза някаква apache грешка. Ей такива простотии.


Титла: Re: Сериозна DoS-уязвимост в HTTP-сървъра Apache (CVE-2011-3192)
Публикувано от: b2l в Aug 30, 2011, 17:03
От снощи debian реши проблема като качи update-ти за апача, в който проблема е фикснат.