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

Троянец Petya: два в одном

Заражение MBR и шифрование файлов – не новость в мире вредоносных программ. В далеком 1994 году появился вирус OneHalf, заражавший главную загрузочную запись (MBR) и шифровавший содержимое диска. При этом вымогательством вирус не занимался. В 2011 году стали распространяться троянцы MBR-блокировщики (Trojan-Ransom.Win32.Mbro). Они заражали MBR и препятствовали дальнейшей загрузке системы. Чтобы от них избавиться, жертве предлагалось заплатить выкуп. Лечение системы от такого блокировщика было несложным, поскольку помимо MBR никакие данные на диске троянцы, как правило, не шифровали.

Сегодня мы столкнулись с новой угрозой, повторяющей уроки «хорошо забытого старого». Троянец Petya (вердикт «Лаборатории Касперского»: Trojan-Ransom.Win32.Petr) заражает MBR, препятствуя нормальной загрузке компьютера, и шифрует MFT (master file table, главная файловая таблица) – важную часть файловой системы NTFS, – препятствуя нормальному доступу к файлам, расположенным на жестком диске.

Сценарий заражения

Распространители Petya атакуют своих потенциальных жертв, рассылая спам со ссылками для скачивания zip-архива. Архив содержит исполняемый файл троянца и изображение в формате JPEG. Файлы именуются на немецком языке (Bewerbungsunterlagen.PDF.exe, Bewerbungsmappe-gepackt.exe), выдаются за «резюме кандидата» и нацелены на сотрудников отделов кадров немецкоговорящих стран.

Троянец Petya: два в одном

Содержимое архивов, ссылки на которые рассылаются в спаме

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

Троянец Petya: два в одном

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

К сожалению, зачастую пользователь, имеющий привилегии согласиться на запрос UAC, не оценивает потенциальные риски, связанные с запуском неизвестного ПО с повышенными правами.

Схема работы троянца

Исполняемый файл и упаковщик

Заражение троянцем Petya начинается с запуска вредоносного исполняемого файла. Попавшие на анализ в «Лабораторию Касперского» образцы данного троянца, как и большинство другого вредоносного ПО, защищены самодельным упаковщиком. После запуска исполняемого файла начинает работать код вредоносного упаковщика, который распаковывает во вновь выделенную область оперативной памяти вредоносную библиотеку Setup.dll, после чего передает ей управление.

Обычно злоумышленники используют упаковщики, чтобы избежать детекта – сбить статические сигнатуры, обмануть эвристический анализатор и т.д. При разборе упаковщика Petya мы обратили внимание на необычный трюк, примененный злоумышленниками.

Зачастую злоумышленники стараются сделать упаковщик таким образом, чтобы упакованный вредоносный исполняемый файл внешне максимально походил на обычный легальный файл. Иногда они берут какой-нибудь легальный файл и подменяют в нем часть кода на вредоносный. В случае троянца Petya они так и сделали, с одной интересной особенностью: на вредоносный код подменена часть стандартной runtime-библиотеки, генерируемой компилятором, а функция WinMain остается нетронутой. На изображении ниже показан граф переходов, начиная от точки входа («start»). Видно, что функция распаковки вредоносного кода, которую мы назвали «evil», вызывается из легальной функции __calloc_crt, являющейся частью runtime-кода.

Троянец Petya: два в одном

Граф переходов между функциями вредоносного упаковщика

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

«Лабораторией Касперского» были обнаружены образцы Petya, «мимикрировавшие» под легальные файлы, написанные на C/C++ и на Delphi.

Вредоносная библиотека

Setup.dll – это библиотека с единственным экспортом «_ZuWQdweafdsg345312@0», написана на C и скомпилирована в Microsoft Visual Studio. Реализацию криптографических алгоритмов злоумышленники взяли в общедоступной библиотеке mbedtls (она же бывшая polarssl). Setup.dll не сохраняется на диск в виде отдельного файла, а всё время находится только в оперативной памяти.

