Поиск в Google. Поддельный GitHub. Скачанный архив. Троян BoryptGrab вычищает крипту и молча сдает ваш ПК преступникам

Поиск в Google. Поддельный GitHub. Скачанный архив. Троян BoryptGrab вычищает крипту и молча сдает ваш ПК преступникам

В финале компьютер превращается в послушный зомби-узел с удаленным управлением.

image

Новая вредоносная программа, игровые читы и взломанные версии популярных программ, а распространяется через сотни поддельных репозиториев на GitHub. На первый взгляд схема выглядит банально: жертве подсовывают ZIP-архив с громким названием вроде ускорителя FPS, skin changer для Counter-Strike 2 или «профессиональной» версии Voicemod. На практике цепочка заметно сложнее. За фальшивой страницей загрузки скрывается многоступенчатая доставка, где участвуют загрузчики на C/C++, VBS и .NET, модифицированный Vidar, отдельный Golang-компонент и Python-бэкдор, который поднимает обратный SSH-туннель и превращает заражённую систему в удалённо управляемый узел.

Исследователи назвали новый стилер BoryptGrab. Основной набор функций у него типичный для семейства инфостилеров, но реализован достаточно широко: он собирает сведения из браузеров, настольных криптокошельков, расширений браузера, Telegram, Discord, снимает скриншоты, забирает системную информацию и дополнительно выгребает файлы по заданным расширениям из популярных каталогов. Отдельные варианты также умеют скачивать бэкдор TunnesshClient. Тот уже не ограничивается кражей данных: компонент поднимает обратный SSH-туннель, пробрасывает трафик и может выполнять команды оператора.

Первые следы кампании уходят в 2025 год. Самый ранний обнаруженный ZIP-архив датирован концом 2025-го, а первый коммит в старейшем из найденных GitHub-аккаунтов появился ещё в апреле 2025 года. Названия архивов построены по одной логике: в них фигурируют популярные продукты, игровые термины, номера версий и слова вроде download, tool, premium или github-io. Среди примеров есть фальшивые архивы под видом Voicemod Pro, Wondershare, читов для Valorant, Call of Duty, Rainbow Six Siege и Arena Breakout, а также менее очевидные приманки вроде git deployer app. Отдельный пласт составляют ZIP-файлы, в имени которых прямо используется связка github-io. Она указывает на следующую стадию цепочки.

Распространение начинается с поддельных репозиториев GitHub. Авторы кампании явно думали о выдаче в поисковиках: в README многих репозиториев вставлены SEO-ключи, чтобы фальшивые страницы поднимались выше в результатах поиска. Один из примеров, репозиторий, имитирующий загрузку Voicemod Pro, в выдаче Google оказался почти сразу под легитимным результатом. Для заражения этого уже достаточно: пользователь ищет бесплатный инструмент, видит знакомое название и попадает не на официальный сайт, а на фальшивую страницу GitHub.

Дальше включается маскировка под инфраструктуру самого GitHub. Вредоносный README содержит ссылку на страницу вида github.io/.github/, а её код лежит в отдельном репозитории, замаскированном под стандартный каталог .github. На промежуточной HTML-странице исследователи нашли русскоязычные комментарии. Логика там простая, но удобная для злоумышленников: страница берёт из исходного кода жёстко зашитую ссылку, получает по ней URL в Base64, декодирует адрес и делает редирект на следующий узел. Финальный промежуточный сайт уже отрисовывает поддельную страницу загрузки GitHub и генерирует ZIP-архив с вредоносным содержимым.

У кампании нет одной-единственной цепочки. Авторы используют несколько маршрутов доставки и меняют компоненты. В одних репозиториях исследователи увидели удалённые scripts.js, которые раньше подтягивали промежуточный URL и делали перенаправление. В других JavaScript не просто получает адрес, а скачивает зашифрованную ссылку, расшифровывает её через AES и только потом перекидывает пользователя дальше. Есть и более свежие варианты, куда добавили Python-скрипты, имитирующие обычный процесс загрузки. Часть страниц отправляет операторам трекинговые данные. Иначе говоря, GitHub здесь используют не как одноразовую витрину, а как целую экосистему приманок, редиректов и поддельных загрузчиков.

