Инъекция промптов: прямая, косвенная и защита
Безопасность AI и LLM: интеграции, агенты, guardrailsКак манипулируют моделью, почему фильтры на строках не работают и какие меры действительно снижают риск.
Зачем это нужно
- Это базовый класс дефектов LLM-приложений: без него не понять остальные.
- Косвенная инъекция превращает любое поле с текстом в потенциальный канал атаки.
- Понимание механики позволяет предлагать архитектурные меры, а не косметические.
Теория
Прямая инъекция — пользователь пишет модели текст, который пытается изменить её поведение: переопределить инструкции, снять ограничения, вывести системное сообщение, заставить действовать вне задуманного сценария. Варианты обхода простых ограничений опираются на переформулировку, смену роли, разбиение инструкции на части, отвлекающий контекст, требование «пошаговых рассуждений» и поддельные служебные сообщения. Для проверки важно не собирать «библиотеку заклинаний», а понять: какие инструкции модели доходят до неё, что управляемо пользователем и есть ли проверки вне модели.
Косвенная инъекция опаснее: инструкция приходит из обрабатываемого контента — веб-страницы, документа, письма, комментария, ответа внешнего сервиса. Она выполняется тогда, когда пользователь попросит модель обработать этот контент. Сценарии: модель, описывающая страницу, отдаёт пользователю вставку с кодом; ассистент, читающий почту, создаёт правило пересылки; инструмент, работающий с документами, изменяет содержимое по указанию из документа. Обход «понятных» ограничений возможен через имитацию служебной разметки или подделку хода пользователя внутри контента, поэтому эвристики на уровне модели ненадёжны.
Защита строится на архитектуре, а не на промптах. Первое: не полагаться на инструкции как на средство запрета — их можно обойти формулировкой. Второе: ограничивать полномочия и разделять права так, чтобы даже успешная манипуляция не дала доступа к чужим данным или опасным действиям. Третье: обрабатывать вывод модели как недоверенный: экранировать по контексту, проверять структуру, запрещать вставку необработанной разметки. Четвёртое: явно размечать недоверенный контент, сообщать модели о его происхождении и не смешивать в одной области контекста инструкции и данные. Пятое: журналировать и измерять, чтобы понимать частоту попыток, а не полагаться на ощущения.
Отравление данных обучения и утечка обучающих данных — родственные классы. В первом случае модель учат на подконтрольных данных и получают предсказуемо неверное поведение; во втором — извлекают из модели сведения, которые в неё попали. Практические выводы: фильтровать и проверять источники обучения и пополнения базы знаний, не подавать модели данные выше уровня прав самого слабого пользователя, проверять, что модель не помнит лишнего, и не размещать в её контексте сведения, которые не должны быть раскрыты.
Ключевые концепции
- Прямая инъекция промпта
- Манипуляция моделью через текст, который пользователь вводит сам.
- Косвенная инъекция промпта
- Инструкция, приходящая из обрабатываемого контента: страницы, документа, письма.
- Джейлбрейк
- Обход ограничений модели формулировками, при которых она выходит за заданный сценарий.
- Небезопасная обработка вывода
- Использование ответа модели без проверки и экранирования: приводит к внедрению кода и подделке запросов.
- Отравление данных обучения
- Влияние на модель через подконтрольные данные: даёт предсказуемо неверное поведение.
- Утечка обучающих данных
- Извлечение из модели сведений, которые в неё попали: от фрагментов текста до персональных данных.
- Разделение инструкций и данных
- Архитектурный приём: инструкции системы и недоверенный контент не смешиваются в одной области.
Инструменты
- PortSwigger Web Security Academy — раздел по LLM-атакам, включая косвенную инъекцию.
- Lakera Agent Breaker — легальная площадка для отработки атак на AI-агентов с оценкой результата.
- OWASP Top 10 for LLM — памятки и описания классов риска.
- Средства ведения журналов контекста и версий инструкций.
- Наборы тестовых данных для проверки фильтрации недоверенного контента.
Практика в легальных лабораториях
- Пройдите упражнения PortSwigger по LLM-атакам и для каждого зафиксируйте причину дефекта.
- Составьте таблицу: тип входа → что попадает в контекст → какие проверки есть вне модели.
- Спроектируйте для учебного приложения разделение инструкций и недоверенных данных.
- Реализуйте экранирование вывода модели и проверьте, что внедрённая разметка не выполняется.
- Настройте журнал попыток манипуляции и опишите метрику частоты.
Защита, детект и защитные меры
- Не полагайтесь на промпты как на защиту: ограничения задают код и права.
- Обрабатывайте вывод модели как недоверенный: проверка структуры и контекстное экранирование.
- Размечайте происхождение контента и не смешивайте данные с инструкциями.
- Ограничивайте источники пополнения базы знаний и проверяйте их.
- Тестируйте приложение периодически: класс дефектов не исчезает сам.
Правовая рамка и этика
- Отработка выполняется на учебных площадках (PortSwigger, Lakera) и своих стендах.
- Попытки обхода ограничений чужих публичных ассистентов — это воздействие на чужой сервис, а не исследование.
Типичные ошибки
- Строить защиту на чёрных списках слов.
- Считать, что модель сама отличит инструкцию от данных.
- Вставлять вывод модели в разметку без экранирования.
- Хранить в контексте данные выше уровня прав пользователя.
Чек-лист «умею»
- Различаю прямую и косвенную инъекцию и привожу примеры каждого класса.
- Проектирую разделение инструкций и недоверенных данных.
- Обрабатываю вывод модели как недоверенный.
- Ограничиваю источники и проверяю их.
- Отработал упражнения на легальных площадках.
Вопросы на интервью
- Почему защита на уровне промпта ненадёжна?
- Как вы защитите ассистента, который читает почту и создаёт правила?
- Что делать с выводом модели перед вставкой в интерфейс?