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

information security

Исследователи из команды 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 о вредоносных пакетах и запросил их удаление.

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

IPv4 Port Combination

  • 196.16.3.71:9528

Domain

  • bots.pepesoft.ru
  • calm-voice-9797.888c888x888.workers.dev
  • s3.ru-3.storage.selcloud.ru

URL

  • discord.com/api/webhooks/1156474517871403078/zuHl6xQzdMcFjNrmm9jTiHvCzNbCiQhkYAIGWNUfj7X4KUIpEATekKlSNna6OvyCKaRw
  • discord.com/api/webhooks/1156474527874818088/qS5cJuxEbyIA1s3tZX_A2u6YsKtLUARVPvN77_6fK5QHGdGFHb3JSuCUSDhtouEsyJgk
  • github.com/pepegit666/123f53y45ysdf34/releases/download//pepesoft.exe
  • https://github.com/pepegit666/123f53y45ysdf34
  • https://huggingface.co/buckets/pepegit666
  • huggingface.co/buckets/pepegit666//resolve/pepesoft.exe?download=true

MD5

  • 21b4be57bd3743738393f44d9464e212
  • 5bd610283d9c4b4ead45ca4f1b35d0f4

SHA256

  • 011926de3d0cc2b970627b9bf0de003e731f8576602dff756d2ab54a9de61972
  • 01d2afea0f2201a3b59765a1a60ba324ff4b8fdd25f23a0e05824b97f195b27c
  • 17b1d836c2f15a97be0350879943b04e14bc076cf09e31df0d73258ee10f7e7c
  • 23808e7638f7a00b1ef9b9f4ca524f8a46cf63be6f6b79fec8e4a3fd1cc82a1e
  • 23e4d8af5425dae022793450190c8d30809b2986dd879eb4bff557cdacf49c86
  • 2a4fed04d792b9c2fdf9c1456a08ca23eda5fef50c0b409ab294ad489e12d801
  • 476c6f36a22156e53548a87291989a21d6c905dcbd9e1bf68ff5bc12e5c8bb07
  • 4d13f1136b13c871c65141b77ec7208488334ac4be511800196adcd328666305
  • 567952daf0ab7b36b017aac9963791188dea0fbf2e99c7cc6f6652ee540f4840
  • 5d9843126db4223dc2a8a9cd4a627286fe1a6345e33b28e9c98b5fe56fe89da6
  • 5f3a9ebf7039097b3cdbca8609b5b68af07eeb1dbf716ba2817a97fc7c543854
  • 6c1f828e4d8395dde8293868c65ba8d86b3b9672ebbbb16e932624706d37d832
  • 6cbd4bc491deb11040e2b2f91b0b4e129af551a802fc78cb42e0e985297ef44c
  • 6eefe9d5f030d403c72bd4e4caf5bbb9dbc2bd5e15ebb07de153494f458e5eb9
  • 774e40046f353e3f916f39e3d13d6499da35705a479cfb89288c21017aaf5461
  • 79c09e1ffb4804c14ff27d41ec08d4390455c92d65717be0aeeec2697297d76a
  • 7e42d25e707d29d5d185a4c5dc71019f744e88a30b66bbf06949194ff32dbc48
  • 8ab256dd839aec6638cd46374f4a6664e534b9341bbcdfd9b763e5a27c51ddb7
  • 900ddb81d27e03967209fee4d17d13deb68eef0e1f10936eb520ca10575cb49e
  • 95577498d23fe750221a5badfc25b5e9f020dcf4d80c79a019b090e3c3b0a32a
  • 9a2091e6625fc11cfd8f39c17aa271604e66322ee045028946274b988103e35b
  • a2a5e473dba85959b21b7e8a184bc255d5f2dacdf7411b91d212fb1217d2518b
  • ab58a90eb3682c6dc3389cd700a64f68a19c0dac3d0fa8e3df97ae041f96d4e1
  • ba7fc544994f126cb7485ce52d265d2f32e93c4f1ea1fcd6fcdee3918f271979
  • c9f3e7766dbe728d84a1243447faa5f5eba0645bf13089074d128ea7663e7f5b
  • cc853b3e4504c890d275ac2327f18acd7e4c5b99ca056181f3f5694781f2cf45
  • d5385526f2f3e52c7d96087611c6cd4e479bf61828400efdb3ca09406d981609
  • d59e1914d76499fa51bf861f418c84bda0b48913dc39bd2e73756e326e4ccbb0
  • d9f7ca9f93a7d188d51db308877b15d0beae932ca0bf4705384fbedf54b454c1
  • e6e1049158ceb1971c61388349c81fa6047a7aecb4ff2089ef54a50dcc35dbc0
  • e8c2618565aa31d7ffe909ebc99040bafcc0ea8df7f5d92fa673bb7ffacb14c9

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