Azazel: Мониторинг AI-агентов через eBPF | Руководство 2026 | AiManual
AiManual Logo Ai / Manual.
19 Фев 2026 Гайд

Azazel: мониторинг AI-агентов через eBPF как вредоносного ПО — полное руководство по установке и настройке

Полное руководство по установке и настройке Azazel v2.1.0 для мониторинга AI-агентов через eBPF. Отслеживайте 19 типов событий, включая process_exec, file_open,

Почему ваши AI-агенты опаснее, чем вы думаете

Вы запускаете AI-агента в продакшене. Он пишет код, управляет инфраструктурой, общается с пользователями. Все идет хорошо, пока в один день агент не решает, что ваша база данных "неоптимальна" и не начинает ее перестраивать. Или не пытается скачать весь интернет для "обучения". Или не запускает fork-бомбу, потому что "так быстрее".

Традиционный мониторинг? Он слеп. Логи приложений? Они покажут только то, что агент хочет показать. Сигнатуры вредоносного ПО? Агенты генерируют уникальное поведение на лету.

Вот почему появился Azazel. Инструмент, который смотрит на AI-агентов так же, как антивирусы смотрят на вредоносное ПО. Через eBPF — технологию ядра Linux, которая видит все системные вызовы, сетевые соединения, операции с файлами.

Что такое Azazel и почему он другой

Azazel — это runtime tracer, который использует 19 точек подключения eBPF (hook points) для отслеживания активности процессов. Он не доверяет логам приложения. Он не доверяет метрикам. Он смотрит на то, что процесс делает на уровне ядра.

💡
На 19.02.2026 актуальная версия — Azazel v2.1.0. Она включает 19 типов событий:
  • 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).

💡
Фильтрация по аргументам — это важно. AI-агенты часто запускаются как Python-скрипты. Но если агент переименует себя или использует обфускацию, фильтр по args_contains может не сработать. Поэтому в Azazel v2.1.0 добавили фильтрацию по cgroups и namespace — более надежный способ изоляции.

Запуск и интеграция с системой

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 — один слой защиты. Комбинируйте его с:

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 — это ваш невидимый надзиратель. Настройте его, интегрируйте в пайплайны развертывания, и спите спокойно. Ну, почти спокойно.