Onion-Dienste (TOR Hidden-Services)

2 TOR installieren und aktivieren

2.1 Debian/Ubuntu und Derivate

sudo apt install tor

2.2 RedHat/Centos und Fedora

sudo yum install tor
sudo systemctl enable --now tor

2.3 SUSE Linux

sudo zypper install tor
sudo systemctl enable --now tor

2.4 FreeBSD

sudo pkg install tor
service onestart tor

2.5 NetBSD

sudo pkgin in tor

2.6 OpenBSD

pkg_add tor
pkg_add torsocks
rcctl start tor

2.7 macOS mit Homebrew

$ brew install tor
$ brew services start tor

3 einen Onion-Dienst konfigurieren

  • Tor-Konfigurationsdatei editieren (unter BSD Systemen ist die Datei möglicherweise unter /usr/local/etc/tor/torrc)
sudo /etc/tor/torrc
  • in der Datei die Sektion für Hidden Services suchen und einen Service definieren
HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22 127.0.0.1:22
  • der Konfigurationsbefehl HiddenServiceDir gibt an, in welchem Verzeichnis die Tor-Software die Informationen zum Dienst ablegen soll (privater Schlüssel und Hostname/öffentlicher Schlüssel). Dieses Verzeichnis sollte noch nicht existieren und wird von der Tor-Software automatisch mit den korrekten Rechten angelegt.
  • der Konfigurationsbehehl HiddenServicePort gibt an, welcher Port im Tor-Netzwerk sichtbar sein soll, und auf welchem Rechner (IP-Adresse) und Port die Pakete weitergeleitet werden sollen. Dabei kann auch eine IP-Adresse eines anderen Rechners im Netz angegeben werden, auf dem dann die Tor-Software nicht laufen muss, welcher aber als Onion-Service erreichbar ist.
  • Nun die Tor-Software neu starten
# modernes Linux (systemd)
sudo systemctl restart tor
# Linux ohne Systemd / FreeBSD
sudo service tor restart
# funktioniert universell
sudo pkill -HUP tor
  • in der Datei hostname des für den Onion-Dienst angegebenen Verzeichnis befindet sich der Onion-Name des Dienstes. Mit diesem Namen kann der Dienst erreicht werden. Der Client muss dabei auch die Tor-Software installiert haben und das Tor-Netz benutzen.
cat /var/lib/tor/ssh/hostname                                                    
rhbmhbl3n5iljqkj.onion

4 Tor auf Seite des Client

  • Tor-Software installieren und starten (keine besondere Konfiguration erforderlich)
  • für Web-Anwendungen den Tor-Browser installieren und benutzen: https://www.torproject.org/projects/torbrowser.html.en
  • oder im Browser (Firefox, Seamonkey, Chromium etc) in den Netzwerkeinstellungen als Proxy einen Socks5 Proxy auf Port 9050 eintragen. Einstellen, das DNS-Anfragen auch über den Socks5-Proxy gesendet werden.
  • Dienste, welche keinen Socks5-Proxy unterstützen, können über den Befehl torify das Tor-Netzwerk benutzen. Dabei fängt torify DNS-Anfragen und Netzwerkverbindungen an das Internet ab und leitet diese Anfragen an das Tor-Netzwerk weiter. Beispiel SSH (Secure Shell):
$ torify ssh rhbmhbl3n5iljqkj.onion
The authenticity of host 'rhbmhbl3n5iljqkj.onion (127.42.42.0)' can't be established.
ECDSA key fingerprint is SHA256:UDnhiUeJdxYVlYJHM/cOmP4gh+a6jKO+dfYwH0J8fDc.
ECDSA key fingerprint is MD5:8e:cc:bf:07:ee:bb:a7:9e:5f:77:f7:10:12:01:01:fa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rhbmhbl3n5iljqkj.onion' (ECDSA) to the list of known hosts.
root@rhbmhbl3n5iljqkj.onion's password: 
box$

