Torは1年以上前からロシア政府によるとされる大規模な攻撃を受けており、接続の安定性が低下し、利用体験が損なわれています。ビットコイナーの中にはUmbrelなどのTorを前提とするプロダクトを利用していたり、ダークウェブを訪れる方もいらっしゃると思いますが、2022年夏以降にページの読み込みやAPIの呼び出しに所要する時間が大きく伸びている実感があるのではないでしょうか。

私自身、ダッシュボードでアップタイムを管理しているOnionサービスがあるのですが、ヘルスチェックのためのリクエストが15秒以上かかってタイムアウトすることが度々ありました。サービス自体は止まっていないが、リクエストへの応答に15秒以上かかっていたのです。

今回TorにProof of Workが導入されることとなった経緯と果たして期待される効果が得られるのかを見ていきましょう。

ランデブー・プロトコルを悪用したDDoS攻撃

Tor上のHidden Service (Onionサービス・秘匿サービス)、すなわち.onionアドレスで公開されているアプリケーションに接続する際には匿名性を担う通信経路が確立されます。まずクライアントがRendezvous (ランデブー)と呼ばれる中間ノードを指定し、そこまでの3ホップの経路を作成した後に、Rendezvousはサービスに接続を要求し、サービスがRendezvousへの3ホップの経路を作成します。Tor内で完結する通信ではこの合わせて6ホップの経路を使って通信するわけですね。

さて、このランデブー・プロトコルはDoS攻撃の格好の標的となってしまっています。なぜならRendezvous PointとHidden Serviceの両方にとって計算コストの小さくない経路作成の仕事をさせることができるためです。Rendezvous Pointはたくさん存在し得ますが、インフラが貧弱な零細Hidden Serviceにとっては簡単にキャパオーバーを招いてしまうでしょう。Torネットワークやその上のサービスは様々な攻撃を受けていますが、このRendezvousの仕組みを悪用したものは代表的な例となっており、大きな問題を引き起こしています。

Torで大量のランデブーを行うDoS攻撃のことをIntroduction Point Flooding攻撃と呼ぶようです。

世の中にあるDoS攻撃の多くはこのように攻撃者にとって小さいコストで被害者に大きなコストを課すことができるプロトコルを悪用するものです。となると、攻撃者にとってのコストを上昇させるのが自然な対策です。身近なものではCAPTCHA認証などですが、Proof of Workも同様です。

導入されるProof of Work

ビットコインでおなじみなProof of Workですが、要するに計算コストを課すことで一定時間あたりの試行回数を制限し、攻撃の費用対効果を下げる目的の仕組みです。また重要なポイントはWorkは計算コストが大きいがその検証は計算コストが小さいという点があります。DoS攻撃で悪用されるプロトコルの逆の特徴ですね。

この特徴をDoS攻撃の対策に利用するため2020年にTorにProof of Workを導入するという提案がなされていたのが、3年越しについに叶った形となっています。

[tor-dev] [RFC] Proposal: A First Take at PoW Over Introduction Circuits

今回Torのコードに導入されるProof of Workにはモネロで利用されているRandomXとZECで利用されているEquihashを組み合わせて開発されたEqui-Xというアルゴリズムが利用されています。思想としてはASIC耐性を持たせつつGPUのアドバンテージも制限することでCPUのみを持つユーザーが不利にならないようにということでしょう。(そうでなければ攻撃者がASICを開発したりGPUファームを持っていると一般のユーザーには全く使えなくなってしまいます)

重要なポイントとしてProof of Workは通常時には要求されず、Hidden Serviceの負荷が上昇した場合にのみ残っているキャパシティに応じて難易度が調整されたProof of Workが要求されるようです。つまり、もしパンパンに接続要求が来ていたら難しく、まだ少し余裕があれば簡単なProofを求められるということです。これはおそらくUX面での悪影響を低減するための判断でしょうが、攻撃者にとっても都合が良い判断のように思います。

懐疑的な意見

他にも効果が見込めないのではないかという厳しい意見があります。攻撃者がどれくらいのコストを許容できるかに影響されるProof of Workですが、もしWorkのコストを負担しているのが攻撃者ではなくボットネットだとしたら効果がないのでは?という意見です。実際にDDoS攻撃の多くはウィルスに感染した多数のデバイスからなるボットネットを使って行われています。

確かにProof of Workの導入により1デバイスあたりの攻撃試行回数が減る(=攻撃者はより大規模なボットネットの利用が必要になる)効果は期待できそうです。しかし、今回導入される程度のProof of Workでは"Large Botnet"は防げる対象外という記述があります。もし本当にロシア政府が攻撃者であれば十分な対策ではないでしょう。

またProof of Workの難易度を上げすぎるとモバイルからTorの利用が難しくなってしまうなどの副作用が予想されるため、高負荷時の攻撃対策が実質的に攻撃と同じ効果をもたらしてしまう可能性もあります。果たしてユーザビリティを損なわずに攻撃を軽減できるかは今後数ヶ月かけて明らかになるでしょう。サービスごとに設定ができるようなので、当初は不便があっても運用次第で良くなっていくかもしれません。

個人的にはProof of Workの導入でTorの問題が多少改善することに期待していますが、過大な期待は禁物と感じています。特に高負荷時のみの導入、難易度の調整あたりが本当に意図通りにワークするかに懐疑的です。ただ、ブロックチェーンや電子マネー以外でのProof of Work採用例としては珍しいので非常に興味深いです。

まとめ

・Torは政府系の攻撃者によるDoS攻撃を受けている。

・通信経路を確立する際に中間ノードと宛先サービスに作業をさせるランデブーという仕組みが攻撃者にとって都合が良い。

・ランデブーの仕組みに高負荷時のみProof of Workを導入するコードを導入することで攻撃コストを上昇させる内容のアップデートが配布されている。

・今後数ヶ月かけて効果が現れることが期待される。

・一般のユーザーにとって不便のない範囲のProof of Workで電気代を負担していないボットネット運営者や資金が潤沢な政府系の攻撃者を防げるのかは疑問が残る。