CPDoS – новая техника атаки
Сотрудники двух немецких университетов придумали новую технику атаки на сети доставки контента и кэширующие прокси – Cache-Poisoned Denial-of-Service (CPDoS). Эта техника вызывает отказ доступа к странице через отправление кэша.
Как это работает?
Cети доставки содержимого (CDN) кэшируют и выполненные запросы, и возвращённые ошибки. Если есть проблемы с запросом, обычно сервер выдаёт ошибку 400 (Bad Request). По стандарту кэшируются только ошибки 404, 405, 410 и 501, но CDN могут кэшировать и ошибки 400 в зависимости от запроса.
Атакующий может вызвать возврат ошибки 400 через запрос с особым HTTP-заголовком. CDN не учитывает их, и в кеш попадает информация о невозможности получить доступ к странице. Корректные запросы до конца таймаута приводят к выводу ошибки, а исходный сайт всё равно отдаёт содержимое.
Исследователи вывели 3 варианта принуждения HTTP-сервера к возврату ошибки:
- HMO (HTTP Method Override) – атакующий переопределяет исходный метод запроса через заголовки “X-HTTP-Method-Override”, “X-HTTP-Method” или “X-Method-Override”. Их могут поддерживать сервера, но не учитывает CDN. Меняем исходный метод “GET” на запрещённый “DELETE” или неприменимый для статистики “POST” – получаем CPDoS.
- HHO (HTTP Header Oversize) – атакующий подбирает размер заголовка больше лимита сервера, но меньше ограничения CDN. Например, Apache httpd ограничивает размер заголовка в 8 килобайт, а CDN Amazon Cloudfront разрешает заголовки до 20 килобайт.
- HMC (HTTP Meta Character) – атакующий добавляет в запрос спецсимволы (\n, \r, \a). Если они недопустимы на исходном сервере, но игнорируются в CDN, мы получаем CPDoS/
Как дела с устранением?
Самая уязвимая CDN – CloudFront в Amazon Web Services. Компания запретила кэширование ошибок и решила проблему, но на добавление полноценной защиты исследователи потратили 3 месяца.
Проблемными оказались Cloudflare, Varnish, Akamai, CDN77 и Fastly, но атаковать получится только целевые сервера с IIS, ASP.NET, Flask и Play 1.
Потенциально атаковать с CPDoS можно 11% доменов Минобороны США, 16% базы HTTP Archive и 1/3 топ-500 сайтов по рейтингу Alexa.
Блокировать атаку со стороны сайта можно выставлением заголовка “Cache-Control: no-store” – он запрещает кэшировать ответы. В CloudFront и Akamai в настройках профиля можно отключить кэширование ошибок. Ещё можно использовать WAF, но на стороне CDN перед кэширующими хостами.