SlowHTTP: Уязвимость «на страже» доступности
Пока исследователи охотятся за критическими уязвимостями, ошибки конфигурации веб-серверов нередко остаются без внимания. Одна из таких ошибок делает сервер уязвимым для атаки
SlowHTTP.
Атака
SlowHTTP эксплуатирует фундаментальное ограничение архитектуры веб-серверов — конечный размер пула активных соединений. Принцип атаки заключается в захвате и удержании доступных слотов пула с минимальной интенсивностью передачи данных. До тех пор, пока соединение не будет разорвано по таймауту, оно блокирует выделенный слот, лишая сервер возможности обрабатывать запросы легитимных пользователей.
Злоумышленник открывает соединение и начинает отправлять HTTP-запрос частями: сначала строку
GET / HTTP/1.1, затем заголовки - по одному, с паузами. Финальная последовательность
\r\n\r\n, сигнализирующая серверу о завершении запроса, намеренно не отправляется. Сервер не может определить, завершил ли клиент передачу, и продолжает ждать, удерживая соединение открытым. При масштабировании этой схемы все доступные слоты пула оказываются заняты, а легитимные пользователи получают ошибку
504 Gateway Timeout.
Основные виды атаки
Slowloris (Slow HTTP Headers) — клиент открывает соединение и бесконечно отправляет HTTP-заголовки, намеренно не завершая запрос финальным
\r\n\r\n. Сервер ждёт окончания заголовочного блока и поддерживает соединение с клиентом.
Slow POST — в заголовке
Content-Length объявляется большой объём данных (например, 1 000 000 байт), а тело запроса отправляется по байту в минуту. Это заставляет сервер дождаться всего тела прежде чем обработать запрос.
Slow Read — клиент отправляет легитимный HTTP-запрос, но намеренно объявляет маленький размер TCP-окна (к примеру, 28 байт) в начальном SYN-пакете. Сервер передает первые 28 байт и вынужден остановиться, так как клиент возвращает
win 0 (буфер заполнен). Сервер продолжает периодически опрашивать клиента о доступном месте в буфере. Общее время удержания соединения в таком состоянии может достигать
2 минут. Все это время соединение остается открытым и слот в пуле занят. Тысячи таких соединений приводят к отказу в обслуживании.
Как проверить свой проект
Для проверки уязвимости к
SlowHTTP можно использовать утилиту S
lowhttptest. Это специализированный инструмент, который имитирует медленные атаки и показывает, как сервер на них реагирует.
Пример команды:
slowhttptest -c 1000 -H -g -o slowloris_stats -i 10 -r 200 -t GET -u https://target.com -x 24 -p 3
Если через минуту сервис перестал отвечать — уязвимость найдена.
Как защититься
Защита строится на ограничении времени ожидания и количества соединений:
1. Таймауты в Nginx — необходимо установить жёсткие рамки на чтение заголовков и тела запроса.
client_body_timeout 10s;
client_header_timeout 10s;
2. Лимиты соединений — ограничить количество одновременных подключений с одного IP.
3. Reverse Proxy — использовать Nginx или HAProxy перед бэкендом. Nginx буферизует входящие запросы и не передаёт их дальше до полного получения.
4. Модуль
mod_reqtimeout для Apache — позволяет установить таймауты на приём заголовков и тела запроса. Если клиент слишком медленно отправляет данные, соединение разрывается.
Сканер
METASCAN выявляет серверы, уязвимые для SlowHTTP. Наши эксперты регулярно подтверждают наличие этой проблемы в инфраструктуре клиентов.
#Metascan #pentest #redteam #Metascan_news
Обсуждение 1
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram