Злоумышленники атакуют разработчиков Web3 через поддельные репозитории GitHub: новая кампания с усовершенствованными методами сокрытия

information security

В сегменте информационной безопасности, связанной с разработкой программного обеспечения, продолжается тренд на целевые атаки против программистов. Активная кампания, документированная в отчёте ThreatProphet TP-2026-004, демонстрирует эволюцию методов группы, предположительно связанной с Lazarus Group и её операцией «Contagious Interview». На этот раз злоумышленники используют сложную социальную инженерию, маскируясь под известную компанию в сфере Web3-игр, и внедряют новый механизм контроля доступа к вредоносной инфраструктуре, который одновременно служит ловушкой для аналитиков.

Описание

Суть атаки: фиктивное техническое собеседование

Кампания нацелена на блокчейн-разработчиков через фиктивный процесс технического собеседования. Жертве предлагают ознакомиться с репозиторием "bet_ver_1", замаскированным под платформу для покера и ставок на спорт на базе Web3 (BetPoker). Репозиторий размещён в организации GitHub "LimitBreakOrgs", что является типосквоттингом (созданием похожего имени) легитимной компании Limit Break Inc., известного разработчика NFT-игр. Это повышает доверие жертвы, так как работа над проектом, связанным с покером, для разработчика в сфере Web3 выглядит логичной в контексте сотрудничества с игровой компанией.

Двойной вектор выполнения: автоатака через VS Code и ручной запуск

Уникальность данной атаки заключается в наличии двух независимых путей исполнения вредоносного кода, которые сходятся на одном и том же зловредном модуле.

  1. Автоматическое выполнение при открытии проекта в VS Code. Файл ".vscode/tasks.json" в репозитории содержит задачу с параметром "runOn: "folderOpen"". При открытии папки проекта в редакторе VS Code эта задача выполняется автоматически, после принятия пользователем стандартного запроса на доверие к рабочей области. Задача запускает команду, которая через "curl" или "wget" загружает и выполняет скрипт с удалённого сервера на домене "vscode-settings-tasks-227.vercel.app". Этот метод не требует от разработчика никаких действий, кроме открытия папки в редакторе.
  2. Выполнение при следовании инструкциям README. Если разработчик, следуя стандартным инструкциям в файле README, выполнит "npm start" для запуска сервера, сработает второй механизм. Серверный код в файле "auth.js" выполняет модуль на уровне его загрузки ("require"). Этот модуль отправляет ("POST") полное содержимое переменных окружения процесса ("process.env") на другой контролируемый эндпоинт и получает в ответ тот же самый вредоносный код.

Оба пути приводят к запуску Stage 1 - модуля-регистратора (beacon). Этот модуль собирает информацию о системе (имя хоста, MAC-адреса, данные ОС) и каждые пять секунд отправляет её на командный сервер (C2) по адресу "185.163.125.196:3000". C2 отслеживает сессию жертвы через уникальный идентификатор ("instanceId") и находится в режиме ожидания. Когда оператор принимает решение активировать конкретную жертву, сервер отвечает с статусом ""error"", что служит сигналом для доставки Stage 2 - полноценного контроллера для выполнения задач.

Нововведение: контролируемый эндпоинт с ловушкой для аналитиков

Ключевым эволюционным шагом в этой кампании стал механизм «ворота» на эндпоинте для эксфильтрации данных. Эндпоинт "https://ip-checking-notification-firebase-2[.]vercel.app/api" выполняет тройную функцию:

  • Эксфильтрация: Принимает украденные переменные окружения от жертвы.
  • Контроль доступа: Отправляет вредоносную нагрузку (Stage 1) только в том случае, если в полученных данных присутствует определённый ключ ("AUTH_API").
  • Контрразведка (Counter-OSINT): На любой запрос, не содержащий полного набора переменных (например, от сканера безопасности или аналитика), эндпоинт возвращает правдоподобную «приманку» - JSON-объект, который выглядит как ответ легитимного сервиса проверки IP-адреса. В этом ответе содержится IP-адрес и статус VPN того, кто отправил запрос, что позволяет злоумышленникам фиксировать попытки расследования.

Чтобы гарантировать, что у настоящей жертвы всегда будет нужный ключ "AUTH_API", злоумышленники пошли на хитрую манипуляцию с системой контроля версий. Они удалили файл ".env.local" из ".gitignore" и закоммитили его в репозиторий с шаблонными данными. По соглашению, разработчики используют ".env.local" для хранения своих реальных учётных данных, переопределяя шаблонные значения из ".env". Код сервера принудительно загружает оба файла, поэтому у реальной жертвы в "process.env" всегда окажутся как минимум шаблонные ключи, что беспрепятственно откроет «ворота» для вредоносной нагрузки.

