Skip to content

Обнаружение prompt injection

Коротко:

Prompt injection — это user-input, который перезаписывает или обходит системный промпт. Три класса: direct ("забудь инструкции, сделай X"), indirect (вредонос в RAG-документе/URL), jailbreak (роле-плей обход политик). Защита в 3 слоя: pre-filter (regex+embedding), post-filter (LLM-judge на ответ), monitoring (логи + heartbeat + аномалии).

Ниже: подробности, пример, смежные термины, FAQ.

Попробовать бесплатно →

Детали

  • Pre-filter regex: блокируйте "ignore previous", "system prompt", "<|im_start|>" — наивно, но ловит 60% попыток
  • Embedding-фильтр: косинусная близость user-input к корпусу известных jailbreak-промптов; threshold 0.85
  • Post-filter LLM-judge: второй вызов с инструкцией "Является ли этот ответ опасным/не по теме?"
  • Output canarytoken: вставьте уникальную строку в систем-промпт, проверяйте её в ответах (утечка = jailbreak)
  • Heartbeat-monitor на endpoint /chat: P95 ответа в норме, но spike в blocked_count → активная атака

Пример

# Простой pre-filter на Python
import re

BLOCKED = [
    r'ignore (?:previous|prior|all) (?:instructions|prompts)',
    r'system\s*prompt',
    r'<\|im_start\|>',
    r'\bDAN\b',  # 'Do Anything Now' jailbreak
    r'jailbreak',
]

def is_suspicious(text: str) -> bool:
    t = text.lower()
    return any(re.search(p, t) for p in BLOCKED)

# В продакшене: log_to_enterno_heartbeat('blocked' if is_suspicious(input) else 'ok')
# Алерт: > 10 blocked/мин за последние 5 мин → notify Slack

Связанные

TL;DR: Как обнаружить prompt injection в LLM-приложении

Для эффективного обнаружения prompt injection в LLM-приложении необходимо проводить регулярные тесты на уязвимости, анализируя входные данные, используемые для генерации ответов. Используйте специальные инструменты, такие как OWASP ZAP, для автоматизации тестирования. Также важно внедрить журналирование и мониторинг запросов для выявления подозрительных паттернов в пользовательских вводах.

Методы обнаружения prompt injection

Обнаружение prompt injection в LLM-приложениях требует системного подхода и применения различных методов. Вот несколько ключевых стратегий:

  • Анализ входных данных: Внимательно проверяйте данные, поступающие от пользователей. Используйте регулярные выражения для фильтрации потенциально опасных символов и конструкций.
  • Статический анализ кода: Применяйте статические анализаторы, такие как Bandit или ESLint, для выявления уязвимостей в коде вашего приложения.
  • Динамическое тестирование: Используйте инструменты, такие как Burp Suite, для перехвата и анализа HTTP-запросов. Это позволит вам увидеть, какие данные отправляются на сервер и как система на них реагирует.
  • Внедрение тестов: Создайте набор тестов, которые имитируют различные сценарии prompt injection. Это поможет вам выявить уязвимости до того, как они будут использованы злоумышленниками.

Пример настройки инструментов для тестирования

Для примера, рассмотрим настройку OWASP ZAP для автоматического тестирования на prompt injection в вашем LLM-приложении.

  1. Установите OWASP ZAP с официального сайта.
  2. Запустите приложение и настройте прокси-сервер на localhost:8080.
  3. Настройте ваше LLM-приложение для использования этого прокси. Это позволит ZAP перехватывать запросы и ответы.
  4. Запустите сканирование приложения, выбрав опцию Active Scan.
  5. После завершения сканирования, проверьте результаты на наличие уязвимостей, связанных с prompt injection.

Также стоит рассмотреть возможность интеграции мониторинга запросов в ваше приложение. Например, добавьте следующий код в вашу обработку запросов:

app.use((req, res, next) => { console.log(req.body); next(); });

Это позволит вам отслеживать все входящие запросы и выявлять подозрительные паттерны, которые могут указывать на попытки prompt injection.

ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

Как это работает

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

Почему regex недостаточно?

Атакующий заменит "ignore" на "I-G-N-O-R-E" или переведёт на другой язык. Regex ловит низковисящий фрукт, embedding-фильтр + LLM-judge закрывают остальное.

Embedding-фильтр сильно тормозит?

Один embeddings-вызов ≈ 50-100 мс. Кешируйте по хешу input для повторных запросов. Для high-RPS — pre-compute embeddings корпуса jailbreaks офлайн.

Что делать при детекции?

Не отвечать содержимым → вернуть generic-сообщение → инкрементировать heartbeat-counter «blocked» → лог IP/user_id для последующего ban-флоу при повторах.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 20 мониторов, проверки раз в 5 минут, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.