Threat Response
Threat Response

Armored Likho копает змеиную яму: скрытая кампания с использованием BusySnake Stealer

Продукты и сервисы Kaspersky по теме

Введение

В ходе мониторинга угроз мы выявили новую фишинговую кампанию, связанную с деятельностью ранее неизвестной APT-группировки, которой мы присвоили наименование Armored Likho (по косвенным признакам также известной под названием Eagle Werewolf). Серия атак направлена на государственные организации и электроэнергетический сектор. География атак затрагивает Россию, Бразилию и Казахстан, что подтверждает статус международного актора.

Группировка совмещает финансово мотивированные атаки на частных пользователей с кибершпионажем в отношении организаций. Атакующие задействуют модульные, обфусцированные образцы классов RAT и инфостилеров с функциями обхода средств динамического анализа, а также более простой инструментарий, в частности Go2Tunnel для организации удаленного доступа и туннелирования. Такой набор зловредов позволяет злоумышленникам реализовывать скрытое управление скомпрометированными хостами, эксфильтрацию учетных данных и другой чувствительной информации, а также гибко расширять функциональность за счет подгружаемых модулей в зависимости от профиля жертвы и поставленных задач.

Ключевые особенности кампании:

  • Группа использует ранее не описанный инструмент — BusySnake Stealer. Этот стилер написан на Python и предназначен для атак на Windows-системы. Мы обнаружили несколько версий зловреда, а также дополнительный модуль для кражи cookie-файлов.
  • Вредоносная нагрузка первого этапа (загрузчики и стейджеры) сгенерирована при помощи ИИ, что размывает TTP атакующих, усложняя атрибуцию атак.
  • В ходе анализа мы выявили признаки, указывающие на то, что операторы стилера владеют украинским языком, на основе языковых и инфраструктурных артефактов.

Эта кампания демонстрирует сразу несколько трендов: рост технической зрелости Armored Likho, морфизм инструментов и переход к более сложным схемам в попытках обойти защитные решения, от обфускации исходного кода на Python до внедрения сетевых механизмов прямо в код вредоносного ПО. В статье мы разберем активную на момент публикации кампанию и используемый злоумышленниками инструментарий.

Начальный вектор заражения

Одним из ключевых векторов получения первоначального доступа, который злоумышленники активно применяют в своих новых кампаниях, остается фишинг. Armored Likho точечно рассылает письма, тематика которых варьируется от официальных правительственных уведомлений до проведения социальных проектов. В рамках последней кампании злоумышленники распространяли вредоносные вложения в виде архивов с названиями 1bfb2e79-8084-429e-a35c-8b595ab9f839_psihologicheskiy_test.zip или zayavka_gumanitarnayapomosch.rar. Внутри архивов находились исполняемые или LNK-файлы, названия которых повторяли тематику писем и вводили пользователей в заблуждение, вследствие чего запускались на устройствах. Далее рассмотрим несколько вариантов получения первоначального доступа.

Вложение в формате .exe

Одним из вариантов содержимого архива является дроппер psihologicheskiy_test.exe, представляющий собой самораспаковывающийся архив, созданный при помощи Nullsoft Scriptable Install System (NSIS). После открытия пользователем такого файла запускается приложение-приманка, которое усыпляет бдительность пользователя под видом психологического опроса. Аналогичные дропперы мы уже видели в предыдущих кампаниях группы, но ранее они были написаны на Rust.

Далее на диск записывается и запускается легитимный файл $temp\nsn5531.tmp\pnx.exe, после чего в память процесса pnx.exe внедряется код для запуска вредоносного загрузчика. Тот, в свою очередь, загружает несколько архивов из репозиториев на GitHub. При анализе этих репозиториев мы выявили тестовые образцы вредоносного ПО и их более ранние версии. Релиз данных в репозитории автоматизирован, что позволяет быстро менять полезные нагрузки, а также сами репозитории.

