Slow Lori — это животное, живущее в юговосточной Азии и известное своей медлительностью и размеренными движениями. По нему была названа новая DoS и DDoS атака на веб-сервер Apache.
Данный тип атаки был обнародован специалистом по безопасности RSnake 17 июня и подробно описан на странице
http://ha.ckers.org/blog/20090617/slowloris-http-dos
Атака заключается в очень медленной посылке все новых и новых HTTP заголовков в рамках одного HTTP запроса, никогда его не завершая.
Поскольку Apache выделяет ресурсы для запроса очень рано, то на один такой запрос тратится «полноценное» кол-во ресурсов. Такое же, как и для обычного запроса.
Как известно, Apache использует для обработки запросов или процессы или смесь процессов с нитями. Использование нитей позволит отсрочить смерть, но так или иначе Apache упрется в ограничение по памяти или ограничение, заданное администратором.
Что самое неприятное, Slowlori атака не оставляет никаких следов, кроме огромного количества открытых cоединений со статусом ESTABLISHED. Не будет никаких записей даже в access_log-е.
Первоначально разработчики Apache не очень активно отреагировали на сообщение RSnake в список рассылки, ответив ему что данная атака давно известна и является минусом не самого веб-вервера, а скорее TCP-стека. Однако, в дальнейшем разработчики веб-сервера Apache зашевелились и начали активно обсуждать пути решения проблемы.
Веб-серверы основанные на state machine не подвержены данной атаке. Таким образом простейшим способом обезопасить себя от Slowlori атаки является использование двухуровневой архитектуры, когда первым на пути является веб\прокси сервер, основанный на state machine, такой как nginx.
Другими возможными решениями являются Access HTTP фильтры в FreeBSD, использование хитрых правил на файрволе, которые, в то же время, могут отсечь и легитимных медленных пользователей.
Кроме собственно изменения архитектуры, разработчики Apache согласны в необходимости внедрения более мелких, локальных таймаутов. На данный момент в Apache 2.2 реализован один обший таймаут, влияющий на практически все IO действия.
Более подробную информацию можно получить в списке рассылки
httpd-dev и в пока не открытой для публичного доступа
статье на LWN.
комментарии (92)
nginx самое то!
Он может быть полноценной заменой apache? (например для WP и PHPBB3 )
Минусовать не надо, обычный житейский вопрос.
Или лучше использовать связку как прокси?
я использовал. пхп у меня работал как fastcgi, причем лучше использовать патч php-fpm
Просто я обычно использую несколько вещей:
WP,PHPBB3, Simple Machines.
Да еще иногда CRM SugarCRM.
Просто если Nginx сможет полностью заменить apache, это классно!
Ну и так далее.
1) надо в нгинксовой версии добавить слеши в начале
2) RewriteRule заменить на rewrite
3) [L] заменить на last;
Пример апача:
нгинкс
Хоть хабратопик в духе разрушителей мифов пиши :-)
Это меня и удивляет.
Я почему-то подумал про ограничение доступа вообще, в том числе те что в httpd.conf.
Но на самом деле это ведь не обязательная функция. Захотел администратор — значит будем дергать. Не включал эту функцию — не будем дергать.
commons.wikimedia.org/wiki/File:Slow_Loris_Female.jpg
IIS такой атаке подвержен?
В статьях написано что IIS посылает данные обработчикам не на уровне HTTP запросов, а на уровне сетевых пакетов или группы пакетов. Звучит очень сложно, но, в принципе, реально.
«What IIS does differently, is in the way it handles incoming requests: There is no static tie between a worker thread and a network socket in IIS. Rather, the workers are organized in a pool where they wait for incoming TCP packets (rather than TCP connections as Apache does). These packets are then assigned dynamically to threads. So, an idle connection occupies a socket, but it does not block an entire thread. Thus the web need not be shut down by penny-wielding customers or slowloris.»
Исправьте, пожалуйста.
Эстонский DoS :)
Он у нас завется как Толстый Лори O_o?
Более того, ограничением по IP вы порежете сети, которые сидят за NAT-ом.
Что касается NAT, то надо просто лимит не слишком маленький ставить, чтобы не мешало нормальной работе. А при атаке лучше пусть сетка за NAT отключится, чем вообще весь апач
Вообще, в Update сказано, что он далеко не первый это придумал.
Ну а на самом деле это классический DoS против любого fork-ающегося сервера без адекватных лимитов и таймаутов. Настолько классический, что преподносить его как что-то новое довольно странно.
Атака не новая, новы только шум и инструмент.
Ну а таймауты/лимиты — это так, workaround. Проблему решает только accept-фильтр на базе state machine (либо в ядре, либо в самом апаче, либо перед апачем).
Хотя чего уж там, сейчас даже нет реализации mod_php для mpm_worker, — только процессы.
Вы не в курсе, есть ли какие-то планы по имплементации accept http фильтров в ядре Линукс аналогично тем что есть в ядре FreeBSD?
khttpd даже в mainline 2.4 одно время был.
«A computer is a state machine. Threads are for people who can't program state machines.» © Alan Cox
Какая страшная смерть! (с)
> кроме огромного количества открытых cоединений со статусом ESTABLISHED.
По-моему фразы противоречат друг другу. В рамках одного запроса = одно соединение. Тогда откуда много открытых сокетов? Или я чего-то не понимаю?
В свое время я клал серваки следующим образом (спокойствие, хозяева были вкурсе):
1. Находится самая «тяжелая» страница с долгим запросом.
2. Пишется клиент, который открывает как можно больше соединений с сервером (пару тысяч).
3. Когда достигнуто максимально возможное значение, по всем посылается http запрос на эту страницу.
4. Для всех сокетов надо установить таймаут побольше и размер входного буфера 1 байт и не читать ответы от сервера.
Простой ограничитель числа коннекшнов с одного ip решает проблему.
Однако названия модуля уже не вспомню, увы.
поставили апач на фронтэнд и нагрузка на сервера упала.
как политкорректно нынче называют хакеров XD