
Un auditeur de sécurité pour les configurations Tailscale. Analyse votre tailnet pour les mauvaises configurations, les contrôles d'accès trop permissifs et les violations des bonnes pratiques de sécurité.
Un auditeur de sécurité pour les configurations Tailscale. Tailsnitch analyse votre tailnet à la recherche de 57 mauvaises configurations, de contrôles d'accès trop permissifs et de violations des bonnes pratiques de sécurité.
# 1. Définissez vos identifiants API Tailscale
export TS_API_KEY="tskey-api-..."
# 2. Lancez l'audit
tailsnitch
# 3. Affichez uniquement les résultats de sévérité élevée
tailsnitch --severity high
# 4. Corrigez certains problèmes ~interactivement~ mode yolo
tailsnitch --fix
Téléchargez la dernière version depuis GitHub Releases.
Utilisateurs macOS : Supprimez l'attribut de quarantaine après le téléchargement :
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 prend en charge deux méthodes d'authentification. OAuth est préféré lorsque les deux sont configurés.
Les clients OAuth fournissent un accès limité et auditable qui n'expire pas lorsque des employés quittent l'entreprise.
export TS_OAUTH_CLIENT_ID="..."
export TS_OAUTH_CLIENT_SECRET="tskey-client-..."
Créez un client OAuth à l'adresse : https://login.tailscale.com/admin/settings/oauth
Portées requises pour un audit en lecture seule :
all:read couvre tout. Attribution des portées individuellement :
| Portée | Utilisée pour |
|---|---|
policy_file:read | Fichier de politique du tailnet — ACL-, NET-, SSH-* |
devices:core:read | Liste des appareils — DEV-, NET-, ACL-011 |
dns:read | Configuration DNS — DNS-001, DEV-007 |
auth_keys:read | Clés d'authentification machine — AUTH-*, ACL-011 |
feature_settings:read | Paramètres du tailnet — DEV-008, DEV-009, DEV-014 |
logs:network:read | Paramètre de journalisation des flux réseau — LOG-001 |
networking_settings:read | Paramètre des certificats HTTPS — NET-004 |
log_streaming:read | Destinations de diffusion des journaux — LOG-002 |
webhooks:read | Points de terminaison webhook — LOG-005, LOG-012 |
oauth_keys:read | Clients OAuth — LOG-006 |
users:read | Rôles et statuts des utilisateurs — USER-001, LOG-006 |
account_settings:read | Contact de sécurité — LOG-011 |
devices:posture_attributes:read | Intégrations de posture — DEV-014 |
Toute portée que vous omettez n'affecte que les vérifications qui en ont besoin : ces vérifications signalent qu'elles n'ont pas pu lire le paramètre plutôt que de le considérer comme réussi.
AUTH-005 et AUTH-006 lisent les identités fédérées du tailnet, que la console d'administration appelle les informations d'identification de confiance. Elles proviennent de la même liste de clés que les clés d'authentification, donc auth_keys:read est censé les couvrir. Cela n'a pas été confirmé sur un tailnet en production. Si la liste des clés ne peut pas être lue, les deux vérifications signalent « non évalué » plutôt que réussi. On ne sait pas si une portée manquante renvoie une erreur ou renvoie plutôt la liste avec les identités filtrées ; si elle filtre silencieusement, AUTH-005 signalerait qu'aucune information d'identification de confiance n'existe et AUTH-006 ne trouverait rien à vérifier.
Portées supplémentaires pour le mode de correction :
devices:core - Supprimer des appareils, modifier les tags (nécessite la sélection de tags)auth_keys - Supprimer les clés d'authentificationDEV-010 et DEV-012 signalent l'état de Tailnet Lock, que l'API Tailscale n'expose pas comme paramètre du tailnet. Les appareils verrouillés par celui-ci sont visibles via l'API, mais déterminer si le verrouillage est activé nécessite le CLI local tailscale, qui lit le démon sur la machine exécutant tailsnitch. Lors de l'audit d'un autre tailnet avec --tailnet, traitez cette partie du résultat en conséquence. Utilisez --tailscale-path si le binaire se trouve dans un emplacement non standard.
Les clés API opèrent en tant qu'utilisateur qui les a créées et héritent des autorisations de cet utilisateur.
export TS_API_KEY="tskey-api-..."
Créez une clé API à l'adresse : https://login.tailscale.com/admin/settings/keys
# Lancez l'audit complet
tailsnitch
# Affichez également les vérifications réussies (mode verbeux)
tailsnitch --verbose
# Sortie au format JSON pour traitement
tailsnitch --json
# Auditez un tailnet spécifique (lorsque le client OAuth a accès à plusieurs)
tailsnitch --tailnet mycompany.com
# Affichez uniquement les problèmes critiques et de sévérité élevée
tailsnitch --severity high
# Filtrer par catégorie
tailsnitch --category access # Problèmes ACL
tailsnitch --category auth # Authentification et clés
tailsnitch --category device # Sécurité des appareils
tailsnitch --category network # Exposition réseau
tailsnitch --category ssh # Règles SSH
tailsnitch --category log # Journalisation et administration
# Exécutez uniquement des vérifications spécifiques
tailsnitch --checks ACL-001,AUTH-001,DEV-010
tailsnitch --checks stale-devices,tailnet-lock-not-enabled
# Listez toutes les vérifications disponibles
tailsnitch --list-checks
Le mode de correction vous permet de remédier directement aux problèmes via l'API Tailscale :
# Mode de correction interactif
tailsnitch --fix
# Aperçu de ce qui serait corrigé (essai à blanc)
tailsnitch --fix --dry-run
# Sélection automatique des corrections sûres (nécessite toujours une confirmation)
tailsnitch --fix --auto
# Désactivez la journalisation d'audit des actions de correction
tailsnitch --fix --no-audit-log
Éléments corrigibles via l'API :
| Vérification | Action |
|---|---|
| AUTH-001, AUTH-002, AUTH-003 | Supprimer les clés d'authentification |
| DEV-002 | Retirer les tags des appareils utilisateur |
| DEV-004 | Supprimer les appareils obsolètes |
| DEV-005 | Autoriser les appareils en attente |
Le mode de correction fournit également des liens directs vers la console d'administration pour les problèmes nécessitant une intervention manuelle.
Générez des rapports de preuves pour les audits SOC 2 avec les correspondances des critères communs (CC) :
# Export au format JSON
tailsnitch --soc2 json > soc2-evidence.json
# Export au format CSV (pour les feuilles de calcul)
tailsnitch --soc2 csv > soc2-evidence.csv
Le rapport SOC 2 comprend :
Exemple de sortie CSV :
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
Créez un fichier .tailsnitch-ignore pour supprimer les résultats concernant les risques acceptés connus :
# .tailsnitch-ignore
# Ignorez les vérifications informatives
ACL-008 # Nous n'utilisons volontairement pas de groupes
ACL-009 # Les ACL héritées conviennent à notre cas d'utilisation