Пример репозитория с полезными нагрузками

Пример репозитория с полезными нагрузками

Распаковка скачанных архивов выполняется в каталог $appdata\WindowsHelper. Это рабочая директория зловреда, в которой в дальнейшем будут устанавливаться и создаваться все компоненты атаки.

В загруженном наборе содержатся следующие объекты:

  • основная полезная нагрузка — стилер module.pyw;
  • директория runtime, содержащая компоненты среды выполнения PyArmor;
  • интерпретатор Python 3.12;
  • скрипт get-pip.py, предназначенный для установки пакетного менеджера pip и необходимых зависимостей.

После запуска скрипт устанавливает pip, а затем загружает основные компоненты, необходимые для работы полезной нагрузки.

После установки всех зависимостей в той же директории $appdata\WindowsHelper создаются два VBS-скрипта. Первый, wh_selfdelete.vbs, используется для удаления ранее запущенного загрузчика pnx.exe:

Скрипт для удаления загрузчика

Скрипт для удаления загрузчика

Второй скрипт, run.vbs, предназначен для запуска module.pyw и используется для обеспечения закрепления в системе при помощи запланированной задачи:

Скрипт для закрепления в системе

Скрипт для закрепления в системе

Эта задача обеспечивает запуск полезной нагрузки — BusySnake Stealer — каждые пять минут.

Вложение в формате .lnk

В других случаях в архиве находился файл с именем Zayavka_[redacted].lnk. Группировка использовала уязвимость ярлыков ZDI-CAN-25373, чтобы скрыть содержимое командной строки: она позволяет с помощью символов пробела или переноса строк маскировать параметры запуска.

Таким образом при запуске пользователем вредоносного LNK-файла происходит выполнение следующей обфусцированной команды:

Обфусцированная PowerShell-команда

Обфусцированная PowerShell-команда

Это, в свою очередь, приводит к запуску PowerShell-команды, которая скачивает вредоносный загрузчик и запускает его:

Скачивание и запуск загрузчика

Скачивание и запуск загрузчика

После запуска загрузчик скачивает и открывает документ-приманку в формате DOCX. Мы встречали приманки на различные тематики, от запроса на получение гуманитарной помощи до заявления об отсутствии задолженности.

Документы-приманки

После этого загрузчик инициализирует переменные, необходимые для подготовки окружения, включая URL-пути, директории установки и списки используемых библиотек. Мы видели различные образцы полезных нагрузок первого этапа, однако основная функциональность у них одинакова.

Пример инициализации переменных в коде загрузчика

Пример инициализации переменных в коде загрузчика

Затем загружается интерпретатор Python версии 3.12 в виде архива python.zip, скрипт get-pip.py, а также архив data.zip с полезной нагрузкой module.pyw.

Далее, аналогично первому способу заражения, устанавливаются необходимые зависимости и выполняется закрепление в системе путем создания VBS-скрипта и запланированной задачи.

Пример скачивания и установки Python и пакетного менеджера pip

Пример скачивания и установки Python и пакетного менеджера pip

Как видно на скриншотах, в коде загрузчика содержатся избыточные комментарии, а также эмодзи маркера списка, что обычно нехарактерно для вредоносного ПО, разрабатываемого реальным человеком. Это говорит о том, что группа использует LLM для генерации кода вредоносных образцов.

Оба вектора заражения приводят к запуску полезной нагрузки, которую мы подробно рассмотрим ниже.

BusySnake Stealer

Полезная нагрузка в этой кампании представляет собой ранее не описанный стилер на языке Python, который мы назвали BusySnake Stealer.

В исходном коде стилера реализовано несколько способов защиты от обнаружения и затруднения статического анализа. Так, код BusySnake Stealer обфусцирован и зашифрован при помощи PyArmor Pro версии 9.2.0, причем стилер выполняет расшифровку байт-кода только в момент вызова функции, после чего данные повторно шифруются. Кроме того, работа стилера осуществляется в фоновом режиме, без отображения окна консоли, о чем говорит расширение .pyw.

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

