Skip to content

Безопасность·8 мин чтения

SealedRun: журнал аудита ИИ-агентов, где подмена видна

Трейсы агента в вашей собственной базе — это утверждения, а не доказательства: тот, кто управляет хранилищем, может их изменить. SealedRun, open-source рекордер на ранней стадии, подписывает каждый шаг агента в хеш-цепочку, которую посторонний проверит офлайн. Как он работает, что подтверждает и как мы запускаем его для своих агентов.

Анатолий НовогродскийОснователь и CEO, GlanitОпубликовано 7 октября 2026

Зачем ИИ-агенту журнал аудита, если трейсы уже есть?

Трейс и журнал аудита отвечают на разные вопросы. Трейс помогает инженерам понять, что сделал агент, и починить его. Журнал аудита должен убедить того, кто вам не доверяет (службу безопасности клиента, аудитора, регулятора), что запись не меняли задним числом. Трейсы в базе, которой вы управляете сами, этот тест не проходят по построению: у любого с правом записи есть возможность поправить строку, и строка этого не покажет. SealedRun — open-source рекордер, который подписывает каждый шаг агента в хеш-цепочку и позволяет постороннему проверить результат офлайн. Вызовы моделей наших собственных агентов мы пропускаем через него.

Гипотетический случай. Во вторник агент с доступом к CRM отправляет договор не тому человеку, в четверг юрист клиента просит логи. Строки в вашем Postgres и выгрузка из трейсинга оба точны. Доказать это не может ни то, ни другое: обоими хранилищами распоряжается команда, допустившая ошибку.

Подписанная хеш-цепочка закрывает этот разрыв. Каждая запись несёт хеш предыдущей и подпись ключа, делегированного агенту, поэтому удаление или правка одного шага ломает все последующие хеши, а верификатор называет первую запись, которая не прошла проверку.

SealedRun заменяет LangSmith или Langfuse?

Нет. Платформы трейсинга сделаны для отладки, evals, учёта стоимости и задержек, и с этим справляются хорошо. SealedRun хранит меньше деталей, зато делает запись проверяемой третьей стороной. В его README среди входов указаны спаны OpenTelemetry GenAI, так что один инструментированный агент может кормить обе системы. Langfuse распространяется под MIT (кроме папок ee) и разворачивается у себя через Docker Compose (35,5 тыс. звёзд на GitHub на 7 октября 2026), а self-hosting LangSmith доступен как дополнение к плану Enterprise.

Таблицу читайте по четвёртому столбцу: первые две строки — хорошие записи, за которые может поручиться только владелец.

Трейсы, логи и подписанная цепочка рядом

Три вида записей об агентах, сравнение качественное. Бенчмарков производительности здесь нет.
Тип записиНа какой вопрос отвечаетКто может изменить незаметноПроверит ли третья сторонаТипичное применение
Платформа трейсинга (LangSmith, Langfuse)Почему агент так поступил и сколько это стоило?Любой с правом записи в хранилище трейсовНет, придётся верить операторуОтладка, evals, учёт задержек и стоимости
Логи приложенияЧто происходило на наших серверах?Администраторы, root на хосте с логамиНетРазбор инцидентов, алерты
Подписанная хеш-цепочка (SealedRun)Менялась ли эта последовательность шагов после записи?Никто: правка ломает цепочку и подписиДа, офлайн, при условии что ID принципала получен по доверенному каналуДоказательства для клиентов и аудиторов, реконструкция инцидентов
Три вида записей об агентах, сравнение качественное. Бенчмарков производительности здесь нет.

Что EU AI Act требует от логирования и когда

