Исследование

Polyglot – фальшивый CTB-Locker

На сегодняшний день шифровальщики – одна из самых актуальных угроз для пользователей и компаний. Очевидно, что для организации эффективной защиты необходимо использовать защитные решения с большим арсеналом технологий, которые могут предотвратить попадание шифровальщика на компьютер потенциальной жертвы или же вовремя остановить процесс шифрования и откатить изменения. Но что делать, если заражение все-таки произошло, и важная информация оказалась зашифрована? (Заражение может произойти на узлах, которые по некоторым причинам не были защищены защитным решением или решение было отключено администратором.) В таких случаях жертве придется надеяться только на то, что злоумышленник допустил ошибки в реализации криптографического алгоритма или использовал некриптостойкий алгоритм.

Краткое описание

Шифровальщик, получивший название Polyglot, появился в конце августа. По нашим данным распространяется он в спамовых письмах со ссылкой на вредоносный rar-архив. Внутри архива содержится исполняемый файл зловреда.

Примеры известных ссылок:

hXXp://bank-info.gq/downloads/reshenie_suda.rar

hXXp://bank-info.gq/downloads/dogovor.rar

После запуска заражённого файла, на первый взгляд, ничего не происходит. Однако в это время зловред копируется под случайными именами в десяток мест, прописывается в автозапуск, а также в TaskScheduler. После установки начинается шифрование файлов. Внешне зашифрованные пользовательские файлы не меняются (так как имена остаются оригинальными), но открыть их пользователю не удается.

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

Polyglot – фальшивый CTB-Locker

Главное окно зловреда

Polyglot – фальшивый CTB-Locker

Новая заставка рабочего стола с уникальным для каждой машины блоком «открытого ключа»

Пользователю предлагается бесплатно расшифровать несколько файлов.

Polyglot – фальшивый CTB-Locker

Окно пробной расшифровки файлов

После чего он должен будет оплатить расшифровку файлов биткойнами. Сумму выкупа и биткойн-адрес, на который эту сумму требуется перевести, зловред запрашивает со своего C&C, расположенного в сети Tor.

Polyglot – фальшивый CTB-Locker

Окно взаимодействия с командным сервером

Далее зловред предоставляет пользователю возможность самостоятельно проверять факт подтверждения сервером оплаты.

Polyglot – фальшивый CTB-Locker

Реквизиты для оплаты

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

zipcryptor_rus_6

Последнее окно Poliglot

Мимикрия под CTB-Locker

Данный зловред изначально привлек наше внимание тем, что он во всем подражает другому известному шифровальщику CTB-Locker (Trojan-Ransom.Win32.Onion). Окно графического интерфейса, переключение языков, последовательность действий при запросе ключа, страница оплаты, обои рабочего стола – всё это очень похоже на CTB-Locker. Особенно тщательно воспроизводится внешний вид, а текст сообщений в окнах Polyglot просто скопирован у «собрата».

Главное окно графического интерфейса:

Polyglot CTB-Locker
zipcryptor_rus_8

zipcryptor_rus_7

Список зашифрованных файлов:

Polyglot CTB-Locker
image004 image005

Окно тестовой расшифровки 5 случайных файлов:

Polyglot CTB-Locker
Polyglot – фальшивый CTB-Locker

Polyglot – фальшивый CTB-Locker

Окно запроса ключа для расшифровки:

Polyglot CTB-Locker
Polyglot – фальшивый CTB-Locker

Polyglot – фальшивый CTB-Locker

Обои рабочего стола:

Polyglot CTB-Locker

Polyglot – фальшивый CTB-Locker

Polyglot – фальшивый CTB-Locker

Ошибка отсутствия соединения:

Polyglot CTB-Locker
Polyglot – фальшивый CTB-Locker Polyglot – фальшивый CTB-Locker

Инструкции офлайн-расшифровки:

Polyglot CTB-Locker
Polyglot – фальшивый CTB-Locker Polyglot – фальшивый CTB-Locker

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

