Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Голосование

    Какую CMS Вы предпочитаете

    AtomX
    Fapos CMS
    Drunya CMS
Последние комментарии
Автор: чайник, в новости:

Что такое API и для чего они нужны

Автор: HIshnik, в новости:

Классы в PHP для чайников

Автор: Аноним, в новости:

Написание простого вируса в блокноте

Автор: stream, в новости:

Создаем BB коды на PHP

Топ пользователей
Drunya
Репутация: 108
Сообщений: 3527
Сашка_из_Шебекино
Репутация: 87
Сообщений: 1803
boriska
Репутация: 65
Сообщений: 846
ARMI
Репутация: 46
Сообщений: 1858
BAH0
Репутация: 26
Сообщений: 544
Убийца Apache у вас на пороге

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

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

Code:
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 подошли к этой проблеме серьёзно, инициативные лица уже предложили изменения в RFC, закрывающие эту уязвимостью. Тем временем все сервера стоят открыты и не защищены.

Как же быть?

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

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

Code:
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

Если же вам всё-таки нужен этот заголовок, существует решение на основе mod_rewrite и ещё несколько более сложных с mod_headers.
Убийца Apache у вас на пороге

Источник: habrahabr.ru
Автор: Сашка_из_Шебекино
Категория: Разное
Просмотров: 7547
Комментариев: 4

Комментарии
  • User avatar

    Сашка_из_Шебекино

    Длительные последовательности Range можно блокировать через .htaccess

    http://habrahabr.ru/blogs/infosecurity/127029/#comment_4191083
    Дата отправления: 26 Авг 2011
  • User avatar

    УмНиК

    Если запретить заголовок proxy_set_header Range ""; тогда никак будет с сайта докачивать.
    Дата отправления: 26 Авг 2011
  • User avatar

    Drunya

    Где то я уже об этом читал) Тупо очень тупо. Серьезная софтина, а такая беспонтовая дыра. 0_о
    Дата отправления: 26 Авг 2011
  • User avatar

    Сашка_из_Шебекино

    Результат запуска скрипта на localhost

    Оба процессора по 99%
    Примерно 900мб памяти
    Апаху требуется 6.15 секунд для рендера страницы с фапосом
    Дата отправления: 25 Авг 2011
Категории:
Сейчас online: 25. Зарегистрированных: 1. Гостей: 24.
-->