DNS-Spoofing ist eine Form von Cyberangriff, bei der die Zuordnung der IP-Adresse zu einer Domain manipuliert bzw. gefälscht wird. Ziel ist es, den Datenverkehr auf den Computer des Angreifers zu leiten bzw. den Benutzer anstatt auf die eigentliche Website auf eine falsche, meist schädliche Website zu leiten. DNS-Spoofing wird häufig eingesetzt, um Phishing-Angriffe durchzuführen, Schadsoftware zu verbreiten oder vertrauliche Daten abzugreifen.
Es gibt verschiedene Möglichkeiten DNS-Spoofing durchzuführen: Durch Nutzung von Schwachstellen im DNS-Protokoll, mittels IP-Spoofing oder lokal, etwa durch manipulierte Hosts-Dateien.
Eine häufige Variante ist DNS-Cache-Poisoning, bei der gefälschte Einträge in den Cache (Zwischenspeicher) des DNS-Servers eingeschleust werden. Dadurch gibt der DNS-Server eine falsche Antwort zurück, z. B. eine gefälschte IP-Adresse. Die direkte Übersetzung von DNS-Cache-Poisoning ist „DNS-Zwischenspeicher-Vergiftung“.
Übersicht über das Domain Name System
Das DNS funktioniert ähnlich wie eine Telefonauskunft. Der Benutzer kennt die Domain (den für Menschen merkbaren Namen eines Rechners im Internet) – zum Beispiel example.org. Diese sendet er als Anfrage in das Internet. Die Domain wird dann dort vom DNS in die zugehörige IP-Adresse (die „Anschlussnummer“ im Internet) umgewandelt – zum Beispiel eine IPv4-Adresse der Form 192.0.2.42 oder eine IPv6-Adresse wie 2001:db8:85a3:8d3:1319:8a2e:370:7347 – und führt so zum richtigen Rechner. Wenn der DNS-Server die angeforderte Übersetzung nicht kennt, fragt er einen anderen Server. Der Prozess geht also rekursiv weiter. Um die Performance zu erhöhen, merken sich die Server die Übersetzungen für eine bestimmte Zeit in ihrem Zwischenspeicher. Das heißt, wenn der Server die gleiche Anfrage für eine Übersetzung erhält, wird er, solange der Zwischenspeicher nicht abläuft, die Anfrage ausführen können, ohne einen anderen Server zu kontaktieren.
Wenn der DNS-Server eine falsche Übersetzung erhält und diese aufgrund der Leistungsoptimierung zwischenspeichert, spricht man von einem vergifteten Zwischenspeicher (poisoned cache). Der Server gibt die Falschinformation auch an andere Benutzer weiter, welche dann an einen anderen Computer, beispielsweise den des Angreifers, umgeleitet werden.
Angriff mittels IP-Spoofing
Bei dieser Variante des DNS-Spoofing gibt sich der Angreifer mittels IP-Spoofing als legitimer DNS-Server aus und sendet eine gefälschte Antwort auf eine DNS-Anfrage des Opfers. Damit der Angriff erfolgreich ist, muss die gefälschte Antwort entweder vor der legitimen Antwort beim angegriffenen Resolver eintreffen, oder der zuständige Nameserver wird durch einen Denial-of-Service-Angriff daran gehindert eine Antwort zu senden. Des Weiteren müssen die Parameter der Antwort zu der Anfrage passen, unter anderem die 16 Bit lange Transaktionsnummer. Befindet sich der Angreifer im lokalen Rechnernetz, kann er die Transaktionsnummer mit einem Sniffer im Netz beobachten. Andernfalls muss die Transaktionsnummer erraten werden, wozu im Durchschnitt Versuche notwendig sind. Der Angreifer kann mehrere gefälschte Antworten gleichzeitig senden, um die Erfolgswahrscheinlichkeit bei einem Angriffsversuch zu erhöhen, was jedoch den Ressourcenaufwand erhöht.
Durch verschiedene Schwachstellen kann die Transaktionsnummer einfacher erraten werden. Bei BIND 8 war der Pseudozufallszahlengenerator unsicher, sodass die Transaktionsnummer mit geringem Aufwand vorhergesagt werden konnte. Sendet der angegriffene Resolver eine identische DNS-Anfrage mehrfach mit verschiedenen Transaktionsnummern, erhöht sich die Erfolgswahrscheinlichkeit aufgrund des Geburtstagsparadoxons erheblich.
DNS-Cache-Poisoning Normalerweise verwendet ein an das Internet angeschlossener Computer den DNS-Server seines Internetdienstanbieters (ISP) oder ein DNS des Unternehmensnetzwerks. DNS-Server werden in Unternehmensnetzwerken für die schnellere Namensauflösung verwendet, insbesondere da sie vorherige Anfragen zwischenspeichern. Angriffe unter Verwendung des DNS-Cache-Poisoning auf einen einzelnen DNS-Server können direkt vom betroffenen Server aus geschehen oder indirekt von dessen nachgelagerten Servern, wo weiter nach der Namensauflösung gefragt wird.
Um einen Angriff mit DNS-Cache-Poisoning auszuführen, verwendet der Angreifer normalerweise Schwachstellen in der DNS-Software, sogenannte Exploits. Ein DNS-Server sollte eigentlich die Korrektheit der DNS-Auflösung validieren, um sicherzustellen, dass die Daten von einer autorisierten Quelle stammen. Dies kann z. B. durch die Verwendung von DNSSEC geschehen; andernfalls kann der Server die falschen Daten lokal zwischenspeichern und sogar neue Anfragen von anderen Usern mit falschen Daten beantworten.
Bei den folgenden Varianten werden die Einträge für den Server ns.target.example mittels DNS-Cache-Poisoning geändert und der Benutzer auf den Server des Angreifers umgeleitet w.x.y.z. Diese Angriffe setzen voraus, dass der DNS-Server für target.example dem Server ns.target.example entspricht.
Um den Angriff erfolgreich durchzuführen, muss der Angreifer den DNS-Server dazu bringen, eine Anfrage für eine Domain zu tätigen, die der Angreifer kontrolliert.
Umleitung auf den DNS-Server der Zieldomäne Die erste Variante des DNS-Cache-Poisoning besteht darin, den DNS-Server der Angreifer-Domäne auf den DNS-Server der Zieldomäne umzuleiten und diesem DNS-Server dann eine vom Angreifer ausgewählte IP-Adresse zuzuweisen.
Anfrage des DNS-Servers: Was sind die Adressen von subdomain.attacker.example?
subdomain.attacker.example. IN A
Antwort des Angreifers:
Answer: (no response)
Authority section: attacker.example. 3600 IN NS ns.target.example.
Additional section: ns.target.example. IN A w.x.y.z
Ein verwundbarer DNS-Server würde den zusätzlichen A-Eintrag (IP-Adresse) für ns.target.example zwischenspeichern, so dass der Angreifer Anfragen an die gesamte Domäne target.example auflösen kann.
Umleitung des NS Eintrags auf eine andere Zieldomäne Die zweite Variante der DNS-Cache-Poisoning besteht darin, den Nameserver einer anderen Domain, der nichts mit der Anfrage des Benutzers zu tun hat, an eine vom Angreifer ausgewählte IP-Adresse umzuleiten.
Anfrage des DNS-Servers: Was sind die Adressen von subdomain.attacker.example?
subdomain.attacker.example. IN A
Antwort des Angreifers:
Answer: (no response)
Authority section: target.example. 3600 IN NS ns.attacker.example.
Additional section: ns.attacker.example. IN A w.x.y.z
Ein anfälliger Server würde die nicht zugehörigen autoritativen Informationen für den NS-Eintrag von target.example (Nameserver-Eintrag) zwischenspeichern, so dass der Angreifer Anfragen an die gesamte Domäne target.example auflösen kann.
Angriff über zusätzliche Daten Eine historische DNS-Cache-Poisoning-Angriffsmethode ist das Hinzufügen von zusätzlichen, gefälschten DNS-Einträgen in legitime DNS-Antworten. Übernimmt der Anfragende ungeprüft Resource Records aus der Antwort, so können ihm gefälschte Resource Records für beliebige Domainnamen in den DNS-Cache eingespeist werden.
Funktionsweise Im öffentlichen DNS sind einzelne DNS-Server nur für Teilbereiche des gesamten DNS autoritativ. Bekommt ein DNS-Server eine Anfrage für einen Bereich, in dem er nicht autoritativ ist, kann er die Anfrage an den nächsten DNS-Server weiterleiten. Um unnötige Last zu vermeiden, können DNS-Server die Antworten anderer Server auf Anfragen lokal in einem Cache speichern. In diesem Fall könnte die Weiterleitung der oben genannten Anfrage an einen weiteren Server wegfallen und sofort eine Antwort gesendet werden. Ein DNS-Teilnehmer, der an einen Nameserver eine Anfrage sendet, übernimmt die erhaltene Antwort ungeprüft eine vorgegebene Zeit lang in seinen Cache. Neben der eigentlichen Antwort werden oft auch zusätzliche (legitime) Daten (Glue Records) übermittelt, die ebenfalls im Cache gespeichert werden. Das Cache Poisoning beruht darauf, in diesen zusätzlichen Daten ein oder mehrere gefälschte Resource Records zu verstecken.
Genauer formuliert: In der Authority Section des Antwortpakets wird der umzuleitende Name (zum Beispiel de.wikipedia.org) als angeblicher DNS-Server eingetragen und in der Additional Section die IP-Adresse (zum Beispiel 1.2.3.4) eines vom Angreifer kontrollierten Servers.
Ablaufbeispiel Ein Angreifer bringt den Nameserver XX unter seine Kontrolle. Er manipuliert diesen derart, dass jedes Mal, wenn nach einem Namen aus der Domain example.com gefragt wird, ungefragt der gefälschte Record de.wikipedia.org 192.0.2.1 mitgeliefert wird. Der öffentliche Nameserver YY möchte den Namen test.example.com auflösen. Er sendet eine entsprechende Anfrage an den zuständigen (vom Angreifer kontrollierten) Nameserver XX. Dieser manipulierte Nameserver antwortet mit der korrekten IP-Adresse, liefert aber zusätzlich den gefälschten Record de.wikipedia.org 192.0.2.1 mit. Dieser wird vom anfragenden Server YY ungeprüft in den Cache übernommen. Zu einem späteren Zeitpunkt versucht ein User, den Namen de.wikipedia.org aufzulösen und wendet sich an den öffentlichen Nameserver YY. Der Nameserver findet den (gefälschten) Record in seinem Cache und sendet dem User gutgläubig die IP-Adresse 192.0.2.1 zurück. Der User möchte auf de.wikipedia.org zugreifen, wird aber – für ihn nicht erkennbar – auf eine falsche Web-Seite mit der IP-Adresse 192.0.2.1 geleitet.
Problembehebung Die Sicherheitslücke wurde beim BIND-Nameserver im Juni 1997 behoben, indem ungefragt mitgelieferte Resource Records ignoriert werden. Akzeptiert werden nur Resource Records aus der tatsächlich angefragten Domain (). Alle heute gebräuchlichen Nameserver führen diese Prüfung vor der Übernahme in den Cache durch.
Kurz nach Bekanntwerden der Lücke führte Eugene Kashpureff einen großflächigen Cache-Poisoning-Angriff gegen noch anfällige BIND-Nameserver durch, für den er später zu einer Bewährungsstrafe verurteilt wurde.
Kaminsky-Angriff Im Juli 2008 stellte Dan Kaminsky eine Angriffsvariante vor, die das oben beschriebene Caching gültiger Antworten umgeht und damit den Zeitaufwand erheblich reduziert. Durch Abfrage von nicht existierenden Domainnamen kann ein Fälschungsversuch beliebige Male wiederholt werden, wenn in einer Menge von gefälschten Antwortpaketen nicht die richtige Transaktionsnummer erraten wurde. Die gefälschte Antwort enthält eine Delegation bestehend aus einem NS Resource Record und einem Glue Record, der auf einen Host des Angreifers zeigt. So wird erreicht, dass untergeschobene Glue Records in-bailiwick sind und die gesamte Domain auf den Angreifer umgebogen wird.
Internetzensur In verschiedenen Ländern wird DNS-Spoofing zur Zensur im Internet verwendet. Geben DNS-Resolver gefälschte Antworten zurück, so spricht man auch von DNS-Hijacking. Dies war die vorgesehene Methode für das diskutierte Zugangserschwerungsgesetz zur Sperrung von Webseiten in Deutschland.
Einen Man-in-the-Middle-Angriff durch einen Netzbetreiber nennt man auch DNS-Injection. Der Netzbetreiber liest per Deep Packet Inspection die Domainnamen aus allen DNS-Anfragen aus und vergleicht diese gegen eine Sperrliste. Ist der Domainname gesperrt, wird per DNS-Spoofing eine gefälschte DNS-Antwort an den Absender gesendet. Da bei dieser Methode sämtliche DNS-Anfragen im Netz begutachtet werden, funktioniert die Sperrung auch dann, wenn der Nutzer nicht die DNS-Server des Netzbetreibers verwendet.
DNS-Injection wird in der Volksrepublik China im Rahmen des Projektes Goldener Schild angewandt. Hierbei können auch Dritte aus anderen Ländern gefälschte Antworten erhalten, wenn deren DNS-Anfrage durch chinesische Netze geleitet wird.
Schutzmaßnahmen Maßnahmen zum Schutz gegen DNS-Spoofing zielen entweder darauf ab, mehr zufällige Informationen in die DNS-Nachricht aufzunehmen, die der Angreifer erraten muss, oder die Nachricht mit kryptographischen Verfahren zu schützen.