Polyglot CTB-Locker
Алгоритмы, использованные при шифровании файлов Содержимое файла упаковывается в архив ZIP, а затем шифруется AES-256. Содержимое файла сжимается Zlib, а затем шифруется AES-256.
Алгоритмы, использованные при работе с ключами ECDH (elliptic curve Diffie-Hellman), кривая curve25519, SHA256. ECDH (elliptic curve Diffie-Hellman), кривая curve25519, SHA256.
Расширения зашифрованных файлов Не меняет расширения. В разных версиях по-разному:
— .ctbl
— .ctb2
— 7 случайных букв нижнего регистра латинского алфавита
Демо-расшифровка 5 файлов, ключи для их расшифровки и имена файлов сохраняются в реестре. 5 файлов, ключи для расшифровки сохраняются только в оперативной памяти во время работы процесса.
Расположение C&C C&C в сети Tor, коммуникация через публичный tor2web-сервис. C&C в сети Tor, коммуникация через встроенный в троянца клиент Tor либо (в некоторых версиях CTB-Locker) через публичный tor2web-сервис.
Защита/обфускация трафика Побитовая операция not. Шифрование AES.

При всем этом важно отметить: при детальном анализе выяснилось, что Polyglot реализован независимо от CTB-Locker, т.е. общего кода в двух троянцах не обнаружилось (за исключением публично доступного библиотечного кода). Возможно, авторы Polyglot хотели сбить с толку пострадавших пользователей и исследователей и написали практически полную копию CTB-Locker с нуля, чтобы шифрование выглядело как результат атаки CTB-Locker, и у пользователей не оставалось надежды на бесплатное возвращение своих файлов.

Коммуникация с командным сервером

Троянец связывается с сервером C&C, расположенным в сети Tor, посредством публичного tor2web-сервиса. Коммуникация осуществляется по протоколу HTTP.

Перед каждым из описанных ниже запросов с данными отправляется POST-запрос с единственным параметром «live=1».

Запрос 1.

В начале работы зловред рапортует C&C о факте заражения. На сервер отправляются следующие данные:

{
«ip»:«xxx.xxx.xxx.xxx»,         //ip-адрес зараженной машины
«method»:«register»,         //тип действия. «register» = троянец сообщает C&C о новом заражении
«uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx»,         //Идентификатор зараженной машины
«version»:«10f»,         //Версия троянца, содержится в теле
«info»:«Microsoft (build xxxx), 64-bit»,         //Версия ОС зараженной машины
«description»:« »,         //Всегда пробел (« »)
«start_time»:«14740xxxxx»,         //Время запуска троянца
«end_time»:«0»,         //Время окончания шифрования. 0 = шифрование еще не запускалось
«user_id»:«5»         //Число, зашитое в сампле
}

Этот блок данных пропускается через побитовую операцию not, затем кодируется в Base64 и отправляется POST-запросом.

Polyglot – фальшивый CTB-Locker

Содержимое отправляемого запроса

Параметры POST-запроса:

signature – crc32 от передаваемых данных
ver – версия троянца
gcdata – данные, содержимое которых описано выше.

Polyglot – фальшивый CTB-Locker

Запрос первого типа и ответ на него, полученный от C&C

Запрос 2.

После того, как шифрование файлов пользователя завершено, троянец отправляет еще один запрос. Его содержимое идентично содержимому первого запроса, за исключением поля «end_time», которое теперь равно времени окончания шифрования.

Запрос 3.

Получение от командного сервера биткойн-адреса для оплаты и суммы выкупа.

{
«method»:«getbtcpay»
«uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx»
}

В ответ сервер присылает следующие данные:

{
«code»:«0»,
«text»:«OK»,
«address»:«xxxxxxxx»,         //адрес биткойн (варьируется)
«btc»:0.7,         //сумма для оплаты в BTC (варьируется)
«usd»:319.98 //сумма для оплаты в USD (варьируется)
}

Запрос 4.

Получение ключа для расшифровки файла.

{
«method»:«getkeys»,
«key»:«»,
«uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx»,
«info»:[«DYqbX3m9u0Pk9bE9Rg2Co3empC2M/yrnqgNS3r0AT2vwCw8Zas08bd4BNiO3XuAqi6/5WQ0VBiUkRUToo+YFL/QtPkiRIQ/D9RyKhzpBHlNpf2hPb9eloDzpkonQl7L6cQyJ2FipEG2ggZOdTDBcNAEAAAA=»]
}

Запрос 5.

Передача на сервер сообщения о завершении расшифровки и количества расшифрованных файлов.

{
«method»:«setend»,
«uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx»,
«decrypted»:«1»
}

Описание алгоритма шифрования

