
Семейство шифровальщиков-вымогателей TeslaCrypt – относительно новая угроза, первые ее экземпляры были обнаружены в феврале 2015 года. С тех пор зловред успел пошуметь в СМИ как «гроза» компьютерных игроков, ведь он целенаправленно поражает множество связанных с играми типов файлов (сохранения, пользовательские профили и т.п.). Целями троянца были жители США, Германии, Испании и других стран, несколько десятков попыток заражения было зафиксировано и в России.
TeslaCrypt до сих пор находится в фазе активной разработки: за прошедшие месяцы менялись внешний вид, демонстрируемое жертве название (зловред мимикрировал под CryptoLocker, выступал под именем TeslaCrypt и AlphaCrypt), расширения зашифрованных файлов (.ecc, .ezz, .exx), а также детали реализации.
Недавно «Лаборатория Касперского» обнаружила новейшую версию троянца – TeslaCrypt 2.0. Эта версия отличается от предшественников существенно улучшенной криптографической схемой, из-за которой в данный момент нельзя расшифровать затронутые TeslaCrypt файлы, и отказом от GUI в пользу HTML-страницы, причем скопированной у другого троянца – Cryptowall.
Продукты «Лаборатории Касперского» детектируют представителей семейства TeslaCrypt как Trojan-Ransom.Win32.Bitman. Новейшая версия троянца, рассматриваемая в данной статье, детектируется как Trojan-Ransom.Win32.Bitman.tk, ее MD5-хэш: 1dd542bf3c1781df9a335f74eacc82a4
Эволюция угрозы
В каждом образце TeslaCrypt содержится внутренняя версия зловреда. Первая обнаруженная нами версия имела номер 0.2.5, ее графический интерфейс, включая заголовок окна, был позаимствован у другого шифровальщика-вымогателя – CryptoLocker.
TeslaCrypt 0.2.5
Но уже к версии 0.4.0 создатели TeslaCrypt полностью пересмотрели внешний вид зловреда.
TeslaCrypt 0.4.0
Но независимо от версии неизменными остаются следующие черты семейства:
- Троянец сам генерирует новый уникальный адрес Bitcoin и секретный ключ для него. Адрес используется и в качестве ID жертвы, и для приема платежей от нее.
- Для шифрования файлов применяется алгоритм AES-256-CBC, все файлы шифруются одним ключом.
- Не шифруются файлы размером более 0x10000000 байт (~268 Мб).
- Серверы C&C располагаются в сети Tor, общение с ними происходит через публичные tor2web-сервисы.
- Среди шифруемых файлов значится множество расширений, соответствующих файлам компьютерных игр.
- Троянец удаляет shadow-копии.
- Несмотря на «страшилку» про RSA-2048, демонстрируемую жертве, этот алгоритм не применяется в коде ни в каком виде.
- Троянец написан на C++, собран компилятором Microsoft, а реализация криптоалгоритмов взята из библиотеки OpenSSL.
Интересные факты
- Ранние версии TeslaCrypt (0.2.5 – 0.3.x) самостоятельно проверяли на сайте http://blockchain.info, прошел ли платеж bitcoin – в случае успеха зловред рапортовал об этом командному серверу и получал ключ для расшифровки файлов. Такая схема была уязвима, поскольку позволяла специалисту самостоятельно сделать такой запрос к C&C и без оплаты получить заветный ключ.
- Версии 0.2.5 – 0.3.x сохраняли ключ расшифровки (вместе с другими данными) в собственном служебном файле key.dat. Область с ключом занулялась в этом файле лишь после завершения шифрования, что давало возможность сохранить ключ, прервав работу шифровальщика (например, выключив ПК). Далее можно было извлечь из key.dat ключ и расшифровать все файлы.
- В версии 0.4.0 файл key.dat переименовали в storage.bin, а ключ расшифровки сохраняли не в открытом виде, а обращенным по модулю порядка стандартной эллиптической кривой secp256k1. После завершения шифрования ключ затирали не нулями, а случайными байтами, но, тем не менее, пока эта область не затерта, ключ извлечь можно – это и было реализовано в нашей утилите RakhniDecryptor.
День сегодняшний
И вот недавно наше внимание привлек образец данного троянца, имеющий внутреннюю версию 2.0.0 – что же изменилось на этот раз?
Первое, что бросается в глаза – из TeslaCrypt исчез код, отвечающий за отображение GUI (окна приложения). Вместо этого после шифрования троянец показывает в браузере HTML-страницу, полностью скопированную у другого широко известного вымогателя – CryptoWall 3.0.
Страница, открывающаяся по предложенным жертве ссылкам, также полностью повторяет страницу оплаты CryptoWall, но, ясное дело, указанные URL ведут на сервер TeslaCrypt – авторы данного зловреда явно не планируют отдавать деньги жертв конкурентам.
TeslaCrypt заполняет строку текстом о CryptoWall
К чему такая маскировка? Тут мы можем только гадать – возможно, злоумышленники хотели таким образом вселить в жертв уверенность в серьезности ситуации. Ведь файлы после CryptoWall до сих пор не поддаются расшифровке, чего нельзя сказать о многих случаях заражения TeslaCrypt.
Так или иначе, это не единственное изменение, пришедшее с новой версией TeslaCrypt. В очередной раз была доработана криптографическая схема, которая в итоге стала еще более «навороченной». При генерации ключей применяется алгоритм ECDH (злоумышленники ввели его использование в версиях 0.3.x), но, в отличие от предыдущих версий, он здесь кажется более уместным, поскольку служит определенной цели – дает злоумышленникам возможность расшифровать файлы, используя лишь «мастер-ключ». Но обо всем по порядку.
Криптографическая схема TeslaCrypt 2.0
Генерация ключевых данных
Троянец использует два набора ключей – «мастер-ключи», которые уникальны в рамках одной зараженной системы, и «сессионные ключи», которые генерируются заново при каждом перезапуске зловреда в системе.
Генерация мастер-ключей
Пусть Q – стандартная эллиптическая кривая secp256k1 («SECG curve over a 256 bit prime field»), а G – образующий элемент циклической подгруппы группы точек на кривой.
Пусть malware_pub – содержащийся в теле троянца открытый ключ злоумышленников (он является точкой на кривой Q, хранится в виде отдельных координат x, y).
При заражении системы троянец генерирует:
- install_id – идентификатор заражения – случайные 8 байт.
- master_btc_priv – секретный мастер-ключ – случайные 32 байта; отправляется на C&C.
- master_btc_pub = master_btc_priv * G (точка на кривой) – открытый мастер-ключ; сохраняется в зашифрованных файлах.
- btc_address – адрес bitcoin для приема выкупа – генерируется по стандартному для bitcoin алгоритму на основе master_btc_pub.
- master_ecdh_secret = ECDH(malware_pub, master_btc_priv) – «общий мастер-ключ», понадобится для расшифровки, если master_btc_priv был утерян либо не дошел до C&C; в таком виде нигде не сохраняется.
- master_ecdh_secret_mul = master_ecdh_secret * master_btc_priv – число, которое позволит восстановить master_btc_priv; сохраняется в системе.
Примечание
master_btc_priv (в соответствии с принципом работы bitcoin) – это секретный ключ, необходимый, чтобы «снять» биткоины, отправленные на свежесозданный адрес btc_address.
Генерация сессионных ключей
При каждом запуске (при первом заражении, или, например, после перезагрузки ПК) троянец заново генерирует:
- session_priv – секретный сессионный ключ – случайные 32 байта. Используется для шифрования файлов, нигде не сохраняется.
- session_pub = session_priv * G – открытый сессионный ключ. Сохраняется в зашифрованных файлах.
- session_ecdh_secret = ECDH(master_btc_pub, session_priv) – «общий сессионный ключ» — необходим для расшифровки файлов, в таком виде нигде не сохраняется.
- session_ecdh_secret_mul = session_ecdh_secret * session_priv – число, которое позволит восстановить session_ecdh_secret. Сохраняется в зашифрованных файлах.
Ключевые данные, сохраняемые в системе
В отличие от предыдущих версий TeslaCrypt 2.0.0 не использует для хранения данных key.dat или storage.bin. Вместо них используется реестр: в HKCU\Software\msys\ID сохраняется значение install_id, а в HKCU\Software\<install_id>\data помещается следующая структура:
В привычном синтаксисе языка C структуру можно описать следующим образом:
Вот как это выглядит в зараженной системе:
Шифрование файлов
TeslaCrypt, начиная от версии 0.3.5, поражает как обычные носители, подключенные к системе, так и все доступные сетевые файловые ресурсы (shares), даже если они не смонтированы в качестве диска с отдельной буквой. Кстати, немногие шифровальщики могут похвастаться такой функциональностью.
Каждый файл шифруется алгоритмом AES-256-CBC с ключом session_priv. Зашифрованный файл получает дополнительное расширение «.zzz». В начало файла помещается служебная структура, после нее следует шифрованное содержимое. Формат структуры:
Та же структура в синтаксисе языка C:
Расшифровка файлов
Авторы TeslaCrypt 2.0.0 полностью убрали из зловреда функцию расшифровки файлов, которая присутствовала в предыдущих версиях. Исходя из анализа представленной выше криптографической схемы, мы видим такие алгоритмы расшифровки файлов:
-
Если известен master_btc_priv, то нужно:
- Прочитать из зашифрованного файла session_pub;
- Вычислить session_ecdh_secret = ECDH(session_pub, master_btc_priv);
- Прочитать из зашифрованного файла session_ecdh_secret_mul;
- Вычислить session_priv = session_ecdh_secret_mul / session_ecdh_secret;
- Расшифровать файл ключом session_priv.
-
Если нет master_btc_priv, но известен malware_priv (а известен он только злоумышленникам, которые поместили в тело трояна соответствующий malware_pub):
- Прочитать из реестра или зашифрованного файла master_btc_pub;
- Вычислить master_ecdh_secret = ECDH(master_btc_pub, malware_priv);
- Прочитать из зашифрованного файла master_ecdh_secret_mul;
- Вычислить master_btc_priv = master_ecdh_secret_mul / master_ecdh_secret;
- Со знанием master_btc_priv выполнить шаги из пункта 1.
Для полного понимания происходящего желательно ознакомиться с алгоритмом Диффи-Хеллмана и его версией для эллиптических кривых ECDH – например, здесь.
Другие особенности
Обход детектирования
В троянце используется техника обхода детектирования, основанная на применении COM-объектов. Мы впервые обнаружили ее использование в TeslaCrypt версии 0.4.0, но с тех пор она претерпела небольшие изменения. Сгенерированный по образцу версии 2.0.0 псевдокод выглядит следующим образом:
Коммуникация с командным сервером
В образце троянца содержится статический список адресов C&C. Сами серверы находятся в сети Tor, но коммуникация осуществляется через обычный web с помощью tor2web-сервисов.
До TeslaCrypt версии 0.4.1 запросы к серверу отправлялись в открытом виде, в последующих же версиях стали шифроваться алгоритмом AES-256-CBC; в качестве ключа берется хэш SHA256 от статической строки из тела зловреда.
Формирование HTTP-запроса, отправляемого троянцем при заражении системы, показано на скриншоте псевдокода.
Распространение
Зловреды семейства TeslaCrypt были замечены в распространении через эксплойт-киты Angler, Sweet Orange, Nuclear. При данной схеме распространения жертва заходит на зараженный веб-сайт, и вредоносный код эксплойта, используя уязвимости браузера (чаще всего плагинов), устанавливает в систему целевое вредоносное ПО.
Географическое распределение пользователей, атакованных зловредами семейства TeslaCrypt
Рекомендации
Для защиты данных от действий щифровальщика мы рекомендуем озаботиться своевременным резервным копированием всех важных файлов. Копии стоит создавать регулярно и хранить на носителях, недоступных для записи в любое время, кроме непосредственно процесса резервирования. Например, для домашних пользователей – на внешнем жестком диске, физически отключаемом сразу после завершения бэкапа.
Чрезвычайно важно вовремя обновлять ПО (в особенности плагины браузера и сам браузер), т.к. производители постоянно закрывают выявленные уязвимости, эксплуатируемые злоумышленниками.
Если зловред все-таки попал в систему, остановить его поможет актуальный антивирусный продукт с обновленными базами и активированными модулями защиты. Особенно это касается модуля проактивной защиты, который в случае 0-day угроз становится последней линией обороны.
TeslaCrypt 2.0 в обличии CryptoWall