ダークウェブをChromeから覗く闇のワンライナー　Welcome to Underground

ダークウェブ（`.onion`ドメイン）にアクセスする場合、ブラウザはTorを使う必要がありますが、docker内でTorを建ててプロキシとして使えば、どのブラウザ、またはCURL、pythonスクリプト等でもアクセスできちゃいます。
ワンライナーはこちらです。

```bash
networksetup -setsocksfirewallproxy Wi-fi localhost 9150 && networksetup -setsocksfirewallproxystate Wi-fi on && cd $(mktemp -d) && echo -e "FROM alpine:3.12\nRUN apk add tor" > Dockerfile && docker build . -t torproxy && docker run -p 9150:9150 torproxy sh -c "chown -R root:root /etc/tor/;chown -R root:root /var/lib/tor/ && echo 'SocksPort 0.0.0.0:9150' >> /etc/tor/torrc.sample && tor -f /etc/tor/torrc.sample" && networksetup -setsocksfirewallproxystate Wi-fi off
```

それでは解説します。

```bash 
networksetup -setsocksfirewallproxy Wi-fi localhost 9150 # Wi-fiを利用時にSOCKSプロキシlocalhost:9150を利用して接続する設定を登録。
networksetup -setsocksfirewallproxystate Wi-fi on # Wi-fiのSOCKSプロキシをONにする
cd $(mktemp -d) # Dockerfileを生成するので一時ディレクトリに退避
echo -e "FROM alpine:3.12\nRUN apk add tor" > Dockerfile # この行は一度のみ実行すれば以後必須ではない
docker build . -t torproxy # この行は一度のみ実行すれば以後必須ではない
docker run -p 9150:9150 torproxy sh -c "chown -R root:root /etc/tor/;chown -R root:root /var/lib/tor/ && echo 'SocksPort 0.0.0.0:9150' >> /etc/tor/torrc.sample && tor -f /etc/tor/torrc.sample"
# 必要な調整をchownとtorrc.sample追記で行い、torを実行します
networksetup -setsocksfirewallproxystate Wi-fi off # プロキシをOFFにする。フォアグラウンドで動いているDockerがターミナルから中断されると、次にこのコマンドに移り正常に戻る
```

注意点があります。先頭２つと末尾の`networksetup`コマンドは**MacかつWifi**での利用を想定したコマンドです。既に登録がある場合は上書きしに行くのでご注意ください。その他OSは手動か別コマンドでSOCKSプロキシを設定しワンライナーは中間部だけお使いください。MacでWi-Fi以外の場合は置換が必要です。以下のコマンドで調査できます。

```bash
$ networksetup -listallnetworkservices # 私の環境にはありませんが、Ethernetが次に多そう
An asterisk (*) denotes that a network service is disabled.
Wi-Fi
Bluetooth PAN
Thunderbolt Bridge
```

ワンライナーを実行すると`docker run`がフォアグラウンドで走り、手動で中断されるまで間にプロキシが稼働しています。[ipinfo.io](https://ipinfo.io/)で違うIPやlocationが表示され、[check.torproject.org](https://check.torproject.org/)でConratulationsが表示されれば成功です。
<img width="940" alt="スクリーンショット 2020-08-04 8.46.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256466/d4236406-8f21-9152-e450-2b4e5af543f1.png">

それでは実際にダークウェブに潜むonionドメインのウェブサイトを見てみましょう。誰でも知っている以下のサービスは.onionドメインも運用してくれています。

- Facebook　[facebookcorewwwi.onion] (facebookcorewwwi.onion)
- New York Times　[nytimes3xbfgragh.onion](nytimes3xbfgragh.onion)


その他の[ダークウェブに存在するサービスはWikipedia](https://en.wikipedia.org/wiki/List_of_Tor_onion_services)にまとまっていますが、本家TorブラウザはJavaScriptをデフォルトで無効にするなど、悪意のあるページに対して対策を凝らしてますので、Chromeで不用意に覗くのはバッドプラクティスといえそうです。
`networksetup`やPC全体のプロキシ設定無しで、CURLでのアクセスは以下になります。

```bash:bash
$ curl -sL --socks5-hostname localhost:9150 facebookcorewwwi.onion
```

pythonは以下です。当初`requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support.`というエラーが出たので、`pip install pysocks`で直りました。

```python:python
import requests
proxies = {'http':'socks5://127.0.0.1:9150','https':'socks5://127.0.0.1:9150'}
print(requests.get('http://ipinfo.io',proxies=proxies).json())
{'ip': '185.220.102.8', 'hostname': '185-220-102-8.torservers.net', 'city': 'Berlin', 'region': 'Berlin', 'country': 'DE', 'loc': '52.5244,13.4105', 'org': 'AS60729 Zwiebelfreunde e.V.', 'postal': '10178', 'timezone': 'Europe/Berlin', 'readme': 'https://ipinfo.io/missingauth'}
```


ご一読ありがとうございました。「Welcome to Underground」は2chでバズった痛いコピペです。
> 358 ：世界遺産：2006/08/14(月) 15:48:55 ID:O2Q5Lui70
中学時代のパソコンの授業でインターネットを使った時
みんなが自分の好きな漫画や野球のページを見てる時に
自分だけこれみよがしに2ｃｈにつないでAAとかを周りに見せてたこと
しかも「このページって何？」って聞かれた時に「ヤバイ奴らの集会所みたいなもん」とか答えたこと
さらに友達に2ｃｈへの行きかたを教えるためにヤフーで2ｃｈって検索させて
でてきたリンクをクリックして2ｃｈのトップページが表示された瞬間に
そいつの耳元で「Welcome to Underground」ってささやいたこと

参考文献。ありがとうございました。

- Docker Torプロキシのアイディア　https://dev.to/boris/running-tor-using-docker-4d7h
- プロキシ設定をコマンド化　https://qiita.com/YumaInaura/items/7e1fcf9c23e7ba15e25b
- ダークウェブ基礎　https://qiita.com/cimadai/items/86f3dbfc2486baaee7e2
- 次回記事の参考に　https://qiita.com/ocat/items/29e0ebee4de9b683a77a
- 次回記事の参考に　https://qiita.com/charichuma_hack/items/ba3fc74f73f1929ef50b
- CURLでtorプロキシを使う　https://qiita.com/oraizonja/items/c2659013ddf56023a385
- pythonでsocksプロキシを使う　https://qiita.com/koharite/items/731fcf5146c7b0c4e800
- pythonでtorプロキシを使う　https://qiita.com/KAD/items/2de3d5e777d87425c233
- pysocksインストール　https://stackoverflow.com/questions/38794015/pythons-requests-missing-dependencies-for-socks-support-when-using-socks5-fro

よろしければこちらもご覧ください

- [秘密鍵を10億個作れば、高確率で自分の名前を含む公開鍵が作れる件](https://qiita.com/umihico/items/c99b41c818c13531f83c)
- [皆さんのポートフォリオをgifアニメにして、一覧できるサイト作った](https://qiita.com/umihico/items/d1210c37accb57a621ba)