LoginSignup
3
0

More than 1 year has passed since last update.

任意prefixのドメイン(Vanity Address)でOnionサーバを構築する

Last updated at Posted at 2022-12-01

この記事はpaizaとはマジで関係ありません!!!!!!!!!!!!

ネタなかったので記事ストックから引っ張り出してきました。ごめんな謝意。

はじめに & TsukuCTFの話

こんにちは、paiza アドベントカレンダー 2022 2日目担当のxryuseixです。明日の記事はもじゃさんによる「macの通知を冥鳴ひまりさんに読み上げてもらいたい」で、明日は氏家葵さんによる「今年の山の成果報告⛰」です。

僕は普段TaruTaruとしてCTFに参加しています。僕らは先日TsukuCTF 2022を開催しました。そこで僕が出題した問題OchakumiではTorネットワーク上に置かれたWebサーバについて調査する問題でした。このWebサーバからGitHubレポジトリを特定し、そのレポジトリの.gitignoreファイルから秘匿するつもりだったであろうHTMLファイルを特定するとフラグが得られる問題になっていました。

この問題はWASMが使われていたのですが、本質は以下の箇所でした。

また、Go で Wasm を作成した場合、go.mod の modules の値がそのまま WASM の中に反映されます。その結果、modules をレポジトリにしている場合はレポジトリ名が判明します。(引用)

それはさておき、今回はこの問題を作成する際に使用した、Vanity AddressでTorサーバ立てる技術について記載しようと思います。

VPSを借りる

まずはVPSを借りましょう。VPSサービスによってはTorサーバとして使うと嫌な顔をされることがあります1。そんなことよりも、VPSサービスによっては本当に秘匿されてるか怪しいので、Torサーバを選ぶときはちゃんと選びましょう。

どうしよっかなって思ってたら「ダークウェブの教科書 匿名化ツールの実践 (ハッカーの技術書)」にその辺りのことが書いてありました。その中で紹介されているTraviaは安くて使いやすくて良さそうでした。OSはDebianを選択しました。

torのインストールと設定

基本的にはNginxとTorが起動できれば良いです。それぞれのインストールはインターネットにいろいろあるのでaptとかでうまくやってください。

いくつかの設定ファイルの中身は公開します。

nginx.conf
nginx.conf
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    server_names_hash_bucket_size 128;
}
conf.d/hidden_service.conf
conf.d/hidden_service.conf
server {
    server_name REWRITE_YOUR_ONION_DOMAIN.onion;
    root /usr/share/nginx/html/hidden_service;

    location / {
        index index.html;
    }
    location /main.wasm {
        add_header Content-Type application/wasm;
        types {
            application/wasm wasm;
        }
    }
}
torrc
torrc
+ HiddenServiceDir /var/lib/tor/hidden_service
+ HiddenServicePort 80 127.0.0.1:80
- #HiddenServiceDir /var/lib/tor/other_hidden_service/
- #HiddenServicePort 80 127.0.0.1:80

hidden_service.confserver_nameは今後作成した値を使用するため、この時点では空欄でも問題ありません。

この設定の場合、ドキュメントルートは/usr/share/nginx/html/hidden_serviceのindex.htmlが表示されるようになるので、ここにHTMLや画像などを入れます。

Vanity Addresの取得

OnionドメインはBase32形式の56文字で表されます。このドメインは公開鍵をベースとして作成されるため、基本的にはSurface Webのような任意の意味のある文字列をドメインにすることができません。しかし、かっこいいドメインにしたくないですか???? 例えば、TwitterのTorサーバのドメインはtwitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onionです。このようにほぼランダムな文字列ではあるものの、先頭の数文字は任意の文字にすることができます。そこで、TsukuCTFの問題もtsuku22をprefixとするOnionドメイン(Vanity Address)を作成することにしました2

基本的なVanity Addressの作成手順は以下の通りです。

  1. 適当な公開鍵 ≒ ドメインを作成する
  2. それが指定した文字列から始まるならプログラムを終了する

という、ブルートフォース戦法です。まあなんか諸々で高速化はされているらしいです。

そこで使用するのがこのツールです。このツールは数少ないonion v3(新しいフォーマット)に対応するVanity Address作成ツールです。あとで計算結果の"鍵"だけscpとかで本番サーバに送ればいいので、ツールを本番環境で実行する必要はありません。

makeでビルドしたのち、以下のコマンド1つでとりあえず動きます3

./mkp224o -d onions -s -n 1 tsuku22

onionsディレクトリに作成した鍵ファイル=ドメインファイルが入ります。今回はtsuku22qotvyqz5kbygsmxvijjg7jg2d7rgc42qhaqt3ryj66lntrmid.onionを作成しました。この値を本番サーバへscpで送信します。

scp -r onions/tsuku22qotvyqz5kbygsmxvijjg7jg2d7rgc42qhaqt3ryj66lntrmid.onion root@178.17.170.40:~/onion
cp onion/*  /var/lib/tor/hidden_service

最後に、conf.d/hidden_service.confserver_nameを忘れずに変更します。

デプロイ&Access

全部準備が終わったら、最後にtorとnginxを起動します。

systemctl restart tor
systemctl restart nginx

ちゃんと繋がればおしまい。

FAQ

Vanify Domainを新しくして/var/lib/tor/hidden_service/etc/nginx/conf.d/hidden_service.confを変更したのにアクセスできない。

/var/log/daemon.logにヒントが残っているかもしれません。

cat /var/log/daemon.log

私の場合はこのように、パス名がおかしくなっていました(これくらいTorがどうにかやってくれとは思いつつ)(これでも動いた時があった、なぜ??)
スクリーンショット 2022-10-12 2.42.57.png

/etc/tor/torrc
- HiddenServiceDir /var/lib/tor/hidden_service/
+ HiddenServiceDir /var/lib/tor/hidden_service

また、secret keyのアクセス権限も正しく設定されていませんでした。

スクリーンショット 2022-10-12 2.42.35.png
スクリーンショット 2022-10-12 2.43.09.png

chmod 644 /var/lib/tor/hidden_service/hs_ed25519_secret_key

再度以下のコマンドを実行します。

systemctl restart tor
systemctl restart nginx

うまくいくと/var/log/daemon.logの末尾はこのようになります。

スクリーンショット 2022-10-12 2.49.37.png

参考文献

書籍だと前述の通り、これに非常に詳しく書かれていました。

ダークウェブの教科書 匿名化ツールの実践 (ハッカーの技術書)

この記事はめっちゃわかりやすいです。

【ダークウェブ構築】EC2のUbuntuでtor Hidden Service (.onion) サイトを構築する

  1. これは適当な発言です、すまんね^^

  2. tsukuctf22をprefixにすることは計算量的に厳しい

  3. どうにかこうにかすると並列化とかできるはずです

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0