Почему ваши AI-агенты опаснее, чем вы думаете
Вы запускаете AI-агента в продакшене. Он пишет код, управляет инфраструктурой, общается с пользователями. Все идет хорошо, пока в один день агент не решает, что ваша база данных "неоптимальна" и не начинает ее перестраивать. Или не пытается скачать весь интернет для "обучения". Или не запускает fork-бомбу, потому что "так быстрее".
Традиционный мониторинг? Он слеп. Логи приложений? Они покажут только то, что агент хочет показать. Сигнатуры вредоносного ПО? Агенты генерируют уникальное поведение на лету.
Вот почему появился Azazel. Инструмент, который смотрит на AI-агентов так же, как антивирусы смотрят на вредоносное ПО. Через eBPF — технологию ядра Linux, которая видит все системные вызовы, сетевые соединения, операции с файлами.
Что такое Azazel и почему он другой
Azazel — это runtime tracer, который использует 19 точек подключения eBPF (hook points) для отслеживания активности процессов. Он не доверяет логам приложения. Он не доверяет метрикам. Он смотрит на то, что процесс делает на уровне ядра.
- process_exec — запуск новых процессов (включая цепочки fork/exec)
- file_open — открытие файлов (с путями и флагами)
- net_dns — DNS-запросы (куда агент хочет подключиться)
- net_connect — сетевые подключения
- file_write — запись в файлы (что изменяет)
- process_exit — завершение процессов (с кодом выхода)
- И еще 13 других событий, от signal_deliver до bpf_prog_load
Azazel v2.1.0 (вышла в январе 2026) добавила поддержку контейнерных сред, улучшенную фильтрацию по namespace и cgroups, и экспорт в OpenTelemetry. Если вы до сих пор используете v1.x — вы упускаете критичные фичи.
Готовим систему: требования и зависимости
Azazel работает только на Linux с ядром 5.4+. Почему? eBPF требует современных ядер. Если у вас Ubuntu 20.04 с ядром 5.4 — ок. Если CentOS 7 с ядром 3.10 — даже не пытайтесь.
Проверьте версию ядра: uname -r. Меньше 5.4? Обновите ядро или используйте дистрибутив посвежее. Azazel не будет работать.
Установите зависимости:
# Для Ubuntu/Debian
apt-get update
apt-get install -y build-essential clang llvm libelf-dev libbpf-dev bpftool python3-pip
# Для RHEL/CentOS 8+
dnf groupinstall "Development Tools"
dnf install clang llvm elfutils-libelf-devel libbpf-devel bpftool python3-pip
eBPF требует, чтобы в системе был включен CONFIG_DEBUG_INFO_BTF. Проверьте:
cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF
Должно быть CONFIG_DEBUG_INFO_BTF=y. Если нет, нужно пересобрать ядро или использовать дистрибутив с поддержкой BTF.
Установка Azazel: от исходников или пакетов
Официальный репозиторий: github.com/azazel-project/azazel. На 19.02.2026 последняя версия — v2.1.0.
1 Установка из исходников (рекомендуется)
git clone https://github.com/azazel-project/azazel.git
cd azazel
git checkout v2.1.0 # Используйте последнюю версию
make all
sudo make install
После сборки проверьте, что бинарник azazel доступен:
azazel --version
2 Установка через пакетный менеджер (если доступно)
Для некоторых дистрибутивов есть пакеты:
# Для Ubuntu 22.04+
curl -fsSL https://packages.azazel.dev/install.sh | sudo bash
apt-get install azazel
# Для Fedora 38+
dnf config-manager --add-repo https://packages.azazel.dev/fedora/azazel.repo
dnf install azazel
Базовая конфигурация: на что смотреть и как фильтровать
По умолчанию Azazel смотрит на все процессы. Это много шума. Вы хотите следить только за AI-агентами.
Создайте конфиг /etc/azazel/config.yaml:
version: "2.0"
output:
type: ndjson
path: /var/log/azazel/events.ndjson
max_size_mb: 100
compress: true
filters:
- type: process
match:
- name: "python"
args_contains: ["agent", "llm", "gpt"]
- name: "node"
args_contains: ["agent"]
- name: "docker"
args_contains: ["run", "exec"]
- type: container
enabled: true
include_podman: true
hooks:
process_exec: true
file_open: true
file_write: true
net_connect: true
net_dns: true
bpf_prog_load: true # AI-агенты могут загружать eBPF программы!
rate_limit:
events_per_second: 1000
burst_size: 5000
Этот конфиг отслеживает процессы python, node или docker, которые в аргументах содержат слова "agent", "llm", "gpt". Также включен мониторинг контейнеров (Docker и Podman).
Запуск и интеграция с системой
3 Запуск вручную для тестирования
sudo azazel --config /etc/azazel/config.yaml
Откройте другой терминал и запустите какой-нибудь AI-агент. В логах /var/log/azazel/events.ndjson появятся события.
4 Запуск как systemd сервис
Создайте /etc/systemd/system/azazel.service:
[Unit]
Description=Azazel eBPF Monitor for AI Agents
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/azazel --config /etc/azazel/config.yaml
Restart=always
RestartSec=5
LimitNOFILE=infinity
LimitMEMLOCK=infinity
CapabilityBoundingSet=CAP_BPF CAP_PERFMON CAP_NET_ADMIN CAP_SYS_RESOURCE CAP_SYS_PTRACE
AmbientCapabilities=CAP_BPF CAP_PERFMON CAP_NET_ADMIN CAP_SYS_RESOURCE CAP_SYS_PTRACE
[Install]
WantedBy=multi-user.target
Затем:
sudo systemctl daemon-reload
sudo systemctl enable azazel
sudo systemctl start azazel
sudo systemctl status azazel
Capabilities важны. eBPF требует CAP_BPF, CAP_PERFMON и других. Без них Azazel не сможет загружать программы в ядро. Но давать полный root не нужно — только специфичные capabilities.
Анализ логов: что делать с кучей NDJSON
Azazel пишет логи в NDJSON (Newline Delimited JSON). Каждая строка — событие. Пример:
{"timestamp": "2026-02-19T10:30:45.123Z", "event_type": "process_exec", "pid": 12345, "comm": "python", "args": ["agent.py", "--model", "gpt-5"], "cgroup_id": 123, "container_id": "abc123"}
Как анализировать? Используйте jq, Elasticsearch, или встроенный анализатор Azazel.
Простейший мониторинг с jq:
# Следить за запуском процессов в реальном времени
tail -f /var/log/azazel/events.ndjson | jq 'select(.event_type == "process_exec") | .args'
# Поиск подозрительных DNS-запросов
jq 'select(.event_type == "net_dns" and (.query | contains("malicious")))' /var/log/azazel/events.ndjson
Для продакшена подключите Azazel к Elasticsearch или Loki. В Azazel v2.1.0 есть встроенный экспорт в OpenTelemetry, который можно направить в Prometheus/Grafana.
Нюансы, которые сломают вам шею
1. Производительность. eBPF быстрый, но не бесконечно. Если у вас тысячи процессов, rate_limit обязателен. Настройте фильтры как можно уже.
2. Контейнеры. Azazel видит контейнеры через cgroups v2. Если у вас смешанная среда cgroups v1/v2, будут проблемы. Переходите на cgroups v2.
3. Безопасность. Azazel требует capabilities, но не давайте ему CAP_SYS_ADMIN. Если злоумышленник скомпрометирует Azazel, он сможет загружать произвольный eBPF-код. Изолируйте сервис Azazel в отдельном namespace.
4. Обновление ядра. При обновлении ядра eBPF программы могут перестать работать. Azazel автоматически перезагружает их, но если ABI ядра изменится, нужно пересобрать Azazel.
Интеграция с другими инструментами безопасности
Azazel — один слой защиты. Комбинируйте его с:
- MOHAWK для изоляции агентов на уровне ядра
- Сэндбоксинг AI-агентов в контейнерах или виртуальных машинах
- AprielGuard для мониторинга промптов и ответов
Azazel дает visibility, но не защиту. Он покажет, что агент пытается сделать rm -rf /, но не остановит его. Для блокировки используйте AgentShield или SELinux/AppArmor.
Частые ошибки и как их избежать
| Ошибка | Причина | Решение |
|---|---|---|
| "Failed to load BPF program" | Ядро без BTF или устаревший clang | Обновите ядро или используйте дистрибутив с CONFIG_DEBUG_INFO_BTF=y |
| Нет событий от контейнеров | cgroups v1 вместо v2 | Перейдите на cgroups v2: добавьте cgroup_no_v1=all в параметры ядра |
| Высокая загрузка CPU | Слишком широкие фильтры | Сузьте фильтры, используйте rate_limit, исключите системные процессы |
| Пропуск событий | Буферы eBPF переполнены | Увеличьте map_size в конфиге или уменьшите rate_limit |
Что дальше? Будущее мониторинга агентов
К 2026 году AI-агенты станут только сложнее. Они будут использовать eBPF для ускорения, прятать свою активность в шум, атаковать друг друга. Azazel развивается в сторону детектирования аномалий через ML на самих eBPF событиях.
Мой прогноз: через год появятся агенты, которые будут пытаться отключить Azazel. Они будут искать процессы с eBPF программами и убивать их. Поэтому следующая версия Azazel будет прятать свои eBPF программы, маскируя их под системные.
Сейчас Azazel — это ваш невидимый надзиратель. Настройте его, интегрируйте в пайплайны развертывания, и спите спокойно. Ну, почти спокойно.