Это бомба!
9 августа 2019
Выпуск о zip-бомбах вызвал читательский интерес, так что мы решили вернуться к этой теме еще раз.
Нас спрашивали: сколько ресурсов расходуется при проверке бомб, упомянутых в том выпуске. Отвечаем скриншотами. Вот данные по процессору:
А вот память (использована тестовая виртуальная машина с очень малым объемом памяти):
Из изображений видно, что лишь в начале проверки возникает небольшой «горбик».
Вернемся к собственно бомбам. На самом деле их много, и бывают они самыми разными. Например, вы наверняка знаете, что изображения могут сохраняться в файлах с потерей качества и без. Форматы без потери качества – это, по сути, чистые архивы. Алгоритм сжатия пробегает по строчкам изображения и, если видит ряд одинаковых пикселей, пишет в файл: мол, тут столько-то таких-то пикселей. Чем это чревато? Создаем огромную картинку из одинаковых элементов. В виде файла она будет весить очень мало, а вот программе для ее отображения потребуется очень много ресурсов.
В архиве на 420 байт – файл PNG размером 6 132 534 байт (5,8 МБ) и изображением 225 000 х 225 000 пикселей (50,625 гигапикселей). В пиксельном буфере с тремя байтами на пиксель картинка займёт примерно 141,4 ГБ.
Картинка почти полностью состоит из нулей, с секретным сообщением в центре. Для лучшего сжатия используется однобитное цветовое пространство, хотя большинство программ для рендеринга графики всё равно резервируют по три бита на пиксель и разворачивают картинку в 141,4 гигабайта.
Заходите вы на некий сайт, видите «превьюшку» картинки, скачиваете ее – и...
Исследователь написал два небольших PHP-скрипта, которые определяют подозрительные user-agent. Так, если злоумышленники пытаются использовать сканер уязвимостей, или через браузер запрашивают доступ к защищенным или приватным страницам (бэкэнду, панели администрирования, страницам, содержащим формы регистрации и входа), скрипты подменяют обычное содержимое страницы ZIP-бомбой. Как только клиент атакующего получит такой архив, злоумышленника ждет неизбежный аварийный отказ.
Если вам нравится рисковать, попробуйте сами!
А есть еще «фавиконы» (favicon) – картинки, отображаемые слева от адресной строки браузера. Вот в связи с этим старая «шутка»:
Энтузиасты-извращенцы в качестве фавикона выкладывали своим посетителям 10GB-файл мультиков в HD.
Остается утешаться тем, что фавикон-иконки размером в 10Gb — это не самое страшное, что может случиться с вами в жизни.
Сложно ли сделать бомбу? Зависит от целей. Подчас – проще простого:
Это легко сделать в Linux с помощью следующей команды:
dd if=/dev/zero bs=1024 count=10000 | zip zipbomb.zip -
Замените счетчик количеством КБ, которое вы хотите сжать. В приведенном выше примере создается 10-мегабайтная молния (не большая часть бомбы вообще, но она показывает процесс).
Вам НЕ нужно место на жестком диске для хранения всех несжатых данных.
Команда dd создает поток нулей и отправляет их на вход архиватора. Тот получает их и на лету упаковывает в архив.
Это вариант с практически бесконечным файлом. Еще есть вариант с почти бесконечным количеством вложенных каталогов в архиве:
Из Security Focus доказательство концепции (NSFW!), это ZIP файл с 16 папками, каждый с 16 папками, который продолжается (42 - это имя zip файла):
\42\lib 0\book 0\chapter 0\doc 0\0.dll
...
\42\lib F\book F\chapter F\doc F\0.dll
Вероятно, я ошибаюсь с этой цифрой, но она создает 4 ^ 16 (4 299 967 296) каталогов. Поскольку каждому каталогу требуется пространство для размещения N байтов, оно становится огромным. Файл dll в конце – 0 байт.
Распакованный только первый каталог \42\lib 0\book 0\chapter 0\doc 0\0.dll
приводит к 4 ГБ пространства для размещения.
В чем опасность вложенных каталогов? Это связано с рекурсией. Обнаружив файл, архиватор запускает определенную процедуру (в данном случае – распаковки). Если в ходе распаковки найден еще один архив (вложенный в распаковываемый), то распаковка текущего уровня приостанавливается, сохраняется окружение, и вызывается та же процедура, которая уже работала. Когда вложенная распаковка завершит работу, то при возврате из процедуры окружение восстановится автоматически и продолжится прерванная распаковка. Но если встретится еще один уровень, а затем еще... Всё время сохраняется окружение. А ресурсы программы на сохранение окружения, в том числе стек программы (если интересно, что это – пишите, расскажем), ограниченны и исчерпываются. Далее возможны варианты: либо программа «падает», либо возникает так называемое исключение, и распаковка аварийно завершается – вирус внутри остается ненайденным. Но это, конечно, в случае обычных программ. Антивирус же обязан распаковать до упора.
Если хотите сделать всё вручную, есть рецепт:
Шаги, которые я сделал до сих пор:
- создайте файл с размером 1,4 ГБ, полный '0'
- сжать его.
- переименуем .zip в .txt, затем сделаем 16 копий.
- сжать все это в .zip файл,
- переименовать переименованные .txt файлы внутри .zip файла в .zip снова,
- повторите шаги от 3 до 5 раз.
- Наслаждайтесь:)
Хотя я не знаю, как объяснить, где сжатие переименованного zip файла все еще сжимает его в меньшем размере, но он работает. Может быть, мне просто не хватает технических терминов.
Если интересует теория, можно заглянуть, например, сюда.
Антивирусная правДА! рекомендует
Во многих странах «активная защита» приравнивается к хакингу и является уголовно наказуемой. Например, в Германии.
Это как подключить электрошокер к двери в квартиру или поставить у входа капкан для воров.
Мы крайне не рекомендуем использовать бомбы любых видов ни в качестве шуток, ни в качестве защиты. Но важно понимать, как это может быть использовано против вас.
Нам важно ваше мнение
Чтобы оставить комментарий, нужно зайти через свой аккаунт на сайте «Доктор Веб». Если аккаунта еще нет, его можно создать.
Комментарии пользователей
Саня
18:40:41 2019-09-16
1601iii
15:57:21 2019-08-14
Чё?
Поток ничего создаёт ваша команда? XD
s.pyshko@101admin.ru
11:59:49 2019-08-13
оно конечно хорошо - пытаться автоматизировать борьбу с угрозами.
но как приложение отличит резко возникшую нагрузку на проц, если это не zip бомба, а Вы сами запустите архиватор или что либо более ресурсоемкое?
Любитель пляжного футбола
23:51:17 2019-08-11
@Пaвeл, с днём рождения! Всего самого хорошего!
Извините, что не мог поздравить раньше, не заходил сюда два дня.
Татьяна
11:17:33 2019-08-11
marisha-san
08:08:24 2019-08-10
razgen
01:04:13 2019-08-10
Lia00
00:26:01 2019-08-10
Andromeda
23:56:18 2019-08-09
Альфа
23:43:37 2019-08-09
Шалтай Александр Болтай
22:37:22 2019-08-09
Dvakota
22:27:01 2019-08-09
Toma
22:07:01 2019-08-09
tataku
20:42:52 2019-08-09
Результат - вечно загружающаяся страница, но ни намёка на крах или тормоза. FF.
orw_mikle
20:18:43 2019-08-09
matt1954
20:03:33 2019-08-09
anatol
19:58:27 2019-08-09
Masha
19:43:00 2019-08-09
Masha
19:42:16 2019-08-09
robot
19:28:09 2019-08-09
Геральт
19:14:56 2019-08-09
Татьяна
19:09:05 2019-08-09
Татьяна
19:06:24 2019-08-09
Dmur
18:15:32 2019-08-09
sanek-xf
17:53:17 2019-08-09
Natalya_2017
17:49:48 2019-08-09
Oleg
14:37:09 2019-08-09
I23
12:52:10 2019-08-09
Lenba
12:47:07 2019-08-09
I46
12:25:33 2019-08-09
maestro431
12:16:26 2019-08-09
Денисенко Павел Андреевич
11:49:35 2019-08-09
Zserg
11:26:00 2019-08-09
Неуёмный Обыватель
11:04:04 2019-08-09
vinnetou
10:55:01 2019-08-09
EvgenyZ
10:30:22 2019-08-09
L1t1um
10:27:25 2019-08-09
dyadya_Sasha
09:58:35 2019-08-09
DrKV
09:45:45 2019-08-09
Даёшь статью про правильное понимание действия наркотиков... Мы должны знать как это работает! ))
Alexander
08:39:45 2019-08-09
Подобные "архивы" - это опасный вид цифровой болезни... И очень хочется, чтобы эта мерзость не встретилась на моём пути. Уверен, что Dr.Web Security Space не допустит "развлечений" такой заразы на моём компьютере...
Пaвeл
08:13:11 2019-08-09
Vlad X
07:56:32 2019-08-09
Пaвeл
07:54:43 2019-08-09
tigra
07:38:18 2019-08-09
Любитель пляжного футбола
07:19:13 2019-08-09
Пойду ещё в автомобиле капкан установлю позубастее да с цепью попрочнее, чтоб не перепилили. :)))
@Sasha50, как я понял, Dr.Web защитит только от вирусов, спрятанных в бомбах, но не от самих бомб как таковых. Т.е. если вирусов нет, то просто взорвёшься.
ka_s
06:26:11 2019-08-09
Korney
05:59:33 2019-08-09
Morpheus
04:51:35 2019-08-09
Sasha50
03:45:27 2019-08-09