Weryfikacja formalna (modele bezpieczeństwa)
Ta strona śledzi formalne modele bezpieczeństwa OpenClaw (obecnie TLA+/TLC; w razie potrzeby więcej).Uwaga: niektóre starsze linki mogą odnosić się do poprzedniej nazwy projektu.Cel (punkt docelowy): dostarczyć sprawdzany maszynowo argument, że OpenClaw egzekwuje swoją zamierzoną politykę bezpieczeństwa (autoryzacja, izolacja sesji, bramkowanie narzędzi oraz bezpieczeństwo konfiguracji błędnej), przy jawnie określonych założeniach. Czym to jest (obecnie): wykonywalny, sterowany przez atakującego pakiet regresji bezpieczeństwa:
- Każde twierdzenie ma wykonywalne sprawdzenie modelu na skończonej przestrzeni stanów.
- Wiele twierdzeń ma sparowany model negatywny, który generuje ślad kontrprzykładu dla realistycznej klasy błędów.
Gdzie znajdują się modele
Modele są utrzymywane w osobnym repozytorium: vignesh07/openclaw-formal-models.Ważne zastrzeżenia
- To są modele, a nie pełna implementacja TypeScript. Możliwy jest dryf między modelem a kodem.
- Wyniki są ograniczone przez przestrzeń stanów badaną przez TLC; „zielony” nie oznacza bezpieczeństwa poza modelowanymi założeniami i ograniczeniami.
- Niektóre twierdzenia opierają się na jawnych założeniach środowiskowych (na przykład poprawnym wdrożeniu, poprawnych danych wejściowych konfiguracji).
Odtwarzanie wyników
Obecnie wyniki odtwarza się przez lokalne sklonowanie repozytorium modeli i uruchomienie TLC (patrz niżej). Przyszła iteracja mogłaby oferować:- modele uruchamiane w CI z publicznymi artefaktami (ślady kontrprzykładów, logi uruchomień)
- hostowany przepływ pracy „uruchom ten model” dla małych, ograniczonych sprawdzeń
Ekspozycja Gateway i błędna konfiguracja otwartego Gateway
Twierdzenie: wiązanie poza loopback bez uwierzytelniania może umożliwić zdalne przejęcie / zwiększa powierzchnię ekspozycji; token/hasło blokuje nieuwierzytelnionych atakujących (zgodnie z założeniami modelu).- Zielone uruchomienia:
make gateway-exposure-v2make gateway-exposure-v2-protected
- Czerwone (oczekiwane):
make gateway-exposure-v2-negative
docs/gateway-exposure-matrix.md w repozytorium modeli.
Potok wykonania węzła (możliwość o najwyższym ryzyku)
Twierdzenie:exec host=node wymaga (a) allowlist poleceń węzła plus zadeklarowanych poleceń oraz (b) zatwierdzenia na żywo, gdy jest skonfigurowane; zatwierdzenia są tokenizowane, aby zapobiegać odtwarzaniu (w modelu).
- Zielone uruchomienia:
make nodes-pipelinemake approvals-token
- Czerwone (oczekiwane):
make nodes-pipeline-negativemake approvals-token-negative
Magazyn parowania (bramkowanie DM)
Twierdzenie: żądania parowania respektują TTL i limity oczekujących żądań.- Zielone uruchomienia:
make pairingmake pairing-cap
- Czerwone (oczekiwane):
make pairing-negativemake pairing-cap-negative
Bramkowanie ruchu przychodzącego (wzmianki + obejście poleceń sterujących)
Twierdzenie: w kontekstach grupowych wymagających wzmianki nieautoryzowane „polecenie sterujące” nie może ominąć bramkowania wzmianką.- Zielone:
make ingress-gating
- Czerwone (oczekiwane):
make ingress-gating-negative
Trasowanie/izolacja kluczy sesji
Twierdzenie: wiadomości DM od różnych nadawców nie zapadają się do tej samej sesji, chyba że zostały jawnie połączone/skonfigurowane.- Zielone:
make routing-isolation
- Czerwone (oczekiwane):
make routing-isolation-negative
v1++: dodatkowe ograniczone modele (współbieżność, ponowienia, poprawność śladów)
To kolejne modele, które zwiększają wierność względem rzeczywistych trybów awarii (nieatomowe aktualizacje, ponowienia i rozsyłanie wiadomości).Współbieżność / idempotencja magazynu parowania
Twierdzenie: magazyn parowania powinien egzekwowaćMaxPending i idempotencję nawet przy przeplotach (to znaczy „sprawdź, a potem zapisz” musi być atomowe / zablokowane; odświeżanie nie powinno tworzyć duplikatów).
Co to oznacza:
-
Przy współbieżnych żądaniach nie można przekroczyć
MaxPendingdla kanału. -
Powtarzane żądania/odświeżenia dla tego samego
(channel, sender)nie powinny tworzyć zduplikowanych aktywnych oczekujących wierszy. -
Zielone uruchomienia:
make pairing-race(atomowe/zablokowane sprawdzenie limitu)make pairing-idempotencymake pairing-refreshmake pairing-refresh-race
-
Czerwone (oczekiwane):
make pairing-race-negative(nieatomowy wyścig begin/commit przy sprawdzaniu limitu)make pairing-idempotency-negativemake pairing-refresh-negativemake pairing-refresh-race-negative
Korelacja śladów / idempotencja ruchu przychodzącego
Twierdzenie: przetwarzanie przychodzące powinno zachowywać korelację śladów przy rozsyłaniu i być idempotentne przy ponowieniach dostawcy. Co to oznacza:- Gdy jedno zdarzenie zewnętrzne staje się wieloma wiadomościami wewnętrznymi, każda część zachowuje tę samą tożsamość śladu/zdarzenia.
- Ponowienia nie prowadzą do podwójnego przetwarzania.
- Jeśli brakuje identyfikatorów zdarzeń dostawcy, deduplikacja wraca do bezpiecznego klucza (na przykład identyfikatora śladu), aby nie odrzucać różnych zdarzeń.
-
Zielone:
make ingress-tracemake ingress-trace2make ingress-idempotencymake ingress-dedupe-fallback
-
Czerwone (oczekiwane):
make ingress-trace-negativemake ingress-trace2-negativemake ingress-idempotency-negativemake ingress-dedupe-fallback-negative
Priorytet dmScope w trasowaniu + identityLinks
Twierdzenie: trasowanie musi domyślnie utrzymywać izolację sesji DM i zwijać sesje tylko wtedy, gdy zostało to jawnie skonfigurowane (priorytet kanału + identity links). Co to oznacza:-
Nadpisania
dmScopespecyficzne dla kanału muszą mieć pierwszeństwo przed globalnymi ustawieniami domyślnymi. - identityLinks powinny zwijać tylko w ramach jawnie połączonych grup, a nie między niepowiązanymi nadawcami.
-
Zielone:
make routing-precedencemake routing-identitylinks
-
Czerwone (oczekiwane):
make routing-precedence-negativemake routing-identitylinks-negative