ハクソク

世界を動かす技術を、日本語で。

Show HN: Tailsnitch – Tailscaleのセキュリティ監査ツール

概要

Tailsnitchは、Tailscale環境のセキュリティ監査ツール。
50以上の設定ミスや過剰な権限、ベストプラクティス違反を自動検出。
OAuthやAPIキー認証、インタラクティブな問題修正機能を搭載。
SOC 2監査証跡やCI/CD統合にも対応。
柔軟なフィルタ・エクスポート・無視リスト機能を提供。

Tailsnitch:Tailscale設定のセキュリティ監査ツール

  • TailsnitchはTailscaleネットワーク(tailnet)をスキャンし、50以上の設定ミスやリスクを検出
  • アクセス制御の過剰許可セキュリティベストプラクティス違反の特定
  • 重大度別のフィルタカテゴリ別抽出が可能

クイックスタート

  • Tailscale API認証情報の設定
    • export TSKEY="tskey-api-..."
  • 監査実行
    • tailsnitch
  • 重大度「高」だけ表示
    • tailsnitch --severity high
  • インタラクティブな修正モード
    • tailsnitch --fix

インストール方法

  • GitHub Releasesからバイナリダウンロード
    • macOSの場合、ダウンロード後にquarantine属性削除
      • sudo xattr -rd com.apple.quarantine tailsnitch
  • Goによるインストール
    • go install github.com/Adversis/tailsnitch@latest
  • ソースビルド
    • git clone ... && cd tailsnitch && go build -o tailsnitch .

認証方式

  • OAuthクライアント(推奨)
    • スコープ制御・監査対応・従業員退職時も有効
    • 必要な環境変数:
      • export TS_OAUTH_CLIENT_ID="..."
      • export TS_OAUTH_CLIENT_SECRET="tskey-client-..."
    • 作成: Tailscale OAuth設定ページ
    • 監査用スコープ:
      • all:read(簡単)または個別スコープ(例: policy_file:readdevices:core:read等)
    • 修正モード用追加スコープ:
      • devices:coreauth_keys
  • APIキー

使い方例

  • フル監査
    • tailsnitch
  • 合格チェックも表示(詳細モード)
    • tailsnitch --verbose
  • JSON出力
    • tailsnitch --json
  • 特定tailnetを指定
    • tailsnitch --tailnet mycompany.com

結果のフィルタ

  • 重大度でフィルタ
    • tailsnitch --severity high
  • カテゴリでフィルタ
    • tailsnitch --category access(アクセス制御)
    • 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 --list-checks

インタラクティブ修正モード

  • API経由で直接修正
    • tailsnitch --fix
    • ドライラン(プレビュー): tailsnitch --fix --dry-run
    • 安全な修正自動選択: tailsnitch --fix --auto
    • 監査ログ無効化: tailsnitch --fix --no-audit-log
  • 修正可能な主な項目
    • 認証キー削除(AUTH-001, AUTH-002, AUTH-003)
    • エフェメラルキーへの置換(AUTH-004)
    • ユーザーデバイスのタグ削除(DEV-002)
    • ステールデバイス削除(DEV-004)
    • 保留中デバイスの承認(DEV-005)
  • 手動対応が必要な問題は管理コンソールへのリンクを提供

SOC 2監査エビデンス出力

  • エビデンスレポート出力(Common Criteriaマッピング付き)
    • JSON形式: tailsnitch --soc2 json > soc2-evidence.json
    • CSV形式: tailsnitch --soc2 csv > soc2-evidence.csv
  • 各リソースごとのテスト結果、CCコード、合否、タイムスタンプを記録

既知リスクの無視リスト

  • .tailsnitch-ignoreファイルで特定の検出結果を抑制
    • 例:
      • ACL-008(情報レベルのチェックを無視)
      • DEV-006(外部委託業者のデバイス許可)
  • 無視ファイルの検索順
    • カレントディレクトリ→ホームディレクトリ
  • 明示的なファイル指定:
    • tailsnitch --ignore-file /path/to/ignore
  • 無視処理の完全無効化:
    • tailsnitch --no-ignore

