Перейти к основному содержимому

Агент, достигающий государственного портала, — это сбой маршрутизации

Несанкционированный доступ пресекается в точке выхода, а не в промпте. Каждому парку агентов нужна одна аудируемая сетевая граница, отказы которой являются полноценными событиями.

Low angle view of a neoclassical building facade featuring pillars and a balcony in daylight.

Паттерн инцидента

Когда сообщается, что парк агентов обратился к государственному или медицинскому порталу, к которому он не должен был иметь доступ, в посмертном анализе редко обнаруживается повышение привилегий. Здесь нет эксплойта ядра, украденных учётных данных или ошибки confused deputy в сервисе авторизации. Есть исходящий HTTP-запрос к имени хоста, которое агент никогда не должен был разрешать, и ответ, который вернулся.

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

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

Почему guardrails на уровне промпта не могут удержать эту линию

Инструкции вероятностны. Сетевая доступность детерминирована. Эта асимметрия — весь аргумент.

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

Заблокированное имя хоста отличается по своей сути. Оно применяется один раз, в точке контроля, которой агент не управляет, и действует одинаково для каждого будущего запуска, каждой версии модели, каждой настройки температуры, каждого повтора. Его не нужно повторять в промпте. Оно не ослабевает с длиной контекста. С ним нельзя спорить достаточно беглым завершением.

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

Проектирование контракта выхода

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

Two professionals engaging in a business meeting, signing documents for a consulting agreement.

Allowlist по назначению, методу и классу полезной нагрузки

Одного имени хоста слишком мало. Правило, разрешающее api.example.gov, разрешает каждый путь, каждый метод, каждое тело. Более строгий контракт называет три вещи вместе:

  • Назначение: схема, хост и префикс пути — https://api.example.gov/v1/records/, а не весь origin.
  • Метод: GET и HEAD — пути чтения; POST, PUT, PATCH и DELETE — пути записи, и они должны быть обоснованы отдельно.
  • Класс полезной нагрузки: форма того, что может уйти. Агент retrieval, отправляющий только идентификатор, — это другой риск, чем тот, который может прикрепить тело документа. Класс полезной нагрузки может применяться схемой, ограничением размера или классификатором на прокси.

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

Запрет по умолчанию, с явным тикетом

Позиция по умолчанию — запрет. Доступ предоставляется исключением, которое называет:

requesting_agent: intake-classifier-v3
purpose: fetch public reference data for citation
destination: https://api.example.gov/v1/records/
methods: [GET, HEAD]
payload_class: identifier-only
requested_by: platform-team
justification: ticket OPS-4821
expires_at: 2026-09-30T00:00:00Z

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

Логировать отказы как полноценные события

Большинство прокси подробно логируют разрешённый трафик, а отказы — как счётчик. Инвертируйте этот акцент. Отказ несёт идентичность агента, попытку назначения, метод, сработавшее правило и корреляционный идентификатор обратно к запуску.

Частота отказов — опережающий индикатор дрейфа промпта. Стабильный агент производит стабильную, низкую частоту отказов, в основном от повторов и опечаток. Растущая частота или новый кластер отказов против одного класса назначений обычно означает, что поведение агента сместилось до того, как произошла какая-либо успешная эксфильтрация. Отказы — ранний си

Одна рабочая реализация помещает брокера между средой выполнения агента и сетью. Инструмент fetch агента не открывает сокеты. Он вызывает брокера со структурированным запросом:

Close-up view of Westminster Palace's intricate Gothic architecture in London, UK.

{
  "agent": "intake-classifier-v3",
  "run_id": "r-8f21c",
  "method": "GET",
  "url": "https://api.example.gov/v1/records/4412",
  "payload_class": "identifier-only"
}

Брокер сопоставляет запрос с скомпилированным контрактом, оценивает назначение, метод и класс полезной нагрузки и либо проксирует вызов, либо отказывает. Отказы записываются в тот же append-only лог, что и успехи, с идентификатором правила и корреляцией запуска. DNS для рабочих нагрузок агентов привязан к брокеру, так что имя хоста, отсутствующее в контракте, вообще не разрешается.

Брокер — единственная аудируемая граница. Есть одно место для проверки, одно место для изменения и одно место, где отказ — записанный факт, а не отсутствие доказательств.

Честный компромисс

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

Цена реальна. Альтернатива — парк, доступ которого определяется тем, какие имена хостов случайно появятся в результате инструмента, что вообще не граница. Задержка и очередь проверки дешевле, чем неограниченная поверхность выхода.

Операционные последствия

Из трактовки выхода как контракта следуют две практики.

Правила выхода становятся версионируемыми артефактами. Они живут в том же репозитории, что и манифест инструментов агента, и проверяются в том же изменении. Pull request, добавляющий инструмент, который извлекает из нового origin, должен добавить или изменить соответствующее правило выхода, и рецензент видит оба вместе. Манифест инструментов говорит, что агент намеревается делать; контракт выхода говорит, что ему разрешено делать. Расхождение между ними — находка при проверке, а не сюрприз во время выполнения.

Разбор инцидента начинается с сетевого лога. Когда что-то идёт не так, первый артефакт — лог брокера за затронутое окно запуска: назначения, методы, классы полезной нагрузки, отказы и задействованные идентификаторы правил. Транскрипт изучается после, чтобы понять намерение. Этот порядок важен, потому что сетевой лог детерминирован, а транскрипт — реконструкция. Начало с лога отвечает на «что фактически ушло» прежде, чем кто-либо начнёт спорить о «что модель имела в виду».

Заключение

Агент, достигающий портала, которого не должен касаться, — это в первую очередь не история поведения модели. Это история маршрутизации. Доступ был предоставлен где-то — разрешающим значением по умолчанию, устаревшим исключением, непривязанным резолвером — и именно там место для исправления. Guardrails на уровне промпта формируют намерение; они не обеспечивают доступ. Единая аудируемая граница выхода, запрещающая по умолчанию, логирующая отказы с той же точностью, что и успехи, и версионируемая вместе с манифестом инструментов, — вот что делает ответ на «мог ли этот агент достичь того хоста?» поиском, а не надеждой.

ПоделитьсяXLinkedInПостоянная ссылка6 мин чтения

Связанное чтение

На какие вопросы это отвечает

Why can't a system prompt stop an agent from contacting a government portal?

Instructions are probabilistic; they hold most of the time and degrade under long context, unexpected tool results or multi-step reframing. Network reachability is deterministic and enforced at a chokepoint the agent does not control, so it applies identically to every run and model version.

What should an egress rule specify beyond a hostname?

Destination (scheme, host and path prefix), HTTP method, and payload class. Binding all three makes the rule auditable: a reviewer can determine whether a specific agent could have submitted data to a specific endpoint by lookup rather than inference.

Why log denials as carefully as successes?

Denial frequency is a leading indicator of prompt drift. A rising rate or a new cluster of denials against one destination class usually signals a behavioural shift before any successful unauthorised request occurs.

What is the main cost of a central egress broker?

It is a dependency: added latency per outbound call, a single point of failure for network-dependent agents, and a requirement for contract changes to be reviewed, versioned and deployed like code. Bypasses granted 'temporarily' tend to become permanent holes.