Security
Формальна верифікація (моделі безпеки)
Ця сторінка відстежує формальні моделі безпеки OpenClaw (сьогодні TLA+/TLC; інші за потреби).
Примітка: деякі старіші посилання можуть посилатися на попередню назву проєкту.
Мета (північна зірка): надати машинно перевірений аргумент, що OpenClaw забезпечує свою передбачену політику безпеки (авторизацію, ізоляцію сеансів, контроль доступу до інструментів і безпечність у разі хибної конфігурації) за явних припущень.
Що це таке (сьогодні): виконуваний, керований атакувальником набір регресійних перевірок безпеки:
- Кожне твердження має виконувану перевірку моделі у скінченному просторі станів.
- Багато тверджень мають парну негативну модель, яка створює трасу контрприкладу для реалістичного класу помилок.
Чим це не є (поки що): доказом, що "OpenClaw є безпечним у всіх аспектах" або що повна реалізація TypeScript є коректною.
Де розміщені моделі
Моделі підтримуються в окремому репозиторії: vignesh07/openclaw-formal-models.
Важливі застереження
- Це моделі, а не повна реалізація TypeScript. Можливе розходження між моделлю та кодом.
- Результати обмежені простором станів, дослідженим TLC; "зелений" результат не означає безпеку поза змодельованими припущеннями та межами.
- Деякі твердження спираються на явні припущення щодо середовища (наприклад, коректне розгортання, коректні вхідні дані конфігурації).
Відтворення результатів
Сьогодні результати відтворюються клонуванням репозиторію моделей локально та запуском TLC (див. нижче). У майбутній ітерації можна запропонувати:
- моделі, запущені в CI, з публічними артефактами (траси контрприкладів, журнали запусків)
- розміщений workflow "запустити цю модель" для невеликих обмежених перевірок
Початок роботи:
git clone https://github.com/vignesh07/openclaw-formal-models
cd openclaw-formal-models
# Java 11+ required (TLC runs on the JVM).
# The repo vendors a pinned `tla2tools.jar` (TLA+ tools) and provides `bin/tlc` + Make targets.
make <target>
Експозиція Gateway і хибна конфігурація відкритого Gateway
Твердження: прив’язування за межами loopback без автентифікації може зробити віддалений компроміс можливим / збільшує експозицію; токен/пароль блокує неавтентифікованих атакувальників (відповідно до припущень моделі).
- Зелені запуски:
make gateway-exposure-v2make gateway-exposure-v2-protected
- Червоний (очікувано):
make gateway-exposure-v2-negative
Див. також: docs/gateway-exposure-matrix.md у репозиторії моделей.
Конвеєр виконання Node (можливість із найвищим ризиком)
Твердження: exec host=node вимагає (а) списку дозволених команд Node разом із задекларованими командами та (б) живого схвалення, коли це налаштовано; схвалення токенізуються, щоб запобігти повторному використанню (у моделі).
- Зелені запуски:
make nodes-pipelinemake approvals-token
- Червоний (очікувано):
make nodes-pipeline-negativemake approvals-token-negative
Сховище спарювання (контроль доступу DM)
Твердження: запити на спарювання дотримуються TTL і лімітів очікуваних запитів.
- Зелені запуски:
make pairingmake pairing-cap
- Червоний (очікувано):
make pairing-negativemake pairing-cap-negative
Контроль входу (згадки + обхід керівних команд)
Твердження: у групових контекстах, які вимагають згадки, неавторизована "керівна команда" не може обійти контроль згадок.
- Зелений:
make ingress-gating
- Червоний (очікувано):
make ingress-gating-negative
Ізоляція маршрутизації/ключів сеансів
Твердження: DM від різних співрозмовників не зливаються в один сеанс, якщо це явно не пов’язано/налаштовано.
- Зелений:
make routing-isolation
- Червоний (очікувано):
make routing-isolation-negative
v1++: додаткові обмежені моделі (конкурентність, повторні спроби, коректність трас)
Це наступні моделі, які підвищують точність щодо реальних режимів відмов (неатомарні оновлення, повторні спроби та розсилання повідомлень).
Конкурентність / ідемпотентність сховища спарювання
Твердження: сховище спарювання має забезпечувати MaxPending та ідемпотентність навіть за чергування виконання (тобто "перевірити-потім-записати" має бути атомарним / заблокованим; оновлення не повинно створювати дублікати).
Що це означає:
-
За конкурентних запитів не можна перевищити
MaxPendingдля каналу. -
Повторні запити/оновлення для того самого
(channel, sender)не повинні створювати дублікати живих очікуваних рядків. -
Зелені запуски:
make pairing-race(атомарна/заблокована перевірка ліміту)make pairing-idempotencymake pairing-refreshmake pairing-refresh-race
-
Червоні (очікувано):
make pairing-race-negative(неатомарна гонка ліміту begin/commit)make pairing-idempotency-negativemake pairing-refresh-negativemake pairing-refresh-race-negative
Кореляція трас входу / ідемпотентність
Твердження: приймання вхідних подій має зберігати кореляцію трас під час fan-out і бути ідемпотентним за повторних спроб провайдера.
Що це означає:
-
Коли одна зовнішня подія стає кількома внутрішніми повідомленнями, кожна частина зберігає ту саму ідентичність траси/події.
-
Повторні спроби не призводять до подвійної обробки.
-
Якщо ідентифікатори подій провайдера відсутні, дедуплікація повертається до безпечного ключа (наприклад, ідентифікатора траси), щоб уникнути відкидання різних подій.
-
Зелені:
make ingress-tracemake ingress-trace2make ingress-idempotencymake ingress-dedupe-fallback
-
Червоні (очікувано):
make ingress-trace-negativemake ingress-trace2-negativemake ingress-idempotency-negativemake ingress-dedupe-fallback-negative
Пріоритет dmScope у маршрутизації + identityLinks
Твердження: маршрутизація має ізолювати сеанси DM за замовчуванням і зливати сеанси лише тоді, коли це явно налаштовано (пріоритет каналу + посилання ідентичностей).
Що це означає:
-
Перевизначення dmScope для конкретного каналу мають мати пріоритет над глобальними значеннями за замовчуванням.
-
identityLinks мають зливати лише в межах явно пов’язаних груп, а не між непов’язаними співрозмовниками.
-
Зелені:
make routing-precedencemake routing-identitylinks
-
Червоні (очікувано):
make routing-precedence-negativemake routing-identitylinks-negative