Когда Setup.dll получает управление, она расшифровывает данные, содержащиеся в секции «.xxxx», и приступает к собственно заражению ПК.

Троянец Petya: два в одном

Зашифрованная секция .xxxx с данными

Троянец Petya: два в одном

Часть расшифрованных данных из секции .xxxx

На высоком уровне абстракции действия Setup.dll сводятся к следующему:

  1. Перезаписать загрузочную запись на жестком диске своим вредоносным загрузчиком;
  2. Сгенерировать ключ, ID заражения и другую вспомогательную информацию, сохранить их на HDD;
  3. Вызвать аварийное завершение работы ОС и последующую перезагрузку, в результате чего передать управление вредоносному загрузчику.

Теперь рассмотрим подробно, как же это реализовано в троянце, но для начала определимся с используемой терминологией.

Сектор жесткого диска – минимально адресуемая область диска, как правило равная 512 байт.

MBR – главная загрузочная запись – код и данные, записанные в сектор 0. После инициализации аппаратного обеспечения загрузка ПК осуществляется этим кодом; также в этом секторе содержится таблица разделов жесткого диска. Разметка диска с применением MBR поддерживает до 4 первичных разделов, а максимальный размер раздела составляет ~2.2 Тб.

GPT – более современный стандарт разметки жесткого диска, поддерживающий 128 разделов, а максимальный размер раздела достигает 9,4 ЗБ (1 зеттабайт = 1021 байт).

Итак, вернемся к анализируемому троянцу. Setup.dll поддерживает заражение дисков, размеченных как в соответствии с более старым стандартом MBR, так и с современным стандартом GPT. В зловреде содержатся 2 отдельные ветви исполнения, а выбор ветви осуществляется на основе данных поля PartitionStyle структуры PARTITION_INFORMATION_EX.

Троянец Petya: два в одном

Выбор ветви исполнения для заражения диска с разметкой MBR или GPT

Заражение диска с разметкой MBR

При заражении диска, размеченного в соответствии со стандартом MBR, Setup.dll выполняет действия:

  1. Шифрует сектор 0 (оригинальный код и данные MBR) простой операцией XOR 0x37 (ASCII ‘7’), записывает результат в сектор 56;
  2. Шифрует сектора 1-33 той же операцией XOR 0x37;
  3. Генерирует конфигурационные данные для вредоносного загрузчика, записывает их в сектор 54;
  4. Создает проверочный сектор 55, заполненный повторяющимся байтом 0x37;
  5. Копирует NT-сигнатуру диска и таблицу разделов, сохраненные из оригинального MBR, в свой загрузчик первого уровня; записывает на диск вредоносный код первого уровня в сектор 0 и код второго уровня в сектора 34–50 (назовем этот вредоносный код вредоносный загрузчик);
  6. Вызывает функцию NtRaiseHardError, что приводит к аварийному завершению работы ОС («синий экран смерти», BSOD).

После заражения диска с разметкой MBR начало диска имеет следующую структуру:

Номер сектора Содержимое
0 Вредоносный загрузчик 1-го уровня
1 — 33 Зашифрованные секторы 1-33 (XOR 0x37)
34 — 50 Вредоносный код 2-го уровня
54 Конфигурационный сектор зловреда
55 Проверочный сектор (заполнен байтом 0x37)
56 Зашифрованный оригинальный код MBR (XOR 0x37)

Заражение диска с разметкой GPT

Если диск был размечен в соответствии с GPT, Setup.dll выполняет больше работы:

  1. На основе данных Primary GPT Header получает адрес копии GPT Header;
  2. Шифрует операцией XOR 0x37 копию GPT Header;
  3. Далее те же действия, что при заражении диска с разметкой MBR.

После заражения диска с разметкой GPT начало диска имеет следующую структуру:

Номер сектора Содержимое
0 Вредоносный загрузчик 1-го уровня
1 — 33 Зашифрованные секторы 1-33 (XOR 0x37)
34 — 50 Вредоносный код 2-го уровня
54 Конфиг зловреда
55 Проверочный сектор (заполнен байтом 0x37)
56 Зашифрованный оригинальный код MBR (XOR 0x37)
Backup LBA –
Backup LBA + 33
Зашифрованная копия GPT Header (XOR 0x37)

