Montag, 1. März 2010


Topthema

Donnerstag, 1. Juni 2006 | Topthema

About Security #57: Angriffe auf TCP/IP — Spoofing

(Link zum Artikel: http://www.entwickler.de/php/kolumnen/029003)

Ab dieser Folge geht es um das Netzwerkprotokoll TCP/IP und mögliche Angriffe darauf. Einige Grundlagen von TCP/IP wurden bereits in About Security #29 (TCP/IP-Schichtenmodell) und #30 (Pakete) erklärt, sodass sie hier nicht erneut beschrieben werden müssen.

Außer Schwachstellen in Implementierungen des TCP/IP-Stacks, z.B. Pufferüberläufen, die immer wieder einmal auftreten, gibt es einige Probleme in den Protokollen an sich. Die Ursache dafür ist, dass bei ihrem Entwurf einfach nicht an bösartige Netzteilnehmer gedacht wurde. Dies führt dazu, dass verschiedene Arten von Angriffen möglich sind. Einige davon werden im Folgenden beschrieben. Mögliche Angriffe umfassen

  • Spoofing, d.h. das Vortäuschen falscher Tatsachen
  • Hijacking, d.h. das Entführen bzw. Umleiten von TCP-Verbindungen
  • Denial of Service (DoS), d.h. die Verhinderung der Diensterbringung
  • Distributed Denial of Service, d.h. ein DoS-Angriff, der von einer Vielzahl von Rechnern ausgeht

N E U ! Security aktuell
Täglich aktuelle Security-Infos!

Spoofing

Beim Spoofing wird die Senderadresse eines Datenpakets gegen eine andere Adresse ausgetauscht. Dadurch bleibt der tatsächliche Sender unerkannt, eventuelle Antworten auf ein gespooftes Paket werden an die gefälschte Adresse gesendet. Die verschiedenen Techniken für einen Spoofing-Angriff sind vom angegriffenen Protokoll bzw. Dienst abhängig. Als Beispiel soll das Spoofing von IP-Paketen näher betrachtet werden.

IP-Spoofing

Das Spoofen von IP-Adressen alleine stellt noch keinen Angriff dar, sondern ist i.d.R. nur ein Teil eines Angriffs. Es kann z.B. verwendet werden, um den Verursacher eines DoS-Angriffs zu verbergen. Kombiniert mit dem Erraten gültiger Sequenznummern und einem DoS-Angriff kann es von einem Angreifer verwendet werden, um sich in eine auf Basis der IP-Adresse authentifizierte Verbindung einzuschleichen.

IP ist ein verbindungsloses Protokoll (s. About Security #29). Es wird weder geprüft, ob ein gesendetes Paket angekommen ist, noch, ob die Pakete in der gleichen Reihenfolge ankommen, in der sie gesendet wurden. Der Header eines IP-Pakets (s. About Security #30) enthält u.a. Quell- und Zieladresse. Für die Zustellung des Pakets an den Empfänger ist nur die Zieladresse relevant. Daher kann der Sender die Quelladresse beliebig manipulieren, ohne die Zustellung zu gefährden.

Bei einer Authentifizierung auf Basis der IP-Adresse baut ein Rechner eine Verbindung zu einem anderen Rechner auf, der ihn anhand der IP-Adresse erkennt und den Zugriff ohne weitere Prüfung erlaubt. Dies ist z.B. beim "trust relationship" zwischen Unix-Rechnern der Fall. Ein Angreifer C kann sich in eine solche Verbindung zwischen zwei Rechnern A und B einschleichen, indem er Befehle mit der Quelladresse von A an Rechner B sendet.

About Security: Die komplette Serie

Wäre nur das IP-Protokoll beteiligt, wäre der beschriebene Angriff nun schon erfolgreich. Allerdings ist ein weiteres Protokoll beteiligt: TCP. Im Gegensatz zu IP ist TCP verbindungsorientiert (s. About Security #29). Bevor zwei Systeme miteinander kommunizieren können, müssen sie eine Verbindung aufgebaut haben. Außerdem achtet TCP darauf, ob die übertragenen Daten fehlerfrei und in der richtigen Reihenfolge angekommen sind (s. About Security #30). Das Ankommen wird über eine Bestätigungsflag (ACK) signalisiert, die Reihenfolge über die 32 Bit lange Sequenznummer geprüft. Die Sequenznummer wird laufend erhöht, bei einem Überlauf wird wieder bei 0 begonnen. Möchte ein Angreifer sich in eine Verbindung einschleichen, muss er eine gültige Sequenznummer erraten. Da die von ihm an das Opfer gesendeten Pakete die Quelladresse von A enthalten, sendet B die Antworten auf die Pakete von C an A. Der Angriff muss also "blind" erfolgen.

TCP-Sequenznummern erraten

Der TCP-Verbindungsaufbau ("three way handshake") läuft folgendermaßen ab:

  1. Der Client sendet ein Paket mit gesetztem SYN-Flag und seiner aktuellen Sequenznummer SEQ_Client an den Server.
  2. Der Server antwortet mit einem Paket mit gesetztem SYN-Flag und seiner aktuellen Sequenznummer SEQ_Server sowie gesetztem ACK-Flag und der Quittungsnummer SEQ_Client+1.
  3. Der Client bestätigt mit einem Paket mit gesetztem ACK-Flag, der Quittungsnummer SEQ_Server+1 und der Sequenznummer SEQ_Client+1 und beginnt mit der Übertragung der Daten.

Um die Sequenznummern zu erraten, sendet der Angreifer einige Pakete mit seiner richtigen Quelladresse an das Opfer. Aus den Sequenznummern der Antwortpakete und deren zeitlichen Abständen kann auf den Algorithmus zur Berechnung der Sequenznummern geschlossen werden.

Ein Angriff

Der Angreifer C errät eine gültige Sequenznummer von B und baut eine Verbindung zu B auf, bei der er die Adresse von A als Quelladresse angibt. B sendet seine Antwort auf das Paket an A. Da A keine Verbindung zu B geöffnet hat, sendet A ein RST-Paket an B, worauf B die Verbindung abbricht.

Der Angriff funktioniert so also nicht. Bevor der Angreifer erfolgreich sein kann, muss er Rechner A ausschalten. Dazu kann er einen DoS-Angriff gegen A starten. Wie das funktioniert, wird in der nächsten Folge beschrieben.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

About Security – Übersicht zum aktuellen Thema "Angriffe auf TCP/IP"

Kommentare

Folgende Links könnten Sie auch interessieren