Security
Tor

Torについて調べてみた

DMM.com #2 Advent Calendar 2017 21日目の記事です!

カレンダーのURLはコチラ
DMM.com #1 Advent Calendar 2017
DMM.com #2 Advent Calendar 2017

こんにちは!
17新卒エンジニアとして頑張っている@totatotiです!

新卒エンジニアたちと配属されてから勉強した技術を共有する技術共有会を毎週行っています。
今回はそんな技術共有会で発表した内容からTorについて書いてみます。

Torてなに?

The Onion Routerの頭文字でTorという名前になっています。

Torを使用すると以下のような事ができるようです。
* 通信元の特定が困難になる
* 通信が暗号化されている(一部除く)

オニオンルーター?

node

  • 黒い線が送信したいデータ
  • 水色がnodeCのための暗号化
  • 緑色がnodeBのための暗号化
  • 赤色がnode Aのための暗号化

Torは複数のサーバーを経由して通信を行います。その際に、経由するサーバー(ノード)ごとに通信内容の暗号化を行うことで各ノードは自分が次に何処へ送るかという必要最低限の情報しか知ることができません。
そのため、ノードは実際の通信内容を知ることができないため通信の安全性や匿名性が高まるという仕組みだそうです。

Torは通信ごとに暗号化を行う仕組みが玉ねぎの断面のようになっているため、オニオンルーターという名前になっているらしいです。

出口ノード

さっきは、ノードは通信内容を知ることができないと書きましたが、これには例外があります。

それが、出口ノードと呼ばれるものです。

出口ノードはその名の通り、最終的に通信する一つ前のノードになります。
出口ノードでは、実際に通信するサーバーへ情報を送るために、暗号化がされていない状態になります。
なので、出口ノードを悪い人が建てている場合はそこで通信内容を盗聴することができます。

出口ノードでの盗聴を防ぐためにはHTTPSにするなど、出口ノード時点でも暗号化されている状態で通信する必要があります。

アクセスされる側からのあれこれ

Fingerprint

アクセスされる側からTorを使用した人を特定したい事があると思います。Torを使用すると出口ノードのIPからのアクセスとして見えるため、ipでは誰がアクセスしているか特定することが難しいです。
ipアドレスが変わる端末を特定するために使用される技術としてFingerprintがあります。

FingerprintはFlashやjavaといったブラウザで動作するプラグインの状態を調べることや、javascirptを実行した際の動作時間を調べるといった事からアクセスしている端末の特徴(fingerprint)を収集することでアクセス端末を特定する技術です。

また、HTMLのcanvasを使用したCanvas Fingerprintという物もあります。
これは、canvasを使用した際に端末ごとにレンダリング結果が微妙に違うことを利用したFingerprintの取得方法です。

Fingerprintは1つの情報では一意の端末を割り出すことは難しいですが、複数の情報を収集することで割り出すことが可能になります。

Torブラウザ

TorブラウザはFirefoxベースのTorを利用した通信を行うブラウザです。

Torで通信するだけではなくFingerprintの収集を難しくする対策がされている事や
HTTPS-Everywhereというプラグインを利用して出口ノードでの盗聴を防ぐなど匿名性を高める仕組みが組み込まれているようです。

出口ノードを規制する

Torを利用したアクセスを制限したい場合があると思います。
このような場合に利用できるものが出口ノードのipアドレスからのアクセスを規制する方法です。

出口ノードは実際にアクセスするサーバとの通信を行うため、このipを規制することで、Torを利用した直接のアクセスを制限することができます。

出口ノードのリストは公開されているため、サーバの設定でリストに登録されているipを規制するという方法で制限することができます。

おわりに

TorとTorを利用してアクセスされる側について書いてみました。

書く中で色々難しい技術で、理解できていない事も多くあると思うので勉強していく必要があると感じました…

明日は@norinity1103さんです。お楽しみに!