Генерация конфигурационных данных

В конфигурационном секторе (сектор 54) троянец хранит данные, которые понадобятся ему для шифрования MFT и расшифровки ее в случае оплаты жертвой выкупа. Процесс генерации конфигурационных данных включает следующие шаги:

    1. Setup.dll генерирует случайную строку из 16 символов [1-9, a-x, A-X]; назовем эту строку password;
    2. Генерирует пару ключей ec_session_priv (секретный ключ, случайное большое целое число) + ec_session_pub (открытый ключ, точка на стандартной эллиптической кривой secp192k1);
    3. Вычисляет общий секрет session_secret = ECDH(ec_session_priv, ec_master_pub); открытый ключ злоумышленников ec_master_pub содержится в теле троянца;
    4. Вычисляет aes_key = SHA512(session_secret) – берутся первые 32 байта хэша;
    5. Шифрует строку password операцией XOR c первыми 16 байтами ec_session_pub: password_xor = ec_session_pub[0, 15] xor password;
    6. Результат шифрует AES-256 с ключом aes_key: password_aes_encr = AES_enc(password_xor);
    7. Формирует массив ec_session_data = [ec_session_pub, password_aes_encr];
    8. Считает от него base58: ec_session_data_b58 = base58_enc(ec_session_data);
    9. Считает от результата SHA256: digest = sha256(ec_session_data_b58);
    10. Формирует массив: ec_data = [check1, check2, ec_session_data_b58], где check1, check2 — байты, вычисленные по формулам:
      a = digest[0] & 0xF;
      b = (digest[0] & 0xF) < 10;
      check1 = (digest[0] >> 4) + 0x57 + ((digest[0] >> 4) < 10 ? 0xD9 : 0);
      check2 = a + 0x57 + (b ? 0xD9 : 0);
    11. Формирует ключ для шифрования MFT на основе password;

Троянец Petya: два в одном

Псевдокод формирования ключа для шифрования MFT

    1. Генерирует IV – случайные 8 байт, которые будут использованы при шифровании MFT;
    2. Генерирует ID заражения и формирует «персонализированные» адреса веб-страниц для оплаты выкупа.

В итоге структура с конфигурационными данными выглядит следующим образом:

Троянец Petya: два в одном

В синтаксисе языка C эту структуру можно представить так:

Троянец Petya: два в одном

А вот как выглядит конфиг, записанный на жесткий диск.

Троянец Petya: два в одном

Отметим, что если после этого этапа выключить компьютер и больше его не включать, нанесенный ущерб будет минимален, так как расшифровать однобайтовый XOR не представляет сложностей. Отсюда совет: если после запуска неизвестного файла система аварийно завершила работу с BSOD («синий экран смерти»), следует выключить ее и обратиться к квалифицированному специалисту, который сможет идентифицировать заражение Petya и восстановить сектора, зашифрованные XOR.

Если же компьютер был перезагружен, начинает работать третья ступень троянца – вредоносный код, записанный в сектора 0 и 34-50.

Вредоносный загрузчик

После перезагрузки управление получает код в секторе 0 (загрузчик первого уровня). Он считывает в память основной вредоносный код второго уровня из секторов 34-50 и передает ему управление. Тот, в свою очередь, получает информацию об имеющихся в системе жестких дисках, ищет диск, на котором записан конфиг, считывает конфиг из сектора 54 и в зависимости от значения поля config.state приступает к шифрованию (если значение равно 0) или предлагает ввести купленный ключ для расшифровки (если 1).

Троянец Petya: два в одном

Фрагмент кода, реализующий логику зловреда

Шифрование MFT