Перед началом работы инициализируется конфигурация стилера. Она содержит адрес C2-сервера, пути к директориям, регулярные выражения, временные интервалы для создания скриншотов, строку user-agent для сетевой коммуникации и многое другое. Пример конфигурации одного из найденных образцов представлен на рисунке ниже.

Пример конфигурации стилера

Пример конфигурации стилера

Архитектура стилера построена на использовании обработчиков, каждый из которых отвечает за конкретные функции. Далее в таблице приведено описание обработчиков.

Название обработчика Описание
single_instance_lock Предотвращает запуск нескольких экземпляров стилера на зараженной машине.
start_key_clipboard_logger Выполняет кражу данных из буфера обмена.
start_inventory_background Перечисляет файлы в системе и вносит информацию о них в базу данных.
extract_hex64_from_file Пытается извлечь из найденных файлов 64-символьные ключи в шестнадцатеричном формате.
start_send_documents_priority_background Отправляет пользовательские файлы на C2-сервер.
take_screenshot Создает снимки экрана, сохраняет их по пути SCREEN_DIR.
archive_pngs Архивирует созданные снимки экрана и удаляет ранее созданные архивы.
poll_task Осуществляет ожидание команд от C2-сервера для дальнейшего выполнения.
ensure_schtask Проверяет наличие запланированной задачи для закрепления в системе, при ее отсутствии создает VBS-скрипт для запуска стилера и регистрирует новую запланированную задачу.

Далее рассмотрим алгоритм работы ключевых функций.

При запуске вредоносного образца выполняется функция single_instance_lock, которая проверяет, что в системе работает только один экземпляр стилера. Для этого в образце реализован нестандартный алгоритм. Вместо таких распространенных методов, как создание мьютекса или установка значения в реестре, BusySnake Stealer использует lock-файл. Сначала выполняется проверка, занят ли файл Roaming\WindowsHelper\screenshots\.lock другим процессом: если да, то новый экземпляр не запустится. В противном случае из этого файла считывается идентификатор процесса (PID). Если указанный процесс не существует, а время загрузки системы превышает время последней модификации файла, стилер повторно создает lock-файл и выполняет запуск.

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

Кроме того, стилер выполняет инвентаризацию файлов в системе. За этот процесс отвечает функция start_inventory_background.

Сначала создается база данных по пути Roaming\WindowsHelper\inventory_state.db. В ней стилер создает таблицу, где впоследствии будет сохраняться информация о файлах:

Далее выполняется перечисление файлов и директорий, в результате чего формируется дерево объектов. В ходе перечисления исключаются системные директории, файлы размером более 16 МБ, а также файлы с расширениями, определенными в коде как игнорируемые.

Найденные файлы передаются на обработку в функцию extract_hex64_from_file с целью извлечения 64-символьных HEX-ключей. Для этого каждый файл открывается в режиме чтения, и в нем осуществляется поиск строк, соответствующих регулярному выражению [0-9a-fA-F]{64}. Информация о найденных ключах записывается в ранее созданную базу данных. Сами же ключи записываются в отдельный файл и отправляются на C2-сервер. После полного сканирования в лог-файл записывается сообщение следующего формата:

Следом запускается функция start_send_documents_priority_background, которая выполняет поиск логических дисков. Зловред определяет системный диск и начинает рекурсивный перебор пользовательских директорий /Desktop, /Documents и /Downloads. В процессе перечисления происходит фильтрация: проверяются только те директории, имя которых начинается с $ и не содержит строку System Volume Information. Содержимое директорий также фильтруется по списку игнорируемых расширений. Затем выполняется проверка оставшихся файлов: если файл ранее не был отправлен и его размер не превышает 5 МБ, он передается на C2-сервер.

