Семейство шифровальщиков-вымогателей 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. При данной схеме распространения жертва заходит на зараженный веб-сайт, и вредоносный код эксплойта, используя уязвимости браузера (чаще всего плагинов), устанавливает в систему целевое вредоносное ПО.
Рекомендации
Для защиты данных от действий щифровальщика мы рекомендуем озаботиться своевременным резервным копированием всех важных файлов. Копии стоит создавать регулярно и хранить на носителях, недоступных для записи в любое время, кроме непосредственно процесса резервирования. Например, для домашних пользователей – на внешнем жестком диске, физически отключаемом сразу после завершения бэкапа.
Чрезвычайно важно вовремя обновлять ПО (в особенности плагины браузера и сам браузер), т.к. производители постоянно закрывают выявленные уязвимости, эксплуатируемые злоумышленниками.
Если зловред все-таки попал в систему, остановить его поможет актуальный антивирусный продукт с обновленными базами и активированными модулями защиты. Особенно это касается модуля проактивной защиты, который в случае 0-day угроз становится последней линией обороны.
TeslaCrypt 2.0 в обличии CryptoWall