MFT (master file table, главная файловая таблица) – это структура данных файловой системы NTFS, использующейся во всех современных версиях ОС Windows. В этой таблице содержатся служебные данные, необходимые для поиска содержимого каждого файла на диске. В качестве аналогии можно привести оглавление книги, где указано, на какой странице какую главу искать. Так же и MFT указывает, в каком логическом кластере искать какой файл.

Именно эту важную область и атакует Petya. Если при запуске значение config.state равно 0, он выполняет следующие действия:

      1. Выводит поддельное сообщение о проверке диска;

Троянец Petya: два в одном

      1. Считывает из конфига ключ config.salsa_key в локальный массив, а на диске это поле зануляет; в поле config.state выставляет значение 1;
      2. Шифрует поточным шифром Salsa20 проверочный сектор 55, заранее заполненный байтом 0x37 (см. выше раздел «Заражение MBR»);
      3. Ищет MFT каждого раздела на каждом подключенном жестком диске;
      4. Шифрует данные MFT шифром Salsa20. Шифрование производит частями по 8 секторов (4 кб), а в секторе 57 первого диска хранит счетчик обработанных частей.
      5. Когда шифрование завершено, вызывает перезагрузку.

По окончании шифрования зловред вызывает перезагрузку, а после перезагрузки компьютера код вредоносного загрузчика Petya отрисовывает на экране анимацию в виде мигающего красно-белого черепа в стиле ASCII-art.

Троянец Petya: два в одном

Если нажать на любую клавишу, троянец покажет текст, который уже без ложной скромности и поддельных сообщений ОС информирует жертву о произошедшем.

Требование выкупа и расшифровка

Троянец Petya: два в одном

На этом экране Petya выводит ссылки на веб-сайты оплаты выкупа, расположенные в сети Tor (адреса содержатся в config.mal_urls) и «персональный код расшифровки», который требуется ввести на одном из вышеуказанных сайтов. Этот «код» в действительности является содержимым поля config.ec_data, через каждые 6 символов разделенным дефисами.

Каким же образом злоумышленники собираются расшифровывать MFT, и могут ли они вообще это сделать?

Поле ввода «Key:» на данном экране принимает от жертвы текстовую строку. Эта строка проверяется на длину (нужна строка в 16 символов), после чего троянец вычисляет из нее 32-байтовый salsa_key (по алгоритму, рассмотренному выше в разделе «Генерация конфигурационных данных»). Затем этим ключом зловред пробует расшифровать проверочный сектор 55 и проверяет, что расшифрованный сектор целиком заполнен байтом 0x37. Если это так, ключ считается верным, и Petya расшифровывает им MFT, затем расшифровывает все зашифрованные XOR 0x37 начальные секторы, восстанавливает оригинал MBR и просит перезагрузить компьютер.

Таким образом, верная строка для ввода в поле «Key:» – это та самая строка password, которая генерируется первым шагом при формировании конфига.

Троянец Petya: два в одном

Сообщение на экране после успешной расшифровки

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

Жертве предлагается вручную ввести «персональный код расшифровки» ec_data на веб-странице оплаты. Злоумышленник затем может провести операции:

  1. Раскодировать base58: base58_dec(ec_session_data_b58) = ec_session_data = [ec_session_pub, password_aes_encr]
  2. В соответствии со свойствами схемы Диффи-Хеллмана, вычислить session_secret = ECDH(ec_session_pub, ec_master_priv), где ec_master_priv – это секретный ключ, известный только авторам троянца;
  3. Вычислить aes_key = SHA256(session_secret);
  4. Расшифровать AES-256: password_xor = AES_dec(password_encr);
  5. Зная ec_session_pub, вычислить исходный password на основе password_xor.

Веб-сайт оплаты

При входе на Tor-сайт по ссылке, указанной троянцем, мы видим страницу с требованием ввести captcha, а после этого загружается главная страница оплаты. Внимание привлекает дизайн с серпом и молотом и надписью «ransomware» псевдокириллицей. Всё это напоминает карикатуру на СССР в стиле игры Red
Alert.

Троянец Petya: два в одном

