決定論的な罠:Mullvadの出口IPをどのようにしてフィンガープリントのベクトルを生み出すか
プライバシーを重視する多くのユーザーにとって、VPNは追跡や監視に対する主要な防御線です。Mullvadは匿名性への取り組みでしばしば称賛されますが、最近の技術的な深掘りにより、サービスが出口IPアドレスを割り当てる方法に驚くべき欠陥があることが明らかになりました。接続時に割り当てられるIPを真にランダム化する代わりに、Mullvadは、異なるサーバーの場所をまたいでユーザーをフィンガープリント(識別)できる決定論的なプロセスを使用しています。
出口IP割り当てのメカニズム
Mullvadは、「垂直スケーリング」戦略を採用しており、人気のあるウェブサイトでの過剰なIPブロックやレート制限を防ぐために、単一のサーバーに対して複数の出口IPを提供しています。これは利便性の面では有益な機能ですが、割り当てロジックの実装がセキュリティ上の脆弱性を生み出しています。
研究によると、ユーザーに割り当てられる出口IPはセッションごとにランダム化されていません。その代わりに、ユーザーの WireGuard 公開鍵に基づいて決定論的に選択されます。公式の Mullvad アプリはこれらの鍵を1日から30日ごとにローテーションします。しかし、サードパーティ製のクライアントを使用しているユーザーは、鍵(つまり出口IP)が全くローテーションされない可能性があります。
パターンの解明:比率分析
これをテストするために、ある研究者がいくつかのサーバーの出口IP範囲をマッピングしました。9つのサーバーにわたる3,650個の異なる公開鍵を追跡した結果、驚くべきパターンが発見されました。これらのサーバー全体で何兆ものIPの組み合わせが可能であるにもかかわらず、公開鍵は一貫してわずか284個のユニークな組み合わせにのみ割り当てられていました。
この発見の鍵は「比率」にありました。割り当てられたIPの、そのサーバーのIPプール開始点からの数値的な位置を計算し、それをプール全体のサイズで割ることで、一貫した比率が浮かび上がりました。
例えば、あるユーザーが1つのサーバーのプールの81パーセンタイルに割り当てられたIPを持つ場合、そのユーザーが接続するほぼすべての他のサーバーでも、プールの81パーセンタイルに割り当てられたIPが割り当てられる可能性が高いです。これは、Mullvadがシード値としてユーザーの鍵を使用し、プールサイズを上限とするシードベースの乱数生成器(RNG)を使用していることを示唆しています。
Rust 実装の欠陥
研究者は、この挙動は Rust プログラミング言語(Mullvadがバックエンドとクライアントに使用しているもの)の random_range 関数がどのように機能するかという結果であると仮定しています。多くのRNG実装において、エントロピープールは、範囲関数に提供された境界によって影響を受けません。代わりに、RNGは浮動小数点数(float)を生成し、それを境界の乗数として使用します:min + round((max - min) * float)。
同じシードに対して、範囲に関わらず同じ浮動小数点数が生成されるため、相対的な位置(パーセンタイル)は異なるプールサイズにわたって一定に保たれます。これは、意図的な設計上の選択というよりも、開発者の誤解(範囲を変更すれば相対的な出力が異なるだろうという想定)によるものである可能性が高いです。
影響:相関攻撃
この決定論的な挙動は「相関攻撃」を可能にします。ユーザーが異なるサーバーを利用する出口IPを観察することで、観察者はそのユーザーのシードに関連付けられた浮動小数点数(float)の値を推測することができます。
単一のIPではユーザーを特定することはできませんが、重なり合う浮動小数点数の範囲が、アイデンティティを大幅に絞り込むことができます。研究者はこれらの浮動小数点数(float)の値を推定するツールを開発し、特定のIPセットが、ユーザーベースのわずか0.34%のユーザーのみが共有する浮動小数点数の範囲に収まる可能性があることを発見しました。100,000人のアクティブユーザーがいるシナリオでは、この数値はユーザーのアイデンティティを約340人にまで絞り込みます。
コミュニティメンバーが Hacker News で次のように述べています:
"決定論的な出口IPは、あらゆるサイトがセッションをまたいで永続的なプロファイルを作成することを可能にします。追跡を排除するのではなく、単に追跡を行う主体をずらしているだけです。"
フォーラムのモデレーターや、複数のデータ漏洩からIPログにアクセスできる国家主体にとって、これは、サーバーを切り替えてバン(禁止)を回避したり、身元を回避したりしようとするユーザーは、実際には匿名ではないことを意味します。もし2つの異なるアカウントが異なる Mullvad VPN サーバーを使用しているにもかかわらず、同じ狭い浮動小数点数の範囲に収まる場合、そこには高い確率で同一人物である可能性が高いと言えます。
自己保護の方法
プロバイダーによってこの挙動が対処されるまで、ユーザーはフィンガープリントの(識別)リスクを割るために、以下の手順を踏むことでリスクを軽減できます:
- 鍵のローテーションを強制する: Mullvad アプリからログアウトし、公開鍵を強制的にローテーションさせ、IP割り当てに使用されるシード値を変更します。
サーバーの切り替えを制限する: 同じ公開鍵のサイクル内で頻繁にサーバーを切り替えないようにしてください。新しいサーバーに接続する際、それぞれが観察者による浮動小数点数の範囲の精査を回避するための追加のデータポイントを提供してしまいます。
Tor を使用して真の匿名性を確保する: 一部の技術的な批判者たちが指摘するように、VPNはプライバシーを、完全な匿名性ではなく設計されています。相関攻撃に対する高いレベルの耐性が必要なユーザーには、Tor ネットワークがゴールドスタンダード(標準)であり続けています。