Один из основных путей заражения строится на DLL side-loading. В ZIP-архив попадает исполняемый файл, который подгружает подменённую libcurl.dll. Такая схема удобна тем, что внешне программа может выглядеть безобидно, а вредоносная логика переезжает в DLL, которая загружается рядом с приложением. Подменённая библиотека достаёт из собственной секции ресурсов полезную нагрузку, затем расшифровывает лаунчер-пейлоад с помощью XOR и AES в режиме CBC, после чего вызывает экспортируемую функцию EntryWrapper из уже расшифрованного модуля.

Этот лаунчер скрывает адреса для скачивания с помощью XOR-обфускации и дальше тянет BoryptGrab со стороны сервера управления. В ряде вариантов загрузчик передаёт стилеру параметр -b с именем сборки. Среди обнаруженных значений встречаются Shrek, Sonic, Leon, CryptoByte, Yaropolk, Yarostnick и другие. Имена сборок выглядят как внутренние метки операторов, по которым они, вероятно, различают варианты кампании, источники трафика или целевые ветки. Через другой эндпойнт тот же лаунчер может получать дополнительные EXE-файлы. Исследователи установили, что часть таких файлов представляет собой варианты стилера Vidar с обфускацией. Ещё один маршрут ведёт к PyInstaller-компоненту TunnesshClient, а ещё один к Golang-загрузчику, который получил имя HeaconLoad.

TunnesshClient в этой схеме закрепляется через запланированные задания. Лаунчер создаёт XML-файлы в каталоге %TEMP% и на их основе регистрирует задачи, которые затем запускают скачанный PyInstaller-бэкдор. Такой механизм даёт устойчивость после перезагрузки и избавляет злоумышленников от необходимости каждый раз вручную восстанавливать контроль над машиной.

Второй заметный маршрут строится вокруг VBS-загрузчика. В некоторых ZIP-вариантах вместо DLL side-loading лежит VBS-скрипт с мусорными переменными для запутывания анализа. Строки в нём спрятаны в виде массивов целых чисел, а функция с коротким именем преобразует массивы обратно в текст. Скрипт содержит логику повышения привилегий и в итоге разворачивает PowerShell-пейлоад, закодированный в Base64. После декодирования PowerShell скачивает бинарный файл с внешнего узла и запускает его. В отдельных образцах VBS также добавляет исключение для Microsoft Defender, чтобы диск C:\ не проходил антивирусную проверку. Для инфостилера такой шаг очень показателен: оператору нужно не просто украсть данные, а сделать так, чтобы сбор артефактов прошёл без перехвата со стороны защитного ПО.

Скачанный через VBS файл снова оказывается лаунчер-компонентом на C/C++. Он обращается к API злоумышленников по маршруту вида /api/{BUILD_NAME} и получает BoryptGrab. В некоторых цепочках уже сам стилер скачивает TunnesshClient, а не лаунчер. Такая взаимозаменяемость усложняет детектирование: в одной сборке бэкдор появляется на раннем этапе, в другой только после завершения кражи данных.

Есть и дополнительные ветки. Один из вариантов использует .NET-исполняемый файл, внутри которого спрятан Base64-кодированный VBS-загрузчик. Тот, в свою очередь, скачивает бинарный файл с другого адреса. Другие варианты лаунчеров работают с эндпойнтами /api/app, /api/app.zip, /api/payload и /api/client2. Некоторые ZIP-архивы вообще содержат HeaconLoad напрямую, без промежуточных стадий. Кампания поэтому выглядит не как один линейный набор шагов, а как конструктор из взаимозаменяемых модулей.

