Information Security
23 March 2011

Атака на отказ в обслуживании методом slow HTTP POST

From Sandbox
Доброго времени суток, уважаемые хабровчане!
Я хочу рассказать вам об относительно новом и интересном, на мой взгляд, механизме атаки на отказ в обслуживании — Slow HTTP POST.
Поиск показал отсутствие на хабре информации по теме, что несколько удивило меня, и я решил восполнить это досадное упущение. Тема не нова, но, как показали мои небольшие исследования, более чем актуальна. Забегая вперед, скажу, что полученные мной результаты позволяют говорить о существовании широко доступной технологии, позволяющей с одного компьютера с небольшим каналом «укладывать» небольшие и средние сайты, а при использовании нескольких машин с повсеместно распространенным сейчас скоростным доступом в Интернет причинить немало проблем и более серьезным проектам. Всех заинтересовавшихся покорнейше прошу пожаловать под хабракат.

Теория


Как и все гениальное, технология этой атаки очень изящна и проста. Атака базируется на уязвимости в протоколе HTTP. Slow HTTP POST атака работает следующим образом: злоумышленник отправляет POST заголовок с легитимным полем «Content-Length», которое позволяет веб серверу понять, какой объём данных к нему поступает. Как только заголовок отправлен, тело POST сообщения начинает передаваться с очень медленной скоростью, что позволяет использовать ресурсы сервера намного дольше, чем это необходимо, и, как следствие, помешать обработке других запросов. Несколько тысяч таких соединений могут положить веб сервер на несколько минут. Если ваша система имеет веб интерфейс, то данный вид атак позволит «положить» его без особых проблем.
Атака была впервые продемонстрирована широкой публике на OWASP 2010 Application Security Conference. Исследователь Wong Onn Chee первый обнаружил атаку в 2009 совместно с командой исследователей из Сингапура. Позже были проведены исследования атаки (в том числе компанией Microsoft). Уязвимость в протоколе сейчас официально признана. Изначально атаки такого рода проводились в Китае. Для рекрутинга ботов использовались онлайн игры — компьютеры незадачливых игроков использовались для отправки специально сформированных HTTP-запросов целевой системе.
Простота реализации атаки позволила эффективно использовать для этого простой Java аплет, который запускался во время онлайн игры. Как только жертва принимала self-signed аплет, аплет начинаел выполнять атаку в то время, пока пользователь играл в онлайн игру. После выхода из игры и закрытия браузера атака прекращалась, а аплет удалялся. Обнаружить, что ты стал источником атаки довольно проблематично — ведь компьютер не заражается в классическом понимании этого слова, а отличить трафик от легального HTTP-трафика сложно. Кроме того, интернет-канал почти не перегружается.
Атака приводит к обрушению веб-серверов с Microsoft IIS и Apache (как показали мои опыты, список уязвимых веб серверов ими не ограничивается) в рамках протоколов HTTP или HTTPS и, очевидно, любых «безопасных» подключений вроде SSL, VPN и других. Также атака может быть адаптирована для работы с SMTP и даже DNS-серверами. Программное обеспечение, балансирующее нагрузку, ныне используемое для предотвращения DDOS-атак, схожих по типу (Slowloris), не эффективно против новой методики.
Программы, реализующие атаку (R U Dead Yet? и OWASP HTTP POST Tool, которую я использовал, дальше речь идет о ней), находятся в свободном доступе и легко гуглятся. Настройки программы очень просты, есть подробный хелп и даже графическая оболочка (сама программа консольная). Также доступны исходные коды.

Окошко OWASP HTTP POST Tool

OWASP HTTP POST Tool

Практика


Все это я, разумеется, проверил на практике. Я скачал OWASP HTTP DoS Tool, ввел адрес одного подконтрольного мне сайта. Недоверчиво клацнул по кнопочке. Через минуту сайт лежал. Это при том, что я дома обделен хорошим интернетом, и моя скорость на аплоад составляет всего пол-мегабита. Сайтик слабенький, это форум (vBulletin) на сто человек, виртуальный хостинг, сервер nginx. Но, все-же, согласитесь, даже такой небольшой сайт повешать из-под пол-мегабитного канала… это по меньшей мере удивительно.
Наука пошла дальше. Поняв, что для реализации атаки достаточно даже очень маленького канала, я запустил атаку через AdvTor (Об TOR’e читаем тут). Как-бы глупо и неправдоподобно это не звучало, сайт упал. Позже, используя несколько компьютеров с более широким интернет-каналом, все через тот-же AdvTor я сумел, сугубо из научного интереса отправить в даун более серьезные сайты (поспорив предварительно с владельцем, что положу его детище без помощи ботнета). Дальше – больше. Был написан скрипт, реализующий непрерывную атаку (у OWASP’овской программки на это дело стоит ограничение – после 40000 запросов она выключается), время от времени переключающий выходную ноду TOR’a, очищающий его кэш и перезапускающий обе программки. Кстати, в таком режиме использования они начинали очень хорошо течь. Процессор загружался под 100%, а AdvTor бесстыдно пожирал память. Вообще TOR был далеко не в восторге от такого использования, но держался на удивление хорошо, хотя иногда и зависал намертво. Использовать сеть TOR’a для этого, конечно, полнейшее варварство, но руки чешутся наука требует жертв. Испытания проводились еще на нескольких сайтах разного уровня (опять-же, по договоренности с владельцами, кроме одного раза, когда я решил мило подшутить над товарищем). Результат оказался печальным. Оказалось. что уложить почти любой средний сайт относительно несложно и более чем возможно.

Выводы


1) Slow HTTP POST позволяет организовывать атаки на отказ в обслуживании, с недостижимым раньше соотношением необходимой мощности/канала атакующего компьютера (компьютеров) и атакуемого сервера.
2) Огромное количество малых и средних сайтов на сегодняшний день подвержены этой атаке. Причем зачастую со стороны сервера сложно даже диагностировать, что сайт атакуют – трафик не превышает нормальных значений.
3) Реализация атаки очень проста, и практически не требует никаких вложений. Более того, это единственная известная науке атака на отказ в обслуживании, которую реально организовать через прокси!
4) Схожесть трафика атаки с легальным трафиком усложняют фильтрацию «вредных» пакетов, а также позволяют легко организовать сложно обнаруживаемый ботнет.

P.S.


Информация не претендует на новизну или полноту. Это скорее сборный вольный перевод из многих источников, плюс немного интересного опыта. Писалось в редкую свободную ночь (благо работы хватает), поэтому за ошибки извиняюсь, поправьте. Если эта тема кого-то заинтересует, готов написать более подробно о механизме атаки и методах защиты.

Литература и ссылки


Официальная страничка программы от OWASP
Отличная статья (для дружащих с английским)
Официальная презентация по теме (PDF), опять же для англоговорящих
Подробное исследование с описанием методов защиты (и снова английский)
Общая информация по теме на сайте OWASP
В этом ЖЖ был пост по теме

Добавлено


Уважаемы хабраюзер Sicness не поленился, и скомпилировал OWASP HTTP POST Tool под Ubuntu. По ссылке архив с бинарником и необходимой для его работы библиотекой. Исходный код доступен здесь.

+183
33.3k 385
Comments 98
Top of the day