Шифровальщик с изъяном

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

Осенью того же года мы обнаружили первый образец нового интересного шифровальщика TorLocker (авторское название), который впоследствии был использован для атаки на японских пользователей. На момент обнаружения (24 октября 2014 года) данный зловред уже детектировался проактивной защитой наших продуктов; впоследствии ему был присвоен вердикт Trojan-Ransom.Win32.Scraper.

Все найденные нами сэмплы шифровальщика TorLocker относились к одной из двух версий: 1.0.1 (на английском языке) или 2.0 (на английском и японском языках). Отличия между версиями минимальны и заключаются в методе обфускации кода и используемом источнике дополнительных модулей: во второй версии дополнительные модули скачиваются из интернета (с файловых хостингов или взломанных сайтов), тогда как в первой они извлекаются из секции данных. Также во второй версии часть строк была перенесена из секции данных в секцию кода, и появились «висячие» (неиспользуемые) байты. Алгоритм шифрования файлов не менялся.

Общие черты и особенности семейства

Наш анализ показал, что Trojan-Ransom.Win32.Scraper предположительно написан на ассемблере, что нехарактерно для представителей данного типа зловредов. Для связи с хозяевами троянец использует сеть Tor, что, как кажется, становится нормой для программ-вымогателей нового поколения, и прокси-сервер polipo. На компьютеры пользователей этот зловред часто попадает через бот-сеть Andromeda.

Trojan-Ransom.Win32.Scraper шифрует документы жертвы и требует вознаграждение за расшифровку – от $300. На тот случай, если зловред будет удален антивирусом уже после шифрования файлов, троянец устанавливает на Рабочий стол ярко-красные обои со ссылкой на свой исполняемый файл. В результате у пользователя появляется возможность заново установить троянец и сообщить его хозяевам об оплате – для этого необходимо ввести сведения о платеже в специальное окно TorLocker. Данные будут переданы на C&C сервер, который в ответ либо пришлет закрытый ключ RSA, либо сообщит, что оплаты не было.

Trojan-Ransom_1

Типичный представитель семейства Scraper упакован UPX, при этом секция данных дополнительно зашифрована AES с 256-битным ключом, а в секции кода между ассемблерными инструкциями находится большое количество «висячих» байт, которые никак не используются:

Trojan-Ransom_2

«Висячие» байты в теле шифровальщика

Необычным является и способ передачи строковых аргументов в функции. Сами строки размещаются непосредственно в секции кода, а для помещения указателя на строку в стек (с целью передачи ее как аргумента в некоторую функцию) инструкция, следующая за строкой, вызывается с помощью call, в результате чего адрес возврата (совпадающий с указателем на строку) помещается в стек:

Trojan-Ransom_3

Передача строковых констант как аргументов функций

Принцип работы

После запуска троянец первым делом расшифровывает свою секцию данных 256-битным ключом AES. Причем первые 4 байта данного ключа используются как идентификатор сэмпла, дописываемый в конец шифруемых файлов. Затем происходит копирование троянца во временную директорию и создание ключа реестра на автозапуск копии в разделе реестра

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]

После этого троянец создает несколько потоков, отвечающих за:

  • Поиск и завершение процессов taskmgr.exe, regedit.exe, procexp.exe, procexp64.exe.
  • Удаление всех точек восстановления системы.
  • Шифрование офисных документов пользователя, видео- и аудиозаписей, изображений, архивов, баз данных, резервных копий, виртуальных машин, ключей шифрования, сертификатов и других файлов на всех жестких и сетевых дисках, кроме файлов, находящихся в директориях %windir%, %temp%. При этом имена и расширения шифруемых файлов не изменяются.

    Полный список шифруемых расширений:
    .3gp .7z .accdb .ai .aiff .arw .avi .backup .bay .bin .blend .cdr .cer .cr2 .crt .crw .dat .dbf .dcr .der .dit .dng .doc .docm .docx .dwg .dxf .dxg .edb .eps .erf .flac .gif .hdd .indd .jpe .jpg .jpeg .kdc .kwm .log .m2ts .m4p .mdb .mdf .mef .mkv .mov .mp3 .mp4 .mpg .mpeg .mrw .ndf .nef .nrw .nvram .odb .odm .odp .ods .odt .ogg .orf .p12 .p7b .p7c .pdd .pdf .pef .pem .pfx .pif .png .ppt .pptm .pptx .psd .pst .ptx .pwm .qcow .qcow2 .qed .r3d .raf .rar .raw .rtf .rvt .rw2 .rwl .sav .sql .srf .srw .stm .txt .vbox .vdi .vhd .vhdx .vmdk .vmsd .vmx .vmxf .vob .wav .wb2 .wma .wmv .wpd .wps .xlk .xls .xlsb .xlsm .xlsx .zip

  • Извлечение BMP-изображения, сохранение его во временной директории и последующая установка в качестве обоев Рабочего стола.
  • Скачивание по заданным в конфигурации зловреда ссылкам (TorLocker 2.0) или извлечение из секции данных (TorLocker 1.0) файлов tor.exe и polipo.exe, необходимых для связи с C&C серверами. Далее запуск tor.exe с аргументами
    tor.exe -SOCKSPort 9150 -AvoidDiskWrites 1 -ExcludeSingleHopRelays 0 -FascistFirewall 1 -DirReqStatistics 0
  • и запуск polipo.exe с конфигурацией

    127.0.0.1:57223 proxyPort = 57223 socksParentProxy = 127.0.0.1:9150 socksProxyType = socks5
  • Создание GUI-окна приложения с предложением заплатить создателям Trojan-Ransom.Win32.Scraper и его перенос в левый верхний угол экрана. Поддерживаемые методы оплаты: BitCoin, UKash, PaySafeCard.
    Trojan-Ransom_4Trojan-Ransom_5

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

  • Определение IP-адреса компьютера через сайты www.iplocation.net, www.seuip.com.br, whatismyipaddress.com, checkip.dyndns.org.
  • Установление связи с C&C сервером в onion-домене через прокси-сервер polipo 127.0.0.1:57223. Если жертва вымогателям заплатила, то после установления связи с C&C и отправки информации о клиенте (выбранный публичный ключ RSA, количество зашифрованных файлов, IP-адрес и ID клиента, выбранный способ оплаты и номер банковской карты), троянец в ответ получает закрытый ключ RSA для расшифровки файлов (в этом случае создается поток для расшифровки файлов). В противном случае отправляется сообщение о том, что оплата пока не произведена. В каждом сэмпле Trojan-Ransom.Win32.Scraper прописаны несколько десятков доменных имен серверов, они не обновляются и, возможно, ведут на один и тот же сервер.