Во время анализа вредоносного кода стало понятно, что троянец зашифровывает файлы в три этапа, с созданием промежуточных файлов:

  • сначала оригинальный файл помещается в запароленный zip-архив, созданный архив имеет имя оригинального файла, но расширение «a19»;
  • созданный запароленный архив Polyglot зашифровывает алгоритмом AES-256-ECB, получившийся файл опять же имеет имя оригинального файла, но расширение на этот раз – «ap19»;
  • далее зловред удаляет оригинальный файл и файл с расширением «a19», а расширение зашифрованного архива меняет с «ap19» на расширение оригинального файла.

Polyglot – фальшивый CTB-Locker

Граф вызовов процедуры поиска и шифрования файлов

Для каждого файла ключ AES генерируется индивидуально и является ничем иным как «общим секретом», сгенерированным по протоколу Диффи-Хеллмана на эллиптической кривой. Но обо всём по порядку.

Перед шифрованием файлов зловред генерирует две случайные последовательности длиной 32 байта. Дайджесты SHA256 каждой последовательности становятся приватными ключами s_ec_priv_1 и s_ec_priv_2. Далее, используя эллиптическую кривую Бернштейна (Curve25519), из каждого приватного ключа будут получены публичные ключи s_ec_pub_1 и s_ec_pub_2 соответственно.

Случайную последовательность, на основе которой будет сформирован ключ s_ec_priv_1, строку machine_guid, взятую из реестра, а также несколько нулевых байт зловред записывает в созданную структуру decryption_info:

struct decryption_info

{
        char s_rand_str_1[32];
        char machine_guid[36];
        char zeroes[12];
};

Используя приватный ключ s_ec_priv_2 и публичный ключ злоумышленника mal_pub_key, будет получен общий секрет mal_shared_secret = ECDH(s_ec_priv_2, mal_pub_key). Структура decryption_info зашифровывается алгоритмом AES-256-ECB на ключе, который представляет собой дайджест SHA256 этого секрета. Для дальнейшего удобства полученные 80 байт зашифрованной структуры назовём encrypted_info.

Только после получения encrypted_info Polyglot приступает к генерации сессионного ключа AES для файла. Описанным выше способом создаётся новая пара ключей – f_priv_key и f_pub_key. Используя f_priv_key и s_ec_pub_1, будет получен общий секрет f_shared_secret = ECDH(f_priv_key, s_ec_pub_1).

Дайджест SHA256 этого секрета и будет тем самым ключом AES, на котором зашифруется файл.

Чтобы определить, что файл уже был зашифрован, и иметь возможность расшифровать этот файл, злоумышленник сохраняет в начале каждого зашифрованного файла структуру file_info:

struct file_info

{
        char label[4] = {‘H’,’U’, ‘I ‘, 0x00};
        uint32_t label2 = 1;
        uint64_t archive_size;
        char f_pub_key[32];
        char s_ec_pub_1[32];
        char s_ec_pub_2[32];
        char encrypted_info[80];
};

Эллиптическая кривая, протокол Диффи-Хеллмана, AES-256, запароленный архив – все было почти безупречно. «Почти», потому что злоумышленник допустил несколько ошибок при реализации, что дало нам возможность помогать пострадавшим – восстанавливать файлы, зашифрованные Polyglot.

Ошибки вирусописателя

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

Polyglot – фальшивый CTB-Locker

Графическое представление процедуры генерации случайной последовательности

Для упрощения восприятия, приведём эту же функцию в псевдокоде:

Polyglot – фальшивый CTB-Locker

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

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

Взглянем на формирование ключа для архива:

Polyglot – фальшивый CTB-Locker

Видно, что длина ключа составляет всего 4 байта, да и те представляют собой определённые байты строки MachineGuid – уникального идентификатора, присваемого машине операционной системой. Мало того, несколько переформированная строка MachineGuid попадает в текст требований, демонстрируемых жертве, а значит, если знать позиции, на которых стоят 4 символа пароля ZIP, можно без труда распаковать архив.

Polyglot – фальшивый CTB-Locker

MachineGuid, записываемый в требования

Заключение

Расшифровка файлов, зашифрованным данным шифровальщиком, поддерживается в нашей бесплатной утилите RannohDecryptor Version 1.9.3.0.

Все решения «Лаборатории Касперского» детектируют данный шифровальщик следующими вердиктами:

Trojan-Ransom.Win32.Polyglot

PDM:Trojan.Win32.Generic

MD5

c8799816d792e0c35f2649fa565e4ecb – Trojan-Ransom.Win32.Polyglot.a

Polyglot – фальшивый CTB-Locker

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике