Эволюция шифровальщика JSWorm. Часть 2
Life-Hack [Жизнь-Взлом]/ХакингМарт 2020 г. Nefilim
MD5: 5ff20e2b723edb2d0fb27df4fc2c4468
Приблизительно в марте 2020 г. разработчики изменили название троянца на Nefilim. К моменту появления его первых вариантов модель распространения этого семейства вредоносного ПО изменилась. От схемы общедоступного RaaS-сервиса, которая использовалась для JSWorm и Nemty, разработчики перешли к прямому сотрудничеству с партнерами, заинтересованными в «охоте на крупную дичь». Выбрав цель крупного калибра, злоумышленники проникали в ее сеть, вручную похищали конфиденциальные данные и запугивали жертву, угрожая выложить украденную информацию в общий доступ.
Из кода троянца исчезли все вспомогательные функции, такие как завершение процессов, удаление теневых копий и связь с командным сервером. Он превратился в узкоспециализированный бинарный файл, предназначенный исключительно для шифрования файлов. Другие операции, если требовалось, атакующие выполняли вручную или с помощью сторонних инструментов.
Как и Nemty, Nefilim был написан на языке C++ и скомпилирован в MS Visual Studio. Значительные совпадения участков кода поздних версий Nemty (2+) и Nefilim позволяют предположить, что для их разработки использовался один и тот же исходный код.
Например, процедуры расшифровки строк у этих вариантов выглядят одинаково. Единственное отличие — ключи RC4.

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

В отличие от Nemty, образец Nefilim содержит цифровую подпись, которая была действительна в период активного распространения этого варианта зловреда, а затем отозвана.
После запуска зловред проверяет наличие аргументов командной строки. Если их нет, он начинает поиск файлов на всех локальных и удаленных дисках. Если введен аргумент, троянец проверяет, указывает ли он на существующую папку, и, если да, шифрует все файлы, которые в ней находятся. В противном случае он интерпретирует аргумент как путь к файлу и пытается зашифровать этот файл. Возможно, обработку аргумента командной строки добавили для того, чтобы дать киберпреступникам возможность вручную отбирать файлы для шифрования, или же просто для отладки.
Схема шифрования
В коде троянца содержится жестко прописанный открытый мастер-ключ RSA-2048, созданный злоумышленниками.
Для каждого файла жертвы Nefilim генерирует 128-битный ключ и один 128-битный вектор инициализации и шифрует содержимое файла с использованием алгоритма AES в режиме CBC. Ключ и вектор инициализации шифруются с использованием мастер-ключа RSA и сохраняются в конце зашифрованного файла.
К имени зашифрованного файла добавляется дополнительное расширение .NEFILIM.
Сообщение с требованием выкупа и электронными адресами для связи с шантажистами сохраняется в обработанных папках как файл NEFILIM-DECRYPT.txt.

Апрель 2020 г. Offwhite
MD5: ad25b6af563156765025bf92c32df090
При смене названия Nefilim на Offwhite разработчики еще больше сократили код зловреда, чтобы уменьшить итоговый размер бинарного файла. С этой целью они перестали использовать библиотеку STL и избавились от кода среды выполнения C++, создававшего ненужный объем. В остальном Nefilim остался все тем же. В дополнение к описанным выше возможностям, в коде троянца появилась новая интересная функция: разработчики научили его создавать обои для рабочего стола с текстом сообщения о выкупе и сохранять их как файл scam.jpg.

Июнь 2020 г. Telegram
MD5: 004f67c79b428da67938dadec0a1e1a4
Различия между вариантами Offwhite и Telegram оказались минимальными. Код нового варианта практически идентичен предыдущему, а главные отличия заключаются в том, что разработчики поменяли расширение зашифрованных файлов (на .TELEGRAM) и имя файла с сообщением для требования выкупа (на TELEGRAM-RECOVER.txt), а также перестали кодировать названия импортируемых API-функций в виде шестнадцатеричных строк.
Ноябрь 2020 г. Fusion
MD5: f37cebdff5de994383f34bcef4131cdf
Этот вариант троянца написан на языке Go. Как мы уже упоминали, предыдущие варианты разрабатывались на C++, а значит, код был переписан с нуля и, возможно, другим разработчиком.
Однако общий принцип работы зловреда, схема шифрования, содержание сообщения с требованием выкупа и факт подписания бинарного файла позволяют предположить, что этот образец также принадлежит к семейству JSWorm.
Больше того, в коде троянца жестко прописан адрес сайта, на котором злоумышленники, стоящие за этим семейством, ранее уже публиковали скомпрометированные данные, — это неопровержимый аргумент в пользу предположения о связи Fusion с его предшественниками.
Как и предыдущие варианты, Fusion получает аргумент командной строки — имя файла, подлежащего шифрованию. Возможно, эта функция используется для отладки шифровальщика.
Схема шифрования
Программа генерирует два случайных числа длиной 128 бит (вектор инициализации и ключ), которые используются для шифрования файлов с помощью алгоритма AES в режиме GCM. Если файл весит меньше 1,5 МБ, его содержимое шифруется полностью, а если больше, то применяется следующий принцип:
- 320 КБ данных шифруются;
- затем 320 КБ пропускаются без шифрования;
- следующие 320 КБ шифруются;
- следующие 320 КБ пропускаются;
- …
- и т. д., до конца файла.
Таким образом, большой файл оказывается зашифрованным только наполовину (но обработанные и необработанные фрагменты чередуются).
Открытый мастер-ключ RSA, прописанный в коде программы, используется для шифрования значений вектора инициализации и ключа, которые затем добавляются в конец каждого шифруемого файла.

