Архив весом 1 МБ превращается в гигабайтную ловушку для сканеров.
Программист Ибрагим Диалло ведёт блог , размещённый на собственном небольшом сервере. По его наблюдениям, основную часть трафика составляют автоматические боты, которые сканируют интернет в поисках контента. Большинство из них безвредны, но встречаются и те, что пытаются атаковать сервер, внедряя вредоносный код или проверяя его на уязвимости. В таких случаях Диалло не тратит время на блокировки или жалобы — он сразу подаёт ботам «горячую» zip-бомбу, которая при распаковке увеличивается в тысячу раз и с высокой вероятностью выводит из строя систему атакующего.
Zip-бомбы — это крошечные архивы, скрывающие огромный объём данных. Один из известных примеров — архив весом 46 МБ, который при распаковке превращается в 4,5 петабайта, что превышает возможности большинства компьютеров. Формально такие архивы считаются вредоносными, потому что их цель — перегрузить и обрушить систему. Но Диалло использует их с точностью до наоборот — как средство защиты от вредоносных сканеров.
Он создал архив размером 1 МБ, который при распаковке превращается в 1 ГБ, достаточно, чтобы «повесить» простейшие боты. Для более «прожорливых» роботов с большим объёмом памяти у него есть архив 10 МБ, который разворачивается в 10 ГБ. Такое вмешательство почти гарантированно приводит к сбою в работе нежелательного сканера.
Когда система Диалло распознаёт подозрительного бота, сервер отвечает кодом 200 OK и отправляет в ответ zip-бомбу. Бот, ориентируясь на метаданные, считает, что получил обычный сжатый файл, открывает его, чтобы извлечь данные — и тут наступает крах: оперативная память заполняется гигантским содержимым архива, что приводит к зависанию или падению системы.
Желающим повторить такой трюк Диалло предлагает инструкции на своём блоге. Он, впрочем, предупреждает: обращаться с zip-бомбами нужно осторожно. Если по ошибке открыть такую бомбу на собственном сервере, можно обрушить его самому. Кроме того, продвинутые боты умеют распознавать такие ловушки и игнорировать их, так что метод работает не всегда. Но для большинства примитивных роботов этого более чем достаточно, чтобы вывести их из строя — хотя бы до следующей перезагрузки.