RangeAmp — серия атак на сайты и CDN, манипулирующая HTTP-заголовком Range

Группа исследователей из Пекинского университета, Университета Цинхуа и Техасского университета в Далласе выявила новый класс DoS-атак — RangeAmp, основанный на использовании HTTP-заголовка Range для организации усиления трафика через сети доставки контента (CDN). Суть метода в том, что из-за особенности обработки Range-заголовков во многих CDN атакующий может запросить через CDN один байт из большого файла, но CDN загрузит с целевого сервера весь файл или значительно больший блок данных для помещения в кэш. Степень усиления трафика при такой атаке в зависимости от CDN составляет от 724 до 43330 раз, что может использоваться для снижения пропускной способности канала связи до сайта жертвы.

Заголовок Range даёт клиенту возможность определить диапазон позиций в файле, которые следует загрузить вместо отдачи полного файла. Например, клиент может указать «Range: bytes=0-1023» и сервер передаст только первые 1024 байта данных. Подобная возможность востребована при загрузке больших файлов — пользователь может приостановить загрузку, а потом продолжить его с прерванной позиции. При указании «bytes=0-0» стандарт предписывает отдавать первый байт в файле, «bytes=-1» — последний, «bytes=1-» — начиная с 1 байта и до конца файла. Допускается передача нескольких диапазонов в одном заголовке, например «Range: bytes=0-1023,8192-10240».

Дополнительно предложен второй вариант атаки, нацеленный на повышение сетевой нагрузки при пробросе трафика через ещё один CDN, который используется как прокси (например, когда в качестве форнтэнда (FCDN) выступает Cloudflare, а бэкенда (BCDN) — Akamai). Метод напоминает атаку на обычные сайты, но локализуется внутри CDN-сетей и позволяет усилить трафик при обращении через другие CDN, повысив нагрузку на инфраструктуру и снизив качество сервиса.

Идея в том, что атакующий направляет в CDN Range-запросы нескольких диапазонов, такие как «bytes=0-,0-,0-…», «bytes=1-,0-,0-…» или «bytes=-1024,0-,0-…». Запросы содержат большое число диапазонов «0-«, подразумевающих отдачу файла от нулевой позиции до конца. Из-за некорректной реализации разбора диапазонов при обращении первого CDN ко второму, на каждый диапазон «0-» отдаётся полный файл (диапазоны не агрегируются, а последовательно перебираются), если в изначально отправленном атакующим запросе присутствует дублирование и пересечение диапазонов. Степень усиления трафика в такой атаке составляет от 53 до 7432 раз.

В процессе исследования было изучено поведение 13 CDN — Akamai, Alibaba Cloud, Azure, CDN77, CDNsun, Cloudflare, CloudFront, Fastly, G-Core Labs, Huawei Cloud, KeyCDN, StackPath и Tencent Cloud. Все из рассмотренных CDN допускали первый вид атаки на конечный сервер. Второму варианту атаки на CDN оказались подвержены 6 сервисов, из которых четыре могут выступать в атаке в роли фронтэнда (CDN77, CDNsun, Cloudflare и StackPath) и три в роли бэкенда (Akamai, Azure и StackPath). Наибольшее усиления достигается в Akamai и StackPath, которые допускают указание в заголовке Range более 10 тысяч диапазонов. Владельцы CDN были уведомлены об уязвимостях около 7 месяцев назад и к моменту публичного раскрытия сведений 12 из 13 CDN устранили выявленные проблемы или выразили готовность их устранить (не отреагировал только сервис StackPath).

Источник: http://www.opennet.ru/opennews/art.shtml?num=53026