Security

Формальная верификация (модели безопасности)

Формальные модели безопасности OpenClaw (на сегодняшний день TLA+/TLC) предоставляют проверенный машинным способом аргумент в пользу того, что конкретные пути с наивысшим риском — авторизация, изоляция сеансов, ограничение доступа к инструментам и безопасность при неверной конфигурации — обеспечивают соблюдение предусмотренной политики при явно указанных допущениях.

Примечание: некоторые старые ссылки могут содержать предыдущее название проекта.

Что это такое

Исполняемый набор регрессионных тестов безопасности, моделирующий действия злоумышленника:

  • Для каждого утверждения предусмотрена запускаемая проверка модели в конечном пространстве состояний.
  • Для многих утверждений предусмотрена парная негативная модель, которая создаёт трассу контрпримера для реалистичного класса ошибок.

Это не доказательство того, что OpenClaw безопасен во всех отношениях, и оно не проверяет полную реализацию на TypeScript.

Где находятся модели

Модели поддерживаются в отдельном репозитории: vignesh07/openclaw-formal-models.

Ограничения

  • Это модели, а не полная реализация на TypeScript, поэтому модель и код могут расходиться.
  • Результаты ограничены пространством состояний, исследуемым TLC. Успешный результат не гарантирует безопасность за пределами смоделированных допущений и границ.
  • Некоторые утверждения основаны на явных допущениях о среде (например, о правильном развёртывании и корректных входных данных конфигурации).

Воспроизведение результатов

Клонируйте репозиторий моделей и запустите TLC:

bash
git clone https://github.com/vignesh07/openclaw-formal-modelscd openclaw-formal-models # Требуется Java 11+ (TLC работает на JVM).# Репозиторий содержит закреплённую версию tla2tools.jar и предоставляет bin/tlc, а также цели Make. make <target>

Интеграции с CI этого репозитория пока нет; в будущей версии можно добавить запуск моделей в CI с общедоступными артефактами (трассами контрпримеров, журналами запусков) или размещённый рабочий процесс «запустить эту модель» для небольших ограниченных проверок.

Утверждения и цели

Доступность Gateway и неверная конфигурация открытого Gateway

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

Результат Цели
Успешно make gateway-exposure-v2, make gateway-exposure-v2-protected
Ошибка (ожидаемая) make gateway-exposure-v2-negative

См. также docs/gateway-exposure-matrix.md в репозитории моделей.

Конвейер выполнения команд Node (возможность с наивысшим риском)

Утверждение: exec host=node требует (а) списка разрешённых команд Node вместе с объявленными командами и (б) оперативного подтверждения, если оно настроено; в модели подтверждения токенизируются для предотвращения повторного воспроизведения.

Результат Цели
Успешно make nodes-pipeline, make approvals-token
Ошибка (ожидаемая) make nodes-pipeline-negative, make approvals-token-negative

Хранилище сопряжений (ограничение личных сообщений)

Утверждение: запросы на сопряжение соблюдают TTL и ограничения количества ожидающих запросов.

Результат Цели
Успешно make pairing, make pairing-cap
Ошибка (ожидаемая) make pairing-negative, make pairing-cap-negative

Ограничение входящих сообщений (упоминания и обход управляющими командами)

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

Результат Цели
Успешно make ingress-gating
Ошибка (ожидаемая) make ingress-gating-negative

Маршрутизация и изоляция ключей сеансов

Утверждение: личные сообщения от разных собеседников не объединяются в один сеанс, если они не были явно связаны или настроены соответствующим образом.

Результат Цели
Успешно make routing-isolation
Ошибка (ожидаемая) make routing-isolation-negative

Модели v1++: параллельность, повторные попытки и корректность трассировки

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

Параллельность и идемпотентность хранилища сопряжений

Утверждение: хранилище сопряжений обеспечивает MaxPending и идемпотентность даже при чередовании операций — последовательность «проверить, затем записать» должна быть атомарной или защищённой блокировкой, а обновление не должно создавать дубликаты. В частности, параллельные запросы не могут превысить MaxPending для канала, а повторные запросы или обновления для одного и того же (channel, sender) не создают дублирующиеся активные строки ожидания.

Результат Цели
Успешно make pairing-race (атомарная или защищённая блокировкой проверка ограничения), make pairing-idempotency, make pairing-refresh, make pairing-refresh-race
Ошибка (ожидаемая) make pairing-race-negative (гонка ограничения при неатомарных начале и фиксации), make pairing-idempotency-negative, make pairing-refresh-negative, make pairing-refresh-race-negative

Корреляция трассировки и идемпотентность входящих сообщений

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

Результат Цели
Успешно make ingress-trace, make ingress-trace2, make ingress-idempotency, make ingress-dedupe-fallback
Ошибка (ожидаемая) make ingress-trace-negative, make ingress-trace2-negative, make ingress-idempotency-negative, make ingress-dedupe-fallback-negative

Утверждение: маршрутизация по умолчанию сохраняет изоляцию сеансов личных сообщений и объединяет их только при явной настройке с учётом приоритета каналов и связей идентичностей. Специфичные для канала переопределения dmScope имеют приоритет над глобальными значениями по умолчанию; identityLinks объединяют сеансы только внутри явно связанных групп, но не между не связанными друг с другом собеседниками.

Результат Цели
Успешно make routing-precedence, make routing-identitylinks
Ошибка (ожидаемая) make routing-precedence-negative, make routing-identitylinks-negative

Связанные материалы

Was this useful?
On this page

On this page