Связи с предыдущими кампаниями и возможная атрибуция

Анализ артефактов напрямую связывает эту кампанию с двумя предыдущими, описанными в серии отчётов ThreatProphet исследование ThreatProphet. Файл ".env.local" в репозитории "bet_ver_1" идентичен байт в байт файлам из кампании TP-2026-002. Файл "package.json", обслуживаемый вредоносной инфраструктурой, полностью совпадает с артефактом из кампании TP-2026-001. Суффикс "1228" в параметре "exceptionId" модуля-регистратора также перекочевал из более ранней операции.

Техники, тактики и процедуры (TTP) кампании, включая фокус на Web3-тематике, использование LinkedIn для первоначального контакта (хотя для данного репозитория это не подтверждено), автоматическое выполнение задач VS Code и конкретные паттерны кода, соответствуют документации по деятельности Lazarus Group и её подоперации «Contagious Interview». Однако уверенность в атрибуции оценивается как низкая-средняя, так как эти техники могут быть заимствованы другими группами.

Рекомендации по защите для разработчиков и компаний

Для специалистов по безопасности и разработчиков этот инцидент служит очередным жёстким напоминанием о рисках, связанных с выполнением незнакомого кода. Критически важно проверять репозитории, полученные в рамках собеседований, в изолированных средах (виртуальные машины, контейнеры) без доступа к реальным учётным данным. В настройках VS Code следует отключить автоматический запуск задач ("task.allowAutomaticTasks"), а перед запуском "npm install" или "npm start" в неизвестном проекте необходимо вручную проверить файлы ".vscode/tasks.json", "package.json" и любые скрипты, выполняемые при сборке. На сетевом уровне необходимо блокировать исходящие подключения к указанным IP-адресам и доменам, а также настраивать мониторинг на предмет HTTP-запросов с характерными заголовками, такими как "x-app-request: ip-check". В случае если выполнение подозрительного репозитория всё же произошло, следует немедленно изолировать систему, сменить все учётные данные, которые могли находиться в переменных окружения, и провести полную проверку на наличие следов закрепления в системе. Эволюция данной угрозы показывает, что злоумышленники не только совершенствуют техническую составляющую, но и активно работают над сокрытием своей инфраструктуры, превращая её элементы в инструменты для борьбы с исследователями.

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

IPv4 Port Combinations

  • 185.163.125.196:3000

SHA256

  • 0b7e58229a53dad3edd707ba0c5336055ed7c4b0cbc6a52f79f9a88c6781f955
  • 165324541c8f2d0a4bdac12fcf7ccc1738caf7e36bb11721186e0c560c4a8a69
  • 28e73ce85db813ba0839ee077428eaa121037e3a1ec8a13b1171e68cc2a0accd
  • 37357f9b8a83b1a12689b2ff9a1d913669e0a911f2e526ab2ddb575844c4c0c6
  • 37eb8e11b40527de0881189064c657fe1623d6b2c8ad16fc8136782e89367ead
  • 3a188d076eb5b377b67753bd6020dea99c3f7775269bd8ebd001806d1b274cca
  • 435868c179567a62ac18685b4ab6180d50e72823aa1a6d770ea7570172bc0028
  • 4dbd9706e23a4cb59928db286e484eabcb08ad902ffc259a1c3342045e4e5883
  • 5f70dd06715b95b3bedacd06a37e051611901e56246af05fa3ed9f734082de43
  • 6effad9fdee81589b37c60bbbae20483200bf53bee3e3c107b1aa47d2ac4ccb3
  • 8e9769b4727f8c1eb7a28699296022126ecb0b2774f0e2da3f67d07ff8bcc01f
  • a9db9559a1e97762d0e72715301329bc325d08e239a29e1382e99033ede986de
  • b8c2b82b28909448c3b1eff1e0d96ada3ba171f1615aadfb95e2ef08a8dbb77f
  • b8fb424f27ab1aaa736cf510ea77c1e6e1b7ab25692e64ee7f16c824fcb3a197
  • bb1ec9c8a23dd4f518f44f25b88b34b9ebfc36fee236207942eeca26ff9a79de
  • c08356a5a4ebbd8804c9acbe2e0c1b986d867b057d2e827ae663e4aec2204ed2
  • cc9e443872d99b07e4bf5f6baa6144fbe0fd24bc610e58340d9b8c755df17fce
Комментарии: 0