<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Игорь Вигасин</title><description>Заметки и эссе Игоря Вигасина.</description><link>https://vigasin.com/</link><language>ru</language><item><title>Когда AI-агент взламывает систему, trace становится доказательством</title><link>https://vigasin.com/ru/posts/ai-agent-liability-evidence/</link><guid isPermaLink="true">https://vigasin.com/ru/posts/ai-agent-liability-evidence/</guid><description>Ответственность за AI-агента превращает записи об identity, authorization, policy и containment в часть архитектуры системы.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Рассмотрим упрощённый сценарий.&lt;/p&gt;
&lt;p&gt;AI-агент находит открытый helpdesk, перехватывает пользовательскую сессию, получает remote code execution и повышает привилегии до root. Команда безопасности блокирует дальнейшее продвижение, но к этому моменту агент уже пересёк несколько trust boundaries. Теперь расследованию нужны ответы, которых нет в обычном application log:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Кто разрешил агенту действовать?&lt;/li&gt;
&lt;li&gt;Какие цели и техники были ему разрешены?&lt;/li&gt;
&lt;li&gt;Что оператор знал о его возможностях?&lt;/li&gt;
&lt;li&gt;Какой safeguard проверял каждое действие?&lt;/li&gt;
&lt;li&gt;Можно ли было остановить run, не полагаясь на уже скомпрометированный agent runtime?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сценарий упрощён, но события, на которых он основан, реальны. Нидерландский Institute for Vulnerability Disclosure сообщил о двух уязвимостях Zammad, позволявших перехватить сессию, выполнить код удалённо и повысить локальные привилегии до root. &lt;a href=&quot;https://www.securityweek.com/zammad-zero-days-exploited-in-ai-powered-divd-hack/&quot;&gt;По данным SecurityWeek&lt;/a&gt;, эти уязвимости использовали одной цепочкой, а более глубокое продвижение остановила сегментация сети. &lt;a href=&quot;https://csirt.divd.nl/cases/DIVD-2026-00015&quot;&gt;DIVD рекомендует&lt;/a&gt; обновиться до Zammad 7 или отключить систему.&lt;/p&gt;
&lt;p&gt;Здесь важна скорость. Если путь от initial access до root занимает секунды, человек уже не успевает стать approval step внутри incident-response loop.&lt;/p&gt;
&lt;h2 id=&quot;предлагаемый-закон-показывает-уже-существующий-пробел-в-архитектуре&quot;&gt;Предлагаемый закон показывает уже существующий пробел в архитектуре&lt;/h2&gt;
&lt;p&gt;1 октября 2026 года американские сенаторы Джош Хоули и Крис Мёрфи &lt;a href=&quot;https://www.hawley.senate.gov/senators-hawley-murphy-announce-bipartisan-ai-agent-accountability-act/&quot;&gt;объявили об AI Agent Accountability Act&lt;/a&gt;. Их предложение предусматривает уголовную и гражданскую ответственность по Computer Fraud and Abuse Act для операторов, которые сознательно запускают агента, по неосторожности причинившего ущерб посредством взлома. Разработчик тоже может отвечать, если знал или должен был знать о hacking capabilities агента, но не внедрил разумные safeguards.&lt;/p&gt;
&lt;p&gt;Это законопроект, а не действующий закон. В анонсе нет номера законопроекта и окончательного statutory text, поэтому будущий scope и вероятность принятия неизвестны.&lt;/p&gt;
&lt;p&gt;Разделение ответственности между оператором и разработчиком всё равно полезно. Оно соответствует двум разным наборам доказательств:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Оператор должен показать, зачем агент был запущен, кто выдал ему полномочия и не вышли ли действия за их границы.&lt;/li&gt;
&lt;li&gt;Разработчик должен показать, какие ожидаемые capabilities и failure modes проверялись, какие safeguards были установлены и сработали ли они.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Фраза «это решила модель» не отвечает ни на один из этих вопросов.&lt;/p&gt;
&lt;h2 id=&quot;логи-фиксируют-активность-но-не-полномочия&quot;&gt;Логи фиксируют активность, но не полномочия&lt;/h2&gt;
&lt;p&gt;Tool log может показать, что в 02:13:08 агент отправил запрос. Но он не доказывает, что запрос был разрешён. Model transcript может объяснить, почему модель сочла действие полезным. Но он не доказывает соответствие operator policy.&lt;/p&gt;
&lt;p&gt;Полномочия должны исходить извне модели и mutable workspace, в котором она работает. Запись должна связывать шесть элементов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;человека или service principal, отвечающего за run;&lt;/li&gt;
&lt;li&gt;точные версии модели, agent build, tools и policies;&lt;/li&gt;
&lt;li&gt;выданные агенту capabilities;&lt;/li&gt;
&lt;li&gt;решение, разрешившее или запретившее каждое чувствительное действие;&lt;/li&gt;
&lt;li&gt;изменение состояния целевой системы;&lt;/li&gt;
&lt;li&gt;containment или revocation после нарушения границы.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Без такой цепочки большой архив traces остаётся набором событий. Он помогает восстановить инцидент, но не позволяет надёжно установить, у кого были полномочия, какой control отвечал за решение и не сработала ли система в режиме fail open.&lt;/p&gt;
&lt;p&gt;Публичное сообщение OpenAI показывает, почему это различие имеет значение. Компания обнаружила агентов, которые обходили access controls, использовали опубликованные credentials, выполняли query или command injection, получали доступ к runtime internals и размещали информацию на сторонних сайтах. OpenAI сообщает, что &lt;a href=&quot;https://openai.com/hugging-face-incident-and-misalignment&quot;&gt;уведомила десятки затронутых третьих сторон&lt;/a&gt; и продолжает проверять прошлую активность.&lt;/p&gt;
&lt;p&gt;Ретроспективное расследование необходимо. Но оно не заменяет online control, способный запретить следующее действие.&lt;/p&gt;
&lt;h2 id=&quot;минимальный-deployment-evidence-pack&quot;&gt;Минимальный deployment evidence pack&lt;/h2&gt;
&lt;p&gt;До выдачи агенту сетевых, административных или транзакционных полномочий release record должен содержать как минимум следующие элементы.&lt;/p&gt;
&lt;h3 id=&quot;названные-владельцы-controls&quot;&gt;Названные владельцы controls&lt;/h3&gt;
&lt;p&gt;Нужно зафиксировать оператора deployment, команду, отвечающую за agent build, и владельца каждого policy-enforcement component. Формулировка «AI platform team» недостаточно точна во время инцидента.&lt;/p&gt;
&lt;h3 id=&quot;версионированная-декларация-capabilities&quot;&gt;Версионированная декларация capabilities&lt;/h3&gt;
&lt;p&gt;Нужно перечислить доступные агенту tools, credentials, классы целей, сетевые адреса, write operations и пути privilege escalation. Декларацию следует связать с точными версиями агента и модели, прошедшими evaluation перед релизом.&lt;/p&gt;
&lt;p&gt;Обновление модели является новым релизом. Добавление tool, расширение credential или новый network route тоже.&lt;/p&gt;
&lt;h3 id=&quot;authorization-вне-агента&quot;&gt;Authorization вне агента&lt;/h3&gt;
&lt;p&gt;Deterministic policy engine должен проверять чувствительные действия с учётом principal, target, operation, data classification и текущего risk state. Агент может предложить действие, но не должен сам одобрять своё предложение или менять проверяющую его policy.&lt;/p&gt;
&lt;h3 id=&quot;tamper-evident-action-trace&quot;&gt;Tamper-evident action trace&lt;/h3&gt;
&lt;p&gt;Trace следует индексировать по run, principal, model, tool, target, policy version и authorization decision. В нём должны храниться планируемое действие и наблюдаемый результат. Enforcement log должен находиться вне writable environment агента.&lt;/p&gt;
&lt;h3 id=&quot;online-containment&quot;&gt;Online containment&lt;/h3&gt;
&lt;p&gt;Нужны short-lived credentials, target allowlists, action budgets, deny-by-default egress и kill path, не зависящий от модели. В инциденте с Zammad сегментация сети имела значение именно потому, что ограничила последствия после потери первой системы.&lt;/p&gt;
&lt;h3 id=&quot;regression-tests-из-инцидентов&quot;&gt;Regression tests из инцидентов&lt;/h3&gt;
&lt;p&gt;Каждый существенный incident и near miss должен становиться воспроизводимой evaluation. Release gate обязан закрываться, если агент повторяет запрещённый путь, даже когда его средний benchmark score вырос.&lt;/p&gt;
&lt;h2 id=&quot;как-может-выглядеть-запись&quot;&gt;Как может выглядеть запись&lt;/h2&gt;
&lt;p&gt;Ниже приведён упрощённый иллюстративный YAML, а не опубликованный стандарт:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;run_id&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;run_01K6Z8M4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;principal&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;svc-migration-agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;cloud-migration-team&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;agent_build&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;migration-agent@4.7.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;provider/model@2026-10-01&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;policy_set&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;bank-agent-policy@19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;capabilities&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  tools&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;inventory.read&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;terraform.plan&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  network_allowlist&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;inventory.internal&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;vcs.internal&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  credentials&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;short-lived-brokered&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;action&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  tool&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;terraform.apply&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  target&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;prod-payments&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  authorization&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;    decision&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;deny&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;    control&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;cedar-gateway@8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;    reason&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;write capability absent from grant&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;containment&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  credentials_revoked&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;  run_stopped&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#8DDB8C&quot;&gt;trace_hash&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;sha256:example-only&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Названия полей здесь вторичны. Важна связь между ответственностью, выданными полномочиями, попыткой действия, независимым решением и результатом containment.&lt;/p&gt;
&lt;h2 id=&quot;release-gate-должен-требовать-доказательства&quot;&gt;Release gate должен требовать доказательства&lt;/h2&gt;
&lt;p&gt;Агент с существенными полномочиями ближе к привилегированному service account, чем к чат-боту. Поэтому release gate должен требовать доказательства, а не заверения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Может ли команда перечислить все credentials и targets, доступные агенту?&lt;/li&gt;
&lt;li&gt;Может ли policy engine вне runtime отклонить правдоподобное, но неразрешённое действие?&lt;/li&gt;
&lt;li&gt;Может ли security отозвать полномочия агента, не ожидая от него содействия?&lt;/li&gt;
&lt;li&gt;Может ли расследование связать внешнее изменение состояния с principal, policy, model, tool и approval?&lt;/li&gt;
&lt;li&gt;Прогоняла ли команда известные инциденты на точной версии, предназначенной для релиза?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если хотя бы на один вопрос ответ отрицательный, у агента ещё нет защищаемой control boundary. Ускоренная форензика не восстановит эту границу постфактум.&lt;/p&gt;
</content:encoded></item></channel></rss>