1. Torとは
Torとは、TCP/IPにおける接続経路の匿名化を実現するための規格、及びそのリファレンス実装であるソフトウェアの名称である。通常、ユーザはローカルにSOCKSプロキシを立て、そのプロキシ経由で通信を行うことになる。
ウィキペディア
これを読んで理解出来る人はいないと思いますが、理解出来る方はブラウザバックして頂いて結構です。
2. まずIPって何?
インターネットは、現実でいう「郵便」に似ています。
はがきには、必ず「自分の住所」「相手の住所」「自分の名前」「相手の名前」を書きます。
これを書かないと送ってもらえません。
インターネットには、住所として、「IPアドレス」という物があります。
なので、データ(正確にはパケット)を送信する時に必ず自分のIPアドレスと相手のIPアドレスを書きます。
IPアドレスは住所と同じように、必ず固有の物です。
なので、自分と全く同じIPアドレスの人は偽造しない限り絶対にいません。
ついでに、「IP」は「Internet Protocol」の略です。
3. TCP/IPのTCPって何?
TCPは「Transmission Control Protocol」です。
インターネットでは、はがきと同じように「必ず送れる」とは限りません。
あれ、送ったはずなのに。。という事が頻繁に起こります。
そんな中、活躍するのがTCPです。
TCPは、チェックサムなどの技術で「パケットが改ざんされたり、どこかで捨てられていないか」という事を判定出来ます。
判定をして、どこかでパケットが捨てられている事が分かるとパケットの再送をしてくれます。
その為、「データ通信の確実性/信用性」を上げてくれるのがTCPという技術です。
TCPには、通信相手と事前に3wayハンドシェイクを行うという特徴もあります。
これにより、「本当に相手と通信出来るか」などを判定してくれます。
TCPの対義語はUDPです。
UDPは「User Data Protocol」の略です。
パケットの確認などを一切しませんが、その分高速に動作します。
つまり、確実性を犠牲にしてスピードに特化したプロトコルという事です。
このサイトへのアクセスにはTCPが使用されていますが、HTTP/3.0という最新版のHTTPではUDPが使用されています。
4. 結局Torって何?
「TCP/IPにおける接続経路の匿名化」という事は、結局「匿名で通信出来るようにする」という意味になります。
そのまま、Torは匿名で通信出来るようにするツールです。
5. 使い道
Torは、「中国などの検閲が激しい国で自由にネットワークを使えるようにする事」を目的にしています。
しかしながら、Torを悪用した犯罪が増えているのは確かです。
Torの匿名性を悪用してしまえば、匿名で犯罪を起こす事が可能だからです。
6. 仕組み
Torは、世界中の協力者の「ノード」という場所を経由してパケットを送信します。
世界中に6000以上のノードがあると言われています。
なので、
Tor -> node(start) -> node(中間) -> node(exit) -> webサイト
というようにアクセスします。
これだと、webサイト側からはnode(exit)のIPアドレスしか分かりません。
node(exit)に、「どこの奴に頼まれた?」と聞いても、node(中間)のIPアドレスしか分かりません。
同じように、node(中間)に、「どこの奴に頼まれた?」と聞いても、node(start)のIPアドレスしか分かりません。
つまり、最低でも3つのノードに対してアクセスログを開示してもらう必要があります。
しかし、ノードが同じ国とは限りません。
海外のノードを経由していると、「アクセスログを開示しろ!」と捜査の協力を要請する必要があります。
あまり仲の良い国でない限り、捜査に協力してくれない事多いです。
他にも、「アクセスログを保持していない可能性」があります。
つまり、「どこの奴に頼まれた?」と聞いても、「えー覚えてない()」と返される可能性があるという事です。
あ、ついでに日本のノードはアクセスログを保持している事が多いです。
なのでTorを使用する際は日本のノードを経由しないように気を..(ry
ついでに、送信されるデータは暗号化されます。
クライアント側で「ノード1」「ノード2」「ノード3」の公開鍵を使ってデータを暗号化します。
その為、クライアントからスタートノードまでデータが送られる際は3重に暗号化されています。
その暗号化をノード1が秘密鍵を使って解き、暗号化が2重になった状態でノード2へパケットを送ります。
ノード2では、ノード2の秘密鍵を使って暗号化を解き、暗号化が1重になった状態でノード3へパケットを送ります。
ノード3では、ノード3の秘密鍵を使って暗号化を解き、平文(暗号化されていないテキスト)に戻します。
その後、その暗号化を解除した平文をサーバーへ送信します。
7. 特定出来る?
近年、Torを使った犯罪が増えていますが、Torの利用者を特定する事は可能なのでしょうか。
まず第一に、出口ノードを制御/盗聴出来れば通信内容を全て見る事が出来てしまいます。
この中に個人情報等が含まれていれば簡単に相手を特定出来てしまいます。
そりゃそうですね。
最終的に、出口ノードが暗号化を解除してwebサーバーにデータを送信している訳ですから、そこでは生のデータが送受信されています。
しかし、httpsなどで通信内容自体を暗号化している場合は盗聴されても何も問題ありません。
単純な方法ですが、Torの協力者のフリをしてパケットを盗聴している人が意外といます。それどころか全出口ノードの1割が盗聴ノードだとも言われています。
第二に、永続リダイレクトのキャッシュポイズニング攻撃による非Tor時ブラウジング時の不正なリダイレクトによる情報漏洩があります。
この攻撃を実施するには、
「ユーザーがTor browser以外の終了後もキャッシュを保持するブラウザを利用し、socks5プロキシによってTorネットワークに接続している」
「ユーザーが利用したサイトがHTTPである事」
「ユーザーが利用したサイトへのアクセスに使用した出口ノード(exit-node)の制御権を持ち、データの書き換えが可能である事」
の条件が必要です。
この条件がそろうと、ユーザーがTor経由でウェブサイトにアクセスした際にexit-nodeでLocationヘッダーが書き換えられ、301リダイレクトがブラウザにキャッシュされてしまい、Torプロキシを解除して再度ウェブサイトにアクセスしようとした際にキャッシュから攻撃者のサイトへリダイレクトされてしまい、情報を入手されてしまう可能性があります。
第三に、DNS漏洩という物があります。
DNSの規格自体はTCPでもUDPでも使用できるのですが、ほとんどのブラウザではUDPを使用するように設定されています。
Torは、TCPしか対応していないので、UDPでアクセスしようとするとTorを経由しない事になってしまいます。
これの対策方法としては、Tor Projectが推奨しているTor browserを使うなどがあります。
8. ダークウェブ
Torには、Hidden Serviceというサービスがあります。
これはクライアントだけではなく、サーバーの匿名性を上げるものです。
9. アクセス拒否
サイト経営者にとってTor使用者は厄介ですが、Torを拒否する方法について書きたいと思います。
まず、IPアドレスのホストをDNSで確認する方法です。(PHP)
function IsTor($ip){
if (gethostbyname(ReverseIPOctets($ip).".dnsel.torproject.org")=="127.0.0.2") return true;
} else return false;
}
function ReverseIPOctets($inputip){
$ipoc = explode(".",$inputip);
return $ipoc[3].".".$ipoc[2].".".$ipoc[1].".".$ipoc[0];
}
if(IsTor($_SERVER['REMOTE_ADDR'])) exit("Tor使うなw");
else exit("いやTor使えよw");
次は、公開されているexit-nodeのIPアドレスリストを元に、.htaccessを使用してアクセス拒否をする方法です。
order allow,deny
allow from all
deny from 176.10.99.200
deny from 54.37.16.241
... (省略)
deny from 72.167.47.69
# 最後の行に改行を入れる(.htaccessのルール)
{この行には何も書かない}
ただ、一つ一つ比較する必要があるので、応答速度がかなり落ちます。
あまりオススメは出来ません。
10. 参考
4枚の図解でわかるTor | パーソルテクノロジースタッフ株式会社 (persol-tech-s.co.jp)
phpでTorユーザーかを判定する – wiki 2chmail
Tor Project | Anonymity Online
最後まで目を通して頂き、誠にありがとうございました。