GPUGate: Киберпреступники используют GitHub и OpenCL для доставки HijackLoader

information security

В сентябре 2025 года исследователи из GMO Cybersecurity by Ierae, Inc. обнаружили продолжающуюся вредоносную кампанию, в которой злоумышленники используют уязвимость в архитектуре GitHub для распространения малвари под видом официальных установщиков популярных инструментов для разработчиков. Эта атака, получившая название GPUGate, сочетает в себе технику захвата репозитория с изощренным использованием GPU-интерфейса OpenCL для противодействия анализу. Основной целью кампании стали пользователи из Европейского союза и Японии, ищущие инструменты для разработки.

Описание

Механизм атаки основан на особенности GitHub, позволяющей пользователю создать форк публичного репозитория, внести изменения в свою копию, а затем просматривать эти изменения через исходный репозиторий с помощью хэша коммита. Это создает ложное впечатление, что коммит принадлежит официальному проекту, хотя у злоумышленника нет прямых прав на запись. В данном случае атакующие создали форк официального репозитория GitHub Desktop, изменили ссылку для скачивания в файле README, чтобы она вела на вредоносный установщик, и зафиксировали это изменение. Полученный хэш коммита, видимый в пространстве имен официального репозитория, затем продвигался через платную рекламу в поисковых системах.

Хотя GitHub заявил о начале работ по устранению этой проблемы еще в сентябре 2025 года, по состоянию на конец декабря воспроизвести атаку все еще возможно. Злоумышленники создают одноразовые учетные записи, и даже их удаление не стирает вредоносные коммиты из сети репозиториев, что затрудняет отслеживание и очистку. Пользователи, перешедшие по рекламной ссылке и скачавшие файл GitHubDesktopSetup-x64.exe, на самом деле получали многоступенчатый загрузчик вредоносного ПО.

На поверхности этот исполняемый файл выглядит как обычное приложение на C++, однако его отладочная информация указывает на то, что это однофайловое .NET-приложение. Такие приложения содержат все свои зависимости в одном исполняемом файле-хосте. Вредоносная полезная нагрузка скрыта в оверлее файла. Встроенное .NET-приложение, выступающее в роли загрузчика, содержит два зашифрованных ресурса и использует хитрую технику для их расшифровки.

Ключевой особенностью этого загрузчика является злоупотребление API OpenCL, предназначенным для выполнения вычислений на графическом процессоре. Функция GenerateKey() загружает библиотеку OpenCL.dll, расшифровывает исходный код OpenCL-ядра и пытается его скомпилировать и выполнить. На первый взгляд, ядро должно генерировать ключ для расшифровки основной полезной нагрузки на основе имени устройства GPU. Однако код содержит преднамеренные ошибки, такие как передача некорректных аргументов в clSetKernelArg, что гарантирует сбой выполнения ядра. В результате функция всегда возвращает нулевой ключ.

Этот прием служит двойной цели. Во-первых, он затрудняет динамический анализ в песочницах и виртуальных машинах, где зачастую отсутствуют драйверы GPU или среда выполнения OpenCL, что приводит к преждевременному сбою выполнения. Во-вторых, он вводит в заблуждение аналитиков при статическом анализе, заставляя их искать сложный GPU-ключ, в то время как реальный ключ тривиален. Для полного понимания поведения исследователям пришлось отлаживать код на физической машине с дискретной видеокартой.

Используя нулевой ключ и такой же вектор инициализации, загрузчик расшифровывает основную .NET-полезную нагрузку с помощью AES-128-CBC. Этот следующий этап пытается загрузить дополнительный код с удаленного сервера. Хотя сервер был отключен, данные телеметрии показывают, что он использовал Windows Script Host для запуска VBScript, который, в свою очередь, исполнял PowerShell-стагер.

PowerShell-стагер обеспечивает устойчивость (persistence) в системе. Он копирует себя в автозагрузку, создает исключения в Microsoft Defender для ключевых каталогов и устанавливает задание в планировщике задач Windows с подозрительным именем WinSvcUpd. Затем он загружает ZIP-архив с вредоносного домена, распаковывает его и выполняет содержащиеся там исполняемые файлы. В некоторых образцах стагера были обнаружены комментарии на русском языке.

Внутри загруженного архива находится легитимный исполняемый файл Control-Binary32.exe и набор DLL. Одна из них, Qt5Network.dll, была модифицирована. Ее легитимный код остался нетронутым, но в стандартную цепочку инициализации была вставлена вредоносная функция. Эта функция читает зашифрованную полезную нагрузку из файла Prangshound.hzj, расшифровывает ее простым добавлением ключа к каждому двойному слову и внедряет в память с помощью техники, известной как module stomping (подмена модуля). А именно, она копирует основную часть расшифрованного кода в секцию .text легитимной системной библиотеки vssapi.dll, меняет права доступа на выполнение и передает управление по заданному смещению.