Стилер также может коммуницировать с C2-сервером и ожидает передачи команд в процессе работы. Функция poll_task циклически опрашивает C2-сервер на наличие новых команд для дальнейшего выполнения. Ниже представлена часть пакета с запросом:

Форма авторизации C2-сервера выглядит следующим образом:

Форма авторизации на панели администрирования C2-сервера

Форма авторизации на панели администрирования C2-сервера

Команды передаются от C2-сервера в виде названия функций, которые представлены в таблице ниже.

Имя функции Описание
handle_send_screenshots_command Создает скриншоты с заданным временным интервалом, архивирует их и отправляет на C2-сервер.
send_and_clear_keystroke_log Отправляет файл с данными перехвата пользовательского ввода на C2-сервер и очищает его после отправки.
handle_extract_chromium_passwords Расшифровывает пароли из базы данных браузеров на основе Chromium, используя механизм DPAPI.
handle_extract_firefox_passwords Расшифровывает пароли из базы данных Firefox, используя функцию PK11SDR_Decrypt.
handle_collect_and_send_cookies Извлекает cookie-файлы из баз данных браузеров и отправляет их на C2-сервер.
handle_extract_cookies_v7_command Извлекает cookie-файлы через установку расширения в браузер.
handle_search_2fa_secrets_command Выполняет поиск OTP-ключей; для этого сканирует буфер обмена и анализирует файлы, при обнаружении строки otpauth:// записывает найденный ключ в файл 2fa_secrets.txt.
handle_search_wallet_jsons_command Выполняет поиск файлов криптокошельков с расширением .json в пользовательских директориях.
handle_split_and_send_tdata_command Извлекает учетные и сессионные данные Telegram из директории APPDATA/Telegram Desktop/tdata: принудительно завершает процесс telegram.exe, после чего копирует данные во временную директорию, архивирует их и передает на C2-сервер.
handle_start_proxy_command / handle_stop_proxy_command Устанавливает обратный SSH-туннель с помощью ранее полученных от C2-сервера SSH-команды и закрытого ключа.
Вторая функция разрывает соединение и удаляет ключ.
handle_remote_control_command Выполняет проверку наличия установленного экземпляра RustDesk на машине. Если программа отсутствует, она загружается с GitHub. В противном случае процесс RustDesk перезапускается, чтобы пользователь повторно ввел идентификатор и пароль, после чего создается снимок экрана. Полученные данные отправляются на C2-сервер.

После выполнения каждой команды стилер отправляет отчет со статусом выполнения задачи:

Кража паролей из Firefox и браузеров на базе Chromium

BusySnake Stealer получает команду от С2-сервера на сбор паролей из браузеров на основе Chromium, которую обрабатывает функцией handle_extract_chromium_passwords. Затем зловред ищет директорию с данными браузера и проверяет, что она не пустая, после чего находит файл Login State, который содержит мастер-ключ для шифрования базы данных паролей.

Поиск файла, содержащего мастер-ключ

Поиск файла, содержащего мастер-ключ

Мастер-ключ зашифрован с помощью Windows Data Protection API (DPAPI). Используя контекст пользователя, от имени которого был зашифрован этот ключ, стилер может выполнить его расшифровку с использованием функции win32crypt.CryptUnprotectData().

Расшифровка мастер-ключа

Расшифровка мастер-ключа

Затем с помощью SQL-запроса из базы данных браузера извлекаются аккаунты пользователя, при этом пароли остаются в зашифрованном виде.

Далее при помощи мастер-ключа пароли расшифровываются и уже в открытом виде сохраняются в файл Roaming\WindowsHelper\chromium_passwords.json.

Для Firefox процесс эксфильтрации происходит аналогичным образом. Стилер получает команду на извлечение учетных данных из браузера, ее обработка осуществляется функцией handle_extract_firefox_passwords. Далее образец ищет директорию Mozilla\Firefox\Profiles и проверяет наличие в каждом пользовательском профиле файлов logins.json и key4.db. Если хотя бы один из файлов отсутствует, профиль не обрабатывается. Затем образец читает содержимое файла logins.json и для каждой записи извлекает поля hostname, encryptedUsername и encryptedPassword.

