Skip to content

Angriffe auf TCP/IP (5) - DNS-Spoofing

Wie bereits angekündigt geht es nun um das Hijacking von Protokollen der TCP/IP-Anwendungsschicht. Konkret: DNS-Spoofing.

Das DNS-Protokoll (Domain Name System) dient der Umwandlung von Domain-Namen in die entsprechende IP-Adresse und umgekehrt. Beim DNS-Spoofing wird dem Opfer eine falsche Antwort auf eine DNS-Anfrage untergeschoben.

DNS im Überblick

Es gibt zwei Arten von DNS-Anfragen: rekursive und nichtrekursive. Ein Client stellt i.d.R. eine rekursive Anfrage, d.h. er möchte die endgültige Antwort erhalten. Nameserver untereinander verwenden nichtrekursive Anfragen: Jeder Server nennt nur die IP-Adressen, die er selbst verwaltet. Kennt er die IP-Adresse eines Domain-Namens nicht, nennt er einen Nameserver, der die Antwort kennen könnte. Der Anfragende wird so zum zuständigen Nameserver weitergeleitet, der dann die gewünschte IP-Adresse nennt.

Die Namens-Auflösung

Wird ein Domain-Name, z.b. www.ein-name.example, aufgerufen, wird vom Client eine entsprechende rekursive DNS-Anfrage an den 'domain'-Port (53) des lokal zuständigen Nameservers gesendet. Dieser sendet ggf. nichtrekursive DNS-Anfragen an andere Nameserver, um die zugehörige IP-Adresse zu ermitteln. Diese speichert er zur Beantwortung zukünftiger Anfragen für eine gewisse Zeit in seinem Cache.

Unterscheidung von DNS-Paketen

Der Header eines DNS-Pakets enthält ein Identifikations-Feld (ID, Identification oder Transaction-ID, 16 Bit), das für die Zuordnung empfangener Antworten zur entsprechenden Anfrage verwendet wird. Will ein Angreifer eine falsche Antwort auf eine DNS-Anfrage einschleusen, muss er die korrekte ID kennen oder erraten und sein Paket schicken, bevor die Antwort des zuständigen DNS-Servers ankommt. Sofern der Netzwerkverkehr des Opfers oder seines Nameservers belauscht werden kann, ist dies kein Problem.

Aber auch ohne Belauschen der ID ist ein Angriff nicht unmöglich. Zum einen nummerieren einige Nameserver die Anfragen einfach durch, zum anderen ist bei nicht vorhersagbaren IDs ein Brute-Force-Angriff möglich. Für das 16-Bit-Feld müssten 65.536 Werte ausprobiert werden. Bei 100 Byte pro Antwort müssten ca. 6,2 MByte übertragen werden, was bei einer 1-MBit-Anbindung ca. 60 Sekunden dauern würde. Verhindert der Angreifer parallel durch einen Denial-of-Service-Angriff eine Antwort des zuständigen Nameservers, steigen seine Chancen, die falsche Antwort einzuschleusen, deutlich.

Ein klassischer DNS-Spoofing-Angriff, zunächst mit Lauscher

Ein Angreifer möchte sich als Webserver eines Unternehmens, www.spoof.example, ausgeben. Wenn ein Opfer diese Adresse besucht, wird eine entsprechende rekursive Anfrage an seinen zuständigen Nameserver (dns.opfer.example) gesendet. Dieser sendet dann selbst eine nichtrekursive Anfrage an einen anderen Nameserver, siehe Abbildung 1.

DNS-Abfrage: Normaler Ablauf
Abb. 1: DNS-Abfrage: Normaler Ablauf (Klick für großes Bild in neuem Fenster/Tab)

Der Angreifer kann nun versuchen, vor dem für spoof.example zuständigen Nameserver (dns.spoof.example) zu antworten. Verwendet er die korrekte ID, wird dns.opfer.example die Antwort akzeptieren und dem Opfer übermitteln. Wenn er die DNS-Anfrage von dns.opfer.example belauschen kann, ist dies einfach: Er sendet eine gefälschte Antwort mit der belauschten ID im Header, die dns.opfer.example akzeptiert und an seinen Client weiterreicht, siehe Abbildung 2.

