Обнаружена кампания вредоносных NuGet-пакетов, доставляющих многоступенчатый пейлоад с удаленным управлением

Обнаружена кампания вредоносных NuGet-пакетов, доставляющих многоступенчатый пейлоад с удаленным управлением

Исследователи из команды Threat Research компании Socket выявили 11 вредоносных пакетов в реестре NuGet, которые маскируются под игровые утилиты, ботов и панели управления. Все пакеты относятся к типу DotnetTool - это .NET-инструменты, устанавливаемые через команду dotnet tool install. После установки они регистрируют консольные команды, например throne-run, и при запуске скачивают и выполняют второй этап полезной нагрузки - исполняемый файл pepesoft.exe. Целевой аудиторией кампании выступают пользователи, интересующиеся читами и автоматизацией для популярных игр, включая Albion Online, GTA5RP, Lineage 2, Throne and Liberty, Russian Fishing 4 и другие. Это создаёт прямую угрозу для геймеров и разработчиков, которые могут установить такие инструменты на рабочие машины.

Описание

Атака разделена на два чётких этапа. Первый - загрузчик на .NET, встроенный в каждый NuGet-пакет. Он размещает свою сборку в папке tools/net8.0/any/ и использует библиотеки Colorful.Console для цветного вывода и MonoTorrent с Mono.Nat для протокола BitTorrent. При запуске загрузчик выводит на русском языке сообщения в стиле игрового обновления ("Запуск, пожалуйста, подождите", "Скорость запуска зависит от вашего интернет-соединения"). Он также создаёт именованный мутекс, чтобы предотвратить запуск нескольких копий. Десять из одиннадцати пакетов перед загрузкой пытаются повысить привилегии через UAC и принудительно синхронизируют системное время через PowerShell (запуск службы w32time и w32tm /resync). Это снижает вероятность ошибок TLS из-за рассинхронизации часов на машине жертвы.

Особого внимания заслуживает реализация обхода системного резолвера DNS. Когда загрузчику нужно обратиться к GitHub за полезной нагрузкой, он выполняет DNS-запрос через Google DNS-over-HTTPS (dns.google/resolve), а не через штатный системный DNS. Это позволяет игнорировать локальные файлы hosts и DNS-фильтры, которые могли бы заблокировать github.com. Однако такой метод не обходит блокировки по IP или SNI. Далее загрузчик проверяет дату последнего изменения файла на сервере через HEAD-запрос, кэширует её в локальный version.meta и использует для пропуска повторного скачивания, если версия не изменилась. Источники загрузки заданы в порядке приоритета: сначала Hugging Face, затем GitHub Releases, и, наконец, BitTorrent-магнет-ссылка. В проанализированных образцах магнет-ссылка была пустой, но код для работы с торрентами полностью присутствует - он может быть активирован в следующих версиях пакетов.

Ключевой особенностью первого этапа является передача учётных данных в дочерний процесс. Загрузчик устанавливает три переменные окружения (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и AWS_CONFIG_KEY), которые наследуются запущенным pepesoft.exe. AWS_CONFIG_KEY указывает на Cloudflare Worker. Анализ показывает, что все 11 загрузчиков используют одинаковые белые ящики: идентификатор доступа 5bd610283d9c4b4ead45ca4f1b35d0f4, совпадающий с GUID мутекса без дефисов, и секретный ключ 21b4be57bd3743738393f44d9464e212. Это однозначно связывает все пакеты с одной инфраструктурой.

Второй этап - pepesoft.exe, упакованный PyInstaller на Python 3.13. В трёх образцах (Albion, Calculator, Throne) точка входа представлена прямым байт-кодом Python, который расшифровывает встроенные данные через base64, zlib и Fernet, после чего выполняет полученный код через exec. Остальные восемь образцов (Amazing RP, GrandRP, GTA5RP, Lineage 2, Majestic, RMRP, Russian Fishing 4, Trigger) упакованы с помощью PyArmor, и их исходный код был восстановлен через инструментированный интерпретатор в изолированной среде. Каждый восстановленный модуль содержит около 1040 строк и включает лицензирование, аппаратную привязку, работу с Google Sheets, проверку запрещённых устройств и прокси-обходы. Внутренняя логика пейлоада использует переданные переменные окружения для получения конфигурационного файла service.json: сначала через Cloudflare Worker, затем через S3-совместимое хранилище Selectel в России (s3.ru-3.storage.selcloud.ru). Класс S3Client также поддерживает методы upload_file и delete_file, что даёт оператору возможность записывать и удалять файлы в бакете.

