Среднее время прочтения — 6 мин.

Файлы, сжатые так сильно, что могут быть вредоносными, существуют уже пару десятков лет. Однако один исследователь только что представил совершенно новую zip-бомбу, которая превращается из 46-мегабайтного файла в 4,5-петабайтные данные. 

Читает Глеб Иванов
Подкаст на YouTube, Apple, Spotify и других сервисах

За 30 лет с момента появления zip-формата сжатые файлы стали широко использоваться — и не всегда в благих целях.

И да — то, что программист и инженер Дэвид Фифилд недавно сделал с файловым форматом zip вписывается именно в эту категорию. По сути, Фифилд изобрел новую zip-бомбу («сжатую бомбу») — разновидность вредоносной программы, в которой zip-файл размером всего в несколько килобайт сжат настолько, что при распаковке он  полностью заполняет ваш жесткий диск. А потом и переполняет.

Подобные файлы не являются чем-то неслыханным. Новизна методов Фифилда, описанных в статье на его сайте, состоит в том, что они не «рекурсивны» (то есть не построены по принципу русской матрешки, когда файлы становятся тем тяжелее, чем больше слоев zip-файла вы распаковываете). Вместо этого исследователь выяснил, как «перекрывать» файлы внутри zip-архива, тем самым сжимая их куда сильнее, чем обычно. Больше всего впечатляет случай, когда ему удалось сжать 4,5 петабайта данных до файла в 46 мегабайт. 

Это — новейший поворот в истории вредоносных программ, которые не являются вирусами, но все же могут помешать работе вашего компьютера.

Как появились zip-бомбы

Так на чем же основаны zip-бомбы? Для начала — немного истории и пояснений. История формата zip берет отсчет в 1988 году, когда Фил Кац, программист и пользователь BBS (Bulletin Board System — формат электронной доски объявлений, работающей при коммутации через телефонные сети — прим. Newочём) получил судебный иск по поводу созданной им программы-архиватора, работавшей с форматом [сжатия данных] .arc. В ответ на это Кац создал новый алгоритм сжатия, который не был совместим с существующим форматом, но открыто распространялся и оказался чуть лучше. Это привело к тому, что его формат фактически стал стандартным.

(Вместе с успехом и известностью, которые Кацу принесло его творение, в личной жизни он испытывал серьезные проблемы; в 2000 году программист умер от расстройств, связанных с алкоголизмом, в возрасте 37 лет. Его история увлекательна и трагична, если вы захотите узнать больше).

Zip-формат и подобные ему хорошо работали на досках объявлений и FTP-серверах (FTP, File Transfer Protocol — протокол передачи данных, предшественник HTTP — прим. Newочём) и стали повсеместными благодаря условно-бесплатной модели распространения и из-за включения формата в операционные системы Windows и Macintosh. Однако их метод сжатия позволял злоупотребления совершенно нового рода. Одна из причин, по которой существование zip-бомб стало возможным, во многом связана с тем, как работают алгоритмы сжатия. Если говорить о высоком уровне, то системы сжатия берут повторяющуюся информацию в сжатом архиве и сокращают повторения до минимума. Вот почему MP3-файл, который уже сжат, не сжимается так сильно, как стандартный текстовый файл.

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

В результате такой файл в принципе бесполезен — если только не используется в качестве инженерного упражнения и за исключением случаев, когда нужно справиться с некоторыми антивирусными программами (которые часто сканируют сжатые файлы, чтобы обнаружить возможные вирусы).

Согласно презентации, представленной в 2015 году на симпозиуме по безопасности USENIX, первое появление zip-бомбы в ее естественной среде датируется 1996 годом, когда файл был загружен в сеть досок объявлений «Фидонет» с конкретной целью заставить администратора открыть файл. (Текстовый файл, посвященный инциденту, позволяет предположить, что прошло все, мягко говоря, не слишком хорошо.) К 2001 году эксперты по безопасности начали беспокоиться: соответствующая ветка в почтовой рассылке для обмена информацией BugTraq (эта рассылка была создана для распространения сведений об уязвимостях в программном обеспечении —  прим. Newочём) привлекала внимание как исследователей безопасности, так и популярного сайта о технологиях The Register.

Вскоре после этого появился самый знаменитый образец zip-бомбы, 42.zip, чей создатель до сих пор неизвестен, но чья степень сжатия — 106 миллиардов к 1 — легендарна. В интервью, данном по электронной почте, Дэвид Фифилд отметил, что, хотя 42.zip (размещавшийся на одном и том же сайте на протяжении 15 лет) привлекает больше всего внимания, он считает последующие попытки куда более интересными в техническом плане.

