SHA1:
- Сетевой червь e889544aff85ffaf8b0d0da705105dee7c97fe26
- Дроппер энкодера: 5ff465afaabcbf0150d1a3ab2c2e74f3a4426467
- Энкодер: 7d36a6aa8cb6b504ee9213c200c831eb8d4ef26b
- Авторский декодер: 45356a9dd616ed7161a3b9192e2f318d0ab5ad10
Многокомпонентный сетевой червь, известный под именем WannaCry. Написан на языке C/C++, собран в среде разработки MS Visual Studio, не упакован. Содержит в собственном теле две динамические библиотеки. При запуске пытается отправить GET-запрос на удаленный сервер http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com без кэширования результатов. Если получает ответ от сервера, завершает работу.
Запускается как системная служба Windows с именем "mssecsvc2.0" (видимое имя – "Microsoft Security Center (2.0) Service"). Червь способен принимать аргументы командной строки. Если указан хотя бы один аргумент, пытается открыть сервис "mssecsvc2.0" и настроить его на перезапуск в случае ошибки. После запуска пытается переименовать файл C:\WINDOWS\tasksche.exe в C:\WINDOWS\qeriuwjhrf, сохраняет из ресурсов троянца-энкодера в файл C:\WINDOWS\tasksche.exe и запускает его с параметром /i. Через 24 часа после своего запуска в качестве системной службы червь автоматически завершает работу.
Для собственного распространения червь инициализирует Windows Sockets, CryptoAPI и запускает несколько потоков. Один из них перечисляет все сетевые интерфейсы на зараженном ПК и опрашивает доступные узлы в локальной сети, остальные генерируют случайные IP-адреса. Червь пытается соединиться с этими удаленными узлами с использованием порта 445. При его доступности в отдельном потоке реализуется заражение сетевых узлов с использованием уязвимости в протоколе SMB.
Дроппер
Значительная часть дроппера представляет собой защищенный паролем ZIP-архив, в котором хранятся следующие файлы:
- b.wnry - файл с обоями Рабочего стола Windows;
- c.wnry - файл содержит адреса onion-серверов и адрес BTC-кошелька;
- t.wnry - зашифрованный файл, содержащий троянца-энкодера. Ключ для расшифровки хранится в самом файле;
- s.wnry – архив, содержащий ПО для работы с сетью Tor.
После запуска пытается установить себя в следующие папки:
- %SYSDRIVE%\ProgramData (если папка существует)
- %SYSDRIVE%\Intel
- %SYSDRIVE%
- %TEMP%
При установке создает соответствующую папку, а в ней – вложенную папку со случайным именем, затем создает в этой папке собственную копию с именем tasksche.exe.
Пытается запустить свою копию в виде системной службы со случайным именем. Если попытка не удается, создает системную службу, регистрирует в ней запуск собственной копии с использованием вызова командного интерпретатора ("cmd.exe /c path") и запускает эту службу. В случае неудачи запускается как обычное приложение.
При запуске в режиме приложения дроппер пытается записать в ветви системного реестра HKLM\Software\WanaCrypt0r или HKCU\Software\WanaCrypt0r путь и имя своей текущей директории. Распаковывает содержимое архива в свою текущую папку, сохраняет в файл c.wncry один из трех возможных адресов BTC-кошельков. Открывает доступ к рабочему каталогу всем пользователем системы и устанавливает для него атрибут «скрытый». Затем извлекает из файла t.wnry троянца-энкодера, расшифровывает его и запускает на выполнение.
Троянец-шифровальщик
Энкодер хранится в отдельной динамической библиотеке. Он шифрует файлы с использованием алгоритма AES-128. С помощью функции CryptGenKey энкодер создает RSA-пару, публичная часть сохраняется в файле 00000000.pky, приватная – шифруется авторским публичным ключом и сохраняется в файле 00000000.eky. Ключ генерируется для каждого шифруемого файла с использованием функции CryptGenRandom.
В зашифрованном файле сохраняется:
- маркер (8 байт): WANACRY!;
- длина зашифрованного ключа (4 байта);
- зашифрованный ключ (256 байт);
- информация о типе шифрования (4 байта);
- исходный размер файла (8 байт);
- зашифрованные данные.
В процессе шифрования создается список файлов, которые могут быть расшифрованы в тестовом режиме. Он сохраняется в файле f.wnry. Сессионный AES-ключ для расшифровки тестовых файлов шифруется вторым RSA-ключом, приватная часть которого хранится в теле троянца.
Шифровальщик содержит авторский декодер, который выполняет следующие функции:
- установка обоев рабочего стола из файла b.wnry;
- удаление теневых копий;
- отключение функции восстановления системы;
- распаковка ПО для работы с Tor из файла s.wnry или скачивание его с сайта, адрес которого хранится в файле, зашитом в c.wnry.
Декодер способен воспринимать следующие параметры командной строки (без аргументов):
- fi — извлекает ПО для работы с Tor, устанавливает соединение с портом 80 onion-серверов, указанных в конфигурации. Получает от них адрес кошелька BTC и сохраняет его в конфигурации;
- co — читает из res-файла данные о начале шифрования и, предположительно, отправляет их на onion-сервер;
- vs — удаляет теневые копии и отключает восстановление системы.
Для обмена данными с onion-серверами Trojan.Encoder.11432 использует собственный протокол. К сожалению, в настоящее время расшифровка поврежденных троянцем файлов не представляется возможной.
Сетевая активность
Для обмена информацией с удаленными серверами троянец использует собственный протокол. Можно выделить три типа сетевой активности:
- отправка сообщений авторам троянца;
- запрос имени BTC-кошелька;
- проверка оплаты выкупа.
Перед началом сеанса связи троянец проверяет наличие соединения и выбирает адрес onion-сервера из записанных в конфигурации. Для проверки работоспособности сервера соединяется с ним по 80-му порту через сеть TOR и устанавливает сессионный ключ, после чего передается полезная информация.
Передаваемые пакеты данных шифруются.
При отправке сообщений авторам троянца текст размером менее 10 символов не отсылается, вредоносная программа возвращает ошибку "Too short message!". Сообщения длиннее 1000 символов урезаются до 1000. Декодер не позволяет отправлять сообщения слишком часто (эти ограничения реализованы в самом декодере).
При нажатии на кнопку проверки платежа декодер пытается прочитать файл, содержащий публичный ключ, и файл с приватным ключом. Если чтение прошло успешно, проверяет их соответствие путем шифрования и расшифровки тестового буфера. Если файла с приватным ключом нет или он не соответствует файлу, содержащему публичный ключ, троянец обращается к своим серверам.
Отправив данные на сервер, ожидает получения расшифрованного файла eky (приватная часть RSA-ключа).