onionlint とは
nao1215/onionlint は、.onion(Torサイト)が匿名性を担保できないような実装になっていないかをチェックするツールです。普通の開発者が onionlint のお世話になることはないでしょう。onionlint には、34個のルールが搭載されており、以下の3カテゴリで構成されています。
- 閲覧者向け(例:.onion 以外のドメインからのデータ読み込みがないか)
- 運営者向け(例:メディアメタデータが公開されているか)
- 攻撃の有無(例:フォームデータが外部 URL に漏洩するか)
インストール方法や使い方は、GitHub README をご確認ください。以下のように onionlint を実行すると、どの URL にどんなリスクがあるかを一覧表示してくれます。オプションが多いので、都度オプションを書くのが面倒な方は、設定ファイルを利用してください。
onionlint scan http://example.onion/ --format json
正直なところ、BBC(British Broadcasting Corporation、英国放送協会)のようなサイトに対して onionlint を使うと、onionlint が指摘しまくるので使えたものではありません。ユースケースは、小規模な .onion サイトのアクセス前に攻撃されないかを事前チェックするケース、自身が .onion サイトを運営する時に意図せず個人の特定につながる情報を開示していないかをチェックするケースが考えられます。
onionlint ルール一覧
2025年11月25日現在、onionlint が検出できるルールは以下のとおりです。
| ルール名 | 説明 |
|---|---|
| 外部リソース検出 | .onion以外のドメインから読み込まれる外部リソース(スクリプト、スタイルシート、画像)を検出し、ユーザー情報の漏洩を防止 |
| ETagトラッキングリスク | セッション間でユーザーを追跡するために使用される可能性のあるETagヘッダーを検出 |
| Content Security Policy未設定 | 未承認リソースの読み込みを防ぐContent-Security-Policyヘッダーの欠落を検出 |
| 安全でないCookie設定 | Secure、HttpOnly、SameSite属性のないCookieを検出し、ユーザーの匿名性侵害を防止 |
| Faviconフィンガープリンティングリスク | faviconハッシュによるサイト識別を可能にするfaviconの使用を検出 |
| セッションリンク可能性 | ユーザー追跡と匿名性解除を可能にする永続的なセッション識別子を検出 |
| 静的アセットフィンガープリント | オペレーター環境を特定できる静的アセットURL内の一意のハッシュやバージョン文字列を検出 |
| カスタムヘッダー露出 | サーバーインフラやオペレーターの身元を明らかにする可能性のあるカスタムHTTPヘッダーを検出 |
| 混合コンテンツ漏洩 | 訪問者のIPアドレスを漏洩させるクリアネットリソース(画像、動画、iframe)を検出 |
| CORS匿名性解除 | 外部サイトがユーザーを追跡または識別できるCORS設定を検出 |
| HSTSフィンガープリントリンク | .onionの身元をクリアネットミラーにリンクさせたり、スーパークッキー追跡を可能にするHSTS設定を検出 |
| エラー情報開示 | サーバーパス、フレームワーク情報、オペレーターの身元を露出するエラーページやスタックトレースを検出 |
| ミラー相関 | この.onionサイトをクリアネットミラーと関連付ける可能性のある指標を検出 |
| アセットホストフィンガープリント | オペレーターのアカウントや身元を明らかにする可能性のある外部アセットホスティングサービスを検出 |
| 連絡先身元漏洩 | オペレーターの身元を明らかにする連絡先情報(非匿名メール、ソーシャルプロファイル)を検出 |
| デバッグ成果物露出 | 開発環境を露出するデバッグ成果物、開発コメント、ソースマップを検出 |
| 固有フレームワークフィンガープリント | オペレーターを特定できる珍しいフレームワーク、CMSバージョン、固有のジェネレーター署名を検出 |
| Server-Timing開示 | 内部サービス名、データベースクエリ、インフラ詳細を露出するServer-Timingヘッダーを検出 |
| クリアネット認証依存 | クリアネットのOAuthプロバイダー、CAPTCHAサービス、本人確認への認証依存を検出 |
| ホスティングプロバイダー漏洩 | ホスティングプロバイダー、CDN、インフラベンダーを明らかにするHTTPヘッダーやコンテンツを検出 |
| ロケール/タイムゾーン漏洩 | オペレーターの所在地を明らかにする日付形式、タイムゾーン指標、ロケール固有のコンテンツを検出 |
| 行動タイミング相関 | オペレーターのタイムゾーン、手動操作、「ホームサーバー」特性を明らかにする可能性のあるレスポンスタイミングパターンを検出 |
| 更新パターン漏洩 | オペレーターのタイムゾーンやライフスタイルパターンを明らかにする可能性のあるコンテンツ更新サイクル(RSSフィード、タイムスタンプ)を検出 |
| 自己参照ホスト漏洩 | .onionをクリアネットの身元と関連付ける可能性のあるコメント、古いサイトマップ、JavaScript内のクリアネットドメイン参照を検出 |
| 言語的身元漏洩 | オペレーターの母国語や地域を明らかにする可能性のある言語パターン、機械翻訳の痕跡、言語的フィンガープリントを検出 |
| クロス相関身元分析 | favicon、CMS、アセット、ヘッダー、コンテンツパターンを組み合わせたクロス相関分析を実行し、オペレーター身元露出確率を算出 |
| 地域フレームワーク相関 | オペレーターの地理的地域を示す可能性のある地域固有のCSS/JSフレームワーク、CDN、ライブラリフォークを検出 |
| メディアメタデータ露出 | GPS座標、デバイス情報、タイムスタンプ、著者名を露出する可能性のある画像/動画のEXIFおよびその他のメタデータを検出 |
| 不審なJavaScript難読化 | 認証情報窃取やエクスプロイトキットなどの悪意のあるコードを隠すために一般的に使用される難読化されたJavaScriptパターンを検出 |
| フォームデータ外部URL漏洩 | .onion以外のURLにデータを送信するHTMLフォームを検出し、機密情報の漏洩とユーザーの匿名性解除を防止 |
| WebRTC IPアドレス漏洩リスク | Tor使用時でもプロキシ設定をバイパスして実際のIPアドレスを漏洩させる可能性のあるWebRTC API使用を検出 |
| Canvas/WebGL/Audioフィンガープリンティング | ユーザーを一意に識別できるCanvas、WebGL、AudioContext APIを使用したブラウザフィンガープリンティング技術を検出 |
| 不審な外部リダイレクト | meta refresh、JavaScript、HTTPヘッダーによる.onion以外のURLへの自動リダイレクトを検出し、ユーザーの匿名性解除を防止 |
| 隠しまたは不審なiframe | クリックジャッキング、ドライブバイダウンロード、IP漏洩に使用される可能性のある隠しiframe(0x0サイズ、visibility:hidden、画面外)を検出 |
nao1215/tornago の実力を示すために開発
nao1215/tornago は、Tor の Client/Server を作るためのライブラリです。Linux、macOS、Windows、BSD ファミリーで動作します。紹介記事は、こちらです。
残念なことに、他のサイトで宣伝された割に、tornago はあまり注目されませんでした。ツールを作って実力を示すべきだなと思い、onionlint を開発しました。onionlint の開発前に「ダークウェブ監視ツール」も実装したのですが、微妙な感じがして公開していません。この非公開ツールは、ダークウェブを監視して HTML ファイルに Diff があったら特定のアクションを行うツールなのですが、嬉しいポイントが個人的に分かりませんでした。
tornago の実力を分かりやすく示すツールとしては、「匿名チャット」や「匿名ファイル共有」がパッと思い浮かびます。しかし、これらに手を出すと、社会を悪い方向へ傾けてしまうので、実装しませんでした。
最後に:嫁も Tor を知っていた
ロシア出身の嫁は、Tor を把握しており、「トール」と読んでいました。ロシア人は必ず"R"の音を読むので、私は「トールと発音するだろうな」と予想していました。その通りの結果になりました。ロシアでは、VPN も Tor も利用している人が多いです。ネットの規制が激しいのでしょう。