В довершение ко всему, в конец файла записывается строка FUSION, а к имени файла добавляется расширение .FUSION. Образец также оставляет сообщение с контактами для связи в виде файла FUSION-README.txt:

Январь 2021 г. Milihpen
MD5: e226e6ee60a4ad9fc8eec41da750dd66
Для варианта Milihpen создатели семейства JSWorm в очередной раз полностью переписали код и, возможно, наняли для этого нового разработчика. Подобно Nefilim и более ранним вариантам, этот образец был разработан на языке C++, а не на Go, как Fusion.
Несмотря на это, основная функциональность, поток выполнения, схема шифрования и адрес сайта, на котором злоумышленники угрожают опубликовать скомпрометированные данные, остались прежними. Кроме того, связь с одним из предыдущих вариантов видна в самом имени троянца: это слово Nephilim, написанное задом наперед.
Теперь троянец логирует свои действия в консоли — вероятно, чтобы оператору было удобнее управлять процессом заражения.

Как и предыдущие варианты, этот образец вредоносного ПО подписан цифровым сертификатом. При запуске Milihpen парсит данные конфигурации, жестко прописанные в его коде. Конфигурационная структура хранится в формате JSON и содержит следующие поля:
{
//имя мьютекса
"mutex": "MILIHPEN",
//расширение зашифрованного файла
"ext": "MILIHPEN",
//часть имени файла, содержащего сообщение с требованием выкупа
"nt_name": "-INSTRUCT.txt",
//главный открытый ключ RSA, закодированный в base64 (сокращен)
"pub": "UlNB...Bnum9ew==",
//текст сообщения с требованием выкупа, закодированный в base64 (сокращен)
"nt_content": "VHdvIHRoa...wuY29t",
//расширения пропускаемых файлов
"whiteext": [".exe", ".dll", ".lnk", ".url", ".log", ".cab", ".cmd", ".bat", ".dll", ".msi", ".mp3", ".mp4", ".pif", ".ini"],
//названия пропускаемых папок
"whitedir": ["windows", "programdata", "program files", "program files (x86)", "appdata", "$recycle.bin", "all users", ".", "..", "rsa"],
//имена динамически импортируемых API-функций
"winapi": ["MessageBoxA", "MessageBoxW", "BCryptOpenAlgorithmProvider", "BCryptGenRandom", "BCryptImportKeyPair", "BCryptEncrypt"]
}
После парсинга значений конфигурации Milihpen создает мьютекс, получает аргументы командной строки и затем действует по тому же принципу, что и Nefilim и более поздние варианты JSWorm. Если введен аргумент командной строки, троянец проверяет, указывает ли он на существующую папку, и, если указывает, шифрует все находящиеся в ней файлы. В противном случае он интерпретирует аргумент как путь к файлу и пытается зашифровать этот файл. Если аргумент не введен, троянец начинает поиск файлов на всех локальных и удаленных дисках.

Схема шифрования
Здесь, так же как и в других аспектах, Milihpen точно воспроизводит общую логику работы Nefilim и последующих вариантов. При этом анализ кода показал, что реализация этой логики была полностью переписана.
Milihpen использует все те же алгоритмы для шифрования файлов — AES в режиме CBC и RSA. Ключ AES и вектор инициализации имеют длину 128 бит, шифруются с использованием главного открытого ключа RSA и сохраняются в конце зашифрованного файла.
В отличие от своих предшественников, для генерации случайных чисел и RSA-шифрования Milihpen использует функции BCrypt API из библиотеки CNG (Cryptography Next Generation), появившейся в Windows Vista. Это не дает Milihpen особых преимуществ, однако является примечательной характеристикой, поскольку сегодняшние разработчики шифровальщиков редко используют BCrypt API.
К именам зашифрованных файлов добавляется дополнительное расширение .MILIHPEN, а сообщение с требованием выкупа сохраняется как файл MILIHPEN-INSTRUCT.txt.
Оно содержит схожий текст и те же адреса сайтов для публикации скомпрометированных данных, что и у предыдущих вариантов семейства JSWorm.