DNS-Abfrage: Ablauf mit Lauschen durch Angreifer
Abb. 2: DNS-Abfrage: Ablauf mit Lauschen durch Angreifer (Klick für großes Bild in neuem Fenster/Tab)

Ein klassischer DNS-Spoofing-Angriff, nun ohne Lauscher

Ohne Lauschen kennt der Angreifer weder die korrekte ID noch den Zeitpunkt der Anfrage. Er muß daher selbst aktiv werden.

Voraussetzung ist, dass der Angreifer die Kontrolle über einen Nameserver hat, z.B. dns.unwichtig.example für die Domain unwichtig.example. Um die aktuell verwendete ID zu erfahren, sendet er dns.opfer.example eine rekursive Anfrage nach einem Rechner aus seinem eigenen Namensraum, z.B. total.unwichtig.example. Der sucht daraufhin mit nichtrekursiven Anfragen nach der passenden IP-Adresse. Irgendwann wird eine Anfrage an den für unwichtig.example zuständigen Angreifer geschickt. Die ID dieser Anfrage verrät ihm die IDs der nächsten von dns.opfer.example verschickten Anfragen.

Vorbereitung des Angriffs
Abb. 3: Vorbereitung des Angriffs (Klick für großes Bild in neuem Fenster/Tab)

Als nächsten Schritt sendet der Angreifer eine rekursive Anfrage nach www.spoof.example an dns.opfer.example, gefolgt von mehreren (inzwischen können ja andere Anfragen gesendet worden sein) gefälschten Antworten darauf, mit laufend hochgezählten ID-Werten. dns.opfer.example sendet nichtrekursive Anfragen für www.spoof.example und empfängt parallel die gefälschten Antworten.

Durchführung des Angriffs
Abb. 4: Durchführung des Angriffs (Klick für großes Bild in neuem Fenster/Tab)

Die Antwort mit passendem ID-Wert wird als korrekt akzeptiert, alle anderen Antworten verworfen. Dies betrifft insbesondere die danach eintreffende Antwort des eigentlich zuständigen Nameservers dns.spoof.example.

Der Cache des Nameservers des Opfers ist damit vergiftet. Anfragen nach www.spoof.example beantwortet er danach mit der gefälschten IP-Adresse, auch die anfängliche Anfrage des Angreifers. Der kann den Erfolg seines Angriffs so sofort kontrollieren und bei einem Fehlschlag, z.B. auf Grund noch gültiger Daten im Cache, wiederholen.

Gegenmaßnahmen

Um derartige Angriffe zu verhindern oder zumindest zu erschweren, werden die ID-Werte wie bereits oben erwähnt nicht einfach hochgezählt, sondern zufällig erzeugt. Der Angreifer kann also aus ihn bekannten ID-Werten nicht auf die nächsten verwendeten Werte schließen. Jedenfalls theoretisch. Praktisch kommt es immer wieder einmal vor, das für die Erzeugung der ID-Werte vorhersagbare Zufallszahlengeneratoren verwendet werden, so dass der Angreifer aus mehreren ihm bekannten Werten die nächsten erzeugten mit hoher Wahrscheinlichkeit berechnen kann.

In der nächsten Folge wird dieser Angriff fortgeführt. Es führen bekanntlich mehrere Wege nach Rom, und es gibt auch mehrere Wege, wie falsche Wert in den DNS-Cache gelangen und ihn vergiften können.

Carsten Eilers

>
        </div>
                
        <footer class= Kategorien: Grundlagen

Trackbacks

Dipl.-Inform. Carsten Eilers am : Angriffe auf TCP/IP (6) - DNS Cache Pollution

Vorschau anzeigen
Das in der vorherigen Folge vorgestellte DNS-Spoofing ist nicht die einzige Möglichkeit, den DNS-Cache eines Rechners zu manipulieren. Eine weitere ist die sog. (DNS) Cache Pollution Beim 'Cache Pollution'-Angriff wird ausgenutzt, das

Dipl.-Inform. Carsten Eilers am : Angriffe auf TCP/IP (7) - HTTP-Hijacking

Vorschau anzeigen
Ziel des HTTP-Hijacking ist die Umleitung einer bestehenden Verbindung, um danach z.B. vertrauliche Daten wie z.B. Passwörter zu belauschen oder Ein- bzw. Ausgaben zu manipulieren. Der Angreifer hat dazu zwei Möglichkeiten: Entweder er gibt