«Меня 42.zip вдохновляет на эстетическом уровне — не столько сам файл, сколько сложившиеся вокруг него обстоятельства, — сказал Фифилд. — Это как фольклор. Должно быть, было много примеров одной и той же базовой идеи, но по какой-то причине 42.zip ⸺ это тот файл, сила которого не слабеет».

Экстремальное сжатие

На протяжении многих лет zip-бомбы оставались чем-то вроде вредоносного новшества, которое время от времени показывает себя в разных контекстах. Мой любимый пример из 2017 года, когда IT-блогер, уставший от попыток ботов авторизоваться на его сайте на базе WordPress (система с открытым кодом для управления и кастомизации сайтов — прим. Newочём), создал собственную разновидность zip-бомбы на основе формата gzip, воспользовавшись встроенным во многие браузеры сжатием, чтобы нарушить работу ботов, пытавшихся проникнуть на его сайт.  

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

Однако для таких файлов имелось естественное препятствие: большинство подпрограмм распаковки zip в высшей точке ограничиваются коэффициентом сжатия 1032 к одному, что означает, что zip-бомбы могут только рекурсивно раскрыть свой истинный потенциал сжатия. Например, файл 42.zip, который весит чуть больше 42 килобайт при полном сжатии, содержит более сложные zip-файлы, разбитые по 16 штук на каждый из нескольких слоев одного архива. При полной распаковке документы занимают 4,5 петабайта — это так много, что стало бы испытанием для cамого высококлассного сервера, который вы только могли бы купить.

Более поздние эксперименты по сжатию (собирательное их название — zip-квайны (квайн — самовоспроизводящаяся программа, выводящая свой собственный код — прим. Newочём)) допускали бесконечную рекурсию и поэтому могли распаковываться, так никогда и не достигая конечной точки. (Фифилд признался, что этот формат вдохновил его на создание собственного файла.)

Но что делает работу Фифилда действительно интересной, так это то, что она превышает коэффициент сжатия 1032 к одному путем накладывания файлов друг на друга во время процесса сжатия, создавая более плотно упакованный файл в одном слое без рекурсии. Хотя его результаты менее сжаты, чем у 42.zip, файл эквивалентного размера при распаковке достигает лишь скромных 5.5 гигабайт. Но чем больше размер, тем значительней степень сжатия — до 281 терабайта при обычных 10 мегабайтах zip-файла.

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

Фифилд отметил, что отчасти его работа стала возможной потому, что он придумал, как использовать циклические проверки избыточности или CRC-алгоритмы — базовую функцию корректировку ошибок, встроенную в zip, PNG, Ethernet и множество других технических стандартов. Фифилд также сказал, что лучше всего он изучил контрольные суммы CRC-32.  

«Если вы покопаетесь в истории коммитов исходного кода, то увидите, что некоторые из самых ранних ⸺ это мои попытки справиться с контрольными суммами», ⸺ сообщил он в электронном письме. 

Действительно ли они опасны?

Теперь, если быть честным, вы вряд ли столкнетесь с zip-бомбой, и даже если столкнетесь, то многие современные антивирусы и программы сжатия смогут обнаружить некорректный файл. Одолеть zip-бомбу не так уж сложно. «Обнаружить zip-бомбы определенного класса, которые мы разобрали в этой статье, очень легко: просто ищите перекрывающиеся файлы», ⸺ писал Фифилд в своей статье.

Однако инструменты декомпрессии в настоящее время неспособны к проверке по этому параметру, что дало возможность для тестирования. И даже тогда худшим исходом для программ, протестированных Фифилдом и другими (включая LibreOffice и антивирус McAfee), стало лишь их «зависание». Как отметил в Twitter пользователь Tavis Ormandy, некоторые антивирусные программы даже правильно распознали zip-бомбу, несмотря на то, что это был ее новый тип.    

Фифилд представит свои выводы на конференции USENIX в рамках семинара по наступательным технологиям (Workshop on Offensive Technologies, WOOT) в следующем месяце. Ученый отметил, что сама работа является лишь дополнением к истории исследований и, вероятно, будет вытеснена в будущем, однако для повышения осведомленности она важна.

«Я надеюсь, что одним из позитивных последствий [моей работы] станет повышение среди разработчиков осведомленности об опасностях работы со сложными форматами архивов — таких как zip, ⸺ добавил он. — Это помогает получить конкретные результаты: обозреватели кода, клиенты и пользователи, по крайней мере, смогут указать на это исследование и спросить, все ли делается правильно, чтобы справиться с этим

По материалам Vice
Автор: Эрни Смит

Переводила: Анастасия Ященко
Редактировал: Сергей Разумов