Механизм работы zip-бомб и их реализация:
Когда зловредный бот отправляет запрос, сервер имитирует успешный ответ (
200 OK), но вместо реальных данных передаёт zip-бомбу. Ключевой момент — заголовок Content-Encoding: gzip, который заставляет бота автоматически распаковывать файл. Вот что происходит дальше:Ловушка для бота
Большинство ботов слепо доверяют заголовкам сжатия. Получив файл, они начинают его распаковывать в память, не проверяя содержимое. Например, файл
10GB.gz весит всего 10 МБ, но содержит 10 ГБ нулевых байтов, сжатых многократно. Распаковка требует в 1000 раз больше памяти, чем исходный файл.- Боты, написанные на языках с ручным управлением памятью (например, C/C++), крашатся из-за переполнения буфера.
- Скрипты на Python или Node.js выбрасывают исключения MemoryError, так как исчерпывают лимиты выделенной памяти.
- Даже если бот выживает, обработка гигабайтов "мусора" затягивает время выполнения, что делает атаку невыгодной для злоумышленника.
Технические нюансы создания zip-бомбы
Команда
dd if=/dev/zero bs=1G count=10 | gzip -c > 10GB.gz работает так:dd читает нулевые байты из /dev/zero блоками по 1 ГБ (10 блоков = 10 ГБ).gzip сжимает данные, но из-за повторяющихся нулей степень сжатия максимальна.Итоговый файл
10GB.gz будет многослойным: при распаковке он может генерировать вложенные архивы (если использовать рекурсивное сжатие), но в данном случае это простой поток нулей.Важно! Современные антивирусы и системы анализа трафика могут блокировать такие файлы. Чтобы усложнить обнаружение, можно:
- Добавить случайные данные в начало файла.
- Использовать формат
zlib вместо gzip.- Создать бесконечно распаковывающийся архив через рекурсивное сжатие (например, с помощью pigz).
Интеграция с сервером
Для автоматизации защиты я добавил на сервер middleware, который:
- Проверяет IP по чёрному списку (например, через Fail2ban или базы вроде AbuseIPDB).
- Анализирует поведение: частоту запросов, подозрительные User-Agent (например,
Python-urllib), попытки инъекций в URL.- Использует ханипоты — фейковые страницы-ловушки, на которые попадают только боты (например, скрытые ссылки).
Пример логики на PHP:
// Проверяем признаки бота
$isMalicious = checkMaliciousPatterns($_SERVER['REQUEST_URI'])
|| isIPBlacklisted($_SERVER['REMOTE_ADDR'])
|| isUserAgentSuspicious($_SERVER['HTTP_USER_AGENT']);
if ($isMalicious) {
// Отправляем zip-бомбу
header("HTTP/1.1 200 OK");
header("Content-Encoding: gzip");
header("Content-Type: text/html"); // Маскируем под HTML
header("Content-Length: " . filesize($bombPath));
readfile($bombPath);
exit();
}Zip-бомбы — это «грубая сила» в мире защиты от ботов. Они не заменят WAF (Web Application Firewall) или CAPTCHA, но станут дополнительным слоем обороны против простых атак.