Убийца Apache у вас на пороге

confguru

ExAdmin
Команда форума
Буквально пять дней назад в листе рассылки Full Disclosure появился скрипт, по заявлению автора, убивающий Apache начиная от самых старых версий до самых новых.

И он действительно работает. Скрипт killapache.pl запускает в несколько десятков потоков простой запроc:

HEAD / HTTP/1.1
Host: www.example.com
Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,<...>,5-1299,5-1300
Accept-Encoding: gzip
Connection: close

В ответ на такой запрос Apache для подсчета Content-Length собирает в памяти длинный ответ из перекрывающихся кусков запрошенного файла, который может занять и занимает заначительный объём памяти. При этом потребление памяти Apache начинает резко расти, как на том графике в начале, что при должном, совсем небольшом, количестве запросов приводит к DoS даже на приличных серверах.


Как же быть?

Если у вас перед Apache стоит nginx, то можно вообще ничего не делать, даже если файлы, для которых возможны описанные выше запросы, не раздаёт nginx, потому как по-умолчанию, по крайней мере на версии 1.1.0, nginx не передаёт загловок Range на проксируемый сервер.

Проверить, уязвим ли ваш сервер к этой атаке легко:

curl -I -H "Range: bytes=0-1,0-2" -s www.example.com/robots.txt | grep Partial

Если на такие запросы отвечает Apache и вы видите 206 Partial Content, значит быть беде.

Запретить nginx проксировать опасный заголовок можно директивой:

proxy_set_header Range "";

Если нет nginx?

Если у вас во внешний мир Apache смотрит напрямую… Вы можете полностью заблокировать проблемный заголовок при помощи mod_headers:

# a2enmod headers
RequestHeader unset Range

Источник
http://habrahabr.ru/blogs/infosecurity/127029/
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
голый апач кладется и без этого - просто открываются соединения в несколько десятков потоков, шлется хедер GET / HTTP/1.1 и соединение держится открытым сколько возможно
по таймауту апач, конечно, сбрасывает соединение, но его опять можно открыть

так можно занять все 30-50 процессов апача, очередь забивается и сервер перестает отвечать, а в логах пусто
 

MiksIr

miksir@home:~$
Ага, а если стоит лимит на коннекты с одного IP - то нужно еще найти несколько источников для потоков, и потихоньку придем к банальному ддосу. А тут проблема в том, как я понимаю, что апач отжирает память и вежливо киляется операционной системой. Профит.
 

Lirik

Новичок
Что-то как-то не впечатлило, все равно как описали grigori и MiksIr это обходится
 

MiksIr

miksir@home:~$
Полагаю, что прокси ждут полный запрос, так что не покатит. Равно как, к примеру, анач на фре со включенным accept фильтром. slow-post - возможно, но нужно смотреть, как прокя ведет себя на посте - прозрачно, или принимает, сначала, полностью. И причем тут логи вообще? Ограничение на количество коннектов с IP не на основе логов работает.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
MiksIr хватит уже, сначала изучи матчасть

логи при том, что найти причину админ может только просматривая тайминги открытых соединений в фаерволе или роутере, больше нигде информации не будет
апач не пишет лог запросов, которые не были закончены, и увидеть атаку по логам просто негде

впрочем, все это старо как сам апач
 

MiksIr

miksir@home:~$
Найдите хотя бы пару десятков рабочих проксей "в гугле" с поддержкой CONNECT для начала. Прокси вообще не метод. Есть другие, гораздо более эффективные.
Все эти "старые как апач" проблемы известны, и давно фиксятся или на фаирволе (httpready) или на апаче модулями против slow post атаки. Именно потому, что старо.
Я так же не понял, почему апач не запишет в логи соединение, которое закроется по таймауту, но видимо вам виднее.
 

fixxxer

К.О.
Партнер клуба
grigori

не. эта штучка куда интереснее слоулориса. если на апачевый процесс не настроены лимиты, то он легко входит в практически бесконечный цикл с постоянным выделением памяти. даже с локальной консоли сделать что-то затруднительно, по сети то вообще до свидания.

только дергать надо именно статику, и не head, а get. у меня сраной сотней запросов положило. ;)
 

Активист

Активист
Команда форума
Этот DDos отличается тем, что ложит нахер с одного компа все, проверил у кого апаче, или апача на другом порте (проксирование nginx) и закрытый порт, или вообще через залитый PHP скрипт, за 5-10 секунд сервер в дауне, если еще количество форков увеличить.

Смысл тот же, как ложить ресайзом через PHP кучей файлов, память кончается, начинает своп диска, при начале активного юзания свапа вся система ловинообразно виснет, за счет резкого снижения производительности и дикого прироста LA ждать "отвисания" надо долго.

DDoS можно организовать и через бекпорты, там гед проксирование nginx. Уязвимость зверская хорошая )))

А представте, что этот PHP скрипт запушен локально и залит через дырку, работает постоянно, т.е., при появлении какого-либо процессорного времени он тут же его сьедает. за счет apache, apache будет сам себя уничтожать)) Ух развлекуха.
 
Сверху