welcome to the darkweb.
Darkwebの正体
Darkwebは大変センセーショナルな言葉で、全く素人がアクセスできない普通でないインターネットがあるという表現をマスメディアでみますが、そんなに難しくありません。
Torという匿名化ネットワークで成り立っており、アクセス者はどのリレーから情報を発信したか知るすべはありません。また、リレーに参加したネットワークのユーザもは発信元を探知されることなく、情報を発信することができます。
このネットワークに参加する方法、このネットワーク越しにTor内部のサーバにアクセスする方法、サーバをTorないに立てる方法を記します。
Torネットワークへの参加
Torのインストール
すべて以下ではLinux(Ubuntu 18.04を前提としています)
$ sudo apt install tor
torrcの編集
/etc/tor/torrc
を編集する
私は以下の様な設定にしてある(自分のローカルサブネットマスクを参考にして192.168.14.0/24は編集する)
SOCKSPort 9050
ControlSocket 0
SOCKSPolicy accept 192.168.14.0/24
ControlPort 9051
HiddenServiceDir /var/lib/tor/other_hidden_service/
HiddenServicePort 80 127.0.0.1:80
ORPort 9001
Nickname hogeeeeeeeeee
ContactInfo angeldust03@gmail.com
DirPort 9030 # what port to advertise for directory connections
ExitRelay 0
ExitPolicy reject *:*
再起動
$ sudo systemctl restart tor
$ sudo systemctl status tor
ネットワークの状態を確認
これだけではtorネットワークのリレーに完全に参加したことにならない。
sockport 9050とcontrolport 9051をルータから開放し、外部からアクセスできるようにする
ネットワークのトラフィックもよく関ししている必要があり、どの程度、torネットワークの一部として情報を伝達したか確認することができる。
$ sudo apt install nyx
$ sudo nyx
Torネットワークのリレーの状況はここから確認できる
自分のonionドメインの確認
ハードコードされるものらしく、ここに書いてある(torrcの設定で場所は変わる)
/var/lib/tor/other_hidden_service/hostname
$ sudo cat /var/lib/tor/other_hidden_service/hostname
cavthhlesdvh2sj7.onion
仮にこのマシンでhttpサーバを立てたとすると、cavthhlesdvh2sj7.onionにアクセスすると発信者を欺瞞して情報を展開できる
HTTPサーバのローンチ
好きなものを使えばいいが、kotlinのktorのシンプルなサーバを持っているので、OracleJDKが入った状態でビルドしてみる(Kotlinが必要)
わたくしのプロジェクトのクローン
$ git clone https://github.com/GINK03/kotlin-ktor-design-templates
$ cd kotlin-ktor-design-templates
$ gradle build
$ sudo gradle run # port 80を使うため
Tor Browserでアクセス
Torブラウザをインストールしてonionドメインにアクセスすることができます
pythonでアクセス
PythonでアクセスするにはこのようなDNSの名前解決がこのようにしないとできない
import requests
session = requests.session()
session.proxies = {'http': 'socks5h://localhost:9050',
'https': 'socks5h://localhost:9050'}
s = session.get('http://ipjy2snhdjwrnk3m.onion')
print(s.text)
>> Welcome to Underground!
用途と応用
匿名でサーバを建てられる & 匿名でアクセスできるという性質を利用して、なんらか、人権を無視した政治体制下での発信などが考えられます。
企業が国家のような力を持っている昨今ですので、企業への素直なフィードバック、就職情報掲示板などを作成してもいいはずです。
APIなども同様で、完全ブラックボックスかつ完全匿名である機能を提供したいなども場合、有益に働くと思われます。