Извлечение учетных данных

Извлечение учетных данных

Извлеченные данные помещаются в структуру SECItem. После вызова функции NSS_Init() библиотека NSS, используемая в Firefox, автоматически инициализирует встроенный криптографический модуль и получает доступ к базе key4.db. Если база не защищена мастер-паролем, модуль загружает хранящийся в ней ключ. В таком случае функция PK11SDR_Decrypt() может выполнить расшифровку учетных данных без необходимости дополнительного ввода пароля или выполнения дополнительных действий. Таким образом BusySnake Stealer эксплуатирует небезопасные практики браузера Firefox: хранение мастер-ключа базы данных в открытом виде и отсутствие повторной аутентификации при расшифровке данных с его помощью.

Расшифровка учетных данных

Расшифровка учетных данных

Расшифрованные данные сохраняются в файл Roaming\WindowsHelper\firefox_passwords.json.

Извлечение файлов cookies

По аналогии с браузерными учетными данными стилер извлекает cookie-файлы. Образец получает от С2-сервера команду handle_collect_and_send_cookies, после чего вызывается одноименная функция для ее обработки. Затем стилер ищет следующие базы данных в директориях браузеров: Cookies для браузеров на основе Chromium и cookies.sqlite для Firefox. Их них с помощью SQL-запросов извлекаются файлы cookies.

Для браузеров на базе Chromium используется следующий запрос:

Запрос для Firefox:

Все полученные данные расшифровываются и сохраняются в файл по пути Roaming\WindowsHelper\all_browser_data.json, который затем отправляется на C2-сервер и удаляется из системы.

Помимо этого механизма, стилер также загружает дополнительный модуль для извлечения cookie-файлов через расширение браузера. Получив соответствующую команду, зловред вызывает функцию handle_extract_cookies_v7_command для ее обработки. Далее инициируется загрузка дополнительного модуля в формате архива со страницы Releases репозитория GitHub по аналогии с самим стилером.

Код дополнительного модуля также защищен при помощи PyArmor. После запуска модуль поднимает локальный веб-сервер, предназначенный для получения и обработки файлов cookie, извлекаемых из браузера. Далее модуль создает файлы браузерного расширения, используемого для кражи cookie:

  • manifest.json, описывающий структуру расширения и необходимые разрешения;
  • sw.js, содержащий основной исполняемый код расширения.

После чего расширение устанавливается в браузер.

Конфигурационный файл расширения manifest.json

Конфигурационный файл расширения manifest.json

Файл sw.js, содержащий исполняемый код расширения

Файл sw.js, содержащий исполняемый код расширения

Чтобы обеспечить запуск Google Chrome с установленным расширением, модуль использует определенные аргументы.

Параметры запуска Chrome

Параметры запуска Chrome

После начала работы расширение проверяет доступность локального веб-сервера, запущенного ранее. Если сервер доступен, расширение считывает данные cookie, сохраняет их в объект cookiesData и передает по следующему URL:

Локальный сервер обрабатывает полученные данные и сохраняет их в файл с именем extracted_cookies.json, после чего отправляет на C2-сервер.

Создание обратных SSH-туннелей

Группировка ранее использовала инструмент для создания обратных SSH-туннелей на языке Go, названный исследователями Go2Tunnel. В BusySnake Stealer реализована аналогичная функциональность в виде встроенной функции.

Образец получает команду от С2-сервера на установку обратного SSH-туннеля, которую обрабатывает функцией handle_start_proxy_command. Сначала стилер отправляет запрос к следующему URL-адресу, добавляя в параметры запроса уникальный идентификатор компьютера жертвы:

Если в конфигурации указана конечная точка с обращением по протоколу HTTP вместо HTTPS, URL‑адрес принимает следующий вид:

