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

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

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

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

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

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

Прочитали: 11988 Комментариев: 50 Рейтинг: 112

20 июля 2017

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

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

Как оказалось, авторами 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

Антивирусная правДА! рекомендует

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

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

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

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


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

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

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