Шифрование

При запуске Trojan-Ransom.Win32.Scraper, исходя из имени компьютера и серийного номера логического диска, выбирает один из 128 зашитых в него публичных ключей RSA с номером

n = (VolumeSerialNumber * strlen(ComputerName)) mod 128,
где strlen(ComputerName) – длина имени компьютера,
а VolumeSerialNumber – серийный номер логического раздела, на который установлена ОС Windows.

Каждый сэмпл содержит свой набор публичных ключей.

Файлы пользователя шифруются AES-256 со случайно сгенерированным одноразовым ключом, при этом для каждого файла создается свой ключ шифрования. Далее в конец каждого файла дописывается служебная структура размером 512 байт: 32 байта паддинга, 4 байта идентификатора троянца и 476 байт – использованный ключ AES, зашифрованный RSA-2048.

Если размер файла превышает 512 МБ + 1 байт, то шифруются только первые 512 МБ файла. Шифрованные данные пишутся непосредственно поверх незашифрованных, создания нового файла и удаления старого не происходит.

Trojan-Ransom_6_ru

Структура зашифрованного файла

На стадии шифрования файлов доступ в интернет троянцу не требуется.

Упаковка

Для затруднения анализа некоторые из обнаруженных экземпляров троянца Trojan-Ransom.Win32.Scraper помимо UPX были дополнительно упакованы протекторами KazyLoader и KazyRootkit.

KazyLoader является двухступенчатым протектором исполняемых файлов, написанным на .NET Framework. Защищаемый исполняемый файл шифруется AES, после чего помещается в секцию ресурсов протектора как цветовая палитра BMP-картинки.

Trojan-Ransom_7

Модуль, отвечающий за расшифровку картинки, шифруется сложением по модулю два с одним байтом, после чего разбивается на части и тоже помещается в секцию ресурсов протектора в виде строк LOADER0, LOADER1, … LOADER272.

Протектор KazyRootkit также написан на .NET Framework и обладает функциональностью сокрытия процессов в Диспетчере задач (taskmgr.exe) и ключей реестра в Редакторе реестра (regedit.exe) путем удаления строк из GUI-элементов ListView с помощью WinAPI. В зависимости от настроек протектор может завершать работу и не распаковывать вложенный в него файл, если обнаруживает запущенные приложения Sandboxie, Wireshark, WPE PRO или эмулятор кода.

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

Партнерская программа

Билдер (программа для создания новых сэмплов зловреда с заданными настройками) Trojan-Ransom.Win32.Scraper распространяется через партнерскую программу и продается за несколько биткойнов. На закрытом ныне подпольном интернет-магазине Evolution мы нашли два объявления о продаже билдера для TorLocker 2.0:

Trojan-Ransom_8
Trojan-Ransom_9

Судя по опубликованному скриншоту билдера, злоумышленник может изменять некоторые настройки шифровальщика:

  • разрешить или запретить запуск Диспетчера задач и Менеджера процессов после заражения;
  • разрешить или запретить использование платежных систем BitCoin, PaySafeCard и Ukash для выплаты выкупа;
  • включить/выключить удаление точек восстановления ОС Windows;
  • изменить ссылки на загрузку tor.exe и polipo.exe, а также имена данных файлов после скачивания.

Trojan-Ransom_10

Скриншот окна билдера

На сайте подпольного магазина размещено одиннадцать отзывов о продавце билдера Trojan-Ransom.Win32.Scraper, опубликованных в промежутке от 8 мая 2014 до 17 января 2015 г.

Trojan-Ransom_11

В качестве рекламы представлены ссылки на новости об успешных атаках на пользователей с помощью Trojan-Ransom.Win32.Scraper.

Trojan-Ransom_12

Также приведено краткое описание принципа работы TorLocker и его сравнение с CryptoLocker.

Расшифровка

На стадии расшифровывания после получения оплаты Trojan-Ransom.Win32.Scraper связывается с C&C серверами злоумышленников через сеть Tor и прокси-сервер polipo для получения закрытого ключа RSA. С его помощью троянец расшифровывает ключ AES для каждого зашифрованного файла, а затем и сам файлы.

Несмотря на то, что Trojan-Ransom.Win32.Scraper шифрует все файлы AES-256 + RSA-2048, более чем в 70% случаев они поддаются расшифровке из-за ошибок, допущенных при реализации криптографических алгоритмов. Для восстановления оригинальных файлов «Лабораторией Касперского» была разработана утилита ScraperDecryptor, которую можно скачать на сайте технической поддержки.

Публикации на схожие темы

Всего комментариев: 1
  1. Anon

    Параноидальный AES-256 и тут вдруг 70% файлов поддаются расшифровке из-за ошибок реализации. Ключи недостаточно рандомны?

Добавить комментарий для Anon Cancel Reply

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