JSON出力とデータ処理

  • フルレポート出力
    • tailsnitch --json > audit.json
  • 失敗チェックのみ抽出(TSV)
    • tailsnitch --json | jq -r ... > findings.tsv
  • 重大度ごとのサマリ
    • tailsnitch --json | jq ...
  • 管理リンク付き重大/高レベル問題一覧
    • tailsnitch --json | jq -r ...

コマンドリファレンス

  • 主なフラグ一覧
    • --json:JSON出力
    • --severity:重大度フィルタ
    • --category:カテゴリフィルタ
    • --checks:特定チェックのみ実行
    • --list-checks:全チェック一覧
    • --tailnet:監査対象tailnet指定
    • --verbose:合格チェックも表示
    • --fix:修正モード
    • --auto:安全な修正自動選択
    • --dry-run:修正プレビュー
    • --no-audit-log:修正時の監査ログ無効
    • --soc2:SOC 2エビデンス出力
    • --tailscale-path:tailscale CLIのパス指定
    • --ignore-file:無視ファイルパス指定
    • --no-ignore:無視処理無効
    • --version:バージョン情報表示

セキュリティチェック一覧

  • 全52項目・7カテゴリ
    • クリティカル例
      • ACL-001:デフォルト「全許可」ポリシー
      • ACL-002:SSH設定ミスで非rootユーザーも許可
      • ACL-006:tagOwnersが広範囲
      • ACL-007:外部ユーザーへの権限付与
    • 高リスク例
      • AUTH-001:再利用可能な認証キー
      • DEV-001:タグ付きデバイスにキー有効期限なし
      • DEV-010:Tailnet Lock無効
      • NET-001:インターネット公開
      • SSH-002:root SSHで再認証不要
    • 中リスク例
      • ACL-004:外部ユーザー含む設定
      • DEV-003:古いクライアント
      • NET-006:ローカルサービス露出
      • SSH-003:セッションUI露出
    • 情報レベル:ログ設定、DNS、ユーザーロール、手動確認項目

監査出力例

  • 監査サマリ
    • クリティカル: 1件、高: 3件、中: 5件、低: 2件、情報: 8件
    • 合格: 33件、合計: 19件の問題

Tailnet Lockチェック

  • **Tailnet Lock関連チェック(DEV-010, DEV-012)**はローカルCLI経由で実行
    • --tailscale-pathでCLIパス指定可能

CI/CD統合

  • CI/CDパイプラインでの利用例(GitHub Actions等)
    • 重大・高リスク検出時にビルド失敗
    • JSONレポート生成や自動チェック組み込み

参考情報・ライセンス

  • Tailscale Security Hardening GuideACL Syntax Referenceなど公式ドキュメント参照
  • MITライセンス下で提供
  • コントリビューションガイドラインはCONTRIBUTING.md参照

Tailsnitchは、Tailscale環境のセキュリティ強化・運用効率化に不可欠なツール。
柔軟な監査・修正・エビデンス出力機能で、組織のセキュリティ体制を強力にサポート。

Hackerたちの意見