Эта конечная полезная нагрузка идентифицируется как HijackLoader. Она перечисляет запущенные процессы, вычисляет хэши их имен и проверяет наличие процессов, связанных с антивирусами AVG и Avast. При обнаружении она вводит задержку выполнения. Затем загрузчик читает и расшифровывает финальную конфигурацию из второго файла Kraekgriesfid.xvs. HijackLoader известен как гибкий загрузчик, часто используемый для развертывания таких угроз, как стилер LummaC2.

Данная кампания наглядно демонстрирует, как киберпреступники используют доверие к платформам вроде GitHub и сложности анализа среды выполнения для эффективных атак. Разработчики, обладающие доступом к критически важным активам, представляют собой особо привлекательную цель. Эксперты GMO Ierae настоятельно рекомендуют пользователям скачивать установочные файлы исключительно со страниц официальных релизов проектов, а также проявлять повышенную осторожность при взаимодействии с платной поисковой рекламой.

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

IPv4 Port Combinations

  • 45.59.124.94:443

URLs

  • https://21gweweqax.online/api.php
  • https://21ow.icu/arasa.php
  • https://appsiauer.online/api.php
  • https://git-desktop.app/git
  • https://git-desktop.it.com/git
  • https://gitpage.app/
  • https://kololjrdtgted.click/zip.php
  • https://lofiufueyer.blog/aps.php
  • https://oqiwquwqey.xyz/zipep.php
  • https://poiwerpolymersinc.online/api.php
  • https://polwique.blog/fils.php
  • https://sleeposeirer.online/zip.php
  • https://slepseetwork.online/api.php

SHA1

  • 3b3e14cec9f2c7f9567bb1a50ece12d4eb337305
  • 629f3ab77b0c6840618029d39869d078f8a5a694
  • 636f5d478fa774635da5b25ecb842822ab444009
  • 747971b32010ff652a6bd698fb57ece5287b9234
  • a48188b0d5bdc3e8728cb37619cc51f7392b086f
  • e24d78ebb3c7302cc6aa8e2231f847a53e1345f2

SHA256

  • 2299b795169494d3717140bf34ea4574b6a9d7d8aecf77fd9ca932925373a23f
  • 2a1c127683dba19399cc6516d5700d4e756933889dad156cd62b992aaf732816
  • 58f897d4369a4c667b2f40a6703c7ae42912a10186d81c6eaa7809513da86a51
  • 6f9a1286f950da68e81bfe3e6c7655df00558df4d50289bf84df79c7d5073a2e
  • 719a726d54161a1a95cf69f3001b74fe15661b83d995b89bcca5ecc8e792e2eb
  • 731f03daacb38f70bf2178f2ab100b68fc189c9c8da19cc2be24d31d35e799b1
  • 75deee7af25dc4f772661f17be4938c1980a703a785dc32274bf1647f8133cec
  • 79384ef76740962757d617bc056bf8a45b2ef8f1e1587632b36830e2fc6ab21a
  • 8cd7d9ccea98ad6a3dfb4767e574349c9fd5678150c629661574ddd45e40cd37
  • 95974060b0dfc45401d15ef9d07392b338fb7af2e3f623eb85b0ef5d1f5759d5
  • 95d51ee9c58f789213cedac7e82c7ba064364d9e5c8ca76ad27a5e53537f9fdf
  • a46170be7cca7d8bcecf3da4caf035ec24f758eba45936ed802c1a03beab1c0a
  • ad07ffab86a42b4befaf7858318480a556a2e7c272604c3f1dcae0782339482e
  • b967ade09a9338320e0db4e5da11a2ac396950f0eed689b28bd31686b7baf018
  • be503f616edacac10689b63ba39c4b5d791fcf365bc80a0c8bc27c2c3d3cb2a4
  • dbe1ec81fe1cb7f0249f47ed83be1b80ac99b2ae726a19b2083cb6fb585515d9
  • e252bb114f5c2793fc6900d49d3c302fc9298f36447bbf242a00c10887c36d71
  • e5c01a6f3d85c469e16857d92d9f0a1b01d14b0f0dad7df94b1afa6dc1ff4490
  • ec89c0ffc755eafc61bbf3b9106e0d9d7cbfaa9e70fbe17d9e4fbb9a7d38be64
  • ed1811c16a91648fe60f5ee7d69fe455d0a3855eebb2f3d56909b7912de172fd
  • efcf5fe467f0ba8f990bcdfc063290b2cf3e8590455e6c7c8fe0f7373a339f36
  • f3a914a46795021afd35b6c54a3c64ffedf33fbc3398dea84e6f71dc2d3ae198

YARA

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