На этой странице расположен обратный отсчет до удвоения суммы выкупа, а также регулярно обновляющиеся ссылки на новости и публикации, связанные с Petya.

При нажатии на «Start the decryption process» мы попадаем на страницу, где требуется ввести значение ec_data, которое теперь уже названо «your identifier», а не «your personal decryption code». Видимо, злоумышленники сами не определились, как же называть эту сущность.

Троянец Petya: два в одном

После ввода этой строки сайт указывает сумму выкупа в BTC, способы покупки биткойнов и адрес для перечисления средств.

Помимо этого, на сайте есть 2 отдельные страницы: FAQ и Support.

Троянец Petya: два в одном

Страница FAQ

Страница FAQ интересна тем, что на ней открытым текстом содержится дезинформация, ведь RSA
никаким образом ни на одном этапе заражения не используется троянцем.

Троянец Petya: два в одном

Страница Support

На странице Support предоставлена возможность отправить сообщение злоумышленникам. Внимание привлекает фраза «Please write your message in english, our russian speaking staff is not always available», из которой следует, что по крайней мере кто-то из группировки говорит по-русски.

География распространения

Как мы отмечали, спам-рассылка нацелена на немецкоговорящих жертв, и статистика KSN подтверждает тот факт, что основной целью злоумышленников является именно Германия.

TOP 5 стран по числу пользователей, атакованных Petya:

Страна Количество атакованных
пользователей
1 Германия 579
2 Китай 19
3 Индия 8
4 Япония 5
5 Россия 5

Заключение

Проанализированный нами троянец Petya оказался необычным гибридом MBR-блокировщика и файлового шифровальщика: он препятствует не только загрузке ОС, но и нормальному доступу к файлам, расположенным на жестких дисках атакованной системы.

Хотя Petya заметно отличается от большинства шифровальщиков, появившихся в последние годы, трудно назвать его чем-то принципиально новым. Идеи, которые легли в основу принципа работы данного троянца, ранее встречались в разных зловредах – авторы Petya
лишь скомбинировали их в единое целое. При этом стоит признать, что реализация низкоуровневого кода для шифрования и расшифровки данных до загрузки ОС требует определенных технических навыков.

Другой интересной особенностью Petya стало графическое оформление веб-сайта для оплаты выкупа в стиле «псевдо-СССР», да и само название троянца вписывается в этот созданный злоумышленниками образ «русского троянца». Являются ли в действительности авторы зловреда выходцами из России или стран СНГ, доподлинно неизвестно, но, если верить тексту, размещенному на странице оплаты, в составе группировки как минимум есть русскоговорящий участник.

Продукты «Лаборатории Касперского» защищают пользователей от этой угрозы: исполняемые файлы Petya детектируются с вердиктом Trojan-Ransom.Win32.Petr, кроме того, поведенческий анализатор проактивно детектирует даже неизвестные модификации данного троянца с вердиктом PDM:Trojan.Win32.Generic.

PS Расшифровка без оплаты

8 апреля независимые исследователи сообщили, что ими найден способ восстановления password без оплаты выкупа злоумышленникам. Метод работает на основе генетического алгоритма и позволяет, имея 8-байтовый IV (хранится в конфигурационном секторе 54) и содержимое зашифрованного проверочного сектора 55, вычислить значение password, дающее ключ salsa, подходящий для расшифровки MFT.

Троянец Petya: два в одном

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

 

  1. Наталья

    Фёдор, добрый день! При запуске моего ноутбука, появляется поддельное сообщение о проверке диска, как изображено на рисунке, что делать? У меня установлена ОС Windows7 Домашняя. Установлен лицензионный «Касперский Интернет Секьюрити». Как избавиться от вируса?

    1. E.K.

      Не Федор, но отвечу. Если установлен лицензионный КИС, обратитесь в техподдержку, там должны помочь.

  2. Станислав

    Здравствуйте, во всем интернете нашел решение только с красным Петькой! Подскажите есть ли на данный момент способ обойти зеленого петьку?

Отчеты

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

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

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

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

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

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