すごくクール!これって https://github.com/tailscale/tailscale/issues/11717 をチェックしてるの?
API経由でACLをチェックしてるけど、これについてはちょっと調べないとわからないな。
ハハハ、これ大好き。でも、コアインフラに対して使うセキュリティツールが、ユーザーに「隔離を解除して使え」って言うようなランダムなバイナリじゃない方がいいと思うよね。`sudo xattr -rd com.apple.quarantine` みたいな。macOSでの動作には時々ため息が出るけど、冗談はさておき、これは素晴らしいね。ユーザーが作成したカスタムルールで「カスタムチェック」を許可する計画はあるの?
ハハ、あれには `sketchy` って書いたよ。賛成だね。悪くないアイデアだから、リストに追加しておくよ。
たぶん、設定をコピーしてこれをVMに入れた方がいいと思う。そうしないと、リスクを増やすだけだと思う。
もしかしてバカな質問かもしれないけど、Tailscaleが全ユーザーに対してこれを実行しない理由やインセンティブってあるのかな?それとも「今すぐスキャン」ボタンみたいなものを提供しないの?このツールのアイデアは大好きで、絶対に使うつもりだけど、プラットフォーム自体にこういう機能があればいいなと思ってる。彼らのブランドにも合ってるし、有料のセキュリティ監査を提供してるわけでもないしね。
いや、Tailscaleは時点報告を提供するべきだよ(GUIでボタンをクリックして、キューにあるものをスキャンして報告を作成、報告リンクはGUIに保存されて、十分なアクセス権を持つユーザーなら誰でもその報告を取得できる)。それに、APIを通じて必要なものを公開して、自動化されたGRC証拠収集システム(例えば、VantaやAnecdotes)にこれらの証明を提供できるようにするべきだと思う。ソフトウェア定義ネットワークのテナントやコントロールプレーンの継続的なコンプライアンス監視に近い感じで、CNAPPから得られるものに似てるけど、このユースケースに特化して、監査やコンプライアンス向けにもっと調整されてる感じ。正直、彼らのエンタープライズユーザーがこれを求めてないとは思えないけど。
これこそ探してたものだ!Tailscaleが大好きだけど、私たちのテイルネットが「私と数台のサーバー」から「エンジニアリングチーム全体 + 本番/ステージング/開発環境」に成長するにつれて、ACLファイルが恐ろしいほど長くなってしまった。タグを開きすぎちゃったり、HuJSONのソース/デスティネーションルールを間違えたんじゃないかって、いつも低レベルの不安を抱えてる。他にも同じような人いる?CI/CDで動作できるのは大きな勝利だね。
Tailscaleのポリシーテストはちょっと書きにくいけど、変更に自信を持つのに役立ってるよ。 https://tailscale.com/kb/1337/policy-syntax#tests
これってHeadscaleでも動くの? [1] https://headscale.net/ | https://github.com/juanfont/headscale
これは設定用のリンターなんだね。私が期待してたのは、Tailscaleユーザーが共通の「管理者」アカウントにSSH接続した時に、ライブのauditd通知を提供してくれるものだったんだ。Tailscaleデーモンは接続しているユーザーを知ってるはずで、その情報をジャーナルに公開してるのを見たことがあるけど、構造化された報告パイプラインを通してほしいな。私が知る限り、Tailscale自体はいくつか似たようなものを提供してるけど、ちょっと違うんだよね。例えば、https://tailscale.com/kb/1203/audit-logging はテイルネット自体の変更(ノードの追加など)をログすることについてで、https://tailscale.com/kb/1246/tailscale-ssh-session-recordin... は単純なイベント(XYZがログイン/XYZセッションがアイドル/XYZが切断)を記録するんじゃなくてSSHセッションを記録してるし。(ああ、共通の管理者アカウントについては意見があるのは知ってるけど、TailscaleはFBが説明したように、みんなが同じルートアカウントにアクセスする別のルートだと思う。自分の資格情報でアクセスするのはいいけど、共有キーでアクセスするのは非常に悪いってことだね。https://engineering.fb.com/2016/09/12/security/scalable-and-)
それ、いいアイデアだね。検出と対応チームにはすごく役立ちそう。エージェントやEDRを通じて、標準のOSテレメトリでいくつかの情報を得られるんじゃないかな。
Teleportがキャプチャするようなログが欲しいってことだね。 https://github.com/gravitational/teleport
ちょうどこれをマージしたよ。 https://github.com/tailscale/tailscale/pull/18333
たぶん、彼らの進捗について100%把握してるわけじゃないけど(教えてくれてもいいよ)、Tailscaleは優秀な人たちが集まる小さなスタートアップには完璧な感じだけど、成長してあまり優秀じゃない人を雇うと、壊滅的に崩壊するリスクがあると思う。家では無料版を使ってる。これがあるだけで、俺の懐疑心が少しは正当化される気がする。
このツールはSOC2の証拠を提供するのを少し楽にしてくれるし、$dayJobでSOC2の旅を始めたときにこれがあればよかったなって思う。