🤖HermesBlog
Платформы Обмена Сообщениями Hermes · Часть 378/14/2026

Механизм безопасности A2A: система контроля доступа для взаимного доверия ИИ-агентов

Статья 37 в серии платформ обмена сообщениями Hermes: четыре линии защиты безопасности A2A и практические исправления сообщества.

Когда два ИИ «звонят» друг другу, чего боишься больше всего? Не того, что они заболтаются без остановки, а того, что незнакомец притворится знакомым и постучит в дверь.

A2A -security

Принципы проектирования безопасности: сначала запри дверь, потом открывай

Представь, что ты въехал в новую квартиру — первым делом ты не шторы вешаешь, а меняешь замок. Разработчики протокола A2A рассуждали точно так же — безопасность по умолчанию, каждое послабление — только явным действием. Эта система похожа на полноценный комплекс контроля доступа: замок (токен), пропуск (ключ пира), глазок (идентификация), камеры видеонаблюдения (журналы аудита). В мессенджере Hermes функциональность A2A предоставляется в виде плагина, но безопасность по умолчанию не идёт на компромиссы: без настроенного токена слушаем только локальный 127.0.0.1 — замок закрыт, ключ только у тебя.

Четыре рубежа обороны: подробный разбор

Первый рубеж: привязка к локальному хосту + токен (замок)

По умолчанию A2A слушает только локальный хост — снаружи до двери просто не дотянуться. Чтобы предоставлять услуги наружу, нужно выполнить два условия одновременно: задать адрес через A2A_HOST и настроить bearer token. Это как если бы ты не только открыл окно, но и поставил на подоконник горшок с колючим кактусом — одно без другого не работает.

Второй рубеж: отдельный ключ для каждого пира (пропуск)

У каждого пира свой собственный токен, настраивается через A2A_PEER_TOKENS="alice:tok1,bob:tok2". Это не универсальный ключ ко всем дверям, а отдельный пропуск для каждого гостя. Аутентифицированная личность управляет ограничением скорости, списками доверия и аудитом — кто прошёл по карте, сколько раз и когда — всё фиксируется.

Третий рубеж: фильтрация входящих + десенсибилизация (рамка металлодетектора)

Входящий текст фильтруется и помечается как «ввод от недоверенного пира»; удалённые пиры не могут вызывать операторские слеш-команды. Это как досмотр в аэропорту: жидкости из багажа достают и проверяют отдельно. В исходящих ответах строки, похожие на учётные данные (API-ключи, JWT, токены), автоматически затираются — как будто в отправляемом письме автоматически замазывают номер паспорта получателя.

Четвёртый рубеж: журнал аудита + защита от циклов (камера видеонаблюдения)

Каждый обмен добавляется в ~/.hermes/a2a_audit.jsonl — это как круглосуточная камера у двери. Лимит раундов защиты от циклов — как домофон у соседей: если два ИИ заболтались без остановки, система сама обрывает разговор.

Реальные истории атак: 3 проблемы, найденные и исправленные сообществом

История первая: обход SSRF (#78298) — «цифровой шифр» обманул замок

Один атакующий обнаружил, что проверка безопасности callback-URL использует строковое префиксное сравнение имени хоста — например, проверяет, начинается ли адрес с 127.. Но у IP-адресов есть «целочисленное написание» — 2130706433 — это просто другая запись 127.0.0.1. Это как записать номер квартиры азбукой Морзе — консьерж не распознал и пропустил. Исправление: сначала преобразовать callback-хост в стандартный IP и только потом проверять — как будто консьерж переводит адрес в любом виде в стандартный формат и только потом сверяет.

История вторая: схлопывание личности за обратным прокси (#80534/#80779) — все превращаются в одного человека

При развёртывании за nginx или K8s плагин A2A выводит личность вызывающего из socket-адреса. Но прокси-сервер стоит между ними, и все пиры отображаются как один и тот же IP — адрес прокси. Это как будто в подъезде с консьержем все посетители записаны как «подписано консьержем». Ограничение скорости использует общее ведро (один занят — страдают все), белый список доверия можно заполнить только адресом прокси, аудит не видит реального вызывающего. Исправление: выводить реальную личность из X-Forwarded-For, но доверять этому заголовку только «за доверенным прокси».

История третья: слепая зона аудита (#81003/#81042) — отклонённые стуки в дверь не записываются

Журнал аудита фиксирует только принятый трафик. Запросы с 401 (недействительный токен) и 403 (недоверенный) не создают записей. Это как камера, которая снимает только тех, кто благополучно вошёл, а вот как вор взламывал замок — не записала. Атаки перебором учётных данных, пробы отозванных токенов, попытки горизонтального перемещения — именно эти действия аудит должен ловить в первую очередь. Исправление: все отказы аутентификации тоже добавляются в append-only журнал аудита с полем decision + HTTP-статус + IP вызывающего.

Что это значит для пользователя

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

📖 Официальная документация

Эта статья основана на официальной документации Hermes Agent :Официальные документы › user-guide/messaging/a2a