© violetkaipa - Fotolia.com

DNSCrypt für mehr Sicherheit und Privatsphäre

DNSCrypt ist eine interessante Möglichkeit für PCs, Server und Android-Smartphones, die Sicherheit, Integrität und Privatsphäre im Internet deutlich zu erhöhen. DNSCrypt geht auf eine Initiative von OpenDNS zurück, ein globaler, öffentlicher DNS Anbieter.

Die Relevanz der Sicherheit von DNS Anfragen wird häufig von Administratoren und sicherheitsbewussten IT Nutzern übersehen, obwohl die Manipulationen von DNS Antworten eines der häufigsten und einfachsten Möglichkeiten darstellt, ein System zu kompromittieren.

DNSSEC war ein erstes Vorhaben, die Authentizität und Integrität der DNS Daten sicherzustellen.

Was ist DNS, wie funktioniert es?

Ein kurzer Abriss zu den Funktionsweisen des DNS Systems, ich beschreibe im Folgenden die Standardfunktionsweise der Namensauflösung unter Windows, Linux und Android:

DNS Aufloesung ohne DNSCrypt als Flussdiagramm
DNS Auflösung ohne DNSCrypt als Flussdiagramm

Das Diagramm ist einfach verständlich, die Schwachstellen liegen vor allem an den Punkten 1 und 2, worauf ich gleich näher eingehen werde. DNS Anfragen und Antworten werden grundsätzlich im Klartext über das Internet versendet, für jeden lesbar. Mit einem Netzwerk-Sniffer extrahiert, sieht die Anfrage (Punkt 1 in der oberen Darstellung) wie folgt aus:

DNS Anfrage im Detail
Eine DNS Anfrage an google.de im Detail

Der DNS Server hat auf diese Anfrage wie folgt geantwortet (Punkt 2 in der oberen Darstellung):

DNS Antwort im Detail
Eine DNS Antwort über google.de im Detail

Wo liegen die Schwachstellen von DNS?

Die Schwachstellen dieses Systems sind vielfältig, zum Beispiel bei den Themen Datenschutz, Privatsphäre und Vertraulichkeit. Jeder Netzwerkteilnehmer ist in der Lage, alle Anfragen, die von einem Gerät oder PC gestellt werden, mitzulesen. In einem Unternehmensnetzwerk lässt sich so, vollkommen unauffällig und ohne den Internettraffic über http(s) mitzulesen, ein genaues Protokoll darüber erstellen, welche Webseiten im Laufe des Tages besucht werden.

Auch in Universitäten wird der Traffic gerne auf diese Weise geloggt: Andere DNS Server werden blockiert, nur die eigenen werden erlaubt. Traffic, der über eine VPN Verbindung geleitet wird, ist somit, unter Umständen, plötzlich wieder protokollierbar ("DNS Leak").

Häufig wird auch von staatlicher Seite zur Realisierung von Internetsperren/ -filtern in diesen Mechanismus eingegriffen. Der Gesetzesentwurf (Stichwort "Zensursula") basierte exakt auf dieser Manipulation: Es wird eine falsche IP Adresse als Antwort auf die DNS Anfragen zurückgegeben, die auf einer Filterliste stehen.

Stichwort Daten-Integrität: In meinem Artikel über Spoofing und Man-in-the-Middle Angriffe habe ich demonstriert, wie einfach sich Man-in-the-Middle Angriffe realisieren lassen. Noch einfach wird die Sache, wenn der PC über DHCP Daten zur Netzwerkkonfiguration empfängt und ich in der Lage bin, diese zu simulieren ("Rogue DHCP-Server"). Ich habe oft erlebt, dass Administratoren eine falsche Vorstellung von der DHCP-Sicherheit haben: Der Client nimmt und verarbeitet das erste DHCP-Antwortspaket, dass er erhält, ohne zu überprüfen, wer der Absender war!

Mit der Kontrolle über die DNS Anfragen eines Clients ist es einem Angreifer möglich, den Nutzer auf eine beliebige Webseite umzuleiten, ohne das der Nutzer dies bemerken könnte: In der Adressleiste des Browser steht exakt das, was der Nutzer eingegeben hat.

