Разработчик набирает в Google «скачать Claude Code» - и первые три рекламных результата ведут на дроппер Lumma Stealer. Ставит npm-пакет с MCP-сервером для своего AI-ассистента - а репозиторий на GitHub создан три месяца назад фейковым аккаунтом с накрученными звёздами.
Это не абстрактный обзор «рисков AI». Здесь - разбор конкретных кампаний: от поддельного MCP-сервера SmartLoader до троянизированных «утечек» Claude Code. С IoC, MITRE ATT&CK-маппингом и детект-правилами, которые можно завтра раскатить на ваш EDR. Без воды, с командами.
Почему именно AI-инструменты стали вектором атак
Разработчики - лакомая цель. В их.env-файлах валяются API-ключи от OpenAI, Anthropic, облачных провайдеров. На машинах - SSH-ключи к production-серверам, токены GitHub с write-доступом к корпоративным репозиториям, сессии AWS/GCP. Один скомпрометированный разработчик - и вот у вас supply chain attack на все downstream-проекты его компании.AI-хайп создал идеальную среду для атакующих. Три причины:
- Новые AI-инструменты появляются быстрее, чем разработчики успевают проверять их легитимность. Выходит очередной «бесплатный аналог Cursor» - тысячи людей бегут ставить его, не глядя на источник.
npm install,pip install,brew install- автоматизм. Никто не читает исходный код пакета перед установкой. Атакующие эксплуатируют эту привычку через тайпсквоттинг и registry poisoning.- Многие AI-инструменты распространяются через GitHub Releases, npm, PyPI. Атакующий с убедительной копией получает канал доставки с высоким уровнем доверия - потому что эти домены у всех в allowlist.
Вектор первый: malvertising через рекламу AI-инструментов
Как работает фишинг через рекламу AI
Malvertising для разработчиков - это не баннер «вы выиграли iPhone». Это таргетированная кампания в Google Ads, которая показывается по запросам вроде «Cursor AI download», «Claude desktop app», «local LLM wrapper» и ведёт на pixel-perfect клон официального сайта.Типичная цепочка атаки (маппинг по MITRE ATT&CK):
- Reconnaissance (T1593.002 - Search Engines): атакующий анализирует поисковые тренды, выбирает растущие AI-инструменты.
- Resource Development (T1583.001 - Domains): регистрация домена-двойника. Паттерны:
cursor-ai.dev,claude-code-download.com,ollama-install.io. - Resource Development (T1583.006 - Web Services): лендинг с копией дизайна официального сайта.
- Initial Access (T1189 - Drive-by Compromise): пользователь переходит по malvertising-ссылке, скачивает «установщик».
- Execution (T1204.002 - Malicious File): жертва запускает инсталлятор - с виду легитимный .msi/.dmg/.AppImage.
- Command and Control (T1071.001 - Web Protocols): дроппер стучится на C2 за вторым стейджем по HTTPS.
Практический кейс: фейковый AI-редактор с инфостилером
По данным исследования Malwarebytes, в ноябре 2024 года зафиксировали кампанию: под видом бесплатного AI-редактора раздавали infostealer через фейковые установщики - причём и на Windows, и на macOS. Атакующие не поленились подготовить инсталляторы под обе ОС. Это говорит о серьёзной подготовке и прицеле именно на разработчиков (которые часто сидят на маках).Что делал инфостилер после установки:
- Вытягивал cookies и saved passwords из всех Chromium-based браузеров
- Искал файлы
.env,credentials,config.jsonв домашней директории - Забирал SSH-ключи из
~/.ssh/ - Выгружал данные криптокошельков (расширения MetaMask, Phantom)
- Отправлял всё на C2 одним POST-запросом
Вектор второй: supply chain attack через вредоносные пакеты
Поддельные npm-пакеты AI и registry poisoning
Атаки на цепочку поставок через доверительные отношения на AI tools в 2024–2025 - уже не единичные инциденты, а конвейер. Группа SmartLoader показала зрелый подход к компрометации цепочки поставок через MCP-серверы (
Ссылка скрыта от гостей
) - относительно новый стандарт для интеграции AI-ассистентов с внешними сервисами.По данным исследования Straiker, SmartLoader провернула многоэтапную операцию по клонированию легитимного MCP-сервера Oura Ring. Ниже - реконструкция атаки на основе опубликованных данных с нашими аналитическими дополнениями.
Анатомия атаки SmartLoader на MCP-экосистему
Фаза 1 - Target Selection. Атакующие выбрали MCP-сервер для Oura Ring (умное кольцо для мониторинга здоровья). Логика понятна: разработчики, которые интегрируют данные Oura с AI-ассистентами, - early adopters с высокой технической грамотностью, но низкой подозрительностью к MCP-пакетам. Среда молодая, механизмов верификации толком нет.Фаза 2 - Building the Fake Network. По данным Straiker, SmartLoader создали сеть фейковых GitHub-аккаунтов. Лично я оцениваю это так: аккаунты имели историю коммитов, форки популярных проектов, звёзды друг на друга - классическое противодействие проверке «посмотри на возраст аккаунта и его активность». Красивый фантик.
Фаза 3 - Trojanized Repository. Клон репозитория легитимного MCP-сервера Oura Ring. Основной код идентичен оригиналу. Вредоносная логика (по данным Straiker) добавлена в обфусцированном виде - при беглом code review не видна.
Фаза 4 - Registry Poisoning. Троянизированный пакет опубликован в npm-реестре. Тайпсквоттинг - классика для поддельных npm-пакетов AI, но здесь атакующие пошли дальше: фейковая GitHub-сеть для накрутки социального доверия к пакету. Количество звёзд и форков - тот самый «на заборе тоже написано».
Обфускация: как SmartLoader прятал payload
По техническому анализу Straiker, SmartLoader использовал многослойную обфускацию - матрёшка, по сути. Стандартныйnpm audit или даже ручной просмотр package.json ничего подозрительного не показал бы. Вредоносный код активировался только при определённых условиях -
Ссылка скрыта от гостей
в связке с T1480 (Execution Guardrails).Вывод для пентестеров: при аудите MCP-серверов недостаточно смотреть на
index.js. Нужно трассировать весь dependency tree и проверять postinstall-скрипты. Иначе пропустите.Вектор третий: троянизированные «утечки» и фейковый Claude Code
Как хакеры эксплуатируют интерес к утечкам AI
В апреле 2025 года, по данным Wired, хакеры начали раздавать то, что подавалось как «утечка исходного кода Claude Code» - с бонусным вредоносным ПО внутри. Паттерн особенно опасный: разработчики и исследователи безопасности - те самые люди, которые захотят посмотреть утечку. Социальная инженерия идеальна: любопытство + профессиональный интерес = запуск непроверенного кода. Мы сами себе злейшие враги.Фейковый Claude Code - не единичный случай. Тот же паттерн работает для любого горячего AI-инструмента. Атакующие мониторят новостной фон и клепают приманки в течение часов после значимых событий.
Цепочка распространения:
- Новость об утечке/релизе AI-инструмента
- Пост на форумах/Telegram/Reddit: «Нашёл зеркало утёкшего кода»
- Ссылка на GitHub/Mega/Торрент с «исходниками»
- Архив содержит легитимный код + дроппер первого стейджа
- Дроппер подгружает инфостилер через легитимный CDN (GitHub Releases, Discord CDN, Cloudflare Workers)
MITRE ATT&CK: полная матрица TTP для атак на разработчиков
Систематизируем все описанные кампании через единую матрицу:| Тактика | Техника | ID | Применение в кампаниях |
|---|---|---|---|
| Reconnaissance | Search Open Websites/Domains | T1593 | Анализ трендов AI-инструментов |
| Resource Development | Acquire Infrastructure: Domains | T1583.001 | Домены-двойники AI-инструментов |
| Resource Development | Establish Accounts: Social Media | T1585.001 | Фейковые GitHub-аккаунты SmartLoader |
| Initial Access | Supply Chain Compromise: Software Dependencies |
Ссылка скрыта от гостей
| Троянизированные npm/PyPI-пакеты |
| Resource Development | Acquire Infrastructure: Malvertising | T1583.008 | Вредоносная реклама в Google Ads |
| Execution | User Execution: Malicious Link | T1204.001 | Переход по malvertising-ссылке и скачивание файла |
| Execution | User Execution: Malicious File | T1204.002 | Запуск фейковых установщиков |
| Persistence | Boot or Logon Autostart Execution | T1547 | Закрепление через автозагрузку |
| Defense Evasion | Obfuscated Files or Information | T1027 | Многослойная обфускация SmartLoader |
| Credential Access | Credentials from Password Stores | T1555 | Кража паролей из браузера |
| Credential Access | Unsecured Credentials: Credentials In Files | T1552.001 | Парсинг .env, SSH-ключей |
| Collection | Data from Local System | T1005 | Сбор файлов конфигурации |
| Exfiltration | Exfiltration Over C2 Channel | T1041 | Отправка данных на C2 |
Практика: детектирование и hunting
Теперь - то, ради чего вы это читаете. Конкретные правила и запросы для обнаружения описанных TTP. Берите и раскатывайте.YARA-правило для детекта фейковых AI-установщиков
Код:
import "pe"
rule Suspicious_AI_Tool_Installer
{
meta:
description = "Detects fake AI tool installers commonly used in malvertising campaigns"
author = "Codeby TI Team"
date = "2025-01"
// Пример для демонстрации концепции - hunting-режим, высокий FP на легитимных установщиках
strings:
$ai_name_1 = "cursor" ascii nocase
$ai_name_2 = "claude" ascii nocase
$ai_name_3 = "ollama" ascii nocase
$ai_name_4 = "copilot" ascii nocase
$suspicious_1 = "AppData\\Local\\Temp" ascii
$suspicious_2 = "powershell" ascii nocase
$suspicious_3 = "-encodedcommand" ascii nocase
$suspicious_4 = "WebClient" ascii nocase
$suspicious_5 = "DownloadString" ascii nocase
$env_theft_1 = ".env" ascii
$env_theft_2 = "OPENAI_API_KEY" ascii
$env_theft_3 = "ANTHROPIC_API_KEY" ascii
$env_theft_4 = "id_rsa" ascii
condition:
uint16(0) == 0x5A4D and
filesize < 50MB and
// Исключаем подписанные бинарники для снижения FP
not for any i in (0..pe.number_of_signatures - 1): (pe.signatures[i].verified) and
any of ($ai_name_*) and
2 of ($suspicious_*) and
any of ($env_theft_*)
}
Sigma-правило для обнаружения эксфильтрации после установки
YAML:
title: Suspicious Process Accessing Developer Credentials After AI Tool Install
id: a1b2c3d4-5678-9012-abcd-ef0123456789
status: experimental
description: |
Hunting rule: detects processes spawned by installers accessing developer credential files.
High FP rate expected - use for hunting, not alerting. Temporal correlation (e.g. 5 min window) recommended at SIEM level.
# Пример для демонстрации концепции - hunting-режим
logsource:
category: file_access
product: windows
detection:
selection_installer:
ParentImage|contains:
- 'setup'
- 'install'
- 'update'
filter_known_good:
ParentImage|contains:
- 'Program Files'
- 'Program Files (x86)'
- 'WindowsApps'
- 'Microsoft\\Update'
selection_targets:
TargetFilename|endswith:
- '.env'
- 'id_rsa'
- 'id_ed25519'
- 'credentials'
- '.npmrc'
- '.pypirc'
selection_directories:
TargetFilename|contains:
- '\\.ssh\\'
- '\\AppData\\Roaming\\npm\\'
- '\\.config\\'
condition: selection_installer and not filter_known_good and (selection_targets or selection_directories)
# Примечание: временная корреляция (5 мин после установки) требует
# агрегатного условия (near) или корреляции на уровне SIEM.
# Данное правило детектирует доступ к credential-файлам из installer-процессов без временной привязки.
level: medium
tags:
- attack.credential_access
- attack.t1552.001
- attack.collection
- attack.t1005
KQL-запрос для Microsoft Defender / Sentinel
Код:
// Поиск подозрительных установщиков AI-инструментов
DeviceProcessEvents
| where Timestamp > ago(30d)
| where FileName has_any ("cursor", "claude", "ollama", "copilot", "chatgpt")
| where FileName endswith ".exe" or FileName endswith ".msi"
| where not (FolderPath has_any (
"Program Files",
"Program Files (x86)",
"Microsoft\\WindowsApps"
))
| where FolderPath has_any ("Downloads", "Temp", "Desktop")
| project Timestamp, DeviceName, FileName, FolderPath,
ProcessCommandLine, InitiatingProcessFileName
| order by Timestamp desc
Проверка npm-пакетов перед установкой MCP-серверов
Перед тем как выполнитьnpm install для любого MCP-сервера или AI-интеграции - ручная проверка. Без исключений:
Bash:
# Шаг 1: Проверить дату создания пакета и автора
npm view <package-name> time --json | jq '.created'
npm view <package-name> maintainers
# Шаг 2: Проверить наличие postinstall-скриптов
npm view <package-name> scripts --json
# Шаг 3: Скачать пакет без установки и проверить содержимое
npm pack <package-name>
tar -xzf <package-name>-*.tgz
# Просмотреть все .js файлы на наличие обфускации
grep -r "eval\|Function(" package/
# Шаг 4: Сравнить с легитимным репозиторием
# Если пакет заявляет связь с GitHub-репо - diff содержимого
diff -r package/ <cloned-repo>/
Чек-лист защиты для команд разработки
На основе разобранных кампаний - конкретные меры, по приоритету:Организационные меры
- Whitelist AI-инструментов. Составьте список одобренных AI-инструментов с verified download links. Закиньте во внутренний wiki. Любая установка не из списка - согласование с ИБ. Да, это бюрократия. Но один утёкший
.envстоит дороже. - Запрет установки из рекламных ссылок. Донесите до разработчиков: при поиске AI-инструментов пропускать ВСЕ рекламные результаты Google. Переходить только на органические результаты или напрямую на github.com/official-org.
- Ротация секретов после инцидента. Разработчик поставил что-то подозрительное - немедленная ротация: API-ключи всех AI-сервисов, SSH-ключи, токены GitHub/GitLab, credentials из
.env. Не «давайте подождём результатов расследования», а прямо сейчас.
Технические меры
- Мониторинг обращений к .env и SSH-ключам. Алерты в EDR на доступ к
~/.ssh/,~/.env,~/.config/процессами, которые не входят в baseline (IDE, git, ssh-agent). Всё остальное - подозрительно. - Lockfile enforcement.
[URL='https://docs.npmjs.com/cli/v10/commands/npm-ci']npm ci[/URL]вместоnpm installв CI/CD. Strict lockfile policy - любое расхождениеpackage-lock.jsonблокирует pipeline. Без компромиссов. - Sandboxed installation. Новые пакеты и инструменты - только в изолированной среде (контейнер, VM). Смотрите сетевые обращения:
Bash:# Установка пакета в изолированном контейнере с мониторингом сети docker run --rm -it --name sandbox node:20 bash -c \ "tcpdump -w /tmp/traffic.pcap & npm install <package-name> && sleep 5" docker cp sandbox:/tmp/traffic.pcap ./ wireshark traffic.pcap - DNS-мониторинг. Фиксируйте DNS-запросы с машин разработчиков. Малварь для разработчиков часто использует DGA или обращения к свежезарегистрированным доменам. Sigma-правила на DNS request к доменам моложе 30 дней - дешёвый и рабочий детект.
Контроль supply chain
- Аудит MCP-серверов.MCP - молодая среда без зрелых механизмов верификации. Каждый MCP-сервер, который ваши разработчики подключают к Claude, Cursor или другому AI-ассистенту, проверяйте на:
- Возраст GitHub-репозитория и аккаунта автора
- Наличие обфусцированного кода
- Сетевые обращения в runtime
- Socket.dev / Snyk для мониторинга зависимостей. Прикрутите сканирование зависимостей в CI/CD с обнаружением тайпсквоттинга и подозрительных postinstall-скриптов.
- Private registry. Для критичных проектов - приватный npm/PyPI-registry (Verdaccio, Nexus, Artifactory) с ручным одобрением новых пакетов. Да, это медленнее. Зато потом не придётся объяснять руководству, откуда у атакующих ваши production-ключи.
Что дальше: прогноз по вредоносным AI-инструментам
Атаки на AI-инструменты разработчиков - тренд, который будет только усиливаться. MCP-среда растёт: всё больше AI-ассистентов поддерживают внешние интеграции. Каждая новая интеграция - точка входа.Кампания SmartLoader показала, что атакующие готовы вкладывать месяцы в подготовку инфраструктуры. Фейковые GitHub-аккаунты с историей, накрученные звёзды, клонированные репозитории - всё это убивает эффективность проверки «а сколько у пакета скачиваний». Скачивания можно накрутить. Звёзды можно накрутить. Доверие - нельзя.
Для security-инженеров это означает defense in depth: от мониторинга DNS на рабочих станциях до обязательного code review внешних зависимостей и sandboxed-установки новых инструментов. Кража данных разработчиков через supply chain - из тех угроз, где превентивные меры критически важнее реактивных. К моменту, когда инфостилер отработал и отправил
.env на C2, ваши API-ключи уже на продажу выставлены. Подробнее о том, как выстроить безопасность на всех этапах ML-разработки, - в отдельном материале.Проверьте свою инфраструктуру по чек-листу выше. Раскатите детект-правила. И в следующий раз, когда увидите в Google рекламу «Download Cursor AI Free» - сделайте скриншот и отправьте в ИБ-отдел. А лучше - сразу report abuse в Google Ads.
Последнее редактирование: