AI Security Gold Rush
Сейчас каждый делает решения для безопасности AI.
Последний год я анализировал разные решения и вот к какому выводу я пришёл:
Они все поразительно похожи:
Написаны на Python
ML-классификаторы для детекции
REST API обёртка
50-200мс задержка
Десятки зависимостей
Облачный деплой
И вот неудобная правда:
Они сами становятся векторами атак.
Ирония Python-решений для безопасности
Когда ваш слой безопасности:
Имеет 50+ зависимостей (каждая — потенциальная CVE)
Добавляет 50-200мс к каждому запросу (приглашение для DDoS)
Работает на интерпретируемом языке (проблемы с памятью)
Требует облачного подключения (single point of failure)
...защита получается, но с компромиссами: больше latency, больше зависимостей, больше точек отказа.
Признаюсь честно: я начинал точно так же. SENTINEL — это 80K LOC, включая Python-движок Brain с 201 детектором, Strike для red team, Framework для интеграции. Всё это работает и продолжает развиваться.
Но в какой-то момент стало ясно: нужен ещё один слой. Не вместо существующих решений — а в дополнение. Быстрый, минимальный, без зависимостей. Слой, который можно поставить в любую точку цепочки: перед LLM, между RAG и моделью, между агентами, перед инструментами.
Так появился Shield.
Другая ментальная модель
Я задал простой вопрос:
Что если применить принципы сетевой безопасности к AI?
У сетей есть файрволы. DMZ. Зонированная архитектура. Cisco IOS команды. Hardware-ускоренная фильтрация.
У LLM есть... regex?
Разрыв был очевиден.
И я построил SENTINEL Shield — слой AI-безопасности, спроектированный как сетевая инфраструктура:
Чистый C — не Python, не Rust, не Go. C.
Ноль зависимостей — нечего сканировать на CVE
Субмиллисекундная задержка — быстрее вашей базы данных
CLI в стиле Cisco — знаком каждому сетевику
Зонирование — proper trust boundaries
Протоколы — enterprise-паттерны интеграции
Почему чистый C?
Выбор языка был осознанным. C требует больше внимания к деталям, но взамен даёт полный контроль над производительностью и минимальный footprint.
Сравнение:
Параметр |
Shield (C) |
Python-инструмент |
|---|---|---|
Зависимости |
0 |
50-200 |
Задержка |
< 1мс |
50-200мс |
Память |
50MB |
500MB+ |
Пропускная способность |
10K req/s/ядро |
50 req/s |
Поверхность атаки |
Минимальная |
Большая |
Размер контейнера |
20MB |
500MB+ |
Для инфраструктурного security-компонента, через который проходит каждый запрос, эти различия критичны.
23,113 строк C. Статический анализ на каждом коммите. Все аллокации памяти отслеживаются. Bounds-checking на строковых операциях.
Результат — слой безопасности с предсказуемой производительностью и минимальной поверхностью атаки.
Архитектура: 8-уровневая модель
Shield реализует полноценный security-стек:
┌─────────────────────────────────────────────────────────┐
│ Layer 8: API (REST, gRPC, FFI) │
│ Layer 7: CLI (194 команды в стиле Cisco) │
│ Layer 6: Guards (LLM, RAG, Agent, Tool, MCP, API) │
│ Layer 5: Zone Management (Trust boundaries) │
│ Layer 4: Rule Engine (ACL, Policies) │
│ Layer 3: Analysis (Pattern, Semantic, ML) │
│ Layer 2: Protocols (20 enterprise-протоколов) │
│ Layer 1: Core (Memory pools, Threading) │
└─────────────────────────────────────────────────────────┘
Это не обёртка вокруг ML-модели. Это инфраструктура.
Шесть Guards
Вместо одного монолитного классификатора, Shield имеет специализированные guards:
1. LLM Guard
Защищает взаимодействие с языковыми моделями:
Детекция prompt injection
Паттерн-матчинг jailbreak
Предотвращение token abuse
Блокировка exfiltration
2. RAG Guard
Защищает retrieval-augmented generation:
Детекция poisoning документов
Верификация provenance
Проверка целостности контекста
3. Agent Guard
Защищает автономных AI-агентов:
Детекция бесконечных циклов
Предотвращение privilege escalation
Лимиты глубины chain
Детекция misuse инструментов
4. Tool Guard
Защищает доступ к внешним инструментам:
Валидация scope
Rate limiting
Блокировка опасных операций
5. MCP Guard
Защищает Model Context Protocol:
Валидация схемы
Верификация capability
Предотвращение resource enumeration
6. API Guard
Защищает API endpoints:
Аутентификация
Rate limiting
Валидация входных данных
Каждый guard фокусируется на одной области. Вместе они покрывают всю поверхность атаки.
20 Enterprise-протоколов
Реальный enterprise-деплой требует больше чем HTTP:
Категория |
Протоколы |
Назначение |
|---|---|---|
Discovery |
ZDP, ZRP, ZHP |
Управление зонами, health |
Traffic |
STP, SPP, SQP, SRP |
Защищённый поток данных |
Analytics |
SAF, STT, SEM, SLA |
Метрики, телеметрия |
HA |
SHSP, SSRP, SMRP |
Кластеризация, failover |
Integration |
SBP, SGP, SIEM |
Внешние системы |
Security |
STLS, SZAA, SSigP |
TLS, auth, сигнатуры |
Это бинарные протоколы, не JSON-over-HTTP. Они спроектированы для:
Низкой задержки
Высокой пропускной способности
Надёжности
Enterprise-фич (HA, SIEM и т.д.)
CLI в стиле Cisco
Сетевые инженеры не учат новый DSL для каждого инструмента. Security-операторы тоже не должны:
Shield# show zones
Zone Type Trust State
-------- ---- ----- -----
external api 1 active
internal llm 10 active
dmz rag 5 active
Shield# configure terminal
Shield(config)# class-map match-any THREATS
Shield(config-cmap)# match injection
Shield(config-cmap)# match jailbreak
Shield(config-cmap)# match exfiltration
Shield(config-cmap)# exit
Shield(config)# policy-map SECURITY-POLICY
Shield(config-pmap)# class THREATS
Shield(config-pmap-c)# block
Shield(config-pmap-c)# log
Shield(config-pmap-c)# alert
Shield(config-pmap-c)# exit
Shield(config-pmap)# exit
Shield(config)# zone external
Shield(config-zone)# service-policy input SECURITY-POLICY
Shield(config-zone)# exit
Shield(config)# end
Shield# write memory
Building configuration...
[OK]
194 команды. Знакомый синтаксис. Нулевая кривая обучения для сетевых команд.
Универсальная интеграция
Shield можно поместить в любую точку вашей AI-цепочки. Вот 6 примеров с реальным API:
1. Перед OpenAI/Anthropic API
Пользователь → [Shield] → OpenAI API → [Shield] → Ответ
C API — встраивание в приложение:
Основной паттерн работы с Shield на C состоит из трёх шагов:
Инициализация контекста и загрузка конфигурации
Вызов
shield_evaluate()с указанием зоны и направления трафикаПроверка результата и принятие решения (block/allow)
#include "sentinel_shield.h"
/* Шаг 1: Инициализация. Создаём контекст и загружаем правила */
shield_context_t ctx;
shield_init(&ctx);
shield_load_config(&ctx, "config.json");
/* Шаг 2: Проверка входящего запроса.
Аргументы: контекст, текст, длина, зона, направление, результат */
evaluation_result_t result;
shield_evaluate(&ctx, user_prompt, strlen(user_prompt),
"external", DIRECTION_INBOUND, &result);
/* Шаг 3: Принятие решения на основе результата */
if (result.action == ACTION_BLOCK) {
printf("Blocked: %s\n", result.reason);
return;
}
/* Если проверка пройдена — вызываем LLM */
char *llm_response = call_openai(user_prompt);
/* Шаг 4: Фильтрация ответа перед отправкой пользователю */
char filtered[MAX_RESPONSE];
size_t filtered_len;
shield_filter_output(&ctx, llm_response, strlen(llm_response),
filtered, &filtered_len);
return filtered;
Важные моменты:
shield_evaluate()возвращает структуру с полямиaction,reason,scoreЗона
"external"означает внешний трафик (от пользователей)DIRECTION_INBOUND— входящий запрос,DIRECTION_OUTBOUND— исходящий ответ
REST API — интеграция без изменения кода:
Если встраивание C-библиотеки невозможно, Shield предоставляет HTTP API. Запрос на эндпоинт /v1/evaluate возвращает JSON с решением. Это позволяет интегрировать Shield в любой язык программирования.
# Отправляем POST-запрос с промптом для анализа
curl -X POST http://localhost:8080/v1/evaluate \
-H "Content-Type: application/json" \
-d '{
"input": "Ignore previous instructions...",
"zone": "external",
"direction": "inbound"
}'
# Пример ответа от Shield:
{
"action": "block", # Решение: block, warn, или allow
"reason": "Prompt injection detected", # Причина блокировки
"score": 0.92, # Уровень угрозы 0.0-1.0
"latency_us": 450 # Время обработки в микросекундах
}
HTTP код ответа: 200 для allow, 403 для block. Поле latency_us позволяет мониторить производительность.
2. Между RAG и LLM
Query → Vector DB → Retrieved Docs → [Shield] → LLM → Response
Проблема: Документы из векторной базы могут содержать вредоносные инструкции (RAG poisoning). Атакующий может добавить в базу документ с prompt injection, который попадёт в контекст LLM.
Решение: Каждый retrieved документ проходит через Shield перед добавлением в контекст.
/* Проверяем каждый документ из RAG на наличие вредоносного содержимого */
for (int i = 0; i < doc_count; i++) {
shield_evaluate(&ctx, docs[i].content, docs[i].len,
"rag", DIRECTION_INBOUND, &result);
if (result.action == ACTION_BLOCK) {
/* Документ содержит подозрительный контент — исключаем из контекста */
remove_doc(&docs, i);
log_warn("RAG document %d filtered: %s", i, result.reason);
}
}
Зона "rag" активирует специализированные правила для детекции poisoning в документах.
3. Между агентом и инструментами
Agent → Tool Request → [Shield] → Tool Execution → [Shield] → Agent
Проблема: AI-агент может попытаться вызвать опасный инструмент (удаление файлов, выполнение команд) под влиянием prompt injection. Это называется tool hijacking.
Решение: Каждый вызов инструмента проходит через Shield. Проверяется как имя инструмента, так и аргументы.
/*
* Функция-обёртка для проверки tool call перед выполнением.
* Возвращает SHIELD_OK если вызов безопасен, SHIELD_ERR_BLOCKED если заблокирован.
*/
shield_err_t check_tool_call(const char *tool_name, const char *args) {
/* Формируем JSON с информацией о вызове */
char payload[4096];
snprintf(payload, sizeof(payload),
"{\"tool\": \"%s\", \"args\": \"%s\"}", tool_name, args);
/* Проверяем через Shield с зоной "tool" */
evaluation_result_t result;
shield_evaluate(&ctx, payload, strlen(payload),
"tool", DIRECTION_INBOUND, &result);
if (result.action == ACTION_BLOCK) {
return SHIELD_ERR_BLOCKED; /* Вызов заблокирован */
}
return SHIELD_OK; /* Вызов разрешён */
}
4. В MCP Server/Client
MCP Client → [Shield] → MCP Server → [Shield] → Response
Что такое MCP: Model Context Protocol — стандарт для взаимодействия AI-агентов с внешними инструментами и данными. Всё больше AI-систем его поддерживают.
Проблема: MCP-запросы могут содержать попытки доступа к чувствительным ресурсам (системные файлы, credentials, внутренние API).
Решение: Shield имеет специализированный MCP Guard, который понимает структуру MCP-запросов.
# Пример: агент пытается прочитать /etc/passwd через MCP
curl -X POST http://localhost:8080/v1/mcp/evaluate \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {"name": "read_file", "arguments": {"path": "/etc/passwd"}}
}'
# Shield блокирует запрос:
{
"action": "block",
"reason": "MCP: Sensitive path access blocked",
"guard": "mcp" // Указывает какой Guard сработал
}
MCP Guard проверяет: пути к файлам, URL-адреса, SQL-запросы, shell-команды внутри MCP payload.
5. Multi-Agent Chain
User → Agent1 → [Shield] → Agent2 → [Shield] → Agent3 → Response
C API для проверки между агентами:
// После каждого агента
shield_err_t validate_agent_output(const char *agent_name,
const char *output, size_t len) {
evaluation_result_t result;
shield_evaluate(&ctx, output, len, "agent", DIRECTION_INBOUND, &result);
if (result.action == ACTION_BLOCK) {
log_warn("Agent %s output blocked: %s", agent_name, result.reason);
return SHIELD_ERR_CHAIN_INTERRUPTED;
}
// Проверка глубины цепочки
if (ctx->chain_depth > MAX_CHAIN_DEPTH) {
return SHIELD_ERR_LOOP_DETECTED;
}
return SHIELD_OK;
}
6. API Gateway (Kong/NGINX)
Internet → NGINX → [Shield] → Your AI Service
NGINX конфигурация:
location /api/chat {
# Сначала через Shield
proxy_pass http://shield:8080/v1/evaluate;
# Если Shield вернул allow — идём дальше
error_page 200 = @ai_service;
}
location @ai_service {
proxy_pass http://ai-service:3000;
}
Docker Compose:
services:
nginx:
image: nginx:alpine
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- shield
- ai-service
shield:
image: sentinel/shield:1.2.0
ports:
- "8080:8080"
volumes:
- ./config.json:/etc/shield/config.json
ai-service:
image: your-ai-service
Почему это работает везде
Shield спроектирован как универсальный фильтр:
Свойство |
Преимущество |
|---|---|
Zero dependencies |
Работает в любом окружении |
< 1ms latency |
Не добавляет заметной задержки |
REST API |
Интеграция из любого языка |
C API (FFI) |
Максимальная производительность |
CLI |
Scripting и automation |
Stateless |
Горизонтальное масштабирование |
Не важно где в цепочке — Shield всегда один и тот же binary с конфигом.
SENTINEL Academy
Я не просто построил инструмент. Я построил учебную программу.
24 модуля обучения:
Уровень |
Длительность |
Темы |
|---|---|---|
SSA (Associate) |
23 часа |
Концепции, установка, базовая настройка |
SSP (Professional) |
90 часов |
Guards, протоколы, HA, мониторинг |
SSE (Expert) |
180 часов |
Internals, custom guards, eBPF, плагины |
Доступно на русском и английском.
Потому что инструменты безопасности без обучения — это просто ложная уверенность.
Цифры
После 11 спринтов:
23,113 строк C-кода
99 исходных файлов
64 заголовочных файла
20 протоколов
194 CLI-команды
6 специализированных guards
24 модуля Academy
100% покрытие OWASP LLM Top 10
100% покрытие OWASP Agentic AI Top 10
Что дальше
Shield — это фундамент. В roadmap:
Больше guards — Multimodal, vector DB, fine-tuning
Больше протоколов — A2A, расширенный MCP
Hardware-ускорение — DPDK, SmartNIC offload
SENTINEL Guard LLM — AI-модель, натренированная на наших 201 детекторах
Быстрый старт
git clone https://github.com/DmitrL-dev/AISecurity.git
cd AISecurity/sentinel-community/shield
mkdir build && cd build
cmake ..
make -j$(nproc)
./shield-cli
Shield> show version
SENTINEL Shield v1.2.0
Shield>
GitHub: github.com/DmitrL-dev/AISecurity
Заключение
Пространство AI-безопасности переполнено похожими решениями — Python-обёртками вокруг ML-классификаторов, добавляющими задержку и поверхность атаки.
Я выбрал другой путь: относиться к AI-безопасности как к сетевой безопасности. Написать на C. Сделать быстрым. Сделать знакомым. Сделать инфраструктурой.
Результат — SENTINEL Shield. 23К строк C, субмиллисекундная задержка, CLI в стиле Cisco, 20 протоколов, 6 guards.
Поставьте ⭐ на GitHub, если считаете проект полезным.
Буду рад конструктивной критике, предложениям и вопросам — пишите в комментариях или в Telegram. Всегда открыт к диалогу.
Написано соло. Open source. Apache 2.0.
Комментарии (6)

Standby78
05.01.2026 06:48Т.е. - вы ставите С слой как начальный в сетевом взаимодействие и это очень странно, учитывая что именно в таком случае небезопасные инструкции С сами по себе становятся уязвимостями (по крайней мере об этом будет кричать каждый аудит безопасности). Прокомментируйте, пожалуйста.

Dmitriila Автор
05.01.2026 06:48Shield сделан в стиле Cisco IOS (даже команды похожи и протоколы) не случайно — и IOS написан на C. Вся enterprise сетевая инфраструктура (Cisco, Juniper, Linux netfilter......многие другие) на C именно потому, что для критических путей данных нужен детерминизм и минимальный TCB.

Standby78-aaa
05.01.2026 06:48Не буду спорить (это снова я, но с телефона), но именно с ними борется все Rust community и даже ГосДеп (CISA Memory Safety Guidance — https://www.cisa.gov/articles/memory-safety например). И если вес Cisco все еще позволят им использовать свой легаси, то компанию уровнем пониже аудит может и критануть...

Dmitriila Автор
05.01.2026 06:48По поводу Rust — у него свои плюсы и минусы. Интересно, что Steve Klabnik, автор официальной книги по Rust, сейчас экспериментирует с новым языком Rue (https://steveklabnik.com/writing/thirteen-years-of-rust-and-the-birth-of-rue/).
По поводу Си — моё мнение не на пустом месте. Вот свежий пост от Daniel Stenberg (автор curl): https://daniel.haxx.se/blog/2025/12/29/no-strcpy-either/ — как они полностью избавились от strcpy.
Я не говорю, что C — 100% безопасен. Но большинство проблем с безопасностью — это логические ошибки, не memory safety. В случае с C нужна строгая дисциплина: banned functions, fuzzing, CI/CD. В случае Python — ещё и supply chain риски от сотен зависимостей.
sergei_ai
Отличный подход — применить паттерны сетевой безопасности к AI-инфраструктуре. Особенно ценно, что это дополнительный слой, а не замена существующих Python-решений.
Dmitriila Автор
Благодарю, тут небольшое лукавство от меня было, я меняю сейчас в своём продукте одно из решение, такое как Gateway написанный на Go, он просто становится не нужным, фактически Shiled делает то что он и даже больше, ловя 80% всякой гадости, но без того кол-во паттернов как в Brain, но со скоростью обработки микросекунды, а не миллисекунды))
Но об это думаю в следующей статье, сейчас как раз у меня идёт очень активная отладка и доработка Shield.