В ответ сервер возвращает данные, содержащие все необходимые параметры для создания туннеля:

Из полученного ответа извлекаются значения приватного ключа и команды SSH. С их помощью устанавливается подключение к удаленному серверу, подконтрольному атакующим, что обеспечивает удаленный доступ и контроль над скомпрометированной системой.

Для закрытия туннеля стилер получает команду handle_stop_proxy_command, обрабатывает ее одноименной функцией, после чего файл закрытого ключа удаляется и связанный с ним процесс SSH принудительно завершается.

Новая версия BusySnake Stealer

В ходе анализа инфраструктуры атакующих мы обнаружили новую версию стилера. Метод распространения и механизм статической обфускации остались без изменений, однако группа Armored Likho модифицировала свои TTP и внесла изменения в структуру кода BusySnake Stealer.

В новой версии вместо прямого вызова schtasks вредоносное ПО использует библиотеку win32com.client для создания запланированных задач через взаимодействие с COM-объектом Schedule.Service, что указывает на переход к менее обнаруживаемым методам выполнения.

Создание запланированной задачи через COM-объект

Создание запланированной задачи через COM-объект

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

Кроме того, мы обнаружили изменения в архитектуре BusySnake Stealer. Злоумышленники создали новый механизм для управления задачами, получаемыми от C2-сервера. Каждой задаче присваивается уникальный идентификатор, а перед ее запуском стилер проверяет наличие такой задачи в заданном списке. Также для отслеживания состояния выполнения каждой задаче присваивается один из четырех статусов выполнения: SCHEDULED, IN_PROGRESS, SUCCEEDED или FAILED.

Добавление статуса выполнения задач привело к обновлению схемы коммуникации с C2-сервером. Обновленные конечные точки и структура передаваемых пакетов представлены в таблице ниже.

