Исследователи FortiGuard Labs обнаружили новую активную кампанию вредоносного ПО Stealit, которая использует функцию Node.js Single Executable Application (SEA) для распространения своих нагрузок. Обнаружение произошло после всплеска срабатываний систем обнаружения на определенный скрипт Visual Basic, который впоследствии был идентифицирован как компонент обеспечения персистентности.
Описание
Ранее кампании Stealit создавались с использованием Electron - фреймворка с открытым исходным кодом, который упаковывает скрипты Node.js в NSIS-инсталляторы для распространения. Новая кампания перешла на нативную функцию Node.js Single Executable Application, которая аналогичным образом объединяет скрипты и связанные с ними ресурсы в автономные бинарные файлы. Оба подхода эффективны для распространения вредоносного ПО на основе Node.js, поскольку позволяют выполнение без необходимости предустановленной среды выполнения Node.js или дополнительных зависимостей.
Судя по наблюдаемым именам файлов, это вредоносное ПО по-прежнему распространяется под видом установщиков для игр и VPN-приложений, как это было в предыдущих кампаниях. Недавние образцы, которые наблюдали исследователи, упакованы в PyInstaller и распространены через файлообменные сайты, включая Mediafire и Discord.
Новые домены и коммерческая модель
Наряду с обновленным вредоносным бинарным файлом, Stealit переместил свою панель управления на новые домены. Изначально панель, функционирующая также в качестве командного сервера (C2), размещалась на stealituptaded[.]lol, но этот домен быстро стал недоступен после перемещения сервера на iloveanimals[.]shop.
Доступ к панели ведет на коммерческий веб-сайт Stealit, который позиционирует себя как поставщик "профессиональных решений для извлечения данных" через различные планы подписки. На отдельной странице возможностей перечислены типичные функции трояна удаленного доступа (RAT), включая извлечение файлов, управление веб-камерой, мониторинг экрана в реальном времени и развертывание программ-вымогателей (ransomware) для систем Android и Microsoft Windows. Сайт также содержит обучающие видео, демонстрирующие работу сервиса на каждой платформе.
Сервис предлагает платные планы для Windows и Android версий стилера, с пожизненными подписками стоимостью примерно 500 и 2000 долларов соответственно. Услуга также имеет канал в Telegram под названием StealitPublic, где публикуются обновления и промо-материалы для потенциальных клиентов. Основным контактным лицом является пользователь Telegram с идентификатором @deceptacle.
Технический анализ установщика
Кампания Stealit начинается с компонента установщика, который загружает дополнительные компоненты со своего C2-сервера. Все скрипты Node.js, объединенные в исполняемые файлы, сильно обфусцированы для усложнения анализа.
Компонент установщика включает несколько уровней перед выполнением фактического основного скрипта установки. Вредоносная кампания распространяет вредоносные скрипты Node.js с использованием функции SEA. Node.js SEA в настоящее время является экспериментальной функцией, которая активно разрабатывается, с основной целью распространения и запуска приложений Node.js в виде единого исполняемого бинарного файла в системах без установленного Node.js. В качестве компромисса, поскольку весь необходимый код приложения, зависимости и ресурсы должны быть встроены в единый исполняемый файл, простой hello world Node.js SEA для Windows может занимать 85 МБ.
Вредоносный скрипт установки для выполнения Node.js хранится как ресурс необработанных данных (RCDATA) с именем NODE_SEA_BLOB. Помимо основного скрипта, эти данные ресурса также содержат исходный путь скрипта до упаковки. В обнаруженных образцах этот путь включает каталог с именем StealIt, что сильно свидетельствует о принадлежности к одноименному сервису вредоносного ПО-стилера. Кроме того, путь также включает angablue, что указывает на использование AngaBlue - проекта с открытым исходным кодом, предназначенного для автоматизации сборки исполняемых файлов Node.js SEA.
Извлеченный скрипт установки размером 1,3 МБ сильно обфусцирован для усложнения анализа. Вкратце, он содержит большой блок данных (~1,2 МБ), который впоследствии декодируется и выполняется для второго уровня. В конце скрипта этот блок декодируется и выполняется непосредственно в памяти с использованием функции require Node.js, которая обычно используется для импорта модулей.
Второй уровень представляет собой объект функции с другим большим скриптом, взятым в качестве второго аргумента. На этот раз скрипт не закодирован, но все же сильно обфусцирован. Скрипт в аргументе, который служит третьим уровнем, также выполняется в памяти, следуя тому же методу, что и второй уровень.
Анти-анализ и установка компонентов
На этом этапе выполняются все функции для установки основных компонентов вредоносного ПО в системе. Обнаруженные варианты записывают подробный ход выполнения, который виден в журнале консоли при запуске под отладчиком. Кроме ведения журнала консоли, если это вредоносное ПО выполняется с высокими привилегиями, оно записывает журналы в определенный, жестко заданный путь к файлу: C:\Users\PC\AppData\Local\errorlx\error.log, предварительно создавая все необходимые подкаталоги.
При включении оно выполняет различные проверки для обнаружения запуска в среде анализа, классифицированные на основе типа конкретных артефактов, которые оно ищет в системе. Эти категории внутренне называются следующим образом: виртуальная среда, подозрительные файлы, анализ времени, расширенное обнаружение процессов, сетевые порты, анализ реестра, внедрение DLL и родительский процесс.
Если какая-либо из этих проверок показывает, что вредоносное ПО анализируется, оно завершает работу с сообщением об ошибке. После прохождения проверок на анализ оно переходит к фактической установке компонентов вредоносного ПО.
Сначала оно записывает ключ аутентификации в кодировке base64 в %temp%\cache.json. Этот 12-символьный буквенно-цифровой ключ используется для аутентификации на своем C2. Это тот же ключ, который используют подписчики сервиса вредоносного ПО для входа в свои панели управления (dashboard), где они, вероятно, отслеживают и контролируют своих жертв.
Затем оно загружает первоначальные компоненты со следующих URL-адресов: https[:]//root.iloveanimals[.]shop/download/save_data, https[:]//root.iloveanimals[.]shop/download/stats_db и https[:]//root.iloveanimals[.]shop/download/game_cache. Загруженные данные сохраняются в %UserProfile%\Appdata\Local\{word list}\{random alphanumeric}\{filename}.exe.br.
Для предотвращения сканирования загруженных файлов Защитником Windows все созданные каталоги добавляются в список исключений путем выполнения команды PowerShell. Загруженные данные декомпрессируются с использованием алгоритма Brotli и сохраняются в том же каталоге с сохранением текущих имен файлов без расширения .br.
Подобно установщику, эти компоненты также представляют собой скрипты Node.js, упакованные как исполняемые файлы. Однако пока установщик использует официальный SEA Node.js для достижения этого, они упакованы с использованием проекта с открытым исходным кодом под названием Pkg. Этот инструмент использует другую реализацию, которая включает фактическое исправление официального node.exe Node.js для поддержки выполнения встроенных скриптов NodeJS.
Функциональность компонентов
После загрузки и выполнения "game_cache.exe" создается скрипт Visual Basic startup.vbs, который его запускает. Этот скрипт затем помещается в папку автозагрузки Windows для обеспечения автоматического выполнения при запуске системы.
Компонент save_data.exe загружается и выполняется только в том случае, если вредоносное ПО было выполнено с высокими привилегиями. После выполнения этого файла он оставляет файл с именем cache.exe в том же каталоге и выполняется с определенной командной строкой. cache.exe - это инструмент, разработанный на основе проекта ChromElevator с открытым исходным кодом, который предназначен для извлечения информации конкретно из браузеров на основе Chromium. Он утверждает, что обходит функции безопасности, реализованные этими браузерами, тем самым дополнительно увеличивая свои шансы на успех.
Компонент stats_db.exe извлекает информацию из длинного списка приложений. Перед началом сбора информации из целевых приложений он пытается завершить связанные процессы. Затем он переходит к извлечению информации из различных браузеров, включая Google Chrome и Microsoft Edge. Извлеченная информация хранится в каталоге %Temp%/BrowserData.
Помимо браузеров, он также извлекает информацию из различных приложений, включая игровые платформы Steam, Minecraft, GrowTopia, Epic Games Launcher; мессенджеры WhatsApp, Telegram; криптовалютные кошельки Atomic, Exodus и кошельки, установленные как расширения браузера.
Управление и возможности
Компонент game_cache.exe отвечает за связь с командным сервером и выполнение инструкций, выдаваемых субъектами угроз. Он работает с использованием ключа аутентификации, передаваемого в качестве аргумента.
Изначально этот клиент оставляет дополнительные компоненты в системе жертвы в каталоге %Temp%, включая Encrypted_files.txt (вероятно, связанный с модулем программ-вымогателей вредоносного ПО), ScreenCapture_1.3.2.bat, app.manifest (используются для построения приложения VB.NET screenCapture_1.3.2.exe внутри системы жертвы) и Stealit{random characters}.txt (содержит ключ аутентификации в открытом тексте).
Он изначально подключается к C2, отправляя информацию о жертве через HTTP POST-запрос к https[:]//root[.]iloveanimals[.]shop/panelping в формате JSON. С этого момента он будет ожидать команды от C2-сервера.
Основываясь на функциях, рекламируемых на веб-сайте Stealit, этим компонентом можно управлять для выполнения следующих действий: просмотр экрана в реальном времени, доступ к веб-камере в реальном времени, управление системой, панель обмена сообщениями программы-вымогателя, поддельные предупреждающие сообщения, обновление журналов, исполнитель команд CMD, удаленный аудиоплеер, установщик EXE + связыватель автозагрузки, сборщик файлов и смена обоев.
Возврат к Electron Framework
В течение нескольких недель новые образцы Stealit вернулись к фреймворку Electron, на этот раз шифруя объединенные скрипты Node.js с помощью AES-256-GCM. Функционально они работают так же, как вариант SEA, описанный ранее. Этот переход демонстрирует адаптивный характер угрозы и постоянные усилия злоумышленников по усложнению обнаружения и анализа своих вредоносных кампаний.
Индикаторы компрометации
URLs
- https://cdn.discordapp.com/attachments/1395171942494896190/1413957011837816915/VrchatPlugin.rar?ex=68bdd195&is=68bc8015&hm=b9f359a7f75b84d1b860d2aa4dd92f8adad3a2feef5d82832f49d664a256ff7b&
- https://download1529.mediafire.com/8006s55pduvgtQ0THBMZxcLtlrh20a5BnfF18n8YfGUB8P7M5U3mEQb-UYYDCrMHsSG0aWvnyy_LIMg2OnTc4kuNYmWzjWLQwOds-qSfhdO03NOQFAAaYCPiOvB8nU7mBEHe-3a5gDSufW6upPbFXyGlbzBTdtpcrVPXokNKOYZ9/c4zbp39q02jvrn8/Aykadia.rar
- https://iloveanimals.shop/
- https://iloveanimals.shop/user/login
- https://root.iloveanimals.shop/download/game_cache
- https://root.iloveanimals.shop/download/save_data
- https://root.iloveanimals.shop/download/stats_db
- https://root.iloveanimals.shop/panelping
- https://root.stealituptaded.lol/download/game_cache
- https://root.stealituptaded.lol/download/save_data
- https://root.stealituptaded.lol/download/stats_db
- https://www.mediafire.com/file/9ni7pgjxuw8pc6h/ShaderSetup.rar/file
SHA256
- 083c4e0ffdc9edf0d93655ee4d665c838d2a5431b8064242d93a545bd9ad761b
- 24b3def3f374c5f17ec9f1a347c71d9c921155c878ab36e48dd096da418bf782
- 432b8414113a8c14c0305a562a93ed926e77de351bac235552a59cc02e1e5627
- 554b318790ad91e330dced927c92974d6c77364ceddfb8c2a2c830d8b58e203c
- 5ea27a10c63d0bbd04dbea5ec08fe0524e794c74d89f92ac6694cfd8df786b1f
- 818350a4fb4146072a25f0467c5c99571c854d58bec30330e7db343bceca008b
- 8814db9e125d0c2b7489f8c7c3e95adf41f992d4397ed718bda8573cb8fb0e83
- 8e1cf254d23e2b94c77294079336339ececf33a3e7ee1a3621ee4e0df0695ce5
- 919a2107ac27e49cdaa60610706e05edfc99bd3f2e9ca75da4feb6a5f2517c27
- aa8f0988f1416f6e449b036d5bd1624b793b71d62889afdc4983ee21a1e7ca87
- c38130d7cb43cf3da4858247a751d7b9a3804183db8c4c571b6eede0590474da
- e004f8e39e489dec74a13d99836ee5693bd509047ecf49f3fc14efc143a161b5