Das Domain Name System (DNS) ist eines der bekanntesten Protokolle im Internet. Seine Hauptfunktion besteht darin, menschenlesbare Domänennamen in die entsprechenden IP-Adressen zu übersetzen. Dies ist wichtig, da alle Geräte im Internet regelmäßig die IP-Adresse eines bestimmten Servers aus dem DNS ableiten. Der Übersetzungsprozess, durch den DNS-Abfragen zwischen Client und DNS-Server bzw. Resolver ausgetauscht werden, ist in Abb. 1 dargestellt. Der DNS-Baum ist von oben nach unten aufgebaut und wird als „DNS-Hierarchie“ bezeichnet.

Es gibt zwei Arten von DNS-Resolvern:
- Maßgebend
Autoritative Nameserver beantworten Anfragen zu IP-Adressen. Sie antworten nur auf Anfragen zu Domänen, die für die Beantwortung konfiguriert werden müssen.
- Rekursive
Rekursive Resolver liefern die vom Client angeforderte IP-Adresse. Sie führen den Übersetzungsprozess selbst durch und geben die endgültige Antwort an den Client zurück.
In diesem Artikel konzentrieren wir uns auf den zweiten Typ, rekursive DNS-Resolver.
DNS-Cache-Poisoning-Angriffe
Klassische DNS-Cache-Poisoning-Angriffe (um das Jahr 2008) zielten auf einen DNS-Resolver ab, indem ein Angreifer außerhalb des eigentlichen Pfades einen anfälligen DNS-Resolver dazu brachte, eine Anfrage an einen vorgelagerten autoritativen Nameserver zu senden.
Der Angreifer versucht, negative Antworten mit der gefälschten IP des Nameservers einzuschleusen. Trifft die betrügerische Antwort vor allen legitimen Antworten ein, die den „Geheimnissen“ in der Abfrage entsprechen, akzeptiert der Resolver die betrügerischen Ergebnisse und speichert sie zwischen.
Der Angreifer müsste außerdem die korrekte Quell-/Ziel-IP, den Quell-/Ziel-Port und die 16 Bit lange Transaktions-ID (TxID) der Abfrage erraten. Bei festem Quell- und Ziel-Port (z. B. 53) ist die 16-Bit-Anzahl die einzige Zufälligkeit. So kann ein Off-Path-Angreifer mit 65,536 Antworten alle möglichen Werte per Brute-Force-Methode erraten. Einige Optimierungen wie Geburtstagsangriffe können den Angriff noch weiter beschleunigen.
Abwehrmaßnahmen gegen DNS-Cache-Poisoning-Angriffe
Seitdem wurden verschiedene Abwehrmaßnahmen entwickelt, um die Bedrohung durch DNS-Cache-Poisoning zu verringern. Sie machen den klassischen Angriff effektiv nutzlos. Im Folgenden beschreiben wir die eingesetzten Lösungen, darunter die Randomisierung von:
Der Quellport ist die wohl effektivste und am weitesten verbreitete Verteidigungsmaßnahme, da er die Zufälligkeit von 16 auf 32 Bit erhöht. Ein Angreifer, der nicht auf dem üblichen Pfad agiert, müsste nun sowohl den Quellport als auch die Transaktions-ID (TxID) erraten.
Großschreibung in Domainnamen (0x20-Kodierung) – Die Zufälligkeit hängt oft von der Anzahl der Buchstaben ab, was insbesondere bei längeren Domainnamen sehr effektiv sein kann. Es handelt sich um eine einfache Protokolländerung, die jedoch erhebliche Kompatibilitätsprobleme mit autoritativen Nameservern verursacht. Daher verwenden die meisten gängigen öffentlichen Resolver keine 0x20-Kodierung. Google DNS beispielsweise nutzt die 0x20-Kodierung nur für zugelassene Nameserver; Cloudflare hat die 0x20-Kodierung kürzlich deaktiviert.
Die Auswahl der Nameserver (Server-IP-Adressen) beeinflusst die Zufälligkeit. Diese hängt auch von der Anzahl der Nameserver ab. Die meisten Domains nutzen weniger als zehn Nameserver, was einer Zusammenfassung von nur zwei bis drei Bits entspricht. Es wurde außerdem gezeigt, dass ein Angreifer Abfragefehler gegen bestimmte Nameserver erzeugen und einen Resolver so effektiv an den verbleibenden Nameserver binden kann.
DNSSEC – Der Erfolg von DNSSEC hängt von der Unterstützung durch Resolver und autoritative Nameserver ab. Allerdings ist nur ein geringer Anteil der Domains signiert: 0.7 % (.com-Domains), 1 % (.org-Domains) und 1.85 % der Top-10-Domains laut Alexa-Ranking (Stand: 2017). Dieselbe Studie zeigt, dass nur 12 % der DNSSEC-fähigen Resolver die empfangenen Datensätze validieren. Die Verbreitung von DNSSEC ist daher insgesamt noch weit von zufriedenstellend entfernt.
Fazit
DNS-Cache-Poisoning-Angriffe verändern sich ständig, und es entstehen neue Angriffsflächen. Wie bereits erwähnt, verfügt die moderne DNS-Infrastruktur über mehrere Caching-Ebenen. Der Client initiiert häufig eine Abfrage über eine API an einen OS-Stub-Resolver, einen separaten Systemprozess, der den betriebssystemweiten DNS-Cache verwaltet. Der Stub-Resolver führt keine iterativen Abfragen durch, sondern leitet die Anfrage an die nächste Ebene weiter.
Ein DNS-Forwarder leitet Anfragen auch an seinen vorgelagerten rekursiven Resolver weiter. DNS-Forwarder sind häufig in WLAN-Routern (z. B. in Privathaushalten) zu finden und verfügen über einen dedizierten DNS-Cache. Der rekursive Resolver übernimmt die eigentliche Aufgabe, die autoritativen Nameserver iterativ abzufragen. Die Antworten werden dann zurückgegeben und in jeder Schicht zwischengespeichert.
Technisch gesehen sind alle Cache-Ebenen anfällig für DNS-Cache-Poisoning-Angriffe. Stub-Resolver und Forwarder werden jedoch häufig vernachlässigt, obwohl sie ebenso anfällig für solche Angriffe sind . Mit der Weiterentwicklung der Branche sollten wir besser auf diese Angriffe vorbereitet sein und unsere Abwehrmaßnahmen entsprechend verbessern.
