Верх страницы
Обложка к записи Zip-бомбы для защиты сервера
Время для прочтения: 0 мин. 15 сек.

Zip-бомбы для защиты сервера

Сегодня бóльшую часть трафика в сети составляют боты. Они используются для обнаружения нового контента. Это читалки RSS-лент, поисковые системы, и боты искусственного интеллекта, которые обучают свои LLM.

Но есть и вредоносные боты. Это спамеры, скраберы контента или хакеры. У моего прежнего работодателя бот обнаружил уязвимость в WordPress и вставил вредоносный скрипт на наш сервер. Затем он превратил машину в ботнет, используемый для DDOS.

В какой-то момент мне пришлось искать способ защититься от этих ботов. Тогда я начал использовать zip-бомбы.

Что такое zip-бомба

Zip-бомба — это относительно небольшой сжатый файл, который может превратиться в очень большой файл после распаковки и способный перегрузить машину.

В своём блоге я часто вижу ботов, которые сканируют уязвимости в системе безопасности, которые я по большей части игнорирую. Но когда я обнаруживаю, что они либо пытаются внедрить вредоносные атаки, либо пытаются получить ответ, я возвращаю им код 200 OK и отправляю ответ в формате gzip. Я варьирую размер файла от 1 МБ до 10 МБ, который они с удовольствием принимают.

В большинстве случаев, когда они это «хавают», я больше никогда о них не слышу. Почему? Да потому, что они «падают» сразу после получения файла.

Как работает zip-бомба

Боты получают файл, читают заголовок, который сообщает им, что это сжатый файл. Поэтому они пытаются распаковать файл размером 1 МБ, чтобы найти нужное содержимое. Но файл расширяется, расширяется и расширяется, пока не заканчивается память и сервер не падает. Файл размером 1 МБ распаковывается в 1 ГБ. Этого более чем достаточно, чтобы сломать большинство ботов. Однако, для тех надоедливых скриптов, которые не хотят останавливаться, я предоставляю им файл размером 10 МБ. Он распаковывается в 10 ГБ и мгновенно убивает их скрипт.

Как создать zip-бомбу

Прежде чем я расскажу вам, как создать zip-бомбу, я должен предупредить вас, что вы потенциально можете сломать и уничтожить свое собственное устройство/машину. Продолжайте на свой страх и риск. Итак, вот как мы создаем zip-бомбу:

dd if=/dev/zero bs=1G count=10 | gzip -c > 10GB.gz

На моем сервере я также добавил промежуточное ПО, которое проверяет, является ли текущий запрос вредоносным или нет. У меня есть список айпишников, внесенных в черный список, которые пытаются неоднократно просканировать весь сайт. У меня есть и другие эвристики для обнаружения спамеров. Многие пытаются рассылать спам со страницы, а затем возвращаются, чтобы проверить, попал ли спам на страницу. Я использую этот шаблон для их обнаружения. Он выглядит примерно так:

if (ipIsBlackListed() || isMalicious()) {
    header("Content-Encoding: deflate, gzip");
    header("Content-Length: "+ filesize(ZIP_BOMB_FILE_10G)); // 10 MB
    readfile(ZIP_BOMB_FILE_10G);
    exit;
}

Это все, что требуется. Единственная цена, которую я плачу, — это то, что в некоторых случаях я предоставляю файл размером 10 МБ. Если статья становится вирусной, я уменьшаю размер до 1 МБ, что не менее эффективно.

И еще одно: zip-бомба — это защита от дурака. Ее можно легко обнаружить и обойти. В конце концов, вы можете частично прочитать содержимое. Но для неискушенных ботов, которые вслепую ползают по Сети, нарушая работу серверов, это достаточно хороший инструмент для защиты вашего сервера.

Комментарии
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Предыдущая запись
Следующая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Symfony, Laravel, Moonshine, фильмы и сериалы