Для ИИ-систем высокого риска статья 12 требует, чтобы система «технически допускала автоматическую запись событий (логов) на протяжении всего жизненного цикла». Логи должны помогать выявлять рискованные ситуации и существенные изменения, а также поддерживать пострыночный мониторинг и мониторинг со стороны эксплуатанта. После Регламента (ЕС) 2026/1744 (Digital Omnibus on AI, опубликован 24 июля 2026, вступил в силу 27 июля) эти обязанности действуют с 2 декабря 2027 для систем из Приложения III и с 2 августа 2028 для ИИ внутри продуктов из Приложения I. Статья 12 формат не задаёт и слова «tamper-proof» не использует.

На многих страницах для статьи 12 всё ещё стоит август 2026. Эта дата уже не действует.

У эксплуатантов есть и обязанность хранения: статья 26(6) требует держать автоматически создаваемые логи под своим контролем не менее шести месяцев, если иное не предусмотрено правом ЕС или национальным правом. Стандарты, которые определят, что такое хорошее логирование, пока в статусе проектов: FprEN ISO/IEC 24970 вошёл в формальное голосование по утверждению 27 августа 2026 (прогноз публикации — 24 января 2027), а prEN 18229-1 ожидается 30 мая 2027.

Статья 50 — отдельная тема, и она уже действует. Обязанности прозрачности (сообщать людям, что они говорят с ИИ, маркировать дипфейки и синтетический контент) применяются с 2 августа 2026, а Еврокомиссия 20 июля 2026 приняла руководство по статье 50. Omnibus добавил один узкий переходный период: провайдеры генеративных систем, выведенных на рынок до 2 августа 2026, должны обеспечить машиночитаемую маркировку по статье 50(2) до 2 декабря 2026. Нарушения могут стоить до 15 млн евро или 3% мирового оборота (статья 99(4)). Журнал аудита требования статьи 50 не закрывает; максимум он покажет, представлялся ли агент как ИИ.

Большинство агентов не относятся к высокому риску. Класс определяется сценарием применения, а перечень Приложения III конкретен: трудоустройство, образование, доступ к базовым услугам, критическая инфраструктура, правоприменение и ещё несколько областей. Бот поддержки, отвечающий на вопросы о доставке, в него не входит; агент, отбирающий резюме соискателей, входит.

Что такое SealedRun?

SealedRun описывает себя так: «Every step your AI agent takes, sealed in real time» (каждый шаг ИИ-агента запечатывается в реальном времени). Он записывает вызовы моделей, вызовы инструментов MCP, обращения к памяти, решения политик и человеческие согласования в виде подписанных записей. Поставляется как пакет Python (pip install sealedrun), пакет TypeScript (@sealedrun/core, его верификатор работает и в браузере) и образ Docker с рекордером и интерфейсом Inspector. Код и схемы — Apache-2.0; тексты спецификации (SPEC.md, TRUST.md) — CC-BY-4.0, контрибьюторы подписывают CLA.

Проект молодой и сам об этом говорит. В README написано «Status: early development». По журналу изменений версия 0.1.0 появилась 17 сентября 2026, первый публичный релиз 0.1.1 — 21 сентября. Живой LLM-прокси (форматы OpenAI, Anthropic, Ollama и Gemini) пришёл в 0.2.0, якорение плюс каналы MCP, A2A и OTLP — в 0.3.0, а 0.4.1 вышла 6 октября. Семь релизов за 19 дней. На странице о безопасности прямо сказано, что независимой проверки криптографического дизайна третьей стороной пока не было. Ещё один признак возраста: на главной живая запись всё ещё названа «in development», хотя в журнале изменений она значится выпущенной в 0.2.0.

Сайт заявляет совместимость формата с MCP SEP-3004 и черновиками IETF по аудиту агентов. Оба документа пока предложения: SEP-3004 закрыт без слияния, а draft-sharif-agent-audit-trail-06 (29 сентября 2026) — индивидуальная заявка без формального статуса в IETF.

Как SealedRun устроен, шаг за шагом