HeaconLoad, написанный на Go, отвечает за дальнейшую доставку. Он закрепляется через ветку Run в реестре и через запланированное задание. После этого начинает отправлять на сервер оператора HTTP POST-запросы к /healthcheck. В каждом beacon-сообщении уходит системная информация и жёстко зашитый build tag. Среди обнаруженных тегов были leon, shrek, sonic, yaropolk, yarostnick, yasno, kylka и voblya. Сервер отвечает полями bundle_available и bundle_hash. Первый флаг показывает, готов ли архив для загрузки, второй даёт контрольную сумму. Если bundle доступен, HeaconLoad скачивает ZIP-пакет, распаковывает его и запускает первый найденный исполняемый файл. В логах этого компонента исследователи тоже увидели русскоязычные сообщения.

Одна из веток доставки ведёт к кастомным сборкам Vidar. Бинарники, которые скачиваются через /api/custom_exe?build={BUILD_NAME}, сохранили характерные сетевые паттерны этого семейства. Они отправляют на сервер файлы вроде information.txt через HTTP POST и при этом используют несколько слоёв обфускации: строки зашифрованы через XOR, в коде есть opaque predicates и избыточные блоки, которые нужны не для логики, а для затруднения реверс-инжиниринга. Кроме того, вариант динамически резолвит API и умеет выполнять code injection или APC injection, то есть внедрять код в другие процессы или ставить свои вызовы в очередь асинхронных процедур потока.

Сам BoryptGrab написан на C/C++. У него есть параметр --output-path или -o, который задаёт каталог для складирования собранных данных. В части сборок поддерживается и параметр --build-name, он же -b. Значение уходит в поле BUILD NAME внутри файла UserInformation.txt. Если аргумент не передали, часть образцов использует стандартное имя No_name. В других вариантах имя сборки уже зашито в бинарник, а некоторые образцы вообще не пишут BUILD NAME в отчёт. Среди зафиксированных меток есть как нейтральные варианты вроде Data, Leon, Yasno и CryptoByte, так и грубые внутренние названия, что ещё раз показывает кустарный, но при этом довольно активный цикл разработки.

Перед основной работой BoryptGrab проверяет, не запущен ли он в виртуальной машине. Для этого образцы опрашивают ключи реестра и ищут файлы, связанные с виртуализированными средами. Дополнительно стилер сверяет список активных процессов с заранее подготовленным набором имён, то есть пытается обнаружить инструменты анализа. Затем пытается получить повышенные привилегии. Такая комбинация anti-VM и anti-analysis нужна, чтобы сократить шанс запуска в песочнице и затруднить поведенческий разбор.

Если оператор не задал каталог вручную, стилер сам формирует имя директории для складирования артефактов. В него входят текущее время, публичный IP-адрес и код страны. Затем программа начинает систематический сбор.

Отдельный интерес представляет работа с браузерами. BoryptGrab собирает данные из Brave, CentBrowser, Chromium, Google Chrome, Microsoft Edge, Mozilla Firefox, Opera, Vivaldi и Яндекс Браузера. Для Chromium-подобных браузеров он использует техники обхода Chrome App-Bound Encryption. Речь идёт о механизме, который должен жёстче привязывать секреты, например cookies и сохранённые пароли, к конкретному приложению и контексту системы. Злоумышленники встроили в код наработки из публичных GitHub-репозиториев, посвящённых обходу и расшифровке App-Bound Encryption. Внутри BoryptGrab есть зашифрованный ресурс PAYLOAD_DLL. После расшифровки он содержит логику, похожую на открытые PoC-проекты, и при этом дополнен функциями для извлечения данных из Firefox и Яндекс Браузера.

Для работы с браузерными данными стилер дополнительно скачивает helper-компонент x32_chromium.exe в каталог %TEMP%. Такая вспомогательная утилита нужна для отдельных операций по извлечению или расшифровке артефактов браузера.

Кроме браузеров BoryptGrab целится в криптокошельки. Список большой: Armory Wallet, Atomic, AtomicDEX, Binance, Bitcoin Core, BitPay, Blockstream Green, Chia Wallet, Coinomi, Copay, Daedalus Mainnet, Dash Core, Dogecoin, Electron Cash, Electrum, ElectrumLTC, Ethereum, Exodus, GreenAddress, Guarda, Jaxx Desktop, Komodo Wallet, Ledger Live, Ledger Wallet, Litecoin Core, MEW Desktop, MyEtherWallet, NOW Wallet, Raven Core, StakeCube, Trezor Suite, Wasabi Wallet и ряд других. Стилер ищет их каталоги, пытается вытащить содержимое и сопровождает работу логами, из которых видно, что кража криптовалютных артефактов была одной из главных целей авторов.

