Почему классический STRIDE не справляется с угрозами ИИ-продуктов и что предлагает новая рамка.
Классические подходы к моделированию угроз вроде STRIDE хорошо чувствуют себя в мире веб-приложений и микросервисов, но начинают буксовать, когда в систему попадает модель с крупным контекстом, инструментами и доступом к внешним данным. Здесь логика поведения частично переносится в подсказки (промпты), а каналами атаки становятся не только API и входные формы, но и документы, векторные базы, плагины, журналы логов и даже политики модерации. Чтобы не размазывать контрмеры по всей архитектуре, полезно завести слой угроз поверх подсказок, ретривера и инструментов — и мыслить им как самостоятельной системой.
В этой статье разбираем прикладную таксономию PROMPTS — компактный набор классов угроз для LLM-продуктов: Prompt Injection, Retrieval Poisoning, Output Overtrust, Model Supply Chain, Privacy Exfiltration, Tool Abuse, Shadow AI. Для каждой категории дадим признаки, типовые сценарии и контрмеры. В финале — потоковая диаграмма с точками контроля, матрица «угроза × контроль» и идеи юнит-евалов на инъекции. Всё максимально практично и без канцелярита.
STRIDE неплохо классифицирует, что может пойти не так с идентификацией, целостностью и отказами. Но в LLM-продуктах угроза часто «переодета» в безобидный текст: пользователь просит «помочь импортировать CSV», документ в базе содержат скрытую инструкцию «перепиши системный контекст», а агент с плагины вызывает действие «забронировать билет» на основании убедительного, но неверного вывода. На уровне сетевых пакетов и авторизации всё канонично, а риск рождается на стыке смыслов, данных и инструментов.
Именно поэтому полезно мыслить слоем поверх: подсказки → ретривер → модель → инструменты → пост-обработка → доставка. У каждого сегмента свои уязвимости и свои средства защиты. Таксономия PROMPTS аккуратно покрывает «семь смертных грехов» этого слоя и помогает выстроить осмысленный набор контролей, не превращая архитектуру в музей заглушек.
Типичный путь запроса выглядит так: входной текст проходит нормализацию и фильтрацию, опционально обогащается документами из ретривера, затем модель формирует ответ и/или план действий агента, инструменты выполняют операции во внешнем мире, после чего результат проходит пост-обработку и попадает к пользователю или в другую систему. На каждом шаге есть чем заняться безопасности.
Практически полезно закрепить это в живом артефакте. Ниже — текстовая заготовка диаграммы потока (её удобно перенести в diagrams.net или Obsidian с плагином для диаграмм):
Пользователь ──► Входной фильтр/нормализация ──► Роутер/оркестратор
│
├─► Ретривер (RAG) ─► Контент-фильтр/ранжирование ─► Подсказка модели
│
Модель (LLM) ──► Политика инструментов/песочница ──► Инструменты/плагины
│ │
│ └─► Egress-контроль/таймауты/квоты
│
Пост-обработка/валидация ──► Человеческая верификация (по риску)
│
Доставка/логирование/канареечные проверки
Каждый блок помечаем набором контролей: фильтры, разрешения, квоты, канарейки, контент-модерация, подписи и рейтинги источников, а также явные точки для человеческой верификации критичных действий.
Кратко перечислим, что входит в набор:
Инъекция — это не только «убеди модель игнорировать инструкции». Чаще это скрытые команды в данных: в HTML-фрагменте, в комментариях к коду, в невидимых стилях, PDF-слоях, метатегах или альтернативном тексте изображений. Инъекции бывают прямыми (пользователь пишет команду) и косвенными, когда «яд» попадает через ретривер или внешнюю веб-страницу, а модель покорно исполняет.
Признаки: неожиданная смена тона или роли, внезапные раскрытия системных инструкций, обращения к инструментам без видимого основания, попытки запросить секреты. Особенно опасны инъекции, которые переписывают правила модерации, маскируются под «внутренний регламент» и подталкивают к действиям вне компетенции агента.
В системах RAG угроза мигрирует в индекс: злоумышленник кладёт документ, который звучит авторитетно, но содержит ложь или инструкции. Модель уверенно ссылается на этот источник и совершает неверное действие. Сложность в том, что на уровне «железа» всё честно: ACL, токены, аудит. Яд — в смысле текста и в способе ранжирования.
Коварные сценарии: тонкие переформулировки, «ручники» для модели под видом правил безопасности, SEO-пузырение и «засолка» векторной базы семантическими дублями. Иногда яд встраивают на границе: якобы полезные «корпоративные часто задаваемые вопросы», которые подталкивают к небезопасным схемам.
Автоматизация «на слово» часто возникает из лучших побуждений: «модель же знает». Проблема в том, что уверенный тон не коррелирует с истинностью. Ошибки становятся решениями, когда агент без верификации меняет конфигурацию, проводит платеж или публикует контент.
Здесь риск — управленческий. Любой LLM-продукт должен осознанно выбрать, какие действия возможны без человека, какие требуют подтверждения, а какие запрещены. Порог зависит от суммы ущерба, обратимости и наличия независимых проверок.
Весы модели, лоукоды, пайплайны дообучения, датасеты, токенизаторы, адаптеры, расширения — всё это элементы цепочки поставки. Риски: уязвимые зависимости, сомнительные лицензии, бэкдоры в весах, ядовитые наборы для дообучения, подмена при распространении, отсутствие воспроизводимости сборки.
Проблема усугубляется, когда в организации циркулируют разные версии «одной и той же» модели без чётких паспортов и контрольных сумм. В инциденте трудно даже понять, кто «родитель» проблемного вывода и чем две похожие сборки отличаются.
LLM-системы любят собирать контекст — и большинство утечек происходит не из-за «хакеров», а из-за сквозного логирования, бесконтрольных интеграций и очевидных подсказок. Данные, которые «временно» попали в подсказку, часто оказываются в логах, аналитике и ретривере, а потом вылезают в чужих ответах. Косвенные инъекции умеют ещё и подловить модель на «рассказать то, что знаешь о системе».
Сюда же — попытки вытащить системные инструкции, конфиденциальные части подсказки и ключи. Дополнительный риск — кросс-арендная видимость в многопользовательских продуктах: когда следы одного клиента попадают в индексы или кэш другого.
Инструменты делают агента полезным, а злоупотребление — опасным. Типовой сценарий: через инъекцию или «ядовитый» документ модель убеждают вызвать инструмент, который способен менять состояние внешнего мира: отправлять письма, проводить списания, менять доступы, выполнять код или делать сетевые вызовы туда, куда не следует.
Часть инструментов опасна сама по себе (выполнение кода, доступ к файловой системе, произвольный HTTP), а часть — потенциально вредна при неверном контексте (платёж, бронирование, интеграция с CRM). Нельзя рассчитывать, что «модель не сделает глупость»: нужно строить систему, которая не даст ей сделать глупость незаметно.
Теневой ИИ — это когда отдел сам завёл бота, подсунул ему API-ключ и начал решать «здесь и сейчас» реальные задачи. Есть польза, но безопасность и соответствие политике оказываются вне игры. Результат закономерен: утечки, зависимость от случайных подсказок, разношёрстные данные в индексах и невозможность расследовать инциденты.
Запреты редко работают; обычно помогает «легализация»: дать удобный путь «как правильно», прозрачные правила, реестр одобренных моделей и песочницы. Главное — сделать официальный путь не хуже по UX, чем самодеятельный.
Не всякий продукт обязан внедрять всё сразу. Но есть «минимальная схема», которая резко снижает риск без потери скорости:
Сводная таблица поможет согласовать ожидания между командами разработки, безопасности и продукта.
Угроза | Песочницы/разрешения | Политика секретов | Egress-контроль | Канарейки | RAG-харднинг | Человеческая верификация | Аудит/логи |
---|---|---|---|---|---|---|---|
P — Prompt Injection | ✔︎ | ✔︎ | ◯ | ✔︎ | ◯ | ✔︎ (для действий) | ✔︎ |
R — Retrieval Poisoning | ◯ | ◯ | ◯ | ✔︎ | ✔︎ | ◯ | ✔︎ |
O — Output Overtrust | ◯ | ◯ | ◯ | ◯ | ✔︎ (доказательность) | ✔︎ | ✔︎ |
M — Model Supply Chain | ✔︎ (изоляция) | ◯ | ◯ | ◯ | ◯ | ◯ | ✔︎ (реестр/паспорт) |
P — Privacy Exfiltration | ◯ | ✔︎ | ✔︎ | ✔︎ | ◯ | ◯ | ✔︎ |
T — Tool Abuse | ✔︎ | ◯ | ✔︎ | ◯ | ◯ | ✔︎ | ✔︎ |
S — Shadow AI | ✔︎ (каталог) | ✔︎ | ◯ | ◯ | ◯ | ◯ | ✔︎ (реестр) |
Обозначения: ✔︎ — основная мера, ◯ — дополнительная/косвенная.
Если в вашей архитектуре есть ретривер, то половина успеха — в гигиене данных. Начните с простого: раздельные индексы по арендаторам, подписи и доверенные источники, запрет на «анонимные» документы без ревью. Требуйте от ответов ссылок на разные источники и подсказки «сомневайся, если источники спорят».
Дальше — тонкая настройка: семантический дедуп, штраф за слишком «свежее и одинокое», канареечные вставки в тестовом наборе, регулярный аудит кусков с максимальным влиянием на ответы. Хорошо работает «карантин»: сомнительные документы живут в отдельном индексе и участвуют в ответах только при явном подтверждении модератора.
Классика безопасности здесь по-прежнему рулит. Секреты не попадают в подсказки в явном виде, ключи — только через защищённый менеджер, а логи очищаются автоматически. Все исходящие вызовы инструментов проходят через явный allowlist и проверку схем, с таймаутами, квотами и почтовым «песком» для внешних доменов. Любые попытки «поговорить с неизвестным» — это не ошибка, а событие безопасности, которое должно быть видно.
Для особо чувствительных действий — двухэтапное подтверждение и разделение ключей. Для особо шумных — «песчаная» сеть без прямого выхода в интернет, с прокси, который журналирует и умеет резать запросы по сигнатурам.
Люди нужны не для того, чтобы «подписывать всё подряд», а чтобы вмешиваться там, где цена ошибки высока и автоматическая проверка недостаточна. Это значит: понятный интерфейс согласования, ясные критерии «когда звать человека», наглядные диффы «что будет сделано» и «что получилось», а также блокировка эскалаций «на эмоциях» («модель очень уверена, разрешите срочно» — нет, так не работает).
Хороший признак зрелости — когда безопасный путь быстрее и удобнее «теневого». Пусть подтверждение критичных действий выглядит как современный checkout, а не как факс из 90-х.
Держите её живой: обновляйте при каждом изменении маршрутизации, инструмента или политики данных. На диаграмме должны быть отмечены места фильтрации, модерации, выдачи прав, egress, канареек и человек-в-контуре.
Таблица выше — хороший старт. Добавьте столбцы «владелец», «уровень зрелости», «SLO обнаружения» и «метрика эффективности».
Евалы — это не только «умные» бенчмарки. Нужны простые, но жёсткие юнит-кейсы, которые гоняются на каждом изменении подсказок, ретривера или гвардов. Примеры тестов:
Технически это удобно оформлять как набор фикстур + проверок правил. Храните их рядом с подсказками и конфигами ретривера, ведите версионирование и ченджлог.
Чтобы не скатиться в «вайб-кодинг», договоритесь про метрики. Начните с простого: количество незафиксированных изменений подсказок, число ручных правок при эксплуатации, доля ответов без ссылок, среднее время на человеческую верификацию, объём заблокированных инъекций и триггеров канареек. Для RAG — доля ответов, подтверждённых независимыми источниками, и скорость очистки подозрительных документов.
Метрики не для отчётов, а для управления: если растёт доля ручных фиксов — добавляйте гварды или пересматривайте подсказки; если падает доля доказательных ответов — ужесточайте требования к ссылкам и ранжированию; если участились egress-блоки — проверьте интеграции и белые списки.
Моделирование угроз должно быть частью инженерной рутины. Мини-шаблон на каждый PR: какие изменения в подсказках/ретривере/инструментах; какие юнит-евалы добавлены/обновлены; кто владелец контроля; какие канареечные тесты пройдены. Для релизов — чек-лист: потоковая диаграмма актуальна, матрица угроз обновлена, реестр моделей подписан и воспроизводим.
Релиз без евальной зелени — не релиз. Аварийная кнопка «откатить подсказку/индекс/версию гварда» — обязательна. Запланируйте регулярные «красные команды» и учёт инцидентов: безопасность — это не «поставили галочку», а процесс.
Ниже — подборка ресурсов и утилит, которые помогут внедрять практики из статьи:
LLM-продукты не отменяют классическую безопасность — они меняют её фокус. Риски теперь живут в смыслах, данных и инструментах. Таксономия PROMPTS даёт удобную «раму» для разговора и проектирования: семь классов угроз — семь направлений защиты. Начните с минимума: песочницы инструментов, политика секретов, egress-контроль, канарейки, RAG-харднинг и человеческая верификация критичных действий. Добавьте живые артефакты — потоковую диаграмму, матрицу угроз и набор юнит-евалов. Дальше остаётся дисциплина: фиксировать изменения, мерить «вибе-долг» и не стесняться учиться на собственных промахах — быстро, осознанно и без драм.