ハニーポットを踏んでTorネットワークからBANされた話

この記事は、Honeypot Advent Calendar 2017 4日目の記事です。

adventar.org

TL;DR

改造されたTorノードを運営してonionアドレスを収集していたら、Tor Project側のハニーポットを踏んでしまい、IPレベルでノードをBANされました。

前提

Torとは何か、秘匿サービスとは何か、onionアドレスとは何か、などについてはこの記事では説明しません。

Hidden Service Directoryの欠陥

Hidden Service Directoryとは、HSDirフラグを取得したTorノードによる分散ハッシュテーブルです。これにより、HSの名前解決が行われます。 ところが、現在のHidden Service Directoryには明確な欠陥があり、それを利用するとHSDirノードはonionアドレスを収集できます。その欠陥とは、HSの名前解決のlookupです。HSの名前解決は、クライアント側から見て次のように行われます。

  1. HSDirフラグを持つ全ノードのリストを取得
  2. そのリストの上から順にonionアドレスの名前解決の可否を尋ねる
  3. 可能なら解決、不可能なら次のノードへ

これだけ見ても分かるように、このプロトコルは明らかに欠陥があります。可否を尋ねられたノードがそのアドレスを保存してしまえば、onionアドレスを収集できてしまうのです。もちろん名前解決クエリの中には、aaaaaaaaaaaaaaaa.onionや総当たりで算出されたアドレスもあるでしょう。しかし、そのクエリの大半は正当なものであり、これを利用すると収集だけでなく、HSの人気度やトレンドすら観測できてしまいます。*1

Honey Onions

この欠陥は4年近く前に指摘されており、当然Tor Project側も把握していて、いくつかの対策を行っています。その1つがHoney Onionsと呼ばれる秘匿サービスのハニーポットです。このハニーポットは一言でいうと「誰も知らないはずのこの秘匿サービスにアクセスしてくるということはアドレスが盗まれたに違いない」という構造です。もちろんただ1つあるだけでは何の意味も無く、すべてのHSDirノードのDHTには、複数のHoney Onionが混入させられています。これにより、悪意のあるHSDirノードの運営者がそのアドレスにアクセスすると、そのノードが特定されてしまいます。*2 これにより、収集したアドレスにフルスキャンなどを掛けてしまうと、Tor Project側に特定されます。

実際にBANされた

最初にアドレスの収集を試した時には、このHoney Onionsの存在を知らず、自作のクローラで収集できた全てのアドレスにスキャンを掛けてしまい、1ヶ月後にBANされました。このBANというのはけっこう重い処置で、Atlasからはノードであった痕跡が一切消去され、また、IPレベルでAuthority Directoryに弾かれるため、もう二度と正常なノードにすらなることができませんでした。

参考資料

Honey Onions: Exposing Snooping Tor HSDir Relays | DEF CON 24

追記 12/06

ntddk氏から指摘をいただきました。 この記事だと、Honey OnionsをTor Projectが運営しているかのように見えますが、Tor Projectが公式にこれらを運営しているとの発表をしたことはありません。私が、ノードがBANされたことで、Honey Onions 運営 == Tor Project だと勘違いしていたようです。ただし、実際BAN自体は行われたので、何かしらの仕組み(Honey Onions側のTor Projectへのフィードバックなど)はあるのだと思いますが分からない、という状態です。

*1:実際には、飛んでくるクエリの傾向はonionアドレスの分散に依存するので、10~20くらいのノードで偏りを補正する必要があります

*2:実際には、DHTの分散の周期も考慮する必要があり、いくつかのアドレスにアクセスすると、確率的にHSDirノードが特定される、という形になっています