
Ein Sicherheitsprüfer für Tailscale-Konfigurationen. Durchsucht Ihr Tailnet nach Fehlkonfigurationen, zu permissiven Zugriffskontrollen und Verstößen gegen Sicherheitsbest Practices.
Ein Sicherheitsauditor für Tailscale-Konfigurationen. Tailsnitch scannt dein Tailnet auf 57 Fehlkonfigurationen, übermäßig permissive Zugriffskontrollen und Verstöße gegen Sicherheits-Best Practices.
# 1. Setze deine Tailscale-API-Anmeldedaten
export TS_API_KEY="tskey-api-..."
# 2. Audit ausführen
tailsnitch
# 3. Nur Ergebnisse mit hoher Schwere anzeigen
tailsnitch --severity high
# 4. Einige Probleme beheben ~interaktiv~ yolo-Modus
tailsnitch --fix
Lade die neueste Version von GitHub Releases herunter.
macOS-Benutzer: Entferne nach dem Download das Quarantäne-Attribut:
sudo xattr -rd com.apple.quarantine tailsnitch
go install github.com/Adversis/tailsnitch@latest
git clone https://github.com/Adversis/tailsnitch.git
cd tailsnitch
go build -o tailsnitch .
Tailsnitch unterstützt zwei Authentifizierungsmethoden. OAuth wird bevorzugt, wenn beide konfiguriert sind.
OAuth-Clients bieten abgegrenzten, auditierbaren Zugriff, der nicht abläuft, wenn Mitarbeiter das Unternehmen verlassen.
export TS_OAUTH_CLIENT_ID="..."
export TS_OAUTH_CLIENT_SECRET="tskey-client-..."
Erstelle einen OAuth-Client unter: https://login.tailscale.com/admin/settings/oauth
Erforderliche Bereiche für schreibgeschütztes Audit:
all:read deckt alles ab. Einzelne Bereiche vergeben:
| Bereich | Verwendet für |
|---|---|
policy_file:read | Tailnet-Policy-Datei — ACL-, NET-, SSH-* |
devices:core:read | Geräteliste — DEV-, NET-, ACL-011 |
dns:read | DNS-Konfiguration — DNS-001, DEV-007 |
auth_keys:read | Maschinen-Auth-Keys — AUTH-*, ACL-011 |
feature_settings:read | Tailnet-Einstellungen — DEV-008, DEV-009, DEV-014 |
logs:network:read | Netzwerk-Flow-Logging-Einstellung — LOG-001 |
networking_settings:read | HTTPS-Zertifikatseinstellung — NET-004 |
log_streaming:read | Log-Stream-Ziele — LOG-002 |
webhooks:read | Webhook-Endpunkte — LOG-005, LOG-012 |
oauth_keys:read | OAuth-Clients — LOG-006 |
users:read | Benutzerrollen und -status — USER-001, LOG-006 |
account_settings:read | Sicherheitskontakt — LOG-011 |
devices:posture_attributes:read | Posture-Integrationen — DEV-014 |
Jeder Bereich, den du weglässt, betrifft nur die Prüfungen, die ihn benötigen: Diese Prüfungen melden, dass sie die Einstellung nicht lesen konnten, anstatt sie zu bestehen.
AUTH-005 und AUTH-006 lesen die föderierten Identitäten des Tailnets, die die Admin-
Konsole als Vertrauensnachweise bezeichnet. Sie stammen aus derselben Key-Liste wie
Auth-Keys, daher wird erwartet, dass auth_keys:read sie abdeckt. Das wurde nicht
gegen ein Live-Tailnet bestätigt. Wenn die Key-Liste nicht gelesen werden kann, melden
beide Prüfungen „nicht ausgewertet", anstatt zu bestehen. Ob ein fehlender Bereich einen
Fehler zurückgibt oder stattdessen die Liste mit herausgefilterten Identitäten zurückgibt,
ist unbestätigt; wenn er stillschweigend filtert, würde AUTH-005 melden, dass keine
Vertrauensnachweise existieren, und AUTH-006 hätte nichts zu prüfen.
Zusätzliche Bereiche für den Fix-Modus:
devices:core - Geräte löschen, Tags ändern (erfordert Tag-Auswahl)auth_keys - Auth-Keys löschenDEV-010 und DEV-012 berichten über Tailnet Lock, das die Tailscale-API nicht
als Tailnet-Einstellung bereitstellt. Geräte, die dadurch gesperrt sind, sind über die
API sichtbar, aber die Feststellung, ob Lock aktiviert ist, erfordert die lokale tailscale-CLI,
die den Daemon auf dem Rechner liest, auf dem tailsnitch läuft. Wenn du ein anderes
Tailnet mit --tailnet auditierst, behandle diesen Teil des Ergebnisses entsprechend. Verwende
--tailscale-path, wenn sich das Binary an einem nicht standardmäßigen Ort befindet.
API-Keys agieren als der Benutzer, der sie erstellt hat, und erben dessen Berechtigungen.
export TS_API_KEY="tskey-api-..."
Erstelle einen API-Key unter: https://login.tailscale.com/admin/settings/keys
# Vollständiges Audit ausführen
tailsnitch
# Auch bestandene Prüfungen anzeigen (ausführlich)
tailsnitch --verbose
# Ausgabe als JSON zur Verarbeitung
tailsnitch --json
# Bestimmtes Tailnet auditieren (wenn der OAuth-Client Zugriff auf mehrere hat)
tailsnitch --tailnet mycompany.com
# Nur kritische und hohe Schweregrade anzeigen
tailsnitch --severity high
# Nach Kategorie filtern
tailsnitch --category access # ACL-Probleme
tailsnitch --category auth # Authentifizierung & Keys
tailsnitch --category device # Gerätesicherheit
tailsnitch --category network # Netzwerkexposition
tailsnitch --category ssh # SSH-Regeln
tailsnitch --category log # Logging & Admin
# Nur bestimmte Prüfungen ausführen
tailsnitch --checks ACL-001,AUTH-001,DEV-010
tailsnitch --checks stale-devices,tailnet-lock-not-enabled
# Alle verfügbaren Prüfungen auflisten
tailsnitch --list-checks
Der Fix-Modus ermöglicht es dir, Probleme direkt über die Tailscale-API zu beheben:
# Interaktiver Fix-Modus
tailsnitch --fix
# Vorschau, was behoben würde (Probelauf)
tailsnitch --fix --dry-run
# Sichere Fixes automatisch auswählen (erfordert weiterhin Bestätigung)
tailsnitch --fix --auto
# Audit-Logging von Fix-Aktionen deaktivieren
tailsnitch --fix --no-audit-log
Per API behebbare Elemente:
| Prüfung | Aktion |
|---|---|
| AUTH-001, AUTH-002, AUTH-003 | Auth-Keys löschen |
| DEV-002 | Tags von Benutzergeräten entfernen |
| DEV-004 | Veraltete Geräte löschen |
| DEV-005 | Ausstehende Geräte autorisieren |
Der Fix-Modus bietet außerdem direkte Links zur Admin-Konsole für Probleme, die manuelles Eingreifen erfordern.
Erzeuge Nachweisberichte für SOC-2-Audits mit Common-Criteria-Controls-Zuordnungen (CC):
# Als JSON exportieren
tailsnitch --soc2 json > soc2-evidence.json
# Als CSV exportieren (für Tabellenkalkulationen)
tailsnitch --soc2 csv > soc2-evidence.csv
Der SOC-2-Bericht enthält:
Beispiel-CSV-Ausgabe:
resource_type,resource_id,resource_name,check_id,check_title,cc_codes,status,details,tested_at
device,node123,prod-server,DEV-001,Tagged devices with key expiry disabled,CC6.1;CC6.3,PASS,Tags: [tag:server] key expiry enabled,2025-01-05T10:30:00Z
key,tskey-auth-xxx,tskey-auth-xxx,AUTH-001,Reusable auth keys exist,CC6.1;CC6.2;CC6.3,FAIL,Reusable key expires in 45 days,2025-01-05T10:30:00Z
Erstelle eine .tailsnitch-ignore-Datei, um Befunde für bekannte, akzeptierte Risiken zu unterdrücken:
# .tailsnitch-ignore
# Informationelle Prüfungen ignorieren
ACL-008 # Wir verwenden absichtlich keine Gruppen
ACL-009 # Legacy-ACLs sind für unseren Anwendungsfall in Ordnung
# Bestimmte mittlere Prüfungen mit Begründung ignorieren
DEV-006 # Externe Geräte sind genehmigte Auftragnehmer
LOG-001 # Flow-Logs erfordern den Enterprise-Plan
# Ein Element innerhalb einer Prüfung ignorieren, statt die gesamte Prüfung stummzuschalten
ACL-011:tag:monitoring # bewusst breit ausgelegt; jedes andere Tag wird weiterhin geprüft
AUTH-001:tskey-auth-xxxx # rotiert automatisch über CI, verfolgt in TICKET-123