Auch Software lässt sich so problemlos auf einem PC installieren. Viele Tools prüfen beim Start der Anwendung im Internet, ob eine neue Version verfügbar ist. Viele Anwendungen bieten dem Nutzer in diesem Fall an, das Update direkt herunterzuladen und zu installieren. Findet in diesem Fall keine Verifikation des Downloads auf Basis einer Signatur statt, kann der Angreifer installieren, was immer er möchte!

Was ermöglicht DNSCrypt um diese Schwachstellen zu verhindern?

DNSCrypt setzt an mehreren Stellen an, um die Integrität und Vertraulichkeit der Anfragen sicherstellen zu können. DNSCrypt ist nicht als Konkurrenz zu DNSSEC entwickelt worden, sondern als Erweiterung. Ähnlich wie SSL den HTTP-Traffic verschlüsselt, verschlüsselt DNSCrypt den DNS-Traffic. Zur Verschlüsselung kommt Elliptische-Kurven-Kryptographie zum Einsatz, konkret Curve25519. Die Anfrage wird standardmäßig über eine UDP Verbindung an den Port 443 übertragen, als Fallbacklösung steht TCP bereit. TCP über Port 443 ist in den meisten Netzwerken freigeschaltet, denn es ermöglicht eine Kommunikation mit https-verschlüsselten Webseiten.

Durch diesen Übertragungsweg ist die erste Schwachstelle beseitigt: Internetprovider sind nicht mehr in der Lage, fremde DNS Server durch eine Blockade des UDP/TCP Ports 53 zu blockieren. Wird ein externer DNS Server benutzt, ist eine Internetfilterung auf DNS Basis durch diese Möglichkeit aufgebrochen und überwunden. Durch die Verschlüsselung des DNS Traffics ist ein Mitlesen und Protokollieren ebenfalls nur noch auf Seite des DNS-Servers möglich, jedoch nicht durch den Internetprovider oder Netzwerkadministratoren.

Dieselbe DNS Anfrage, diese mal mit DNSCrypt (entspricht Punkt 1 in der oberen Darstellung):

DNSCrypt Anfrage im Detail
Eine DNSCrypt Anfrage an google.de im Detail

Die Antwort des Servers, entspricht Punkt 2 in der oberen Darstellung:

DNSCrypt Antwort im Detail
Eine DNSCrypt Antwort über google.de im Detail

Das Schlüsselpaar für die Verschlüsselung wird clientseitig bei jedem Start der Anwendung neu generiert, der Public-Key des Servers ist bekannt und wird durch den Client überprüft. Eine Man-in-the-Middle Attacke ist somit nicht möglich, da mathematisch (mit vertretbarem Zeitaufwand) keine Kollisions-Schlüssel generiert werden können.

Die Installation von DNSCrypt

Die folgende Anleitung bezieht sich auf Version 1.x. Eine Anleitung für die neue Version 2.x findet sich auf Github!

Im folgenden zeige ich kurz auf, wie DNSCrypt unter Windows, Linux und Android installiert und konfiguriert werden kann. Der Quellcode für die Anwendung dnscrypt-proxy findet sich auf Github. Die aktuellen Versionen können von der Seite http://download.dnscrypt.org/dnscrypt-proxy/ heruntergeladen werden.

Die Installation von DNSCrypt unter Windows

Nach dem Download der Datei "dnscrypt-proxy-win32-full-[...].zip" muss diese extrahiert werden:

DNSCrypt-Proxy installieren unter Windows: Extrahieren
Schritt 1: DNSCrypt-Proxy extrahieren

Die Installation kann auf zwei Wegen erfolgen: Als Windows Service oder durch den direkten Start. Um die Anwendung als Windows Service zu installieren, muss das extrahierte Verzeichnis an einen Ort kopiert werden, der sich nicht verändert, beispielsweise das Programmverzeichnis. Anschließend muss die Kommandozeile (cmd) geöffnet werden, und folgendes eingegeben werden:

# Service installieren
C:\Pfad\zu\DNSCrypt-Proxy\dnscrypt-proxy.exe --install

Die Ausgabe sollte wie folgt aussehen:

DNSCrypt-Proxy: Installation als Windows Service
Schritt 2: DNSCrypt-Proxy Installation als Windows Service

Alternativ kann die Anwendung dnscrypt-proxy manuell gestartet werden, jedoch muss hierbei dann auch ein Autostart-Eintrag für die Anwendung erstellt werden.

DNSCrypt-Proxy: Direkter Start der Anwendung
DNSCrypt-Proxy unter Windows gestartet

Der Service wird unter dem Namen "dnscrypt-proxy" angelegt und kann mit folgenden Zeilen wieder deinstalliert werden:

# Service stoppen
net stop dnscrypt-proxy

# Service deinstallieren
C:\Pfad\zu\DNSCrypt-Proxy\dnscrypt-proxy.exe --uninstall

Nach beiden Installationsarten läuft unter Windows ab sofort eine Anwendung, die auf dem lokalen (127.0.0.1) UDP und TCP Port 53 auf DNS Anfragen wartet. Nach dem Start muss Windows angewiesen werden, standardmäßig den lokalen Proxy zur Namensauflösung zu verwenden. Dies kann in den Netzwerkadaptereinstellungen durch eine manuelle Festlegung des DNS-Servers einfach realisiert werden:

Windows Netzwerkeinstellungen öffnen
Windows Netzwerkeinstellungen öffnen...
Einen lokalen DNS-Server unter Windows einrichten
... den lokalen DNS-Server (127.0.0.1) einstellen

Der DNS Server wird anschließend automatisch nach einem Neustart der Netzwerkverbindung verwendet. Eine weitere Möglichkeit ist die Installation einer GUI für DNSCrypt, wovon ich jedoch abrate: Mehr Software bedeutet mehr mögliche Sicherheitslücken auf dem Computer. Die Installation als Service funktioniert einwandfrei, warum also mehr Software als notwendig auf dem PC?

Die Installation von DNSCrypt unter Linux (Ubuntu)

In vielen Distributionen ist DNSCrypt-Proxy bereits in den Paketquellen enthalten, wenn dies nicht der Fall ist, kann die Software mit wenigen Handgriffen selbst kompiliert werden.

Download von DNSCrypt-Proxy für Linux
Download von DNSCrypt-Proxy für Linux

Nach der Prüfung des Downloads mit Hilfe des Signaturfiles (gpg --verify dnscrypt-proxy-*.tar.gz.sig) muss eine Konsole geöffnet und in das Verzeichnis gewechselt werden. Die Kompilierung und Installation wird mit folgenden Schritten durchgeführt:

./configure
make
make install

In vielen Fällen gibt es hierbei ein Problem mit der Komponente "libsodium", eine aktuelle Version kann von folgendem Repository heruntergeladen werden: https://github.com/jedisct1/libsodium.

Nach der manuellen Installation sollte, aus Sicherheitsgründen, ein Benutzeraccount für die Anwendung angelegt werden:

# Nutzer "dnscrypt" anlegen
sudo adduser --system --quiet --home /run/dnscrypt --group  --shell /bin/false --disabled-login --disabled-password dnscrypt

Der Start des Clients wird mit folgendem Kommando durchgeführt:

# DNSCrypt-Proxy starten
dnscrypt-proxy --daemonize --user=dnscrypt

Zum Abschluss muss der DNS-Server in den Netzwerkeinstellungen angepasst werden, entweder direkt über die /etc/resolv.conf oder über den Netzwerkmanager ("Automatic (DHCP) Addresses Only").

Unter Ubuntu ist standardmäßig ein DNS-Cache (dnsmasq) aktiv. Um die Systeme aufeinander aufbauend zu nutzen, muss dnscrypt-proxy mit folgendem Befehl gestartet werden:

# DNSCrypt-Proxy mit alternativen, lokalen IP
dnscrypt-proxy --user=dnscrypt --daemonize --local-address=127.0.0.2

Es entsteht hierdurch folgende Konstruktion (sudo netstat -tulpen | grep ":53"):

