
Инструмент аудита безопасности для конфигураций Tailscale. Сканирует ваш tailnet на наличие неправильных конфигураций, излишне разрешительных политик доступа и нарушений лучших практик безопасности.
Аудитор безопасности конфигураций Tailscale. Tailsnitch сканирует вашу tailnet-сеть на наличие 57 ошибок конфигурации, излишне разрешающих контролей доступа и нарушений лучших практик безопасности.
# 1. Укажите свои учётные данные API Tailscale
export TS_API_KEY="tskey-api-..."
# 2. Запустите аудит
tailsnitch
# 3. Покажите только находки высокой степени серьёзности
tailsnitch --severity high
# 4. Исправьте некоторые проблемы ~интерактивно~ режим yolo
tailsnitch --fix
Загрузите последний релиз из GitHub Releases.
Пользователям macOS: Снимите атрибут quarantine после загрузки:
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 поддерживает два метода аутентификации. OAuth предпочтителен, если настроены оба.
OAuth-клиенты обеспечивают ограниченный, аудируемый доступ, который не истекает при увольнении сотрудников.
export TS_OAUTH_CLIENT_ID="..."
export TS_OAUTH_CLIENT_SECRET="tskey-client-..."
Создайте OAuth-клиент по адресу: https://login.tailscale.com/admin/settings/oauth
Необходимые области для аудита только на чтение:
all:read покрывает всё. Предоставление областей по отдельности:
| Область | Используется для |
|---|---|
policy_file:read | Файл политики tailnet — ACL-, NET-, SSH-* |
devices:core:read | Список устройств — DEV-, NET-, ACL-011 |
dns:read | Конфигурация DNS — DNS-001, DEV-007 |
auth_keys:read | Ключи аутентификации машин — AUTH-*, ACL-011 |
feature_settings:read | Настройки tailnet — DEV-008, DEV-009, DEV-014 |
logs:network:read | Настройка журналирования сетевого трафика — LOG-001 |
networking_settings:read | Настройка сертификатов HTTPS — NET-004 |
log_streaming:read | Назначения потоковой передачи журналов — LOG-002 |
webhooks:read | Конечные точки webhook — LOG-005, LOG-012 |
oauth_keys:read | OAuth-клиенты — LOG-006 |
users:read | Роли и статусы пользователей — USER-001, LOG-006 |
account_settings:read | Контакт для безопасности — LOG-011 |
devices:posture_attributes:read | Интеграции posture — DEV-014 |
Любая область, которую вы пропустите, влияет только на проверки, которым она нужна: такие проверки сообщают, что не смогли прочитать настройку, а не проходят успешно.
AUTH-005 и AUTH-006 читают федеративные удостоверения tailnet, которые консоль администратора называет доверенными учётными данными. Они поступают из того же списка ключей, что и ключи аутентификации, поэтому ожидается, что auth_keys:read их покрывает. Это не было подтверждено на живой tailnet-сети. Если список ключей не может быть прочитан, обе проверки сообщают «не оценено», а не «пройдено». Подтверждено ли, что отсутствующая область возвращает ошибку или вместо этого возвращает список с отфильтрованными удостоверениями, не установлено; если она фильтрует молча, AUTH-005 сообщит, что доверенных учётных данных не существует, а AUTH-006 не найдёт, что проверять.
Дополнительные области для режима исправления:
devices:core — Удаление устройств, изменение тегов (требуется выбор тега)auth_keys — Удаление ключей аутентификацииDEV-010 и DEV-012 сообщают о Tailnet Lock, который API Tailscale не раскрывает как настройку tailnet. Устройства, заблокированные им, видны через API, но определение того, включён ли lock, требует локального CLI tailscale, который читает демон на машине, где запущен tailsnitch. При аудите другой tailnet-сети с помощью --tailnet учитывайте эту часть результата соответствующим образом. Используйте --tailscale-path, если бинарный файл находится в нестандартном месте.
API-ключи действуют от имени пользователя, который их создал, и наследуют права этого пользователя.
export TS_API_KEY="tskey-api-..."
Создайте API-ключ по адресу: https://login.tailscale.com/admin/settings/keys
# Запуск полного аудита
tailsnitch
# Показ также проходящих проверок (подробный режим)
tailsnitch --verbose
# Вывод в формате JSON для обработки
tailsnitch --json
# Аудит конкретной tailnet-сети (когда OAuth-клиент имеет доступ к нескольким)
tailsnitch --tailnet mycompany.com
# Показ только критических проблем и проблем высокой серьёзности
tailsnitch --severity high
# Фильтрация по категории
tailsnitch --category access # Проблемы ACL
tailsnitch --category auth # Аутентификация и ключи
tailsnitch --category device # Безопасность устройств
tailsnitch --category network # Сетевая доступность
tailsnitch --category ssh # Правила SSH
tailsnitch --category log # Журналирование и администрирование
# Запуск только конкретных проверок
tailsnitch --checks ACL-001,AUTH-001,DEV-010
tailsnitch --checks stale-devices,tailnet-lock-not-enabled
# Список всех доступных проверок
tailsnitch --list-checks
Режим исправления позволяет устранять проблемы напрямую через API Tailscale:
# Интерактивный режим исправления
tailsnitch --fix
# Предпросмотр того, что будет исправлено (пробный запуск)
tailsnitch --fix --dry-run
# Автовыбор безопасных исправлений (всё равно требует подтверждения)
tailsnitch --fix --auto
# Отключение журналирования аудита действий по исправлению
tailsnitch --fix --no-audit-log
Элементы, исправляемые через API:
| Проверка | Действие |
|---|---|
| AUTH-001, AUTH-002, AUTH-003 | Удаление ключей аутентификации |
| DEV-002 | Удаление тегов с пользовательских устройств |
| DEV-004 | Удаление устаревших устройств |
| DEV-005 | Авторизация ожидающих устройств |
Режим исправления также предоставляет прямые ссылки на консоль администратора для проблем, требующих ручного вмешательства.
Создание отчётов-доказательств для аудитов SOC 2 с сопоставлением общих критериев (CC):
# Экспорт в JSON
tailsnitch --soc2 json > soc2-evidence.json
# Экспорт в CSV (для электронных таблиц)
tailsnitch --soc2 csv > soc2-evidence.csv
Отчёт SOC 2 включает:
Пример вывода 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
Создайте файл .tailsnitch-ignore, чтобы скрывать находки для известных принятых рисков:
# .tailsnitch-ignore
# Игнорирование информационных проверок
ACL-008 # Мы намеренно не используем группы
ACL-009 # Устаревшие ACL подходят для нашего случая использования
# Игнорирование конкретных проверок средней серьёзности с обоснованием
DEV-006 # Внешние устройства — одобренные подрядчики
LOG-001 # Журналы потоков требуют тарифного плана Enterprise
# Игнорирование одного элемента в проверке вместо отключения всей проверки
ACL-011:tag:monitoring # широкий по замыслу; каждый другой тег всё равно проверяется
AUTH-001:tskey-auth-xxxx # автоматически ротируется через CI, отслеживается в TICKET-123