Вы используете устаревший браузер!

Страница может отображаться некорректно.

Закодировать всё

Закодировать всё

Другие выпуски этой рубрики (28)
  • добавить в избранное
    Добавить в закладки

Иногда лучше промолчать

Прочитали: 2953 Комментариев: 93 Рейтинг: 103

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

К сожалению, не все придерживаются такого подхода, в результате чего в Интернет попадают шикарные подсказки для вирусописателей. Например:

Как оказалось, авторами NotPetya (также известный под множеством других имен — Petya, Petya.A, ExPetr и другими) была допущена ошибка в реализации алгоритма Salsa20, вследствие которой половина байтов ключа шифрования вообще никак не использовалась. Сокращение длины ключа с 256 до 128 бит, к сожалению, не оставляет надежд на отыскание его в разумные сроки.

Однако из-за некоторых особенностей применения алгоритма Salsa20 возможно восстановление данных без знания ключа.

https://habrahabr.ru/company/pt/blog/332618/

Статья очень интересная, но изобилует специальными терминами, поэтому подробно цитировать ее не будем – остановимся лишь на некоторых моментах.

Вот, например, разбирается использование типа данных, недостаточного для размещения нужной длины индекса:

Посмотрим на прототип функции s20_crypt32(), через вызовы которой и выполняется шифрование секторов диска.

enum s20_status_t s20_crypt32(uint8_t *key,
                            uint8_t nonce[static 8],
                            uint32_t si,
                            uint8_t *buf,
                            uint32_t buflen)

Через аргумент si (вероятно, Stream Index) передается байтовое смещение в потоке. И по типу аргумента понятно, что там не 64, а только 32 бита. Это значение попадает в keystream после деления на 64, то есть остается максимум 26 бит.

// Set the second-to-highest 4 bytes of n to the block number
    s20_rev_littleendian(n+8, si / 64);

Ошибки реализации алгоритма, благодаря которым различные данные шифруются одинаковыми параметрами (надеемся на снисходительность знатоков, если мы подобрали не совсем правильную аналогию для используемых в статье терминов):

Из 26 бит номера блока только 16 бит (байты по смещению 0x20-0x21) повлияют на keystream. Следовательно, максимальный период гаммы составит 2^16=65536 блоков по 64 байта, или 4 мегабайта.

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

Просто ошибки в логике:

При вызове функции s20_crypt32() они вместо значения смещения в байтах передают… номер 512-байтового сектора!

Возможность восстановить параметры шифрования:

Вымогатель шифрует и первые два сектора каждого файла, который длиннее 1024 байт. При этом размер кластера обычно больше, чем два сектора (например, 8). В таком случае, найдя зашифрованное начало любого файла и пропустив 1024 байта, мы можем легко получить следующие 3 килобайта в незашифрованном виде. И если у нас будет файл, в котором по смещению 1024 байта от начала находятся точно такие же 3 килобайта — с большой вероятностью и начало файла совпадет. И мы получим еще до 1024 байт гаммы.

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

#шифровальщик #троянец #Trojan.Encoder

Dr.Web рекомендует

  1. Подчас указание на ошибки злоумышленников может оказать им услугу. За бесплатные консультации в тюрьму не сажают, но иногда такие подсказки стоят того, чтобы объявить их авторов сообщниками вирусописателей.
  2. Зашифрованные файлы – не всегда приговор.
  3. Если ваши файлы оказались зашифрованы, а утилиты дешифровки нет – не удаляйте их. Бывает, что алгоритм расшифровки удается разработать позднее.

Получайте Dr.Web-ки за участие в проекте

Каждая активность = 1 Dr.Web-ка

Оцените выпуск

Сделайте репост

Поставьте «Нравится»

Чтобы получать награды надо войти на страницу выпуска через аккаунт на сайте «Доктор Веб» (или создать аккаунт). Аккаунт должен быть связан с вашим аккаунтом в социальной сети. Видео о связывании аккаунта.


Нам важно ваше мнение

10 Dr.Web-ок за комментарий в день выхода выпуска или 1 Dr.Web-ка в любой другой день. Комментарии публикуются автоматически и постмодерируются. Правила комментирования новостей «Доктор Веб».

Чтобы оставить комментарий, нужно зайти через свой аккаунт на сайте «Доктор Веб». Если аккаунта еще нет, его можно создать.

Комментарии пользователей


 
На страницу: