Onion-Dienste (TOR Hidden-Services)
1 TOR - The Onion Router
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ängttorify
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)