Bezpieczeństwo
Przegląd
Neotask jest zaprojektowany z architekturą bezpieczeństwo-jako-priorytet. Brama domyślnie jest powiązana z localhost, wszystkie wrażliwe dane są szyfrowane w spoczynku, a wykonanie agentów może być izolowane w kontenerach.
Bezpieczeństwo sieci
Pętla zwrotna domyślnie
Brama nasłuchuje tylko na 127.0.0.1 (localhost), chyba że wyraźnie zmienisz tryb powiązania. Domyślnie brak zewnętrznej ekspozycji sieciowej.
Uwierzytelnianie
Wszystkie połączenia WebSocket wymagają uwierzytelniania:
- Uwierzytelnianie tokenem -- Token bearer (UUID lub niestandardowy ciąg)
- Uwierzytelnianie hasłem -- Haszowane hasło (bcrypt)
- Zaufany proxy -- Wstępnie uwierzytelnione nagłówki od odwrotnych proxy
- Lokalne zaufanie -- Połączenia z pętlą zwrotną są niejawnie zaufane
Bezpieczeństwo zdalnego dostępu
Dla zdalnego dostępu zalecane podejście to VPN Tailscale lub tunelowanie SSH -- nigdy nie wystawiaj bramy bezpośrednio na internet.
Parowanie urządzeń
Jak działa parowanie
Każdy klient łączący się z bramą musi być sparowany:
- Urządzenie prezentuje swoją tożsamość (odcisk + klucz publiczny)
- Brama wydaje wyzwanie parowania (nonce)
- Urządzenie podpisuje nonce swoim kluczem prywatnym
- Zatwierdzasz urządzenie przez interfejs użytkownika
- Brama wydaje token urządzenia dla przyszłych połączeń
Model zaufania
- Urządzenia lokalne (pętla zwrotna) są automatycznie zatwierdzane dla wygody
- Urządzenia nielokalne wymagają wyraźnego zatwierdzenia
- Tokeny urządzeń są przechowywane lokalnie i ponownie używane przy ponownym połączeniu
- Urządzenia mogą być odwołane w dowolnym momencie
Szyfrowanie
Dane w spoczynku
- AES-256-GCM -- Wszystkie tokeny, sekrety i klucze API są szyfrowane w spoczynku
- Klucze pochodne od maszyny -- Klucze szyfrowania wyprowadzone przez scrypt z tożsamości urządzenia
- Brak przechowywania w postaci jawnej -- Tokeny nigdy nie są przechowywane w postaci jawnej
Dane w tranzycie
- TLS -- HTTPS dla komunikacji API
- WSS -- WebSocket Secure dla połączeń bramy (przy użyciu Tailscale Serve lub odwrotnego proxy)
- Podpisywanie HMAC -- Integralność żądań z nonce i znacznikiem czasu
Sandboxing
Izolacja oparta na Docker
Wykonanie poleceń agenta może być izolowane w kontenerach Docker:
- Profile per agent -- Każdy agent może mieć własną konfigurację piaskownicy
- Limity zasobów -- Konfigurowalne limity procesora, pamięci i limitu czasu
- Izolacja sieci -- Kontenery mogą być izolowane sieciowo
- Ograniczenie systemu plików -- Agenci mają dostęp tylko do swojej przestrzeni roboczej
- Niestandardowe obrazy -- Używaj wstępnie zbudowanych obrazów z zainstalowanymi konkretnymi narzędziami
Zakresy piaskownicy
| Zakres | Opis |
|---|---|
| Per sesja | Nowy kontener dla każdej sesji |
| Per agent | Trwały kontener per agent |
| Udostępniony | Wspólny kontener między agentami |
Dostęp do przestrzeni roboczej
Agenci z piaskownicą mogą uzyskać dostęp do swojego katalogu przestrzeni roboczej (zamontowanego do kontenera), ale nie mogą uzyskać dostępu do systemu plików hosta poza swoją przestrzenią roboczą.
Zatwierdzenia Exec
Kontroluj, jakie polecenia agenci mogą wykonywać na węzłach i hoście bramy:
Tryby
| Tryb | Opis |
|---|---|
| Lista dozwolonych | Wykonują się tylko wcześniej zatwierdzone polecenia |
| Pytaj | Nieznane polecenia wymagają zatwierdzenia użytkownika |
| Pełny | Brak ograniczeń (używaj ostrożnie) |
Konfiguracja per węzeł
Każdy węzeł (macOS, host headless) ma własną konfigurację zatwierdzania exec, przechowywaną lokalnie. Możesz zezwolić na konkretne binaria (np. /usr/bin/docker, /usr/local/bin/terraform), blokując wszystko inne.
Tryb podwyższony
Niektóre operacje wymagają bezpośredniego uruchamiania na hoście bramy (nie w piaskownicy). Tryb podwyższony to:
- Bramkowany przez wyraźne uprawnienie w konfiguracji agenta
- Dostępny tylko na hoście bramy
- Domyślnie wyłączony
- Audytowalny przez logowanie
Audyt bezpieczeństwa
Wbudowany audyt bezpieczeństwa sprawdza:
- Uprawnienia pliku konfiguracyjnego (powinny wynosić 600)
- Uprawnienia pliku sesji
- Wersja Node.js (poprawki bezpieczeństwa)
- Wykrywanie sekretów w postaci jawnej
- Walidacja listy dozwolonych wtyczek
- Audyt otwartego interfejsu sieciowego
- Kompletność konfiguracji uwierzytelniania
Audyt może automatycznie naprawić wiele problemów po udzieleniu pozwolenia.
Najlepsze praktyki
- Trzymaj bramę na pętli zwrotnej -- Używaj Tailscale lub SSH dla zdalnego dostępu
- Włącz sandboxing -- Uruchamiaj polecenia agentów w kontenerach Docker
- Używaj list dozwolonych exec -- Ogranicz, które polecenia agenci mogą uruchamiać na węzłach
- Ustaw tokeny uwierzytelniające -- Zawsze konfiguruj uwierzytelnianie tokenem, nawet dla pętli zwrotnej
- Przeglądaj uprawnienia agentów -- Używaj minimalnych profili narzędzi tam, gdzie to możliwe
- Aktualizuj Neotask -- Aktualizacje zawierają poprawki bezpieczeństwa
- Regularnie audytuj -- Uruchamiaj audyty bezpieczeństwa, aby wykryć błędne konfiguracje
- Ogranicz ładowanie wtyczek -- Instaluj tylko zaufane wtyczki