Февраль 2021 г. Gangbang
MD5: 173ab5a59490ea2f66fe37c5e20e05b8
Вариант Gangbang идентичен Milihpen и является последним обнаруженным представителем этого семейства вредоносного ПО. Единственное примечательное отличие этого троянца от Milihpen заключается в том, что его структура конфигурации хранится не в открытом виде, а зашифрована алгоритмом AES с жестко прописанным ключом и вектором инициализации. Кроме того, в отличие от предыдущих версий, электронная подпись в этом образце недействительна.

Сайт для публикации скомпрометированных данных
Весной 2020 г. создатели семейства JSWorm занялись «охотой на крупную дичь» и запустили собственный сайт, на котором стали публиковать конфиденциальные данные, украденные у жертв.
На момент написания этой статьи сайт все еще работает. Публикации на нем содержат информацию более чем о сотне организаций, ставших жертвами вредоносного ПО.

На странице «Контакты» перечислены актуальные адреса электронной почты, которые злоумышленники используют для переговоров.

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

Жертвы
Основываясь на данных телеметрии Kaspersky Security Network (KSN), мы создали таблицу, показывающую географическое распределение атак шифровальщиков JSWorm.

10 стран, столкнувшихся с наибольшим количеством атак JSWorm (по данным статистики Kaspersky Security Network)

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

Распределение жертв JSWorm по отраслям (согласно информации с сайта, где злоумышленники публикуют скомпрометированные данные) (скачать)
Согласно списку жертв, опубликованному вымогателями, две пятых (41%) атак JSWorm пришлись на инженерно-производственный сектор. Энергоснабжение и коммунальные услуги (10%), финансовый сектор (10%), сфера услуг (10%), транспортный сектор (7%) и здравоохранение (7%) также занимают верхние позиции в списке.
Заключение
Семейство JSWorm эволюционировало в течение двух лет. За это время троянец сменил модель распространения, а его код был несколько раз переписан с нуля. С момента своего появления в 2019 г. он из типичного массового вымогателя, угрожающего индивидуальным пользователям, превратился в «охотника на крупную дичь», атакующего серьезные цели и запрашивающего огромные выкупы.
Как и в случае с другими целевыми атаками вымогателей, ключ к защите от заражения JSWorm — комплексный подход к безопасности корпоративной сети. Любая уязвимость, будь то незащищенная версия серверного ПО, сотрудник, перешедший по вредоносной ссылке, или слабый пароль к системе дистанционного управления, может стать точкой входа для злоумышленников.
Для укрепления защиты от «охотников на крупную дичь» мы советуем провести аудит кибербезопасности корпоративной сети, чтобы выявить и заблаговременно устранить все ее недостатки.
Ниже приведем прочие рекомендации, помогающие максимально защитить организацию.
- Изолируйте от публичных сетей службы удаленного рабочего стола (такие как RDP), если нет абсолютной необходимости в доступе к этим службам извне, и всегда используйте для них надежные пароли.
- Убедитесь, что используете актуальные версии коммерческих VPN-решений и другого серверного ПО, поскольку этот вид программного обеспечения часто является вектором заражения для шифровальщиков. Вовремя обновляйте клиентские приложения.
- В своей стратегии защиты уделите особое внимание обнаружению эксфильтрации данных в интернет и дальнейшего распространения зловредов в вашей сети. Обращайте особое внимание на исходящий трафик — это позволит обнаружить подключения злоумышленников. Регулярно выполняйте резервное копирование данных. Обеспечьте быстрый доступ к резервным копиям в экстренных случаях. Используйте сервисы информирования об угрозах, чтобы знать, какие методы и тактики используют злоумышленники в настоящее время.
Индикаторы компрометации
JSWorm (ранний вариант)
MD5: a20156344fc4832ecc1b914f7de1a922
JSWorm 4.0.3
MD5: 5444336139b1b9df54e390b73349a168
Nemty 1.4
MD5: 1780f3a86beceb242aa81afecf6d1c01
Nefilim
MD5: 5ff20e2b723edb2d0fb27df4fc2c4468
Offwhite
MD5: ad25b6af563156765025bf92c32df090
Telegram
MD5: 004f67c79b428da67938dadec0a1e1a4
Fusion
MD5: f37cebdff5de994383f34bcef4131cdf
Milihpen
MD5: e226e6ee60a4ad9fc8eec41da750dd66
Gangbang
MD5: 173ab5a59490ea2f66fe37c5e20e05b8