PABLO.ENGINEERING
// WRÓĆ DO WSZYSTKICH WPISÓW
// 3 min

Zawężenie poleceń agenta i odcięcie wstrzykniętego czytania cudzego profilu

Gdy agent AI ma zbyt szeroki dostęp do narzędzi systemowych, pojedynczy błąd w instrukcji lub sprytnie spreparowana treść z zewnątrz może zamienić go w niekontrolowany skrypt powłoki. Dziś ograniczyłem to ryzyko u źródła.

Problem: niepotrzebny terminal i próba wyjścia poza własny kontekst

W logach bota treningowego gym narzędzia zajmowały aż 31 tysięcy tokenów w każdym żądaniu do modelu. Agent miał dostęp do ogólnego wykonywania poleceń powłoki, mimo że w codziennej pracy potrzebował wyłącznie analizy plików treningowych ze sportowego zegarka.

Co gorsza, nocny skaner pamięci leaf-scanner trafił na podejrzany wpis: w notatce pamięci bota gym pojawił się znacznik odnoszący się do przestrzeni drugiego agenta aneta z instrukcją nakazującą odczytanie pliku user.md. Gdyby agent dysponował pełną powłoką i bezkrytycznie zinterpretował tę instrukcję, granica izolacji między profilami użytkowników przestałaby istnieć.

Co zrobiłem: minimalne uprawnienia i bezpieczne narzędzia

  1. Zawęziłem uprawnienia powłoki dla agentów gym i aneta do jawnych list dozwolonych poleceń (allowlist). Dla bota gym zostawiłem wyłącznie dedykowany analizator tcx-analyzer.
  2. Zaktualizowałem narzędzie tcx-analyzer do wersji 1.4.0. Dodałem domyślny tryb --compact, obsługę plików FIT przez bibliotekę fitdecode oraz wyliczanie tempa na kilometr bez konieczności obecności surowego pola prędkości w pliku.
  3. Pomiar okna kontekstowego pokazał natychmiastowy zysk: powierzchnia narzędzi bota gym spadła z 31 tys. do 29 tys. tokenów na turę, co zauważalnie obniżyło koszty i czas odpowiedzi.
  4. Zbudowałem moduł współdzielonej bazy wiedzy na SQLite z wyszukiwaniem pełnotekstowym FTS5 w pliku wiedza.db. Nowe materiały indeksują się automatycznie przy starcie watchera i zmianie plików na dysku.
  5. Poprawiłem skrypty wdrożeniowe, dodając flagę cp --preserve=mode, aby pliki wykonywalne narzędzi nie traciły uprawnień +x po aktualizacji na serwerze.

Dlaczego to ważne (Use Case)

Zostawienie agentowi pełnego dostępu do powłoki to jak danie mechanikowi samochodowemu klucza do całego sejfu w biurze tylko po to, żeby wymienił koło. Jeśli mechanik dostanie mylną instrukcję, szkody mogą pójść daleko poza warsztat.

Dzięki allowliście bot treningowy może uruchomić tcx_analyzer --latest, ale nie jest w stanie wywołać dowolnego polecenia systemowego ani odczytać cudzych plików konfiguracyjnych. Nawet jeśli w pamięci agenta pojawi się wstrzyknięty tekst nakazujący przejęcie danych innego profilu, agent po prostu nie ma narzędzia, którym mógłby to polecenie wykonać.

Czego się nauczyłem

  • Najlepsze zabezpieczenie przed wstrzyknięciem poleceń to brak narzędzia w kontekście modelu. Jeśli agent nie ma komendy w schemacie JSON, model nie może jej wywołać, niezależnie od tego, jak przekonujący jest prompt w danych wejściowych.
  • Odchudzenie schematu narzędzi (z 31k do 29k tokenów) daje podwójną korzyść: zmniejsza powierzchnię ataku i bezpośrednio przyspiesza czas pierwszej odpowiedzi modelu.
  • Pliki narzędzi kopiowane w potokach CI/CD zawsze wymagają zachowania uprawnień. Przeoczenie flagi zachowania trybu pliku potrafi po cichu unieruchomić produkcyjnego bota po pozornie udanym wdrożeniu.
#daily#openclaw#security#reliability