- PVSM.RU - https://www.pvsm.ru -

Атака BitErrant с коллизиями SHA-1: создаём разные .exe с одинаковым файлом .torrent

Атака BitErrant с коллизиями SHA-1: создаём разные .exe с одинаковым файлом .torrent - 1

23 февраля 2017 года сотрудники компании Google и Центра математики и информатики в Амстердаме представили первый алгоритм генерации коллизий для SHA-1 [1]. Эта находка стала результатом двухлетнего исследования, которая началась вскоре после публикации в 2013 году работы криптографа Марка Стивенса из Центра математики и информатики в Амстердаме о теоретическом подходе к созданию коллизии SHA-1. Он же в дальнейшем продолжил поиск практических методов взлома. Теперь вместе с коллегами из Google он опубликовал научную работу [2], в которой описаны общие принципы генерации документов с блоками сообщений, подверженных коллизиям SHA-1 (атака SHAttered [3]).

Сразу стало понятно, насколько опасной может быть атака, ведь устаревшая [4] криптографическая хеш-функция SHA-1 до сих пор широко используется, в том числе в приложениях и протоколах безопасности, включая TLS и SSL, PGP, SSH, S/MIME, IPsex. Хеши SHA-1 применяются в разных системах управления версиями Git, Mercurial и других для верификации содержимого и выявления повреждения данных (см. комментарий Торвальдса [5] по поводу коллизий в Git). Хеши SHA-1 используются даже в игровой приставке Wii для проверки подписи во время загрузки. Использование SHA-1 по закону требуется некоторыми правительственными организациями. И самое интересное для темы данной статьи — хеши SHA-1 применяются в пиринговом сетевом протоколе BitTorrent для обмена файлами через Интернет.

Вкратце, как работает BitTorrent, а именно, как устроен торрент-файл [6].

Атака BitErrant с коллизиями SHA-1: создаём разные .exe с одинаковым файлом .torrent - 2

Для раздачи файла через торренты на первом шаге нужно сгенерировать из этого файла (DATA) специальный торрент-файл с расширением .torrent (DATA.torrent). Оригинальный файл разбивается на определённое количество сегментов (chunks), для каждого из них вычисляется хеш SHA-1. Все полученные хеши соединяются вместе и хранятся в торрент-файле в строке pieces под общим ключом словаря. Длина этой строки равна 20 * количество кусков.

Атака BitErrant с коллизиями SHA-1: создаём разные .exe с одинаковым файлом .torrent - 3

Когда кто-то пытается скачать файл (DATA) через BitTorrent, сначала ему надо скачать торрент-файл DATA.torrent и распарсить его. Основываясь на информации из этого файла, клиент ищет пиров и скачивает сегменты оригинального файла (DATA). Чтобы защититься от пиров, которые пытаются подсунуть вредоносные данные, клиент сверяет каждый сегмент с его хешем из торрент-файла. Если хеш в торрент-файле не совпадает с хешем SHA1 в скачиваемом фрагменте, то плохой фрагмент отвергается.

Теперь вектор атаки становится понятен.

Атака BitErrant с коллизиями SHA-1: создаём разные .exe с одинаковым файлом .torrent - 4

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

И вот здесь начинается самое интересное.

Атака BitErrant [7]

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

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

Атака BitErrant с коллизиями SHA-1: создаём разные .exe с одинаковым файлом .torrent - 5

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

Демонстрация и инструментарий

biterrant_poc.zip [8]

В архиве два исполняемых файла EXE с различной функциональностью (во вредоносном файле реализована начинка Meterpreter [9] для фреймворка Metasplot, которая в данном случае начинает прослушивать все интерфейсы).

Пароль для расшифровки архива: biterrant.io

SHA1: eed49a31e0a605464b41df46fbca189dcc620fc5

Хороший файл на VirusTotal [10], плохой файл [11] там же.

Автор атаки BitErrant разработал соответствующий инструментарий [12] — фреймворк для генерации исполняемых файлов с одинаковыми .torrent. С помощью этого фреймворка можно помещать произвольную нагрузку в зашифрованную часть исполняемого файла и получить параметры для её вызова, которые затем помещаются в исполняемую часть файла. Потом на ваш выбор указываете невинные функции для подменяемой части хорошего файла. Затем питоновский скрипт генерирует два исполняемых файла — хороший и плохой — которые соответствуют одному файлу .torrent.

Пока что никто не применяет данную атаку для распространения файлов через официальные торрент-трекеры. Да и даже «хорошие» файлы с изменяемой функциональностью выглядят подозрительно для некоторых антивирусов. Так что опасность этой атаки не стоит воспринимать слишком серьёзно.

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

Автор: alizar

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/hesh-funktsiya/248245

Ссылки в тексте:

[1] первый алгоритм генерации коллизий для SHA-1: https://habrahabr.ru/post/322478/

[2] научную работу: https://shattered.io/static/shattered.pdf

[3] SHAttered: http://shattered.io/

[4] устаревшая: https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html

[5] комментарий Торвальдса: https://habrahabr.ru/post/322622/

[6] как устроен торрент-файл: https://habrahabr.ru/post/119753/

[7] Атака BitErrant: https://biterrant.io/

[8] biterrant_poc.zip: https://biterrant.io/files/biterrant_poc.zip

[9] Meterpreter: https://www.offensive-security.com/metasploit-unleashed/meterpreter-basics/

[10] Хороший файл на VirusTotal: https://virustotal.com/en/file/aab71ef7bf13e4fe8613d4f1f9ae136cd7f03474c0e576f0de6f9fc4c15edd97/analysis/1488732404/

[11] плохой файл: https://virustotal.com/en/file/0624ed0bad3edf8308004b323d6f3cfd70751395dc93bd1108f7a6df87223102/analysis/1488732438/

[12] соответствующий инструментарий: https://github.com/skelsec/BitErrant

[13] Источник: https://geektimes.ru/post/286648/