вторник, 11 февраля 2020 г.

Первый вымогатель на базе Node.js: Nodera




Недавно, находясь в поиске угроз компьютерной безопасности, QuickHealSecurityLabs наткнулся на необычный фреймворк на основе фреймворка-Nodera. Использование среды Node.js не часто встречается в семействах вредоносных программ. Последние разработки, осуществляемые субъектами угрозы, показывают, что создается отвратительный и единственный в своем роде вымогатель; тот который использует платформу Node.js, которая позволяет ему заражать ОС на базе Windows.



Node.js - это кроссплатформенная среда исполнения JavaScript с открытым исходным кодом, которая выполняет код JavaScript вне браузера. Он построен на движке V8 JavaScript. V8 - это высокопроизводительный движок JavaScript и WebAssembly от Google с открытым исходным кодом, написанный на C ++. Он используется в Chrome и Node.js. Он реализует ECMAScript и WebAssembly, работает в системах Windows 7 или новее, macOS 10.12+ и Linux, использующих процессоры x64, IA-32, ARM или MIPS. V8 может работать автономно или быть встроен в любое приложение C ++.

Интересно, что пользователи могут легко заразиться этим вымогателем Nodera при серфинге в Интернете, либо щелкнув по вредоносному файлу HTA, либо когда он используется в качестве вредоносной рекламы.



Детали анализа:

Примером, полученным в лаборатории, был vbs-скрипт, в котором есть несколько встроенных js-скриптов. При выполнении он создает каталог «GFp0JAk» в расположении «% userprofile% \ AppData \ Local \».

Он также создает подкаталог «node_modules» для хранения библиотек Node.js, которые необходимы для выполнения полезной нагрузки JS. Для выполнения этих сценариев требуется node.exe, который будет загружен с нижеуказанного URL.

hххps://nodejs.org/download/release/latest-v8.x/win-x86/node.exe

Загруженный node.exe хранится как GFp0JAk.exe в «% userprofile% \ AppData \ Local \ GFp0JAk».

Кроме того, он создает 3 разных ключа реестра «Microsoft Office», «Автозагрузка» и «Windows» в «HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run \», чтобы сохранить его в системе.


Рис 1: Запись в реестре

Затем он удаляет некоторые необходимые библиотеки, такие как fs.js, graceful-fs.js, legacy-streams.js, package.json, polyfills.js в «% userprofile% \ AppData \ Local \ GFp0JAk \ node_modules \», а так же вредоносные файлы. JS «lLT8PCI.js» в «% userprofile% \ AppData \ Local \ GFp0JAk \».

Когда все необходимые модули установлены, он проверяет наличие «% userprofile% \ AppData \ Local \ GFp0JAk \ GFp0JAk.exe». Если он присутствует, он начнет выполнение сценария, вызвав

oShell.Run (strExe& ”” &outWorkingDir& “\” &strEntPoint, 0, true)

где strExe = «% userprofile% \ AppData \ Local \ GFp0JAk \ GFp0JAk.exe»

outWorkingDir= ”% userprofile% \ AppData \ Local \ GFp0JAk \”

strEntPoint = «% USERPROFILE% \ AppData \ Local \ GFp0JAk \ lLT8PCI.js»

Фактическая полезная нагрузка - это скрипт «lLT8PCI.js», который выполняет все действия, связанные с вымогателями.

В этом сценарии для каждой пользовательской функции автор использовал Async-AwaitGenerators и Promises. Эти два наиболее мощных понятия инфраструктуры Node.js. Определяя любой префикс функции с помощью ключевых слов Async, фактически позволяет писать асинхронный код синхронно, а возвращаемое значение из асинхронной функции называется обещанием, которое проверяет состояние завершения данной функции.


Рис 2: Инициализация переменных и Открытый ключ

JS-скрипт начинается с инициализации некоторых переменных, таких как «bitcoinAddress» и его цены. Кроме того, он встраивает открытый ключ RSA размером 4096 бит в формате PEM, как показано на рисунке 2.


Рис. 3: Функции, используемые в скрипте

Сначала он проверяет права администратора в «% WinDir%», пытаясь создать файл с именем формата {randomname_of_len_4}. {Randomname_of_len_2}. Функция «generateKey» используется для генерации произвольного имени и расширения файла.


Рис. 4. Создание имени и расширения файла.

Затем он вызывает функцию сканирования, которая перечисляет все диски, присутствующие в системе, и создает их список. Только для диска «C:» это сделало исключение. Он рассматривает только каталоги, которые содержат пользовательские файлы.


Рис 5: Целевые каталоги

Он сгенерирует файл с именем «{randomname_of_len_6} .key», который используется для хранения ключа AES-256, зашифрованного RSA. Ключ  AES генерируется с помощью функции «generateKey».


Рис 6: Все модули Перед шифрованием файлов, он убивает процесс, как показано на рис. Ниже, и удаляет теневую копию тома.



Рис 7: процесс атаки
После шифрования файла добавляется расширение «.encrypted». Затем он сбрасывает два файла: «% USERPROFILE% \ AppData \ Local \ GFp0JAk \„ Как к бай-bitcoins.html“ «% USERPROFILE% \ Desktop \ Расшифровать – ваш -files.bat».


Рис 8: Примечание выкупа - How-to-buy-bitcoins.html HTML-файл представляет собой файл примечаний и пакетного файла вымогателей, содержащий команду для выполнения того же сценария JS с параметром «decryptStatic», который вызывает процедуру дешифрования.



Рис 9: Зашифрованные файлы

Этот вымогатель, кажется, находится в стадии разработки и имеет некоторые недостатки, как указано ниже:

В примечании с требованием о выкупе упоминается открытый ключ RSA размером 2048 бит, хотя открытый ключ, встроенный в сценарий, имеет длину 4096 бит.
Время уничтожения жесткого кода закрытого ключа «1 марта 2018 года».
В записке о выкупе не указан канал связи для получения закрытого ключа.
Хотя он, кажется, написан разработчиком-любителем, это интересная работа, и вероятность того, что она станет популярной в будущем, довольно высока.

Название обнаружения:

VBS.NoderaRansom.36592

JS.NoderaRansom.36593

Перевод статьи Рави Гидвани, Гутам Трипати
Лаборатории безопасности, QuickHealTechnologies, Ltd.


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



1 комментарий: