onionlint とは

nao1215/onionlint は、.onion(Torサイト)が匿名性を担保できないような実装になっていないかをチェックするツールです。普通の開発者が onionlint のお世話になることはないでしょう。onionlint には、34個のルールが搭載されており、以下の3カテゴリで構成されています。

  1. 閲覧者向け(例:.onion 以外のドメインからのデータ読み込みがないか)
  2. 運営者向け(例:メディアメタデータが公開されているか)
  3. 攻撃の有無(例:フォームデータが外部 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 も利用している人が多いです。ネットの規制が激しいのでしょう。