Deterministic Veto

Перепроверка аргументов, сгенерированных моделью, по независимому графу связей инфраструктуры. Если ребро между сущностями запрещено политикой, операция прерывается — независимо от того, насколько уверенно модель настаивает на обратном.

Суть

Модель вероятностна и поддаётся семантическим манипуляциям: достаточно убедительной формулировки во входных данных, чтобы она сочла запрещённое действие уместным. Граф связей — сущности, транзакции, политики и рёбра между ними — таким свойством не обладает. Он либо содержит разрешающее ребро, либо нет.

Вето ставится после генерации и до исполнения: агент уже решил, что делать, аргументы уже собраны, и в этот момент их сверяют с графом.

Зачем это нужно

Все защиты, живущие в текстовом слое, разделяют общую слабость: они сделаны из того же материала, что и атака. Промпт можно перебить промптом, классификатор обучен на статичном наборе, иерархия привилегий — предпочтение, а не гарантия (см. Instruction Hierarchy).

Граф выпадает из этой логики. Он не рассуждает и не поддаётся уговорам, поэтому проверка по нему даёт то, чего текстовые рубежи дать не могут: отказ, не зависящий от убедительности входных данных.

Цена — граф нужно построить и поддерживать, и он покрывает только то, что в нём описано. Это рубеж для критичных действий, а не универсальный фильтр.

Как работает

  1. Перепроверка по графу. Сгенерированные аргументы сопоставляются с независимым графом инфраструктуры: узлы вида «роль пользователя», «ресурс», «транзакция», «политика соответствия».
  2. Анализ рёбер. Проверяется, разрешён ли переход между конкретными узлами — например, может ли эта роль инициировать этот тип внешнего вызова с этим ресурсом.
  3. Жёсткое вето. При запрещённом ребре операция прерывается немедленно. Согласие модели, её обоснование и уверенность в расчёт не принимаются.

Существенно, что граф независим от модели: он строится из реальной топологии прав и политик, а не из того, что модель о ней думает.

Чтобы граф не разошёлся с реальностью

Граф связей, который поддерживают руками, гарантированно устареет — и хуже того, устареет молча: вето продолжит срабатывать, опираясь на несуществующие рёбра, и начнёт пропускать то, что должно блокировать. Поэтому граф не ведут, а выводят из источника истины: инвентаризации инфраструктуры, IAM-политик, схемы БД, реестра сервисов. Ручные правки допустимы только как временное исключение с датой истечения.

Из этого следуют две обязательные вещи. Первая — пересборка по расписанию, привязанная к темпу изменений в источнике, а не к календарю. Вторая — алерт на расхождение: сверка выведенного графа с предыдущей версией, где резкое изменение числа рёбер означает либо реальную перестройку прав, либо поломку выгрузки, и различить это должен человек.

Отдельный признак, что граф пора перестраивать иначе: если для ответа на вопрос «имеет ли этот агент право на это действие» приходится дописывать рёбра вручную, значит модель прав в графе не совпадает с моделью прав в системе — и вето проверяет не то, что нужно.

Место в эшелоне защиты

Вето закрывает то, что не закрывают предыдущие слои: Instruction Hierarchy работает внутри модели и обходится, Guardrails фильтруют текст и промахиваются на адаптивных атаках, allowlist инструментов разрешает сам вызов, но не проверяет его аргументы в контексте.

Вето проверяет именно связку «кто — что — над чем» и потому ловит случай, когда разрешённый инструмент вызывается с аргументами, которые в этой комбинации недопустимы — типовой финал успешного Tool Hijacking.

Внешнее подтверждение: проверка моделью дополняет вето, но не заменяет его

Сверка с OWASP AISVS C9.2 даёт этой заметке формулировку, которую стоит цитировать целиком: проверка планируемого рискованного действия моделью допустима и полезна, но она добавляется к детерминированным воротам политики и не подменяет их.

Второе требование объясняет, почему именно так: такая проверка сама обязана быть защищена от манипуляции недоброжелательным вводом и не должна поддаваться обходу через инъекцию. То есть проверяющая модель — это ещё одна поверхность атаки, а не независимый арбитр (Prompt Injection).

Отсюда порядок в эшелоне, который здесь описан: детерминированное вето стоит последним, после любых модельных проверок, и именно оно принимает решение. Модельная проверка расположена раньше и работает фильтром, снижающим нагрузку, а не барьером.

Связано с

  • Instruction Hierarchy — внутримодельный слой, который вето страхует снаружи
  • Guardrails — текстовые рубежи на входе и выходе
  • Tool Hijacking — атака, при которой вызывается разрешённый инструмент с чужими аргументами
  • Agent Governance — права и политики, из которых строится граф
  • Human in the Loop — альтернатива вето там, где решение нельзя формализовать графом