5 Sicherheit

  • Einige Server-Dienste schalten spezielle Admin-Funktionen frei, wenn der Server über eine Loopback-Adresse (127.0.0.1) angesprochen wird (z.B. der Apache Webserver –> https://www.heise.de/security/meldung/Apache-verpetzt-moeglicherweise-Tor-Hidden-Services-3090218.html). Bei Bennutzung als Tor-Dienst auf einer Loopback-Adresse sind diese Admin-Funktionen von aussen über das Tor-Netzwerk erreichbar. Lösung: den Dienst auf einer nicht-Loopback Adresse konfigurieren, oder die speziellen Admin-Funktionen in der Server-Konfiguration ausschalten.

6 Onion-Dienst mit Client-Authentifizierung

Der Onion-Dienst, wie oben beschrieben, ist erreichbar für jeden Benutzer der den Onion-Namen kennt. Ein Onion-Name besteht derzeit aus 16 Zeichen (80 bit) und kann u.U. erraten werden. Um die Sicherheit des Onion-Dienstes noch weiter zu erhöhen, kann der Dienst mit einer Authentisierung versehen werden. Bei der Authentisierung bekommt jeder Client einen eigenen kryptografischen Schlüssel zugewiesen, und nur wenn dieser Schlüssel beim Verbindungsaufbau mit angegeben wird, ist der Onion-Dienst erreichbar (und sichtbar). Der Schlüssel ist ein Authentisierungs-Cookie aus 16 Bytes (Base64 kodiert) welcher zusätzlich zum Onion-Namen bekannt sein muss.

6.1 Authentisierung auf der Seite des Onion-Dienstes (Server)

Die Dienste-Authentisierung wird auf der Server-Seite mit der Konfigurationsdirektive HiddenServiceAuthorizeClient angeschaltet. Diese Direktive nimmt als Parameter den Authentisierungs-Modus (basic oder stealth) und eine per Komma getrennte Liste an Client-Namen. Diese Client-Namen sind nur beschreibener Natur und müssen nicht mit Hostnamen oder Domain-Namen übereinstimmen. Die Direktive gilt für den jeweils voher definierten Onion-Dienst:

HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22 127.0.0.1:22
HiddenServiceAuthorizeClient stealth client1,client2,client3

Nach einem Neustart des Tor-Dienstes findet sich im Verzeichnis des Onion-Dienstes eine neue Datei mit dem Dateinamen client_keys. Diese Datei enthält die Authentisierungs-Cookies und privaten Schlüssel für jeden angegebenen Client-Rechner:

client-name client1
descriptor-cookie QJVF38CnraTrg8FaAHuvFw==
client-key
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDTcZOJO3Eh4GWva8L9I4MlabqAvujx6oCL3xso00NTX6zWNWZn
[...]
6rEwyC92BYs2rShFsGadG0ET6N6+j7uWNf18Ya+qikCl
-----END RSA PRIVATE KEY-----
client-name client2
descriptor-cookie m6Isl8df2gPV+MBDoYFNLw==
client-key
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQC/OSyIWcTGD9oZK3vUqeTpSIJkpkJc670/c57iXo6a6L94VW/0
[...]
NFd2QdCnL87ay3gxjTx9APvGdDRf6VaMNaSurciq2Q==
-----END RSA PRIVATE KEY-----

In der Datei hostname im Verzeichnis des Onion-Dienstes befinden sich nun unterschiedliche Onion-Namen für die jeweiligen Clients, zusammen mit den Authentisierungs-Cookies:

iaopwbjmex2splr2.onion QJVF38CnraTrg8FaAHuvFx # client: client1
bdc5ujizach44dwm.onion m6Isl8df2gPV+MBDoYFNLx # client: client2
kura5sy7vsmi6ws6.onion wyThiRFLyqtsppBS0TDoHB # client: client3

Aus dieser Datei muss nun für jeden Client der Onion-Namen und der dazugehörige Cookie in die Konfiguration der Tor-Software auf den jeweiligen Clients kopiert werden.

6.2 Authentisierung auf der Client-Seite

Onion-Namen und Cookie werden auf Client-Seite mit der Direktive HidServAuth in die Konfigurationsdatei /etc/tor/torrc eingetragen:

HidServAuth  kura5sy7vsmi6ws6.onion wyThiRFLyqtsppBS0TDoHB # client: client3

Nach einem Neustart der Tor-Software auf dem Client sollte nun der Onion-Dienst von diesem Client aus sichtbar und benutzbar sein.

Ein Verbindungsaufbau zum Dienst ohne den Authentisierungs-Cookie bedingt einen Timeout:

# torify ssh -v kura5sy7vsmi6ws6.onion
OpenSSH_7.5p1, OpenSSL 1.1.0f-fips  25 May 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf
debug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config
debug1: /etc/ssh/ssh_config.d/05-redhat.conf line 8: Applying options for *
debug1: Connecting to kura5sy7vsmi6ws6.onion [127.42.42.0] port 22.
[Aug 03 22:26:45] ERROR torsocks[9052]: Connection timed out (in socks5_recv_connect_reply() at socks5.c:536)
debug1: connect to address 127.42.42.0 port 22: Connection timed out
ssh: connect to host kura5sy7vsmi6ws6.onion port 22: Connection timed out

Mit dem korrektem Cookie funktioniert der Verbindungsaufbau:

# torify ssh -v kura5sy7vsmi6ws6.onion
OpenSSH_7.5p1, OpenSSL 1.1.0f-fips  25 May 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf
debug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config
debug1: /etc/ssh/ssh_config.d/05-redhat.conf line 8: Applying options for *
debug1: Connecting to kura5sy7vsmi6ws6.onion [127.42.42.0] port 22.
debug1: Connection established.
[...]
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: none
debug1: kex: curve25519-sha256@libssh.org need=32 dh_need=32
debug1: kex: curve25519-sha256@libssh.org need=32 dh_need=32
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:UDnhiUeJdxYVlYJHM/cOmP4gh+a6jKO+dfYwH0J8fDc
The authenticity of host 'kura5sy7vsmi6ws6.onion (127.42.42.0)' can't be established.
ECDSA key fingerprint is SHA256:UDnhiUeJdxYVlYJHM/cOmP4gh+a6jKO+dfYwH0J8fDc.
ECDSA key fingerprint is MD5:8e:cc:bf:07:ee:bb:a7:9e:5f:77:f7:10:12:01:01:fa.
Are you sure you want to continue connecting (yes/no)? 

7 Vor- und Nachteile von Tor-Onion-Diensten

7.1 Vorteile

  • keine Änderungen an der (Heim-)Firewall notwendig. Keine Port-Forwardings etc.
  • kein DynDNS notwendig, um eine wechselne IP-Adresse mit einen Namen zu verbinden. Der Onion-Name wird immer im Tor-Netz gefunden
  • Datenverkehr ist (einfach) verschlüsselt (1024bit RSA)
  • Datenverkehr ist anonymisiert

7.2 Nachteile

  • Client muss die Tor-Software als Proxy benutzen
  • nur IPv4, kein IPv6 (daran wird gearbeitet)
  • hohe Latenz (Verzögerung) bei den Paketlaufzeiten
  • Tor-Verschlüsselung von 1024bit RSA nicht mehr zeitgemäß (auch daran wird im Tor-Projekt gearbeitet)