DNSCrypt-Proxy und DNSMasq unter Netstat
DNSCrypt-Proxy und DNSMasq unter Netstat

Die Einstellungen des DNS-Servers müssen in der /etc/resolv.conf bzw. im Netzwerkmanager (auf 127.0.0.2) entsprechend angepasst werden.

Die Installation von DNSCrypt unter Android

DNSCrypt-Proxy kann problemlos unter Android installiert werden. Auf der Downloadseite findet sich eine bereits kompilierte Version, die nur noch gestartet werden muss:

DNSCrypt-Proxy unter Android
DNSCrypt-Proxy unter Android

Der DNS Server kann mit folgendem Befehl auf den lokalen DNS-Server umgestellt werden:

# Lokalen DNS Server nutzen
setprop net.dns1 127.0.0.1

Kurzexkurs: Einige Befehle zu Android:

# Alternativen DNS Server setzen
setprop net.dns2 aaa.bbb.ccc.ddd

# Aktuelle DNS Server auslesen
getprop net.dns1
getprop net.dns2

Wichtig ist hierbei zu beachten, dass der DNS-Server nach jeder Neueinwahl in ein (W-Lan oder Mobilfunk-)Netzwerk den DNS Server überschreibt. Sinnvoll ist in diesem Falle ein kurzes Skript, dass den DNS-Server intervallmäßig prüft und ggf. auf localhost zurücksetzt.

CloudNS als alternativen Dienst zu OpenDNS

Eine Übersicht über öffentliche DNS Server, welche das DNSCrypt Protokoll unterstützen, findet sich auf Github!

Standardmäßig werden die DNS-Anfragen von OpenDNS beantwortet. Einen alternativen DNS Service bietet CloudNS. Der CloudNS bietet folgende Features und Vorteile (zitiert von https://cloudns.com.au/, abgerufen am 26.August 2013):

* DNSCrypt Support
We only allow connections to our service using DNSCrypt, this provides confidentially and message integrity to our DNS resolver, and makes it harder for an adversery watching the traffic of our resolver to identify the origin of a DNS query as all the traffic is mixed together.

* DNSSEC Validation
Our server does complete trust validation of DNSSEC enabled names, protecting you from upstream dns poisoning attacks or other DNS tampering.

* Namecoin resolution
Namecoin is an alternative, decentralized DNS system, that is able to prevent domain name censorship. Our DNS server does local namecoin resolution of .bit domain names making it an easy way to start exploring namecoin websites.

* Hosted in Australia
Our DNS Server is hosted in Australia, making it a faster alternative to other open public DNS resolvers for Australian residents.

* No domain manipulation or logging
We will not tamper with any domain queries, unlike some public providers who hijack domain resolution for domains that fail to resolve. Our servers do not log any data from connecting users including DNS queries and IP addresses that make connections.

Nachteilig ist jedoch, vor allem für deutsche Nutzer, die Netzwerklatenz, da die Server in Australien stehen. Besonders bei sehr schnellen Internetverbindung ist eine leichte Verzögerung beim erstmaligen Aufrufen einer Webseite spürbar. Zur Nutzung des alternativen Dienstes muss DNSCrypt-Proxy mit folgenden Parametern gestartet werden:

# DNSCrypt-Proxy mit alternativem DNS Server starten
dnscrypt-proxy --user=dnscrypt --daemonize --resolver-address=113.20.8.17:443 --provider-name=2.dnscrypt-cert-2.cloudns.com.au --provider-key=67A4:323E:581F:79B9:BC54:825F:54FE:1025:8B4F:37EB:0D07:0BCE:4010:6195:D94F:E330

Zusammenfassung

DNSCrypt bietet eine Menge Vorteile und verschafft einem Nutzer deutlich mehr Privatsphäre und Schutz vor Man-in-the-Middle Angriffen. Wer mit der gelegentlich leichten Verzögerung leben kann, sollte den alternativen Service CloudNS Server zur Namensauflösung nutzen. Alles in allem ein sehr interessantes Tool für Smartphones und PCs.

Bildnachweis:

  • Beitragsbild: © violetkaipa - Fotolia.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert