С 26 июня 2026 года неизвестный злоумышленник начал массовую кампанию по созданию поддельных страниц и репозиториев на GitHub, имитирующих официальные страницы известных разработчиков программного обеспечения и средств информационной безопасности. В ходе расследования, проведённого командами безопасности Arctic Wolf, было обнаружено как минимум 292 таких репозитория, среди которых присутствовал и фальшивый репозиторий под видом Arctic Wolf. Каждый такой репозиторий содержал файл README с маркетинговым содержанием и скрытой ссылкой на страницу "безопасного скачивания", которая в действительности вела на вредоносный сайт, управляемый атакующими.
Описание
Речь идёт не об эксплуатации уязвимостей в самих имитируемых продуктах, а о злоупотреблении доверием пользователей. Злоумышленники используют SEO-оптимизацию, чтобы поддельные страницы оказывались в результатах поиска на высоких позициях. Жертвами становятся случайные пользователи Windows, которые ищут бесплатное программное обеспечение, инструменты для майнинга криптовалют, игровые утилиты или средства безопасности. Атака не имеет отраслевой специфики: подделки охватывают категории от финансовых приложений до игровых "читов" и macOS-утилит, хотя исполняемый файл ориентирован именно на Windows.
Технический анализ, проведённый Arctic Wolf, показал, что конечная вредоносная нагрузка представляет собой похититель информации (infostealer), работающий исключительно в оперативной памяти. Вредоносная программа относится к семейству BoryptGrab, которое ранее документировали специалисты Trend Micro. Подтверждение этого было получено на уровне бинарного кода: анализ с помощью инструмента BinDiff выявил 1638 совпадающих функций между образцом из текущей кампании и эталонным образцом BoryptGrab. При этом текущая версия не содержит некоторых дополнительных модулей, описанных в старых отчётах, но включает два ранее не документированных модуля: кражу учётных данных Steam через сканирование памяти процесса и хищение учётных записей мессенджера Meta Max.
Схема атаки выстроена многоступенчато. Сначала злоумышленник регистрирует аккаунты и организации на GitHub с именами, имитирующими известные бренды, и создаёт репозиторий .github с файлом README. В этом файле размещается привлекательный маркетинговый текст и кнопка "Официальная страница", которая на самом деле ведёт на подконтрольный домен, например bentleyvazquezpvey[.]github[.]io. Далее происходит перенаправление на один из примерно 20 дистрибутивных доменов атакующего. На финальной странице отображается шаблонный интерфейс с зелёной кнопкой "Download Secure Content" и поддельными значками "VirusTotal Approved", "Secure Archive", "Verified Access". При этом брендинг подставляется динамически на основе URL: атакующие не готовят отдельную страницу для каждого бренда, а используют единый шаблон, который клиентский скрипт адаптирует под название бренда, извлечённое из пути.
Нажатие на кнопку запускает загрузку ZIP-архива, который генерируется сервером каждые 60 секунд, меняя имя файла и имена вложенных компонентов. Это делает каждый загруженный экземпляр уникальным, что затрудняет статический анализ. В архиве размером около 136 МБ содержатся легитимные файлы (например, подписанный исполняемый файл WinGUP gup.exe) и множество DLL-файлов-заполнителей, чтобы имитировать размер настоящего программного пакета. Вредоносная часть - это подменённая библиотека libcurl.dll, которая загружается через DLL-подгрузку (DLL side-loading) при запуске gup.exe.
При запуске gup.exe загружает libcurl.dll из рабочего каталога, и управление переходит к коду злоумышленника. Загрузчик извлекает закодированный блок данных, декодирует его с использованием таблицы байтов, затем расшифровывает и реконструирует исполняемый модуль вредоносной программы. После проверки корректности PE-заголовка загрузчик запускает похититель информации в памяти с помощью рефлексивного внедрения через COM/OLE-механизмы, не записывая его на диск. Это позволяет обойти некоторые сигнатуры антивирусов, проверяющие типичные вызовы VirtualAlloc и CreateThread.
После запуска основная программа (900 КБ в памяти) выполняет 11 последовательных модулей кражи данных. Первый модуль собирает системную информацию: HWID, версию ОС, объём RAM, локализацию, IP-адрес и геолокацию через запросы к ip-api.com. Особый интерес представляет вычисление хэша SHA-1 обоев рабочего стола - этот хэш может служить почти уникальным идентификатором машины и использоваться для дедупликации жертв. Второй модуль перечисляет установленные приложения из реестра.
Ключевой модуль кражи браузерных данных (третий) нацелен на 19+ браузеров. Для Chromium-браузеров реализован обход шифрования App-Bound Encryption v20. Вместо скачивания вспомогательного файла, как это делалось в более ранних версиях BoryptGrab, текущая версия запускает процесс браузера, внедряет в него через CreateRemoteThread встроенную DLL размером 134 КБ, которая вызывает COM-сервис IElevator из контекста браузера, таким образом получая мастер-ключ для расшифровки. Интересно, что код на русском языке в комментариях страницы доставки указывает на русскоязычного оператора.
Четвёртый модуль копирует данные Telegram со всех подключённых дисков, включая портативные установки. Пятый - извлекает токены Discord из трёх каналов: stable, canary и PTB. Шестой модуль необычен: он крадёт учётные данные мессенджера Meta Max (преемника Facebook* Messenger для настольных ПК) через перебор записей в Windows Credential Manager, содержащих строку "@ONEME". Седьмой модуль сканирует память процессов steamwebhelper.exe и steamservice.exe для получения токенов сессии Steam; если процесс не запущен, атакующее ПО запускает Steam и ждёт 20 секунд.
Восьмой модуль нацелен на криптовалютные кошельки: заложена таблица из 41 пути для примерно 32 различных брендов (включая Exodus, Ledger, Bitcoin Core, Trezor Suite, Atomic Wallet, Metamask и многие другие). Девятый модуль - граббер файлов с рабочего стола и папки "Документы" по заданному списку расширений и ключевым словам (password, seeds, keys, wallet, backup, recovery). Десятый - снятие скриншота экрана с использованием GDI+ или библиотеки miniz в качестве запасного варианта. Одиннадцатый модуль дампит все сохранённые учётные данные из Windows Credential Manager.
После сбора все данные упаковываются в ZIP-архив и отправляются на сервер управления (C2) с IP-адресом 193.143.1[.]131 (провайдер Proton66, AS198953, Россия). Отправка выполняется через POST-запрос с фрагментированной передачей (chunked) и пользовательскими заголовками X-Filename и X-Size. Стоит отметить, что вредоносная программа не реализует закрепление в системе, не содержит механизмов защиты от отладки и не пытается обходить антивирусы. После выполнения она не удаляет свои временные файлы: в рабочем каталоге остаются папки decrypt_browser и Filegraber (с характерной опечаткой \Filegraber) вместе с логами, что даёт следователям возможность восстановить атаку.
Как отметили в Arctic Wolf в предоставленном отчёте, эта кампания не использует никаких уязвимостей. Её успех полностью зависит от того, нажмёт ли пользователь кнопку "скачать" на подставной странице. Стратегический риск заключается в массовом подрыве доверия к брендам: злоумышленники создают сотни реплик страниц популярных продуктов, что затрудняет пользователям отличить подделку от оригинала. Основной рекомендацией для защиты становится блокировка указанного C2-адреса, поиск признаков DLL-подгрузки libcurl.dll неподписанной версией и обучение пользователей не доверять слепо поисковым результатам, ведущим на GitHub-репозитории с сомнительными названиями.
Кампания продолжается: часть обнаруженных репозиториев уже удалена GitHub после жалоб, но злоумышленники могут регистрировать новые. Атрибуция на данный момент не проведена. Хотя язык комментариев в коде страницы доставки и русскоязычные шутки в названиях аккаунтов указывают на русскоязычного оператора, а IP-адрес находится в российской хостинговой сети, нельзя исключить использование общей вредоносной платформы разными группами. Арктический Волк предупреждает: 292 репозитория - это не предел, а лишь один из эпизодов в масштабной кампании финансово мотивированных киберпреступников, нацеленной на кражу криптовалютных кошельков, банковских данных и игровых аккаунтов.
* Компания Meta и её продукты (включая Instagram, Facebook, Threads) признаны экстремистскими, их деятельность запрещена на территории РФ.
Индикаторы компрометации
IPv4
- 185.100.157.222
- 193.143.1.131
- 193.221.201.165
- 2.27.5.63
- 217.145.226.0
- 217.145.227.254
- 77.91.96.188
IPv4 Port Combination
- 45.93.20.61:5466
URL
- https://balafohoaxee.com
- https://brakerhotdog.com
- https://eggcupmadras.com
- https://fleecykobird.com
- https://furiesniffer.com
- https://hamletlunoid.com
- https://lafferdingar.com
- https://logic-prox.com
- https://palchknosp.com
- https://parnelmentha.com
- https://refonttaught.com
- https://sellietuskar.com
- https://targetroyena.com//.github.io
- https://yontzarpzenu.com
SHA1
- e40197487a7f8d88f440eb77f73bacef4f054dc8
SHA256
- 07dcc12197490bf3292619273ba8b11a960273a34265bca3b7d6d40e8c47dc82
- 1c854a6aa415f4be964e8a4be49c06e092156bf66d71f9c79995b3e6b156e778
- 52825dbf3fc28b9f7c3a24adf78d3425ac714e975769f4d70e8c718ddcbb9856
- 6db05c4473760c44fa572ffac4c5911b35caf2467a37726c21c5f87e25cb2ea8
- 8e1ea6d9a8ccb303be9a2aad3524a529d0d99b1b24a136d8422276e942c4c4b8
- e9a56961980031a45e578472836576da874512bff50ca3d491fc72e52f7cc7c2
- fd01262bd56510088b9ddfe58ca101abb98575f3c0259b480a31b917aa73bc56
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | rule BoryptGrab_infostealer { meta: description = "Rule to detect BoryptGrab infostealer used in GitHub case" author = "Arctic Wolf" distribution = "TLP:CLEAR" version = "1.0" last_modified = "2026-07-02" sha256 = "e9a56961980031a45e578472836576da874512bff50ca3d491fc72e52f7cc7c2" strings: $a1 = "locked, killing browser processes" ascii wide $a2 = "CopyBrowserData: [OK] extensions.json" ascii wide $a3 = "CopyBrowserData: [LOCKED]" ascii wide $a4 = "CopyTelegramData: Copying" ascii wide $a5 = "Found %d user(s), processing %d wallet rules" ascii wide $a6 = "GetBrowserMasterKey: SUCCESS, master key extracted:" ascii wide $a7 = "ExtractDiscordTokens: Saved %d unique token(s) to Discord_tokens.txt" ascii wide condition: uint16(0) == 0x5a4d and filesize < 1000KB and (all of ($a*)) } |