Ещё одна функция, File Grabber, позволяет собирать файлы по заданным расширениям из популярных директорий. В коде даже осталась орфографическая ошибка, Filegraber, что косвенно говорит о не слишком аккуратной внутренней разработке. Но сама функция вполне практична: оператор получает не только пароли, токены и кошельки, но и документы, таблицы, конфиги, резервные копии и другие файлы, которые могут пригодиться для дальнейшего доступа или вымогательства.

На этом сбор не заканчивается. BoryptGrab умеет забирать файлы Telegram, вытаскивать браузерные пароли, а в более новых вариантах ещё и собирать Discord-токены. После завершения работы всё архивируется и отправляется на сервер злоумышленников.

Наиболее опасный модуль во всей связке - TunnesshClient, написан на Python и упакован в PyInstaller. Его основная задача не кража, а создание канала удалённого управления. Компонент сначала обращается к серверу оператора по маршрутам /api/get_challenge и /api/get_credentials. Сервер выдаёт challenge, клиент вычисляет SHA256-хэш, получает зашифрованный ответ и расшифровывает JSON с SSH-учётными данными. Затем программа отправляет системную информацию на /api/get_port, получает номер порта для проброса и создаёт SSH-туннель.

Обратный SSH-туннель, по сути, разворачивает обычную модель доступа. Вместо того чтобы оператор подключался к машине жертвы напрямую, заражённая система сама устанавливает SSH-соединение к серверу злоумышленника и открывает канал, через который оператор потом заходит внутрь. Такой подход особенно удобен для обхода NAT, прокси и части сетевых фильтров: соединение исходит с машины жертвы наружу и часто выглядит менее подозрительно, чем входящее подключение.

После установки туннеля TunnesshClient умеет выполнять набор команд по числовым кодам операций. Один код включает режим SOCKS5-прокси, другой запускает shell-команду, отдельные коды позволяют перечислять файлы, отправлять файл жертвы в Base64, записывать на машину файл, искать файлы по запросу и пересылать целую папку как ZIP-архив, тоже в Base64. Иначе говоря, оператор получает не просто канал связи, а почти полноценный мини-набор для интерактивной работы с заражённой системой.

Есть и второй вариант TunnesshClient. Он действует иначе: поднимает локальный SSH-сервер прямо на машине жертвы, затем отправляет оператору логин и пароль через HTTP POST. После этого может пробрасывать трафик к локальному SSH-сервису. Такой образец поддерживает меньше команд и фактически сводится к проксированию и локальному SSH forwarding, но для злоумышленника этого уже достаточно, чтобы закрепиться и двигаться дальше вручную.

Исследователи несколько раз отмечали русскоязычные следы по всей цепочке: комментарии в HTML, логи в бинарниках, сообщения об ошибках, отдельные инфраструктурные признаки. Всё это не доказывает происхождение оператора автоматически, но даёт основания осторожно говорить о вероятной русскоязычной среде разработки или как минимум о русскоязычных участниках кампании.

Главная особенность BoryptGrab не в какой-то одной экзотической технике, а в сочетании сразу нескольких работающих подходов. Авторы используют GitHub как витрину и SEO-приманку, подменяют путь загрузки через github.io, генерируют вредоносные ZIP-архивы на лету, чередуют VBS, .NET, C/C++ и Go-компоненты, добавляют обход браузерной защиты, выносят часть логики в зашифрованные ресурсы и при необходимости подключают бэкдор с обратным SSH-туннелем. Для пользователя всё начинается с банального желания скачать «бесплатный инструмент». Для атакующего такой клик может закончиться кражей паролей, криптокошельков, документов и установкой постоянного удалённого доступа.