
tailsnitch v1.7
Um auditor de segurança para configurações do Tailscale. Escaneia sua tailnet em busca de configurações incorretas, controles de acesso excessivamente permissivos e violações de boas práticas de segurança.
Tailsnitch
Um auditor de segurança para configurações do Tailscale. O Tailsnitch verifica sua tailnet em busca de 57 configurações incorretas, controles de acesso excessivamente permissivos e violações de boas práticas de segurança.
Início Rápido
# 1. Defina suas credenciais da API do Tailscale
export TS_API_KEY="tskey-api-..."
# 2. Execute a auditoria
tailsnitch
# 3. Veja apenas descobertas de alta gravidade
tailsnitch --severity high
# 4. Corrija alguns problemas ~interativamente~ modo yolo
tailsnitch --fix
Instalação
Baixar Binário Pré-compilado
Baixe a versão mais recente em GitHub Releases.
Usuários de macOS: Remova o atributo de quarentena após o download:
sudo xattr -rd com.apple.quarantine tailsnitch
Instalar via Go
go install github.com/Adversis/tailsnitch@latest
Compilar a partir do Código-fonte
git clone https://github.com/Adversis/tailsnitch.git
cd tailsnitch
go build -o tailsnitch .
Autenticação
O Tailsnitch suporta dois métodos de autenticação. OAuth é preferido quando ambos estão configurados.
Opção 1: Cliente OAuth (Recomendado)
Clientes OAuth fornecem acesso com escopo e auditável que não expira quando funcionários saem da empresa.
export TS_OAUTH_CLIENT_ID="..."
export TS_OAUTH_CLIENT_SECRET="tskey-client-..."
Crie um cliente OAuth em: https://login.tailscale.com/admin/settings/oauth
Escopos necessários para auditoria somente leitura:
all:read cobre tudo. Concedendo escopos individualmente:
| Escopo | Usado para |
|---|---|
policy_file:read | Arquivo de política da tailnet — ACL-, NET-, SSH-* |
devices:core:read | Lista de dispositivos — DEV-, NET-, ACL-011 |
dns:read | Configuração de DNS — DNS-001, DEV-007 |
auth_keys:read | Chaves de autenticação de máquina — AUTH-*, ACL-011 |
feature_settings:read | Configurações da tailnet — DEV-008, DEV-009, DEV-014 |
logs:network:read | Configuração de registro de fluxo de rede — LOG-001 |
networking_settings:read | Configuração de certificado HTTPS — NET-004 |
log_streaming:read | Destinos de streaming de logs — LOG-002 |
webhooks:read | Endpoints de webhook — LOG-005, LOG-012 |
oauth_keys:read | Clientes OAuth — LOG-006 |
users:read | Funções e status de usuários — USER-001, LOG-006 |
account_settings:read | Contato de segurança — LOG-011 |
devices:posture_attributes:read | Integrações de postura — DEV-014 |
Qualquer escopo que você omitir afeta apenas as verificações que precisam dele: essas verificações relatam que não conseguiram ler a configuração em vez de passar.
AUTH-005 e AUTH-006 leem as identidades federadas da tailnet, que o console
de administração chama de credenciais de confiança. Elas chegam da mesma listagem de chaves que as
chaves de autenticação, então espera-se que auth_keys:read as cubra. Isso não foi confirmado
contra uma tailnet ativa. Se a listagem de chaves não puder ser lida, ambas as verificações relatam
"não avaliado" em vez de passar. Se um escopo ausente retorna um erro ou em vez disso
retorna a listagem com as identidades filtradas não foi confirmado; se
filtrar silenciosamente, AUTH-005 relataria que nenhuma credencial de confiança existe e
AUTH-006 não encontraria nada para verificar.
Escopos adicionais para o modo de correção:
devices:core- Excluir dispositivos, modificar tags (requer seleção de tag)auth_keys- Excluir chaves de autenticação
Tailnet Lock
DEV-010 e DEV-012 relatam sobre Tailnet Lock, que a API do Tailscale não
expõe como uma configuração da tailnet. Dispositivos bloqueados por ele são visíveis através da
API, mas determinar se o lock está habilitado precisa do CLI local tailscale,
que lê o daemon na máquina que executa o tailsnitch. Ao auditar outra
tailnet com --tailnet, trate essa parte do resultado de acordo. Use
--tailscale-path se o binário estiver em um local não padrão.
Opção 2: Chave de API
Chaves de API operam como o usuário que as criou e herdam as permissões desse usuário.
export TS_API_KEY="tskey-api-..."
Crie uma chave de API em: https://login.tailscale.com/admin/settings/keys
Exemplos de Uso
Auditoria Básica
# Executar auditoria completa
tailsnitch
# Mostrar também verificações aprovadas (verboso)
tailsnitch --verbose
# Saída como JSON para processamento
tailsnitch --json
# Auditar uma tailnet específica (quando o cliente OAuth tem acesso a várias)
tailsnitch --tailnet mycompany.com
Filtrar Resultados
# Mostrar apenas problemas críticos e de alta gravidade
tailsnitch --severity high
# Filtrar por categoria
tailsnitch --category access # Problemas de ACL
tailsnitch --category auth # Autenticação e chaves
tailsnitch --category device # Segurança de dispositivos
tailsnitch --category network # Exposição de rede
tailsnitch --category ssh # Regras de SSH
tailsnitch --category log # Registros e administração
# Executar apenas verificações específicas
tailsnitch --checks ACL-001,AUTH-001,DEV-010
tailsnitch --checks stale-devices,tailnet-lock-not-enabled
# Listar todas as verificações disponíveis
tailsnitch --list-checks
Modo de Correção Interativo
O modo de correção permite remediar problemas diretamente via API do Tailscale:
# Modo de correção interativo
tailsnitch --fix
# Pré-visualizar o que seria corrigido (execução de teste)
tailsnitch --fix --dry-run
# Auto-selecionar correções seguras (ainda requer confirmação)
tailsnitch --fix --auto
# Desabilitar registro de auditoria das ações de correção
tailsnitch --fix --no-audit-log
Itens corrigíveis via API:
| Verificação | Ação |
|---|---|
| AUTH-001, AUTH-002, AUTH-003 | Excluir chaves de autenticação |
| DEV-002 | Remover tags de dispositivos de usuários |
| DEV-004 | Excluir dispositivos obsoletos |
| DEV-005 | Autorizar dispositivos pendentes |
O modo de correção também fornece links diretos para o console de administração para problemas que exigem intervenção manual.
Exportação de Evidências SOC 2
Gere relatórios de evidências para auditorias SOC 2 com mapeamentos de controles de Critérios Comuns (CC):
# Exportar como JSON
tailsnitch --soc2 json > soc2-evidence.json
# Exportar como CSV (para planilhas)
tailsnitch --soc2 csv > soc2-evidence.csv
O relatório SOC 2 inclui:
- Resultados de teste por recurso (cada dispositivo, chave, regra de ACL testada individualmente)
- Mapeamentos de códigos CC (CC6.1, CC6.2, CC6.3, CC6.6, CC7.1, CC7.2, etc.)
- Status Aprovado/Reprovado/N/A para cada teste de controle
- Carimbo de data/hora para trilha de auditoria
Exemplo de saída 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
Ignorar Riscos Conhecidos
Crie um arquivo .tailsnitch-ignore para suprimir descobertas de riscos conhecidos e aceitos:
# .tailsnitch-ignore
# Ignorar verificações informativas
ACL-008 # Não usamos grupos intencionalmente
ACL-009 # ACLs legadas são suficientes para nosso caso de uso
# Ignorar verificações médias específicas com justificativa
DEV-006 # Dispositivos externos são contratados aprovados
LOG-001 # Logs de fluxo exigem plano Enterprise
# Ignorar um item dentro de uma verificação, em vez de silenciar a verificação inteira
ACL-011:tag:monitoring # amplo por design; todas as outras tags ainda são verificadas
AUTH-001:tskey-auth-xxxx # rotaciona automaticamente via CI, rastreado em TICKET-123