Wie angekündigt geht es diese Woche um weitere Angriffe auf TCP/IP. Thema ist ein Angriff auf ein Protokoll der Anwendungsschicht: 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.
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. Name-Server 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 Name-Server, der die Antwort kennen könnte. Der Anfragende wird so zum zuständigen Name-Server vermittelt, 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 Name-Servers gesendet. Dieser sendet
ggf.
nichtrekursive DNS-Anfragen an andere Name-Server, 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, 16 Bit), das für die Zuordnung empfangener
Antworten
zur entsprechenden Anfrage verwendet wird. Will ein Angreifer ein
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 Name-Servers belauscht werden kann, ist dies kein Problem.
Aber auch ohne Belauschen der ID ist ein Angriff nicht unmöglich. Zum einen nummerieren einige Name-Server 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.535 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 Name-Servers, steigen seine Chancen, die falsche Antwort einzuschleusen, deutlich.
Beispiel: Angriff ohne Lauschen bei aufsteigenden ID-Werten
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
Name-Server (dns.opfer.example) gesendet. Dieser sendet dann selbst eine
nichtrekursive Anfrage an einen anderen Name-Server.
Normaler Ablauf:
![]() |
|---|
Der Angreifer kann nun versuchen, vor dem für spoof.example zuständigen Name-Server (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.
Ablauf mit Lauschen durch den Angreifer:
![]() |
|---|
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 Name-Server 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.
![]() |
|---|
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.
![]() |
|---|
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 Name-Servers dns.spoof.example.
Der Cache des Name-Servers 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.
Nächste Woche werden weitere Angriffe auf TCP/IP beschrieben, u.a. eine weitere Möglichkeit zum Vergiften des DNS-Caches.
Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!




