Название обработчика Конечная точка Тело запроса Описание
poll_commands {Config.DASHBOARD_URL}/api/v1/client/
{Config.CLIENT_ID}/commands/?bid={Config.BUILD_ID}
Ожидание новых команд для выполнения
poll_tasks {Config.DASHBOARD_URL}/api/v1/client/
{Config.CLIENT_ID}/tasks/?bid={Config.BUILD_ID}
Ожидание скриптов на Python для выполнения
set_task_status {Config.DASHBOARD_URL}/api/v1/client/
{Config.CLIENT_ID}/commands/{task_id}/
{
‘status’: status,
‘logs’: logs
}
Отправка отчета о статусе задачи
upload_file_once {Config.DASHBOARD_URL}/api/v1/client/
{Config.CLIENT_ID}/files/
{
‘file’:(file_name,io.BytesIO(text.encode(‘utf8’), ‘text/plain; charset=utf8’)
}
meta= {
‘name’: file_name,
‘file_type’: file_type,
‘task_id’:task_id
}
Эксфильтрация файла на C2-сервер

Одним из наиболее существенных изменений стало добавление класса, который позволяет выполнять произвольные Python-скрипты. В новой версии стилера за получение команд от C2-сервера отвечает функция poll_commands, в то время как функция poll_tasks используется для получения Python-скриптов. Перед выполнением скрипта происходит установка необходимых зависимостей через pip. Затем запускается новый процесс, и код скрипта выполняется непосредственно в его памяти без записи на диск, что также предназначено для обхода средств защиты.

Атрибуция

Мы со средней степенью уверенности относим описанную кампанию к активности группы Armored Likho, основываясь на анализе используемого инструментария и сетевой активности.

  1. В ранее выявленных кампаниях группировка использовала инструмент Go2Tunnel, предназначенный для создания обратных SSH-туннелей. В BusySnake Stealer аналогичная функциональность реализована в виде встроенной функции. Оба инструмента получают от C2-сервера команду для установки туннеля и закрытый SSH-ключ, при этом обращение происходит на схожие конечные точки. Также для установки туннеля используются SSH-команды с одинаковым набором аргументов:
  2. Известно, что группа Armored Likho в своих предыдущих атаках использовала троянец удаленного доступа AquilaRAT. Он имеет схожую структуру с BusySnake Stealer: вредоносное ПО получает задачи от C2-сервера, а их выполнение осуществляется специальными обработчиками. Кроме того, BusySnake Stealer и AquilaRAT используют схожие конечные точки для коммуникации с C2-сервером. Например, для отправки статуса задачи:
    AquilaRAT

    BusySnake Stealer
  3. Еще одно сходство заключается в том, что BusySnake Stealer и AquilaRAT обеспечивают закрепление в системе через создание запланированной задачи. При этом названия запланированных задач имитируют легитимные задачи Microsoft: AquilaRAT использует имя MicrosoftOfficeUpdate, а BusySnake Stealer — WindowsHelper.

Жертвы

Мы продолжаем отслеживать кампании с использованием BusySnake Stealer, а также связанных с ним артефактов и сетевой инфраструктуры.
На данный момент выявлены жертвы в России, Казахстане и Бразилии. Атаки в первую очередь ориентированы на государственный и электроэнергетический секторы.

Выводы

Анализ кампаний Armored Likho за последние несколько месяцев показывает тенденцию к использованию ИИ-инструментов для создания полезных нагрузок первого этапа, на что указывают избыточные комментарии и блоки кода. Такой подход значительно расширяет число векторов атаки.

Параллельно с этим группировка продолжает развивать и модифицировать свой инструментарий. Если ранее Go2Tunnel использовался как отдельный инструмент, то в текущей реализации эта функциональность интегрирована непосредственно в стилер в виде встроенной функции, получающей параметры от C2-сервера. Кроме того, стоит отметить, что архитектура обнаруженного нами стилера имеет определенные сходства с другим инструментом группировки — AquilaRAT.

На момент публикации Armored Likho демонстрирует высокую активность. Несмотря на развитие вредоносного инструментария и попытки скрыть используемые TTP, мы продолжаем внимательно следить за деятельностью группировки и выявлять новые кампании.

Детектирование решениями «Лаборатории Касперского»

Защитные решения «Лаборатории Касперского», такие как Kaspersky Endpoint Detection and Response Expert, успешно обнаруживают вредоносную активность в рамках описанных атак.

Активность злоумышленников детектируется еще на этапе запуска LNK-загрузчика. После запуска он выполняет обфусцированную команду через rundll32, что приводит к запуску PowerShell-команды для скачивания стейджера. Эта цепочка действий детектируется следующими правилами:

Пример детектирования LNK-лоадера в KEDR

Для комплексного анализа описанной вредоносной активности может быть использовано решение Kaspersky Cloud Sandbox. На рисунке ниже представлен интерфейс Kaspersky Cloud Sandbox, демонстрирующий цепочку событий запуска обфусцированной команды LNK-загрузчиком.

Граф выполнения LNK-загрузчика в Kaspersky Cloud Sandbox

Граф выполнения LNK-загрузчика в Kaspersky Cloud Sandbox

Кроме того, в Kaspersky Cloud Sandbox можно увидеть, что в процессе выполнения стилер обращается к удаленным URL-адресам для загрузки дополнительных файлов, в частности документа-приманки в формате DOCX, а также стейджера web_script.txt.

Загрузка файлов LNK-загрузчика в Kaspersky Cloud Sandbox

Загрузка файлов LNK-загрузчика в Kaspersky Cloud Sandbox

В случае запуска EXE-дроппера в Kaspersky Cloud Sandbox также фиксируется скачивание дополнительного инструментария из репозитория GitHub.

Граф выполнения EXE-дроппера в Kaspersky Cloud Sandbox

Граф выполнения EXE-дроппера в Kaspersky Cloud Sandbox

Загрузка файлов EXE-дроппером в Kaspersky Cloud Sandbox

Загрузка файлов EXE-дроппером в Kaspersky Cloud Sandbox

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

Вредоносный файл, записанный EXE-дроппером на диск, в Kaspersky Cloud Sandbox

Вредоносный файл, записанный EXE-дроппером на диск, в Kaspersky Cloud Sandbox

Индикаторы компрометации

Дополнительная информация об этой угрозе, включая индикаторы компрометации, доступна клиентам сервиса аналитических отчетов Kaspersky Threat Intelligence Reporting. Для получения более подробной информации свяжитесь с нами по адресу intelreports@kaspersky.com.

Вредоносные файлы первого этапа

5D5C3E483C5E544260CE98FC29FBF192 PS1-стейджер
7141917CBA2EEE2B4D31107FACCF3A39 EXE-стейджер
F5C6434EE5F7578FAA3BC1257E1C9226 EXE-стейджер
C019797A00FD56EDB1F468AC0A598510 BAT-стейджер
A0EC7A8E61EFF3F445A7455B3AEF9FBB BAT-стейджер
F5C6434EE5F7578FAA3BC1257E1C9226 EXE-стейджер
7DB9C688C620E54E8C69B7E52A7579FB BAT-стейджер

90378881856ABFA47D7745C0A3EF9DC8 RAR-архив с дополнительным модулем для кражи cookie-файлов

1DBA3E505491A260A44C867902C3296E RAR-архив с вредоносным DLL-загрузчиком

1096268FA2B3D454C86CF851CB782319 EXE-дроппер
F2AB09D7E7A375A192508A5014AA2EE4 EXE-дроппер
0041FD1B2358CD08DBCBC28EA8FC3D20 EXE-дроппер

894332174F536C2E1EFEDA05CBA79F8B DLL-загрузчик
78135F72AB148A0CC074F6B2DD51FFF6 DLL-загрузчик
07213C419489C02791E8D67B91E404EF DLL-загрузчик

393B498F2114CABC0B29D5FCD9DC6723 LNK
CF74AC018D158EA2C2CFA1B1D71D95BC LNK
2DFA1D949872C1B2F04952DD3E5F5D8F LNK

BusySnake Stealer

C7622A1EFFA27BBFEE6D6E03D6474343 PYW-файл, BusySnake Stealer
80B7700053E115D65365CE7330383320 Новая PYW-версия BusySnake Stealer
6B45DDB39A6E86229348DCBBA3857E7C RAR-архив с BusySnake Stealer
006887732CA4A4A46A97989CF4DEEEF6 RAR-архив с BusySnake Stealer
732C31ACF971A81C7E51B2A3DAE82020 RAR-архив с BusySnake Stealer
DDFF82A115558584BBD7741D4FFB35B4 RAR-архив с BusySnake Stealer
8188B2F347B77D65D08CFB23808AC244 RAR-архив с BusySnake Stealer
E2550CFAD9DCC880BF04F6048F90868C RAR-архив с BusySnake Stealer
FD2BDD8047ADDEE6FDE2F532DE181BFD RAR-архив с BusySnake Stealer

С2-серверы

winupdate[.]live
arvax[.]xyz
varenie[.]live
lvl99[.]store
onetoken[.]ink
winupdate[.]ink
grked[.]online
ndrt[.]ink
myboard[.]chickenkiller.com
myboard[.]twilightparadox.com

159.198.41[.]140
159.198.75[.]219
159.198.32[.]222
69.67.173[.]153

Armored Likho копает змеиную яму: скрытая кампания с использованием BusySnake Stealer

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

Отчеты

ToddyCat — ваш скрытый почтовый ассистент. Часть 2

Разбираем Umbrij — новый инструмент APT-группы ToddyCat для компрометации корпоративной переписки в сервисе Gmail. Целью атак стал токен авторизации OAuth, при помощи которого злоумышленники получали доступ к сервисам Google.