Спецификация (v0.1.0-draft) описывает семь частей:

  1. Делегирование. Принципал, то есть организация, отвечающая за агента, подписывает заявление, которое разрешает набору ключей агента действовать в заданной области и в окне срока действия.
  2. Запись. Каждый шаг становится одной записью с полями kind, actor, target, дайджесты данных, data_labels, outcome, необязательное решение policy, prev_hash и hash.
  3. Цепочка. hash — это SHA-256 от канонического JSON записи по RFC 8785 без полей hash и подписей. prev_hash указывает на запись с seq − 1; при seq 0 это одни нули.
  4. Гибридная подпись. Каждая запись подписывается Ed25519 и ML-DSA-65 (постквантовая схема FIPS 204), верификатор требует обе.
  5. Якорь. Рекордерам следует якорить голову цепочки не реже чем раз в 10 минут во время запуска и обязательно на run_end, в службу меток времени RFC 3161 или Sigstore Rekor. По умолчанию якорение выключено. Недоступный свидетель запуск никогда не блокирует (документация).
  6. Бандл. Экспорт даёт ZIP с подписанным manifest.json, делегированиями, runs/<run_id>.jsonl и, по желанию, данными и квитанциями якорей.
  7. Офлайн-проверка. Верификатор на Python или TypeScript либо Inspector в браузере (файл «проверяется в этом браузере и не загружается») сообщает ok либо первый сбойный запуск, seq и проверку.

В цепочке лежат дайджесты тел запросов и ответов, так что можно доказать, что промпт был именно таким, не помещая персональные данные в доказательство; удалённое тело оставляет метку-надгробие (tombstone). Схема записи открыта: sealedrun.com/schema/0.1/record.json.

Что подтверждает проверенный бандл, а что нет

Модель доверия — самая полезная страница проекта, потому что перечисляет его собственные пределы. Валидный бандл показывает:

  • записи созданы в этом порядке, и позже ничего не вставляли, не удаляли и не переставляли;
  • каждый шаг подписан ключами, которые делегировал принципал, в разрешённом окне времени;
  • дайджесты данных совпадают с телами, которые видел агент, а якоря ограничивают время существования головы цепочки.

Он не показывает, что агент не делал ничего другого (записывается только трафик, прошедший через рекордер или SDK), что ответы были верны, что метки данных расставлены точно и что часы оператора шли правильно.

Ловушка, о которой мы предупредили бы каждого новичка: «The keys inside a bundle are not a root of trust» (ключи внутри бандла не являются корнем доверия). Бандл несёт собственные публичные ключи, поэтому злоумышленник может собрать валидный бандл со свежими. Верификатор обязан сверить principal_id с идентификатором, полученным вне бандла, иначе доказана целостность, а не происхождение, и отчёт так и скажет.

Для сильных утверждений страница доверия требует четырёх вещей: рекордер — единственный путь от агента к моделям и инструментам (обеспечено сетевой политикой, у агента нет upstream-учётных данных); якорение включено; ключи агента лежат там, где процесс агента их не прочитает, а ключи принципала хранятся офлайн; доказательные данные сохраняются, а их удаление фиксируется tombstone с указанием правового основания.

Как мы запускаем его в Гланит

SealedRun — open-source проект, которым мы пользуемся. Каждый вызов Claude из наших внутренних агентов (тех, что ищут материал, пишут черновики и проверяют статьи вроде этой) идёт через рекордер SealedRun в Docker на той же машине, привязанный к localhost. Хук сессии поднимает контейнер до запуска агентов. Claude Code направлен на него через ANTHROPIC_BASE_URL=http://127.0.0.1:8090 плюс заголовок с токеном. Вот нужная часть конфигурации:

# docker-compose.yml
services:
  sealedrun:
    image: ghcr.io/sealedrun/sealedrun:0.4.0
    ports:
      - "127.0.0.1:8090:8080"
    environment:
      SEALEDRUN_API_TOKEN: ${SEALEDRUN_API_TOKEN}
      SEALEDRUN_ALLOWED_HOSTS: '["127.0.0.1","localhost"]'

