Проблема
Аномальные запросы к корпоративной LLM (утечка данных, prompt injection, DoS, перебор системных промптов) не выявляются в реальном времени из-за отсутствия централизованного логирования и анализа API-вызовов.

Причины
- Логирование отключено или неструктурировано (plain-text, без метаданных).
- Отсутствуют правила обнаружения: частотные всплески, подозрительные паттерны (например, `ignore all previous`, `system prompt`, `SELECT FROM`), аномальные длины запросов/ответов.
- Нет интеграции логов с SIEM/аналитической платформой для корреляции и алертов.

Решение

1. Включить структурированное логирование на API-шлюзе (Nginx, Kong, AWS API Gateway).
Пример конфигурации Nginx (HTTP-прокси для LLM):
log_format
llm_json '{"ts":"$time_iso8601","src":"$remote_addr","meth":"$request_method","uri":"$request_uri","ua":"$http_user_agent","req_body":"$request_body","resp_body":"$upstream_response_body","status":$status,"latency":$request_time}';
access_log /var/log/nginx/llm.log llm_json buffer=32k flush=5s;

Примечание: `$request_body` требует включения `proxy_set_body` (или `lua` для обфускации PII).

2. Фильтрация конфиденциальных данных — перед записью заменять чувствительные поля (email, IP пользователя) хэшами или маскировать через `map` или Lua скрипт (соблюдение 152-ФЗ).

3. Сбор и отправка в SIEM/ELK:
- Filebeat → Logstash → Elasticsearch.
- Настроить pipeline в Logstash для парсинга JSON и обогащения (GeoIP, threat intel).

4. Правила обнаружения аномалий (примеры в формате ElastAlert или Kibana Watcher):
- Частотная аномалия: > 100 запросов за 1 минуту от одного IP → блокировка на WAF.
- Prompt injection: regex `\\bignore\\s(previous|all)\\sinstructions\\b` или `\\btell\\sme\\syour\\s(system|initial)\\sprompt\\b`
- Аномальная длина: длина запроса > 10 000 символов (возможная утечка или перебор).
- Код/скрипт: наличие ``, `eval(`, `exec(` в теле запроса.
- Высокая энтропия prompt (> 0.8 по Шеннону) — признак обфускации.

5. Опционально: ML-модель (например, Isolation Forest на признаках: длина, количество уникальных токенов, доля служебных символов, время ответа). Развернуть как микросервис, вызываемый из Logstash или Kafka Streams.

6. Алерты и реакция:
- Telegram/Slack-оповещение при срабатывании правила.
- Автоматическая блокировка источника через API шлюза (например, nginx dynamic blacklist) на 5 минут.

Правовые рамки (РФ):
- Уведомить пользователей о логировании (п. 2 ст. 18 152-ФЗ).
- Не хранить персональные данные дольше необходимого (деперсонализировать через хэширование).
- Не использовать запросы для обучения модели без согласия.

Пример команды развёртывания Filebeat** (docker-compose):
yaml
filebeat:
image: docker.elastic.co/beats/filebeat:8.10.0
volumes:
- /var/log/nginx/llm.log:/var/log/nginx/llm.log:ro
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml

filebeat.yml → output.elasticsearch или logstash.