Основной канал телеметрии и управления - Google Sheets. Пейлоад создаёт учётные данные сервисного аккаунта Google, авторизуется через gspread и открывает таблицы с информацией о продуктах. Каждый образец работает со своим листом: для Albion - ALBIONBOTMAIN, для Calculator - GTA5RPCALC, для Throne - THRONE, для остальных - по имени константы tabl_name (RMRP, AMAZING, GRANDRP и т.д.). В общие таблицы записываются: идентификатор ПК (аппаратный UUID, серийный номер диска, MAC), версия Windows, имя пользователя, разрешение экрана, модель CPU, GPU, материнской платы, данные о сетевых соединениях, наличие прав администратора. В прямых байт-кодовых сборках также фиксируются координаты по IP, информация о запущенных окнах и активных приложениях. Все эти данные передаются в Google Sheets, что даёт оператору подробный инвентарь каждой скомпрометированной машины.

Дополнительную опасность представляют функции удалённого управления через Telegram в трёх образцах. Пейлоад реализует aiogram-обработчики, которые после команды /start сохраняют идентификатор чата в файл ./libgg/chat_ids.txt. Затем любой отправитель, завершивший /start, может запускать команды /screen (снимок окна игры) и /pscreen (снимок окна самого пейлоада). В Throne доступны также скриншоты областей для рыбалки и полный снимок экрана при отключении. Команды не имеют дополнительной проверки прав - любой, кто вызвал /start, получает возможность удалённо делать скриншоты. Это чревато утечкой конфиденциальной информации, если в захваченной области окажутся пароли, данные банковских карт, криптокошельки или приватные сообщения.

Пейлоад также реализует аппаратную привязку и удалённый бан-лист. При запуске он считывает таблицу banned из общей таблицы GTA5RP и сравнивает аппаратный ID и UUID текущей машины с каждым значением. При совпадении статус переключается на Offline, выводится сообщение "Ваш ПК в системе приостановлен" и работа прекращается. Дополнительно проверяется соответствие текущих CPU, материнской платы и GPU тем значениям, которые были сохранены при активации. Это даёт оператору возможность точечно отключать определённые устройства, а также однозначно идентифицировать жертв после переустановки системы. Для восьми PyArmor-защищённых сборок предусмотрен резервный HTTP-прокси (196.16.3.71:9528 с аутентификацией) для доступа к Google Sheets, если прямой доступ к sheets.googleapis.com заблокирован.

Последствия установки таких пакетов включают полную компрометацию рабочей станции: сбор системной информации, отправку данных на внешние серверы, возможность удалённого захвата экрана и, в теории, загрузку и удаление файлов в S3-бакете. В прямых байт-кодовых сборках также найден обработчик выхода, который удаляет значения DisableLogging и DisableMSI из реестра HKLM\Software\Policies\Microsoft\Windows\Installer, а при включённой настройке exitadaptive - удаляет все не-EXE файлы и поддиректории из папки, где запущен пейлоад. Это может привести к потере данных пользователя, если пейлоад запущен из каталога, содержащего другие файлы.

Кампания чётко ориентирована на русскоязычную аудиторию: все строки интерфейса на русском, магазин bots.pepesoft.ru рекламирует "ботов без бана / полную анонимность", таргетинговые серверы (GTA5RP, GrandRP, Majestic, RMRP, Russian Fishing 4) популярны в русскоязычном сообществе, а инфраструктура использует российского облачного провайдера Selectel. Оператор, скорее всего, продаёт доступ к этим инструментам как платные читы с панелью управления в Telegram.

Разработчикам и геймерам следует немедленно проверить установленные NuGet-инструменты и удалить любые из перечисленных пакетов. Команды безопасности могут блокировать перечисленные URL и отслеживать появление характерных артефактов, таких как мутекс {5BD61028-3D9C-4B4E-AD45-CA4F1B35D0F4}, переменная окружения AWS_CONFIG_KEY или процессы PowerShell с w32tm /resync. Socket уже уведомил команду безопасности NuGet о вредоносных пакетах и запросил их удаление.

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

Комментарии: 0