Кибершпионаж через VS Code: северокорейская кампания Contagious Interview атакует разработчиков

information security

Эксперты по кибербезопасности из SEAL Intel раскрыли детали сложной кампании, проводимой северокорейскими хакерами под кодовым названием Contagious Interview. Целью атак стали разработчики программного обеспечения, а основным вектором заражения выступило злоупотребление функционалом задач (Tasks) в популярной среде разработки Visual Studio Code. Атака использует изощрённую социальную инженерию: злоумышленники под видом рекрутеров или потенциальных партнёров рассылают через LinkedIn ссылки на вредоносные репозитории, замаскированные под технические задания для собеседования или запросы на ревью кода.

Описание

Аналитики с высокой степенью уверенности приписывают эту кампанию угрозам, связанным с КНДР. В прошлом месяце три отдельные жертвы обратились за помощью к SEAL. Каждая из них была атакована одинаковым способом и понесла значительные финансовые потери. Примечательно, что ни одна жертва не запускала код напрямую. Достаточно было просто клонировать репозиторий и включить в VS Code функцию «Доверенная рабочая область» для ручного просмотра кода или анализа с помощью ИИ-инструментов. История коммитов во всех вредоносных репозиториях указывала на часовой пояс KST+9 (корейский).

Технические детали атаки

Архитектура вредоносного программного обеспечения реализована по «двухслойной» схеме. Слой на Node.js исполняется немедленно после заражения для кражи учетных данных, перехвата нажатий клавиш и установки скрытого RAT (Remote Access Trojan) в директории ".npm". Python-слой загружает вторичную инфраструктуру для долгосрочного наблюдения, кражи криптовалютных кошельков и майнинга.

Первоначальный доступ обеспечивается двумя основными векторами. Первый и более изощренный метод - это захват задач VS Code. В файле ".vscode/tasks.json" скрытая задача с именем "eslint-check" настроена на автоматический запуск при открытии папки проекта ("runOn: folderOpen"). Она исполняет JavaScript-файл, замаскированный под шрифт (например, "public/font/fa-brands-regular.woff2"). Если этот вектор не срабатывает, вредоносный код активируется через логику приложения. В файле "server/routes/api/profile.js" содержится функция "getPassport", которая при запуске сервера инициирует заражение.

Многоступенчатая вредоносная нагрузка

Первый этап, так называемый «сбрасыватель» (dropper), связывается с подконтрольным злоумышленникам доменом (например, "chainlink-api-v3[.]com"). Сервер намеренно возвращает код ошибки, например, 404. Скрипт перехватывает тело ответа, содержащее фактический вредоносный код, и исполняет его с помощью "new Function()".

Загружаемая полезная нагрузка представляет собой сложный контроллер на Node.js, работающий полностью в оперативной памяти. Он выполняет пять различных модулей для кражи данных. Модуль кейлоггера и создания скриншотов захватывает нажатия клавиш и делает снимки экрана, загружая их на сервер. «Сборщик файлов» сканирует домашний каталог пользователя в поисках конфиденциальных файлов: ".env", ".ssh", файлов кошельков и секретов. Особое внимание уделяется данным браузерных расширений для криптокошельков, которые копируются в скрытую директорию "~/.n3/". «Перехватчик буфера обмена» постоянно мониторит систему на предмет адресов криптовалют. «Похититель из браузеров» целенаправленно ищет локальные базы данных Chrome, Brave и Opera для кражи сохраненных логинов. Наконец, модуль RAT устанавливает постоянное соединение с командным сервером, позволяя атакующему выполнять произвольные команды на зараженной машине.

После развертывания модулей Node.js вредоносная программа пытается установить параллельное Python-окружение с помощью сценария-загрузчика (stager), обнаруживаемого как ".nlp". Этот скрипт создает скрытый каталог "~/.n2" и загружает два основных модуля. Модуль "way.py" - это инструмент для удаленного доступа и кражи данных, который, среди прочего, принудительно завершает процессы браузеров, чтобы разблокировать файлы баз данных для последующего копирования. Модуль "pow.py" отвечает за майнинг криптовалюты и обеспечение постоянного присутствия (persistence) в системе.

Обеспечение постоянства и различия по платформам

Стратегия обеспечения постоянного присутствия сильно отличается в зависимости от операционной системы. На Windows модуль "pow.py" реализует двухуровневый подход. Сначала он внедряет Python-скрипт в папку автозагрузки пользователя, маскируя его под «Скрипт обновления Windows». Затем этот скрипт создает запланированную задачу с именем «Runtime Broker», которая запускает вредоносный исполняемый файл при каждом входе пользователя в систему. Для уклонения от защитных механизмов скрипт добавляет свои директории в список исключений Windows Defender. Однако на Linux и macOS этот модуль немедленно завершается с ошибкой из-за попытки импортировать Windows-специфичную библиотеку "winreg", что делает автоматическое постоянное присутствие на этих платформах невозможным через данный вектор.

Параллельно вредоносная программа создает скрытые директории в ".npm", которые выступают в качестве вторичного механизма постоянства, особенно при заражении через вектор задач VS Code. В этом случае в "~/.npm/scoped_dir[TIMESTAMP]/" записывается загрузчик "main.js". Если пользователь повторно откроет папку проекта, задача выполнится снова, и этот загрузчик перезапустит инфекцию. Независимо от вектора, запущенный вредоносный процесс создает в "~/.npm" пустые файлы-блокировки, содержащие только идентификатор процесса (PID), чтобы предотвратить дублирующие заражения.

Рекомендации по защите и реагированию

Эксперты SEAL Intel рекомендуют разработчикам ужесточить настройки безопасности VS Code. В глобальный файл "settings.json" следует добавить параметр ""task.allowAutomaticTasks": "off"", который полностью отключит автоматический запуск задач. Также критически важно не включать функцию «Доверенная рабочая область» для незнакомых проектов.

Для обнаружения следов заражения необходимо проверить систему на наличие скрытых директорий (".n2", ".n3", ".nlp"), подозрительных файлов в "~/.npm" (например, "vhost.ctl" или папок "scoped_dir*") и соответствующих процессов в памяти. В случае обнаружения индикаторов компрометации рекомендуется немедленно изолировать машину от сети. Крайне важно сменить все учетные данные, API-токены и SSH-ключи, которые могли быть скомпрометированы. Особое внимание следует уделить криптовалютным кошелькам: средства необходимо перевести на новый кошелек с новой сид-фразой, используя чистое устройство.

Очистка системы на Linux и macOS включает удаление артефактов и завершение вредоносных процессов. Однако из-за сложности и глубины внедрения вредоносного кода на Windows, особенно через механизмы автозагрузки и планировщика заданий, эксперты рекомендуют полную переустановку операционной системы. В целом, полный сброс ОС считается наиболее надежным методом восстановления после такой атаки независимо от платформы.

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

IPv4

  • 146.70.253.107
  • 172.86.116.178

Domains

  • chainlink-api-v3.com
Комментарии: 0