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

2026/01/06 1:47

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

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Tailsnitch は、52項目を7つのカテゴリ(アクセス、認証、ネットワーク、SSH、ログ、デバイス、DNS)に分類した検査で、誤設定や過度に許容的なアクセス制御、ベストプラクティス違反を監査する軽量CLIツールです。
ユーザーは

tailsnitch
のようなシンプルなコマンドで実行し、結果を severity(
--severity
)、カテゴリ(
--category
)、特定のチェックID(
--checks
)または tailnet(
--tailnet
)でフィルタリングでき、SOC 2 証拠として JSON または CSV へエクスポートできます。
ツールは
tailsnitch --fix
による対話型修復をサポートし、dry‑run、auto‑select、および古いデバイス、保留中の承認、auth keys、タグなどの問題を自動的に修正するオプションがあります。
認証は OAuth(推奨)または API キーで行われます;監査モードでは
policy_file:read
devices:core:read
のスコープが必要で、修復モードではさらに
auth_keys
devices:core
が必要です。
インストールは簡単です:GitHub Releases から事前ビルドされたバイナリをダウンロードするか、
go install github.com/Adversis/tailsnitch@latest
を実行するか、ソースコード(
git clone https://github.com/Adversis/tailsnitch.git
)をビルドします。
既知のリスクは
.tailsnitch-ignore
ファイルで抑制できます(例:
ACL‑008
DEV‑006
のようなエントリー)。このファイルは現在とホームディレクトリに検索され、
--no-ignore
で無効化可能です。
Tailnet‑Lock チェック(
DEV‑010
DEV‑012
)にはローカルの Tailscale CLI が必要で、遠隔監査時にはマシンの状態を反映し、
--tailscale-path
を使用して上書きできます。
JSON エクスポートはポストプロセッシング(例:
jq
で失敗や severity の概要を一覧表示)用に設計されており、
--soc2 json
または
--soc2 csv
により SOC 2 証拠の生成もサポートします。
最後に、Tailsnitch は CI/CD パイプライン(GitHub Actions など)へ統合でき、重大または高 severity の発見があった場合にビルドを自動的に失敗させることで、チームが継続的にセキュリティポリシーを強制するのに役立ちます。

本文

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

Tailsnitch は、あなたの Tailnet をスキャンし、50 以上の誤設定、過度に許容的なアクセス制御、およびセキュリティベストプラクティス違反を検出します。


クイックスタート

  1. Tailscale API 認証情報を設定
    export TSKEY="tskey-api-..."
    
  2. 監査実行
    tailsnitch
    
  3. 高重大度の結果のみ表示
    tailsnitch --severity high
    
  4. いくつかの問題を修正(インタラクティブ「yolo」モード)
    tailsnitch --fix
    

インストール

事前ビルド済みバイナリをダウンロード

  • GitHub Releases から最新版を入手します。
    macOS ユーザーはダウンロード後に隔離解除してください:
    sudo xattr -rd com.apple.quarantine tailsnitch
    

Go を使ってインストール

go install github.com/Adversis/tailsnitch@latest

ソースからビルド

git clone https://github.com/Adversis/tailsnitch.git
cd tailsnitch
go build -o tailsnitch .

認証

Tailsnitch は 2 種類の認証方法をサポートします。両方が設定されている場合は OAuth が推奨です。

オプション説明
OAuth クライアント(推奨)スコープ付きで監査可能なアクセス権限。従業員退職後も継続します。
API キー作成者のユーザーとして動作し、そのユーザーの権限を継承します。

OAuth クライアント

export TS_OAUTH_CLIENT_ID="..."
export TS_OAUTH_CLIENT_SECRET="tskey-client-..."

クライアントは https://login.tailscale.com/admin/settings/oauth で作成してください。

読み取り専用監査に必要なスコープ:

  • all:read
    (最も簡単)または個別:
    • policy_file:read
      – ACL ポリシー
    • devices:core:read
      – デバイス一覧
    • dns:read
      – DNS 設定
    • auth_keys:read
      – 認証キー

修正モードに必要な追加スコープ:

  • devices:core
    – デバイス削除、タグ変更(タグ選択が必要)
  • auth_keys
    – 認証キー削除

API キー

export TSKEY="tskey-api-..."

API キーは https://login.tailscale.com/admin/settings/keys で作成します。


使用例

基本監査

tailsnitch                # 完全監査
tailsnitch --verbose      # 成功したチェックも表示
tailsnitch --json         # JSON 出力(処理用)
tailsnitch --tailnet mycompany.com  # 特定 Tailnet を監査(OAuth のみ)

結果をフィルタリング

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 --list-checks                          # 利用可能な全チェックを表示

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

tailsnitch --fix                      # インタラクティブ修正モード
tailsnitch --fix --dry-run            # 修正のプレビュー(ドライラン)
tailsnitch --fix --auto               # 安全な修正を自動選択(確認が必要)
tailsnitch --fix --no-audit-log       # 修正アクションの監査ログを無効化

API で修正可能な項目

チェックアクション
AUTH-001, AUTH-002, AUTH-003認証キー削除
AUTH-004一時的キーに置き換え
DEV-002ユーザー・デバイスからタグを削除
DEV-004スタールデバイス削除
DEV-005保留中のデバイス承認

修正モードでは、手動介入が必要な問題に対して管理コンソールへの直接リンクも提供します。


SOC 2 証拠エクスポート

Common Criteria(CC)制御マッピング付きで SOC 2 監査用証拠レポートを生成します。

tailsnitch --soc2 json > soc2-evidence.json   # JSON エクスポート
tailsnitch --soc2 csv  > soc2-evidence.csv   # CSV エクスポート(スプレッドシート向け)

レポートには次が含まれます:

  • リソース別テスト結果
  • CC コードマッピング(例:
    CC6.1
    ,
    CC7.1
  • 各制御テストの Pass/Fail/N/A ステータス
  • 監査トレイル用タイムスタンプ

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 プランが必要

Ignore ファイルの検索順序(優先度)

  1. 現在ディレクトリ内の
    .tailsnitch-ignore
  2. ホームディレクトリ
    ~/.tailsnitch-ignore

追加オプション:

tailsnitch --ignore-file /path/to/ignore  # 指定ファイルを使用
tailsnitch --no-ignore                    # Ignore ファイル処理を完全に無効化

JSON エクスポートと処理

tailsnitch --json > audit.json   # 完全レポート出力

失敗したチェックを TSV で抽出

tailsnitch --json | jq -r '
  .suggestions
  | map(select(.pass == false))
  | .[]
  | [.id, .title, .severity, .remediation]
  | @tsv
' > findings.tsv

重大度別のサマリー

tailsnitch --json | jq '
  .suggestions
  | map(select(.pass == false))
  | group_by(.severity)
  | map({severity: .[0].severity, count: length})
'

管理リンク付きクリティカル/ハイ問題リスト

tailsnitch --json | jq -r '
  .suggestions
  | map(select(.pass == false and (.severity == "CRITICAL" or .severity == "HIGH")))
  | .[]
  | "\(.id): \(.title)\n  Fix: \(.fix.admin_url // "manual")\n"
'

コマンドリファレンス

フラグ説明
--json
JSON 出力
--severity
最小重大度フィルタ(
critical
,
high
,
medium
,
low
,
info
--category
カテゴリフィルタ(
access
,
auth
,
network
,
ssh
,
log
,
device
,
dns
--checks
個別チェック(カンマ区切り ID またはスラグ)
--list-checks
利用可能な全チェックをリストして終了
--tailnet
監査対象 Tailnet(API キーのデフォルト)
--verbose
成功したチェックも表示
--fix
インタラクティブ修正モードを有効化
--auto
安全な修正を自動選択(
--fix
必須)
--dry-run
修正のプレビューのみ実行(
--fix
必須)
--no-audit-log
修正アクションの監査ログを無効化
--soc2
SOC 2 証拠エクスポート(
json
または
csv
--tailscale-path
Tailnet Lock チェック用 tailscale CLI のパス
--ignore-file
Ignore ファイルのパス
--no-ignore
Ignore ファイル処理を無効化
--version
バージョン情報表示

セキュリティチェック

Tailsnitch は 7 カテゴリにわたる 52 のセキュリティチェックを実行します。各チェックの詳細は

docs/CHECKS.md
を参照してください。

クリティカル(Critical)

IDチェックリスク
ACL-001デフォルト
'allow all'
ポリシー
全デバイスに制限なしアクセスを許可
ACL-002SSH autogroup:nonroot の誤設定任意の非 root ユーザーで SSH 可能
ACL-006
tagOwners
が広すぎる
タグ経由で権限昇格
ACL-007autogroup:danger-all 使用外部ユーザーにアクセス許可

ハイ(High)

IDチェックリスク
AUTH-001再利用可能な認証キー盗難時に無制限デバイス追加が可能
AUTH-002長期有効認証キー暴露期間が長い
AUTH-003事前承認されたキーデバイス承認を迂回
DEV-001キー期限なしでタグ付けされたデバイス無制限アクセス
DEV-002ユーザー・デバイスにタグ付けユーザー削除後も残存
DEV-010Tailnet Lock 無効盗まれたキーへの保護がない
DEV-012未署名の Tailnet Lock シグネチャ署名されていないノードを確認必要
NET-001Funnel 公開インターネットから直接アクセス可能
NET-003サブネットルーター信頼境界ローカルネットワークで暗号化されないトラフィック
SSH-002Root SSH でチェックモードなし再認証が不要

ミディアム(Medium)

IDチェックリスク
ACL-004autogroup:member 使用外部ユーザーが含まれる
ACL-005AutoApprovers 設定ルート承認を迂回
AUTH-004非一時的 CI/CD キースタールデバイス増加
DEV-003古いクライアント脆弱性の可能性
DEV-004スタールデバイス未使用攻撃面
DEV-005未承認デバイス承認待ちキューに存在
DEV-007機密マシン名CT ログ公開
DEV-009デバイス承認設定有効でない可能性
NET-004HTTPS CT ログ公開マシン名が公開
NET-005Exit node トラフィック可視化オペレーターが全トラフィックを閲覧
NET-006サーブエクスポージャTailnet 上でローカルサービス公開
SSH-003レコーダ UI 公開セッションがネットワーク上に表示

情報性(Informational)

ログ設定、DNS 設定、ユーザー権限、および手動確認項目に関するチェック。


出力例

+=====================================================================+
|                    TAILSNITCH SECURITY AUDIT                        |
|            Tailnet: example.com                                     |
|            Version: 1.0.0 (build: abc123)                           |
+=====================================================================+

Using ignore file: .tailsnitch-ignore (3 rules)

=== ACCESS CONTROLS ===================================================

[CRITICAL] ACL-001: Default 'allow all' policy active
  Your ACL policy omits the 'acls' field. Tailscale applies a
  default 'allow all' policy, granting all devices full access.

  Remediation:
    Define explicit ACL rules following least privilege principle.

  Source: https://tailscale.com/kb/1192/acl-samples

=== AUTHENTICATION & KEYS =============================================

[HIGH] AUTH-001: Reusable auth keys exist
  Found 2 reusable auth key(s). These can be reused to add
  multiple devices if compromised.

  Details:
    - Key tskey-auth-xxx (expires in 45 days)
    - Key tskey-auth-yyy (expires in 89 days)

  Remediation:
    Store reusable keys in a secrets manager. Prefer one-off keys.

  Source: https://tailscale.com/kb/1085/auth-keys

SUMMARY
======================================================================
  Critical: 1  High: 3  Medium: 5  Low: 2  Info: 8
  Total findings: 19  |  Passed: 33

Tailnet Lock チェック

Tailnet Lock チェック(

DEV‑010
,
DEV‑012
)はローカル tailscale CLI を必要とし、ローカルマシンのデーモンに対して実行されます。リモート Tailnet を
--tailnet
で監査する場合、これらのチェックはローカルステータスを反映し、監査対象 Tailnet の状態ではありません。

必要に応じてカスタム tailscale バイナリパスを指定してください:

tailsnitch --tailscale-path /opt/tailscale/bin/tailscale

CI/CD 統合

CI/CD パイプラインで Tailsnitch を実行し、セキュリティ回帰を検出します。

- name: Audit Tailscale Security
  env:
    TS_OAUTH_CLIENT_ID: ${{ secrets.TS_OAUTH_CLIENT_ID }}
    TS_OAUTH_CLIENT_SECRET: ${{ secrets.TS_OAUTH_CLIENT_SECRET }}
  run: |
    tailsnitch --json > audit.json
    # クリティカルまたはハイ重大度の問題があれば失敗
    if tailsnitch --severity high --json | jq -e '.summary.critical + .summary.high > 0' > /dev/null; then
      echo "Critical or high severity issues found!"
      tailsnitch --severity high
      exit 1
    fi

参考資料


ライセンス

MIT


コントリビューション

CONTRIBUTING.md
を参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/01/06 6:05

ベネズエラで停電が起きた際に、BGP に異常が発生しました。

## Japanese Translation: --- ## Summary ロウオービットセキュリティのニュースレターは、ベネズエラが1月2日に停電した際に発生した疑わしいBGP異常を報告しています(Cloudflare Radar のタイムスタンプ 15:40 UTC)。Cloudflare Radar は CANTV (AS 8048) が自身の ASN を **10 回** 前置していることと、BGP 公開が急増し、その後広告される IP 空間が減少した異常なスパイクを示しています。200.74.224.0/20 ブロックから 8 つのプレフィックスが `…52320 8048 …` の経路で Sparkle(イタリア)と GlobeNet(コロンビア)を通じてリークされました。公開 BGP フィード(ris.ripe.net、bgpdump)は異常な AS‑path 構造を確認しており、Sparkle は RPKI フィルタリングが欠如しているため isbgpsafeyet.com で「unsafe」とリストされており、通常のトラフィックにとってルートが魅力的ではありません。 WHOIS データはリークされたプレフィックスがカラカスの Dayco Telecom に属していることを示しています。逆 DNS ルックアップは、これらの範囲が銀行、ISP、およびメールサーバーなどの重要インフラストラクチャをホストしていることを明らかにします。BGP アクティビティのタイミングは政治的不安と一致し(1月3日に爆発報告およびマドゥロが USS Iwo Jima に登場)、国家レベルでの悪用または意図的なルーティング操作を示唆しています。 ニュースレターは、通信事業者、ホスティングプロバイダー、およびセキュリティ企業に対し、ユーザーと重要インフラストラクチャをトラフィックの傍受や劣化から保護するために BGP 検証(例:RPKI)を強化するよう促しています。

2026/01/06 7:10

なぜAIは2025年に就業市場に参加しなかったのでしょう?

## Japanese Translation: この記事は、2025年までにAIエージェント革命が起こるという高い期待が過大であると主張しています。サム・オルトマン、ケビン・ワイル、マーク・ベニオフはすべて急速な採用と「デジタル労働」のブームを予測しましたが、実際のテスト(例:ChatGPTエージェントがドロップダウンメニューをナビゲートするのに14分かかったケース)では、大規模言語モデルは未だ鈍く不安定であることが示されています。ガリ・マーカスやアンドレイ・カルパチといったシリコンバレーの懐疑派もこれらの限界を認めており、カルパチはこの時期を「エージェントの十年」と呼びました。著者は、まだ信頼できるデジタル従業員を構築する方法がわからないことを指摘し、未来の仮想的な利益よりも現在の控えめな能力に焦点を移すべきだと訴えています。2026年には、実際の取り組みとして段階的な統合を推奨し、企業はまず小規模プロジェクトで試験運用するよう促し、政策立案者には仮説ではなく現在直面しているAIリスクに対処するよう呼びかけています。 ## Text to translate (incorporating missing details and avoiding inference):** The article argues that high‑profile predictions of an AI‑agent revolution by 2025 have been overblown. Sam Altman, Kevin Weil, and Mark Benioff all forecasted rapid adoption and a “digital labor” boom, but real‑world tests—such as ChatGPT Agent spending fourteen minutes navigating a drop‑down menu—show that large language models remain clumsy and unreliable. Silicon Valley skeptics like Gary Marcus and Andrej Karpathy acknowledge these limitations; Karpathy even referred to the period as the “Decade of the Agent.” The author notes that we still do not know how to build reliable digital employees, and urges a shift in focus from speculative future gains to the current modest capabilities. In 2026, the piece calls for realistic engagement: incremental integration rather than wholesale automation, encouraging companies to pilot small‑scale projects first and prompting policymakers to address present AI risks instead of hypothetical ones.

2026/01/03 0:56

**私の立場を取ってください:** 今までで一番価値あるプロモーションアドバイスでした。

## Japanese Translation: > **概要:** > Andrew Graham‑Yooll の 2026 年の記事は、昇進は「既に上級職に就いているかのように振る舞う」ことで得られると説明しています。CTO のアドバイス ― 「昇進したいなら、私の立場を取ってみてください」― は、従業員がタイトルを取得する前に責任を負い始めることを奨励します。重要な例としては、4 週間以内にインシデントを削減することを目的とした RFC(Request for Comments)を提案したジュニアエンジニアが挙げられます。これは彼らの通常範囲を超えた所有感を示しています。 > マネージャーは正式なレビューより 3〜6 ヶ月前に昇進候補者を特定し、上級レベルの判断と実行の一貫したパターンを探します。一つの印象的な行動だけでは不十分であり、約六か月間にわたって継続的に上級レベルで業務を遂行することで準備が整ったことを示す必要があります。この「責任先行」のマインドセットは従来のキャリア成長モデルを逆転させます。許可やタイトルを待つのではなく、既に高い役職に就いているかのように振る舞うのです。従業員にとっては進展が速まり、企業にとっては将来のリーダーを早期に発見しプロジェクト移行をスムーズにすることにつながります。

**Show HN:** *Tailsnitch – Tailscale 用のセキュリティ監査ツール* | そっか~ニュース