Старые методы по-прежнему работают
[Обновление] Теперь я в каком-то списке спецслужб, потому что написал статью про некий вид «бомбы», так?
Если вы когда-нибудь хостили веб-сайт или администрировали сервер, то наверняка хорошо знаете о плохих людях, которые пытаются сделать разные плохие вещи с вашей собственностью.
Когда я в возрасте 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)
MrFrizzy
07.07.2017 00:30+1Читал когда-то про псевдоадминку с логином\пассом admin, которая при входе выдавала пачку эксплоит китов в ответ. Проблемы две:
1) часто так можно положить чей-нибудь левый хостинг, зараженный малварью, и оказаться крайним
2) во многих странах «активная защита» приравнивается к хакингу и является уголовно наказуемой. Например, в Германии. И в отличии от нападающих, все данные явно указывают на вас — владельца домена\хостинга, потому что у вас и не было в мыслях как-то срываться…splav_asv
07.07.2017 00:37+13Отправка сжатого файла большого размера это же не активная атака. Это тоже уголовно наказуемо?
MrFrizzy
07.07.2017 12:22+2мое личное имхо не юриста: зависит от трактовки законов и правоприменения в стране
funca
08.07.2017 11:21С юридической точки зрения важен умысел. Если докажут, что вы это сделали осознавая, что можете кому-то нанести вред, к вам наверняка будут вопросы. Если докажут, что вы это сделали специально, чтобы наносить вред, будете отвечать.
jaiprakash
08.07.2017 12:41Юридически это самооборона.
funca
08.07.2017 13:55Для этого требуется выполнение ряда условий. Как минимум нужен факт нападения с реальной угрозой причинения вреда. Если угроза мнимая, или не дай бг сами спровоцируете, или причиненный вашими действиями ущерб окажется не соразмерен угрозе, или пострадают третьи лица — будете отвечать на общих основаниях.
http2
08.07.2017 13:28Хакер подаст в суд?
funca
08.07.2017 14:05Пострадавший. Это как подключить электрошокер к двери в квартиру, или поставить у входа капкан для воров.
AlexanderG
08.07.2017 14:44Вот не понимаю этого, моя квартира, хочу, чтоб коридоре лежал капкан — кому какое дело до этого?
funca
08.07.2017 23:47Потому, что частная собственность это не столько то, что вы имеете, сколько повод, при определенных обстоятельствах, иметь вас. Или как писал вождь революции: «жить в обществе и быть свободным от общества нельзя.»
impetus
09.07.2017 00:38Напр, за бутылку отравленной водки, «забытой» на столе дачного домика — людей вполне себе сажают. Но там просто — жизнь человека несоизмереима с любым возможным ущербом от воровства в том домике. Почти во всех странах, кстати, сажают, если докажут умысел в отравлении (водки). Причём не за «по неосторожности» сажают, а за «предумышленное».
Но в данном случае («бесконечный zip-файл»), всё же вряд ли выйдет натянуть сову на глобус.Zenitchik
09.07.2017 01:15+3жизнь человека несоизмереима с любым возможным ущербом от воровства в том домике
Это самая большая ошибка современного общества. Жизнь вора не должна стоить ничего.equand
09.07.2017 14:46-1Это самая большая ошибка современного общества. Жизнь вора не должна стоить ничего.
Какая чушь :( Если человек нуждается — значит его жизнь ничего не стоит? Рано или поздно в нужде возникнет необходимость воровства, если нужда не будет перекрыта честным путем. Если же человек уже богат и ворует — то это болезнь и она должна лечиться.
Одно дело, если все выжывают и кто-то ворует. Другое дело, когда все живут нормально и кто-то выживает.vorphalack
09.07.2017 15:03+1вот эти вот все бутылки водки, капканы, итд — это ж против тех, кто НЕ ХОЧЕТ честным путем, и «выживает», профессионально обнося дачные поселки осенью-зимой. либо те же бомжи, которые в массе своей добровольно до этой жизни допились.
соответственно возникает встречный вопрос — а почему их жизнь должна чего-то стоить, если они сами ее априори не ценят?equand
13.07.2017 21:09Потому что иногда они меняют свою жизнь. Иногда алкаш рождает не алкаша. И т.д. и т.п. У меня примеров из жизни и истории хоть отбавляй. Также как и обратных примеров, когда из хорошего в говно уходят. Жизнь и будущие жизни не заменимы, все говно, что вы у себя там храните всегда можно получить.
vorphalack
13.07.2017 22:19не спорю, меняют. если успеют. но несколько сомневаюсь в репрезентативности вашей выборки.
но все равно не считаю это достаточным аргументов против таких вот закладок. хотя с бутылкой водки на видном месте пожалуй все же перебор.
опять же моральный ущерб что от самого факта кражи, что от утраты вещей, которые могут быть малой денежной, но большой эмоциональной ценности.
в общем случае я за то, чтоб те или иные ловушки были в ЛЮБОМ частном доме, который остается без присмотра на заметное время. тогда туда лезть будут либо действительно от отчаяния, либо профессионалы — которых уже никому не жалко.equand
14.07.2017 10:28А еще шпана будет лазить. Знаю, сам лазил, ничего не брал, хотя пацаны вполне хотели прибрать. Просто желание приключений. Так что не только алкаши и отчаянные лазят.
Zenitchik
09.07.2017 01:33Ещё один нюанс: это могла быть не отравленная водка, а спиртовой раствор какого-нибудь мухомора для наружного применения, в бутылке из-под водки.
Garrett
09.07.2017 14:19+1А надо то было всего лишь снять этикетку, и доказать непредумышлиность было бы в разы проще
funca
09.07.2017 17:07В принципе, легитимное право на насилие есть только у
сильныхгосударства. Всех остальных позиция «а ты докажи» автоматически ставит на один уровень с теми, против действий которых это затевается — хоть юридически, хоть морально («преступление и наказание» и т.п.) Исключением является право на необходимую оборону, которое позволяет действовать в момент объективного нападения, если в это время нет возможности получить защиту у уполномоченных лиц; в основном от страха, нежели от злости. Свобода воли дает возможность отступать от принципов, но при этом желательно осознавать ситуацию шире и смотреть на последствия дальше, чем кучка вещей на заветных сотках.Garrett
09.07.2017 17:45Так можно дотянуть до абсурдного сценария где вор схватив стойку ножей споткнулся и получил несколько ножевых ранений после чего скончался, а виноват владелец квартиры?
Или залез в мастерскую и выпил растворителя, там можно много примеров придуматьfunca
09.07.2017 19:36В юридическом смысле это как судья решит. Суд не точная наука, а состязательный процесс, где исход зависит не только от принятых в конкретной стране правил игры, которые называются правой системой (где-то прописанными в законах, где-то в базе прецедентов, где-то еще как), а еще кучи других факторов — в одном комменте не расскажешь. В моральном аспекте, владелец наверняка и без этого будет осознавать, с какой целью там оказались ножи и растворитель, и мог-ли предпринять какие-то действия, чтобы не допустить суицида (запрещено в РФ).
Lennonenko
11.07.2017 14:38+1между неосторожностью пострадавшего и вашим умыслом есть конкретная грань
если вы на даче оставляете на столе бутылку из-под водки, наполненную метанолом, скорее всего, вы это делаете с умыслом, потому что в противном случае вы написали бы на ней «метанол, осторожно, яд!», чтобы самому не попасть
вот если бомж хлебнёт метанола из бутылки с большой и заметной надписью «метанол», хозяину ничего не будетiig
11.07.2017 18:07А если «метанол» написано большими китайскими иероглифами? Как установить, умел ли при жизни покойный читать по китайски?
yasmax
12.07.2017 08:32У судьи возникнет вопрос: «Зачем вы написали по-китайски, если ваш родной язык русский? Члены вашей семьи все владеют китайским?»
iig
12.07.2017 09:06Гражданин судья, мой подзащитный позавчера записался на курсы китайского, вот справка. КМК, доказывать/опровергать как наличие злого умысла, так и нанесение вреда можно бесконечно. Особенно при наличии контента с огромной степенью сжатия.
yasmax
12.07.2017 18:10Вот для решения таких вопросов и взвешивания аргументов придумали несколько тысяч лет назад судью. Он и будет взвешивать доводы.
И никакой неопределенности нет. То, что в бутылке смертельная отрава, посудимый знал. Сообщать другим не собирался. Поместил в место хранения продуктов. Виновен. Единственная справка, которая нужна подсудимому, это справка о психической неполноценности для смягчения приговора.
Lennonenko
14.07.2017 00:12здравым смыслом
в наших судах его зачастую не хватает, но мы же теоретизируем
http2
08.07.2017 20:53Пострадавший хакер?
«А нас за что?» :)funca
08.07.2017 23:38Кто пострадает, если какой-нибудь шутник в комментах разместит ссылку (бесплатно, без sms) на вашу чудо-западню? Или накатает жалобу в
РКНспортлото по приколу — вон люди массово сообщают, что при заходе на определенные урлы нарушается работа их компьютеров.jaiprakash
09.07.2017 00:01Чудо-западня которая аж обваливает браузер!
Размер файла настраивается, можно сделать недопустимый для дешёвых шаред хостингов, откуда идёт большинство атак, и приемлемый для ПК.
http2
09.07.2017 01:48+11. Ну в способе автора под угрозу действительно попадает браузер.
Я бы просто отдавал zip файлик без доп. заголовков.
А чучело, которое решило его запросить, пускай самостоятельно разархивирует его. То есть браузеру показалось бы диалоговое окно сохранения.
Дальше пусть включает мозг.
Я бы поступил бы так просто потому, что хакер не будет вручную вбивать адреса в браузере.
2. А нефиг переходить по сомнительным ссылкам.
3. Поэтому у меня пострадал бы только хакер, ну или тормозогло.
Да и то не сильно.
Ну закончилось бы у него место на винте, ну подумаешь.
4. Если пострадает тормозогло, то будет надежда, что следующий раз будет думать головой.funca
09.07.2017 17:13Похоже, что вы сейчас либо изобрели оружие, которое действует исключительно против негодяев и дураков (до которого пока еще ни кто в мире не додумался и надо срочно патентовать). Либо где-то заблуждаетесь.
DistortNeo
08.07.2017 16:44Даже если это и атака, то какой ущерб будет нести пострадавшая сторона? Ведь вред не наносится.
SandmanBrest
09.07.2017 14:38+1Раньше подобное антивирусы диагностировали как угрозу mail-bomb или что-то вроде этого.
Akuma
07.07.2017 01:20+20Чисто технически — это не атака. Просто старница размером в 10 Гб. Не могут скачать? Ну не мои проблемы :)
LynXzp
07.07.2017 03:05+2Правда и эксплоиты это не что-то сверхъестественное, просто специальная страница в которой странная разметка. Можно было бы отличать по наличию байт-кода, но тоже недостаточно, без байт-кода можно вызвать segfault.
Akuma
07.07.2017 11:17Как с казали выше — эксплойт использует уязвимости, чтобы получить доступ туда, куда в обычном режиме досутп нет, например.
Большая гзипованая страница — это просто большое количество нулей. Браузер самостоятельно его запросил с целью обработать.LynXzp
07.07.2017 14:33Эксплойт не обязан получать доступ туда куда его нет, это конечно лучший для взломщиков вариант, но даже экспойт позволяющий загрузить процессор уже является эксплойтом. Пример: в ХР н-сот раз в секунду вызывать 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
Обычное переполнение, которое в случае подсовывания ссылки с байт-кодом позволяет получить управление. Источник.
eri
09.07.2017 19:32Эту страницу могут вставить iframe-мом или картинкой в другой сайт и тут уже это выглядит как подстава. Если глубоко не копать — то ваша бомба будет ломать чужой сайт.
alix_ginger
10.07.2017 11:03Если кто-то разрешил встраивать iframe с посторонних доменов, то эта zip-бомба — не худшее, что может произойти. А если в img src добавить ее адрес, браузер после получения заголовков без Content-Type: image/smth не станет загружать ее, насколько я понимаю.
eri
10.07.2017 11:27Согласен что проблема не самая страшная, но одна из.
Да и можно подставиться специально.
Встречал такую практику: есть 2 конкурента малого бизнеса. один на своем сайте ставит 5 ифреймов от сайта конкурента, тем самым нагружает диск, сеть и процессор конкуренту. Плюс к тому конкурента понижают в выдаче за накрутку.
apkotelnikov
07.07.2017 00:35+1Открыл с мобильного хрома, с включенной «экономией трафика»… Задумался скольким хаброжителям нужно одновременно попробовать сходить по вашей ссылке для достижения ощутимого эффекта и как потом гугл будет «отмазываться» ))
x67
07.07.2017 11:48Учитывая, что у гугла в браузерах это ловится лучше всего, наверняка о своих серверах они позаботились и поставили разумные ограничения на используемую память)
impetus
07.07.2017 00:41Если вам нравится рисковать, попробуйте сами!
Comodo Dragon поднял окно: «Подтвердите действие на blog.haschek.at: Do you really want to execute the gzip bomb? your device may freeze up»
Или это сайт там даёт предупреждение от случайности?impetus
07.07.2017 00:50+2Выжрал ~гиг оперативы (отдельным процессом c низким приоритето), сбросил и написал: «Опаньки… Не хватает памяти для показа этой страницы»
LynXzp
07.07.2017 00:43+4Firefox прошел испытание хорошо. Сначала быстро набрал в весе до 10Гб (многопоточная распаковка), а потом постепенно (с загрузкой одного ядра) высвобождал память обратно. Opera12 — как будто я открыл обычный сайт легонько перегруженный js — загрузка одно ядра 10%, памяти стала занимать на 100мб больше.
Перевод хороший, я не успел буквально последние два абзаца, хотя и есть неточности, оригинал просто просит чтобы его улучшили.monah_tuk
07.07.2017 03:45Тоже больше 10 гиг памяти? У меня 16 — тоже переварил нормально, даже лагов в системе не заметил.
KorDen32
07.07.2017 11:30Аналогично, 16 Гб RAM, FF 54 x64, Win 7, дошло до 10 Гб при загрузке двух ядер из четырех на 100%, и до 10 Гб RAM, затем высвободилось.
DistortNeo
07.07.2017 23:55Аналогично. Но есть проблема: теперь Firefox после перезапуска раз в ~3 минуты выжирает 10 гигов, а затем медленно их отдаёт.
LynXzp
08.07.2017 00:47Отключение ghostery мне помогло. (Списались с DistortNeo в личке, у него точно так же)
Удаление из истории bombp.php вопрос не решает. Так что будьте аккуратнее заходя с включенным Ghostery.LynXzp
08.07.2017 01:16Разобрались, чтобы исправить нужно закрыть Firefox и удалить файл .mozilla/firefox/u0ixn7m5.default/browser-extension-data/firefox@ghostery.com/storage.js из домашней папки (у каждого конечно путь немного отличается).
Что наводит на подозрения, так это то что Ghostery который призван защищать приватность, сам хранит собственную историю посещений…sumanai
08.07.2017 01:34Что наводит на подозрения, так это то что Ghostery который призван защищать приватность, сам хранит собственную историю посещений…
А чего вы ожидали от дополнения с закрытым исходным кодом?LynXzp
08.07.2017 01:39Ну по крайней мере что оно не будет хранить историю в открытом виде или само ходить по ней. Печально. Спасибо, придется пересмотреть чего я там еще понаустанавливал.
Flowneee
09.07.2017 14:398 гигов памяти, все нормально, FF набрал на 6.6 гигов в весе, потом постепенно освободил память, музыка на соседней вкладке даже не прекратилось, только интерфейс тормозил немного
chem_ua
07.07.2017 00:49Opera 46.0.2597.39. продержалась 19 секунд и выдала:
Недостаточно памяти
Браузеру Opera не хватает памяти, либо выполнение процесса для страницы прекращено по какой-то другой причине.
algotrader2013
07.07.2017 00:50+3интересно, можно предположить, что если бомба срабатывает, то должна радикально снизится интенсивность повторных попыток аутентификаций с того же адреса
vanburg
07.07.2017 03:09То же самое хотел спросить.
Плюс если отправлять бомбу взломаным хостам, то у их владельцев уже 2 попоболи.
fog
07.07.2017 06:41+3А какой в этом смысл?
Большинство таких атак выполняется скриптами с зараженных компьютеров, даже если скрипт и станет распаковывать зип (если поддерживает, ведь не зачем особо, обычному сайту если не сказать что ты его поддерживаешь, то он не станет упаковывать ответ) — то что? У владельца зараженного компьютера компьютер тормозить начнёт?fog
07.07.2017 09:01И да, проверил на своей машине, i7-7700K/16GB RAM — хром пытался открыть примерно 15 секунд потом сказал что ran out of memory while trying to display page и всё. Процессор был занят на четверть, памяти заняло максимум 20 процентов, после того как хром прекратил попытки загрузить страницу — все ресурсы моментально вернулись, т.е. практически ничего не произошло.
zapimir
07.07.2017 12:04+1Как это практически ничего не произошло, как минимум процесс сканера был занят 15 секунд и вылетел с ошибкой, вместо того чтобы за долю секунды обработать ответ сервера, и продолжить сканировать дальше.
alex0nik
07.07.2017 09:35Мне штука понравилась, попробую «заложить бомбы».
Как например, если разложить таких огромных файлов в нескольких стандартных местах, как /admin/, /login/, /wp_admin/ ну и т.п., скрипты сканеров с большой вероятностью их захватят и повиснут из-за нехватки памяти, а значит перестанут сканировать сайт дальше.
Причем файл может быть 1 — сделать на него символические ссылки.
shaytan
07.07.2017 08:51Palemoon x64 @ Win10 занял одно ядро из четырех. Память без изменений, на десяток вкладок ~350Mb. Вкладка с бомбой показывает анимацию загрузки некоторое время, потом просто белый экран и всё, ядро освобождается. Всё время система и браузер отзываются нормально, остальные вкладки продолжают нормально работать, можно открывать новые.
DarkByte
07.07.2017 08:56-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. Правда в моём случае принцип бомб немного другой, внутри архива другой архив, и так до бесконечности. Наверное имеет смысл к такой бомбе добавить ещё и большой пустой файл, чтобы побыстрее память кончалась у атакующей жертвы.Kostiantyn
07.07.2017 09:35+4Думаю сначала нужно понять разницу между скачиванием файла архива и архивацией отдаваемого потока данных.
https://en.wikipedia.org/wiki/HTTP_compressionDarkByte
07.07.2017 09:38-1Допустим я в курсе. И что?
avost
07.07.2017 13:02+4Вероятно то, что даже если скрипт-зловред скачает ваш r.zip у него не будет ни одной причины пытаться его распаковывать. Или вы полагаете, что таки придёт надзирающий за скриптом скрипт-кидди, увидит скачанный файл и из любопытства полезет в него ручками? Но зачем ему это?
DarkByte
07.07.2017 13:15Не знаю даже, зачем сканеры бродят по интернету и пытаюсь скачать backup.zip и прочие перечисленные файлы. И они не просто проверяют их наличие, а скачивают их зачем то. Предполагаю, что после загрузки они их распаковывают, и не знаю даже почему, но мне думается, что некоторые это делают автоматически. Можно даже предположить, что некоторые из них делают это рекурсивно, составляя список файлов содержимого архива. И да, это не тот же самый способ, который описан в статье, это просто из той же оперы — приколов над сканерами и ботами.
GennPen
07.07.2017 13:37Предполагаю, что после загрузки они их распаковывают, и не знаю даже почему, но мне думается, что некоторые это делают автоматически. Можно даже предположить, что некоторые из них делают это рекурсивно, составляя список файлов содержимого архива.
Подсунуть им рекурсивный zip-архив или архив в 42 КБайт который после всей распаковки занимает 4.5ПБайт, пусть подавятся.DarkByte
07.07.2017 13:44Именно указанные в статье рекурсивные zip/gz/tgz архивы сейчас и отдаю, в надежде что их кто-нибудь, когда-нибудь распакует до конца.
avost
07.07.2017 16:29Ну, они же что-то конкретное ищут, а не просто весь мусор собирают по интернету. если б я писал что-то подобное, то делал бы что-то вроде:
unzip -l backup.zip ¦ grep etc/passwd
но могут быть и совсем глупые скрипт-кидди, конечно.
zapimir
07.07.2017 13:30Разница в том, что отдача ответа в виде gzip это естественная реакция сервера. Тут получается неожиданным только размер этого самого ответа, и для клиента ответ выглядит, как будто очень большая html страница пришла (ну мало может там где-то ошибки в цикле выпадали). А поскольку сканеру нужно прочитать, что же там в ответе. Нужно сразу сделать декомпрессию. И тут уже зависит от конкретной реализации. А учитывая, что в основном разработчики не ожидают такой подставы, то декомпрессия ответа идет в лоб, т.е. тупо в память на лету, не делая декомпрессию только начала ответа или прочих оптимизаций.
А в случае с zip сканер видит левый Content-type, и либо вообще не читает ответ с таким типом дальше заголовков, либо скачивает, но ничего с ним дальше не делает (так как для этого в отличии от первого случая, нужно отдельно обрабатывать конкретно zip, а в сканере вероятно даже нет zip-ридера).DarkByte
07.07.2017 13:40Разница в том, что подходы разные. В моём комментарии описано совсем не тоже самое, что в статье. И в моём случае скорее прикол в limit_rate, чем в зип-бомбе. И действительно не будет проблем с занятой памятью при попытке скачать файл. Просто файл будет качаться очень долго.
Про левый content-type не понял. Если клиент запросил zip файл, то чем его может тип application/zip не устроить? Форматирование комментариев хабра съело строку. Если что, то строка выглядит так:
"^/(archive|auth|backup|clients|...|site|sql|website|wordpress)\.zip$" {
zapimir
07.07.2017 13:55Ну да у вас location обрезается, и складывалось ощущение, что вы вместо html страничек отдаете zip-ы.
x88
07.07.2017 09:29Я написал (реверс) прокси-прослойку между php-fpm и точкой входа, анализирующую источник, uri, параметры запросов на предмет наличия XSS, инъекций. Успешно оберегаются даже дырявые скрипты. В планах полное покрытие OWASP. Если кому то необходимо, обращайтесь за бинарниками.
renesanso
07.07.2017 11:49Есть подобные вещи для apache2 и nginx https://habrahabr.ru/post/228339/ https://github.com/SpiderLabs/ModSecurity-nginx https://habrahabr.ru/post/145241/
Хотелось бы узнать, чем Ваше решение лучше, и можно ли получить исходники (с точки зрения безопасности, запускать чьи-то бинари в продакшене — это не вариант)?
selivanov_pavel
08.07.2017 00:13Вы написали собственный Web Application Firewall? Их уже существует достаточно много, из открытых — ModSecurity(для apache и nginx) и Naxsi(только для nginx). Чем больше — тем лучше, выкладывайте свой куда-нибудь на github
IvanGur
07.07.2017 09:35+1Не ZIP бомба, а даже скорее наоборот, но очень эффектно работает:
https://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-TARPIT
mike_y_k
07.07.2017 09:35Спасибо за перевод и за напоминание ;).
Хорошо забытое старое и отличный метод не только для WP.
lightmg
07.07.2017 09:35Edge сначала подвис, продолжая кушать оперативку, а потом просто выдал тот же алерт, что и при открытии страницы был.
vesper-bot
07.07.2017 11:53Он упал, "втихаря" переоткрыл вкладку и заново загрузил предыдущий URL. IE11/Edge так себя ведут при фатальных ошибках или срабатывании watchdog timer на какой-либо вкладке.
mSnus
07.07.2017 09:35+2Броузеры понятное дело, качают целиком. Но надо быть совсем тупым скрипт-кидди, чтобы не ограничить длину читаемого буфера хотя бы 8К… тем более, если парсишь сотни страниц.
winmasta
07.07.2017 09:35+1grep 'authentication failures' /var/log/auth.log
ни одной попытки
Linux Mint Chrome Версия 57.0.2987.133 (64-bit)
Тупо долго писал файл на диск, с притормаживаниями конечно, но работать даже можно было. При закрытии вкладки долго удалял. В терминале вообще без проблем.
mtt
07.07.2017 09:40+1Интересно, как будет работать оборудование, скажем у конечного провайдера, которое гипотетически сохраняет весь траффик пользователя? По сети реально передается 10 мегабайт, но чтобы понять содержимое их нужно распаковать. Если есть возможность сохранять их в нераспакованном виде, то это будет просто помойка неиндексированной информации, не поддающейся анализу. А если распаковывать и анализировать, то этому гипотетическому провайдеру понадобятся эти самые петабайты.
Areso
07.07.2017 09:56А зачем провайдеру это анализировать? Хэш подобьет и будет из кэша отдавать. А анализировать уже другие люди будут, если заинтересуются.
mtt
07.07.2017 10:02Как провайдер будет понимать, что файл не изменился? Никаких заголовков разрешающих кэширование не передается
sumanai
07.07.2017 17:08Если хеш не изменился, то и файл не изменился.
mtt
07.07.2017 17:27Если никакие специальные заголовки не используются, то чтобы понять что хеш не изменился нужно скачать файл и посчитать его хеш. То есть скачивание с сервера полного файла всё равно произойдет.
А вообще, я ни разу не встречал такого провайдера, который бы кэшировал абсолютно весь контент всех юзеров на основе хешей. Да, сервисы вроде cloudflare умеют это делать, но это специальный случай, во всех остальных вариантах запрос без кэширующих заголовков всегда дойдет до сервераsumanai
07.07.2017 18:26Я думал, этот вопрос относился к закону яровой.
mtt
07.07.2017 18:32+1Вопрос технический, как современное оборудование записывающее траффик пользователей поступает с gzip компрессией: распаковывает или нет?
artskep
09.07.2017 14:52Трафик по уму (и закону, ЕМНИП) должен писаться весь. Ибо даже в «чистом» TCP
payload стеганографически передать можно очень много чего — я уж не говорю об уровне HTTP.
А вот какое оборудование используется, используется ли и пишет ли оно что-нибудь вообще — это вопрос на который ответ мы навряд ли узнаем.
152rus
07.07.2017 10:02старенький комп, 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
ExplosiveZ
07.07.2017 10:47Firefox 54 amd64, 1 ядро загрузилось на 100% и так было до конца загрузки, в системе было занято всего 1.7gb, эта отметка так и не сдвинулась с места.
Во время теста:
После теста:
p.s. открыто 12 вкладок, 15 расширений.Chosen0ne
09.07.2017 14:39То же самое, никаких ошибок, тормозов и прочих негативных эффектов. Просто тихо открылась в фоне.
Alesh
07.07.2017 10:53+5Это же детский сад, причем младшая группа:
Ну во первых «Я сообщал эти IP их провайдерам», это просто супер) Но вряд ли большинство владельцев этих IP даже подозревают, что имеют какой-то IP адрес.
Второе, такие «закладки» будут иметь смысл только для «борьбы» с «хакерами», находящимися на том же уровне, что и админы настраивающие root по ssh с паролем «123qwe».den_golub
07.07.2017 13:24+1админы настраивающие root по ssh с паролем «123qwe».
Ну что началось нормально же общались… </sarcasm off>
dmitry_dvm
07.07.2017 12:35Хм, эдж не отвалился, а вот Adguard что-то подзалип.
Заголовок спойлераAndronas
07.07.2017 13:26Наверно что то не понимаю но почему сканер должен скачать эту вашу zip бомбу
jamakasi666
07.07.2017 14:02+1gzip в браузере используется для сжатия. Типа вместо того чтобы передавать 100 мегабайтов html странички сервер ее жмет в gzip, передает клиенту в браузер, браузер достает ее из gzip и показывает. В общем смысл в том что браузер автоматически распаковывает содержимое и пытается отобразить но т.к. распаковывать придется 10 гб то велика вероятность что браузер\программа упадет из за нехватки ОЗУ. Как то так в общем и целом.
TheOleg
08.07.2017 05:53Но ведь как мне помнится, тот же nikto, просто проверяет ошибка вернулась или нет, не залезая в сам файл.
vlreshet
07.07.2017 13:50+7Помню был пост о мужике который сделал «файл» типа db.backup.zip, который отдавался с мизерной скоростью, запрещал докачку, и по факту бесконечно отдавал /dev/urandom. И холодными зимними вечерами автор попивал пиво и смотрел на логи, и на то как кто-то докачивал уже 60гиг.
StagNEz
07.07.2017 13:53Yandex-браузер, Win10, 8GB RAM + SSD. Три раза сбрасывал память, потом выдал ошибку и невозможности отобразить страницу. Ничего не подвисало и не влияло на работу остальных программ
maxfox
07.07.2017 13:53Chromium под Linux загружает одно ядро в течении пяти секунд, расход памяти вырастает до 1.5Гб (С 750Мб). Через пять секунд выдает ошибку «Something went wrong while displaying this webpage».
Python-скрипт с requests.get выжирает всю доступную пямять, после чего убивается системой.
Curl без параметров просто скачивает 10Мб файл.
Curl c --compressed выжирает всю доступную память и одно ядро и честно сохраняет 10Gb файл. Около 30 сек.
Вообще, для простых сканеров уязвимостей это может действительно стать проблемой, скорее всего процесс будет убиваться системой, как в случае с python-скриптом. Но пофиксить это будет несложно.
exit999
07.07.2017 15:52-5Google Chrome 59
Перед запуском страницы явно спрашивает:
Do you really want to execute the gzip bomb? your device may freeze up
OK Cancelnightvich
07.07.2017 16:13+8Продолжайте думать, что это вам хром сказал.
exit999
07.07.2017 16:29-5Ну я это к тому, что Хром анализирует содержимое и не запускает просто так. Так что «Бомбой» для него этот способ можно назвать с большой натяжкой.
atomlib
07.07.2017 16:54+7Вот код страницы:
<script> var r = confirm('Do you really want to execute the gzip bomb? your device may freeze up'); if (r == true) { document.location.href='?bombme=true' } </script>
relia
07.07.2017 16:29-2Не надо путать сами знаете что с пальцем:
Это никакая не защита, а просто «бомба», на которой чаще всего может «подорваться» хакер, но так же и абсолютно невинные. Просто еще один рассадник какашек в Интернете.
PS
В свое время, после 3-го за полгода дефейсинга моего сайта, решил эту проблему намного проще — ушел с Wordpress на другую CMS.mayorovp
07.07.2017 16:54+1Зачем "абсолютно невинный" станет заходить в несуществующую админку чужого сайта?
relia
07.07.2017 16:57Криворучки иногда ТАААКИЕ URL набивают, что на голову не налазит :)
avost
08.07.2017 01:35+2Если некто желает получить странного, то он его и получит. Не вижу проблемы.
relia
09.07.2017 13:21+3Если некто желает получить странного, то он его и получит. Не вижу проблемы.
Согласен:
Берем ссылку на «твою» бомбу, оформляем короткой ссылкой вида goo.gl/… и постим ее в Твиттере с текстом вроде «Только в течение 10 дней Google дарит на 2 года 1ТБ места на Google Drive зарегистрировавшимся по этой ссылке» на 6...8 языках. И потом можно запасаться попкорном в ожидании что произойдет быстрее: хостер от вала abuse reports потушит твой сайт или его пессимизируют поисковые системы. :)equand
09.07.2017 14:58От второго защитить robots.txt от первого здравый хостер.
relia
09.07.2017 15:12Хостер и будет защищать. Через потушение сайта до дальнейших разбирательств.
robots.txt защищает от пессимизации поисковыми системами? рукалицо…
PS
Почему здесь школота может минусить то, что ставит под сомнение ее «право» на гадости, а я даже плюсануть никому не могу? :))
avost
09.07.2017 15:52-1… а в Киеве дядька. Я вам даже больше скажу, если вы произведёте акт дефекации на красной площади, то вас заабьюзят почти немедленно. И это тоже не имеет ни какого отношения к обсуждаемой теме. ;)
iig
08.07.2017 13:30Если на хосте сайта на WP нет — смысла грузить бота бомбой не вижу. Разве что из мелкопакостных побуждений :). Если сайт есть, но админка переименована — рано или поздно найдут и постучатся.
jaiprakash
08.07.2017 13:49Чтобы владелец/хостер заражённого сайта заподозрил неладное и принял меры.
frees2
07.07.2017 17:56Когда то решил отделить роботов от людей, было ещё лет 10 назад, если не раньше. Все правильные боты были тогда известны поимённо, списки составляли. Своих ботов пропускать — чужих не пущать.
Кстати, гугловские роботы обходят удалённые пол года назад файлы, которые им почему то понравились.
Okja.2017.720p.webrip.x264-strife.mkv
2,63 ГБ (2 830 701 235 байт)
записал в .gzip
2,62 ГБ (2 824 789 599 байт)
wp-login.php
Кажить какой то сервер уже полетел, вообще не приходят.mayorovp
07.07.2017 20:41Ссылки в инете на эти файлы остались, вот и стучится робот.
frees2
07.07.2017 22:06Так понятно, можно гугл нечаянно подставить.
В давности, когда делал выборку, гугла бота решил на текстовую страничку отправлять, но бот таки выследил и письмо прислал, мол, гугл перестанет рекламу показывать и конкретную причину указал. Таки наказал, перестал свои ролики загружать мне во флеш.
Есть такие которые имитируют гугл в заголовках USERAGENT, 'PHP Bot'
Ещё кроме wp боты прокси всякие ищут.
proxy.php' not found or unable to stat
iig
07.07.2017 18:54+3Статья началась с попыток подбора пароля по ssh
grep 'authentication failures' /var/log/auth.log
, а закончилась "бомбой" вместо админки Wordpress :(
selivanov_pavel
08.07.2017 00:34+1Смысла устраивать какие-то проблемы сканирующим вас хостам я не вижу — этот как убивать комаров в лесу: сил и энергии потратишь много, а толку чуть. Надо брызгаться репеллентами(писать защищённые приложения) и спокойно ходить по лесу. В крайнем случае — надевать накомарник(Web Application Firewall).
Но мне нравится идея, что таким образом можно сильно нагрузить аппаратуру провайдера, использующего DPI. И по изменению времени отклика косвенно определить, имеется ли там этот самый DPI. Ели реализация DPI кривая — может даже получится положить это оборудование на короткое время, что уже 100% скажет об использовании DPI.
frees2
08.07.2017 09:37wp-login.php
Ну вот смотрю с утра, таки всех убил роботов, одним ударом терминаторным! Чё то у них сломалось, там были разные адреса, но видимо машина одна или несколько.
В общем в день было около пяти-десяти wp.
alex946
08.07.2017 10:52Помнится, когда-то давно, когда деревья были ниже, а винда зеленее, я отправлял любителям подбирать пароли двухмегабайтный «пинг смерти». Очень, очень было эффективно.
jaiprakash
08.07.2017 11:04+1Есть ещё один момент: у меня хостер периодически проверяет архивы на вирусы (и ругается на логи апача с неудачными попытками инъекций). Хотя 10 Гиг это не 4,5 ПБ, может и прожуёт.
frees2
09.07.2017 13:31Скрипт немного недоделанный. Бота имитирующего браузер как ни странно трудно сделать, если на php, надо два curl использовать, сначала читать заголовок, первый определяет по заголовку странички print_r, паре строк надо туда лезть или нет… Ну да ладно. Надо отделить ботов от браузеров.
Chrome/iOS — «при работе с этой страницей произошла ошибка».
У меня ошибку не выдает. Но роботы пропадают.
saaadel
11.07.2017 16:43-1ИМХО, чтоб не засудили, надо что бы было предупреждение об угрозе — как при входе на участок «осторожно злая собака». Более общее — «входить запрещено, опасно для жизни. И мельче: входя без разрешения вы автоматически соглашаетесь с условиями и несете ответственность за свою жизнь на участке...» (конкретней юрист сформулирует, по формату «AS IS»). И там уж пей метанол в «водке» или еще какую дрянь — вас предупреждали.
В контексте вашего кода, его бы усложнить, и на первую попытку выдавать текст — «бла-бла, вход запрещен, если вы хакер и продолжите атаку, вы согласны принять ответные меры в ваш адрес...»
Ну, а на последующую 2-3 атаку высылать бомбу или эксплоит.
С точки зрения запроса браузером — первая попытка — Access Denied, и человеческая приписка. А уж если вы «лицензионное соглашение» не прочитали — ваши проблемы.
Draku1a
12.07.2017 03:27[Обновление] Теперь я в каком-то списке спецслужб, потому что написал статью про некий вид «бомбы», так?
Хах! Наши спецслужбы реагируют на три слова: «заговор, Путин, бомба» ))
Интересно, если девушку назвать «секс-бомбой», спецслужбы её тоже в особый список занесут?))
По статье — весьма интересная идея!
skeletor
12.07.2017 15:12А почему ни слова о curl? Вряд ли кто-то из браузера берёт и сканит ваш сайт. Для скана пишут shell/python/… скрипты, которые используют либо libcurl, либо что-то очень аналогичное.
MrRitm
12.07.2017 15:12Очень было интересно, что будет с моей машинкой на которой Zram настроен. А ничего! Ну притормозил малость (переключение между вкладками FF было медленнее чем обычно и скролл подтупливал), но в течение 1 минуты прогрузилась страница с сюрпризом и тормоза закончились. Никаких ошибок и прочего. 8 гигов памяти и обычный хард (не SSD). Тема интересная, сам как держатель небольшого хостинга на 1,5 сотни сайтов подумываю об активной защите ибо не все сайты реально обновить (я имею в виду обновление CMS) да и дырки в том, что товарищи программисты выкатывают тоже встречаются. Но пока ничего толкового не придумал. Буду очень признателен за советы :-)
LRC
Фидо вспомнилось, давно это было
monah_tuk
Аркмыльньная война,
Коннект V42,
Модем сошёл с ума-
Такая связь достала...
igorp1024
То ли Би-2 "Полковнику никто не пишет", то ли Земфира "Созрела". :)
monah_tuk
Первое :)
barbanel
Эх, вспомнилась фраза из одной эхо-конференции:
— ЗаUUEчить бы тебе q3arena.pak!
— Я тебе щас своп заюючу!
vorphalack
«собирайтесь хабы в кучу, щас я своп вам заЮЮчу». ну и таки с развитием fido over ip, народ начал пытаться устроить DDoS ради прикола.