# upstreams.yaml
upstreams:
  - name: anthropic
    url: https://api.anthropic.com
    dialect: anthropic
    client_auth: passthrough
    models: ["claude-*"]

Мы доверяем SealedRun полную запись работы наших агентов. Каждый промпт и каждый ответ, стоящие за этой статьёй, от первого поиска до финальной проверки, запечатаны в цепочке. Любой запуск можно выгрузить бандлом и проверить офлайн, так что клиент сверит доказательства у себя на машине, не полагаясь на наше слово. Следующий шаг: якорить голову цепочки в Sigstore Rekor, что даст каждому запуску внешнюю границу по времени. Мы зафиксировали версию 0.4.0; текущая 0.4.1 лишь правит обёртку MCP stdio, которой мы не пользуемся. У схемы с подменой базового URL есть побочный эффект, который нам нравится: если контейнер недоступен, вызов модели падает, а не уходит тихо в обход.

Кому внедрять уже сейчас?

Внедряйте сейчас, если посторонний попросит вас доказать, что делал ваш агент: команды, продающие агентов покупателям из финансов, медицины, HR или госсектора, интеграторы, запускающие агентов для клиентов, службы безопасности, которым нужна реконструкция инцидентов, пригодная для передачи другому. Начните с LLM-прокси, включите якорение до того, как будете опираться на любой бандл вне компании, и прочитайте модель доверия вместе с руководителем по безопасности.

Практическая оговорка: не выставляйте рекордер в сеть без токена и TLS, которых требует README. По умолчанию аутентификации у него нет, и он привязан к localhost.

Пять минут до проверенного бандла

Демо из README использует Docker Compose и агента на LangGraph с инструментом MCP:

git clone https://github.com/sealedrun/sealedrun && cd sealedrun
SEALEDRUN_API_TOKEN=change-me docker compose up -d
cd examples/langgraph-mcp && uv sync && SEALEDRUN_TOKEN=change-me uv run agent.py

Рекордер и Inspector поднимаются на порту 8080. Выгрузите запуск, откройте inspector.sealedrun.com, перетащите ZIP и введите ID принципала, полученный от рекордера, а не из файла (нет под рукой агента? в Inspector есть пример бандла). Затем поменяйте один символ в файле .jsonl внутри ZIP и проверьте снова. Увидеть, как проверка падает, — самое быстрое объяснение хеш-цепочки из всех, что мы знаем.

Журнал аудита — лишь один контроль из нескольких; остальные разобраны в наших заметках о защите ИИ-агентов в продакшене, том, как устроен продакшн-агент и OWASP Top 10 для LLM-приложений. Мы разрабатываем и защищаем продакшн-агентов на Python, JavaScript и PHP: смотрите наши услуги по разработке ИИ или расскажите, к чему имеет доступ ваш агент.

Частые вопросы

Ещё статьи

Безопасность ·

OWASP Top 10 для LLM-приложений — для тех, кто их выпускает

Список 2025 года называет десять способов атаковать LLM-приложение. Как каждый выглядит в реальном чат-боте, RAG-системе или агенте — и какое исправление мы применяем в продакшене.

4 мин чтения

Безопасность ·

Пентест или сканирование уязвимостей: что заказывать и когда

Клиенты просят «пентест» и часто имеют в виду сканирование; подрядчики продают сканирование и называют его пентестом. Что есть что на самом деле, сколько это стоит по времени и какое расписание работает для продуктовой команды.

4 мин чтения

Безопасность ·

Безопасность ИИ-агентов в продакшене: семь контролей, которые мы не пропускаем

Агент, который читает вашу CRM и отправляет письма, — это сотрудник без здравого смысла и с бесконечным терпением к хорошо написанной атаке. Контроли, с которыми мы подключаем агентов к реальным системам и спокойно спим.

3 мин чтения