Angriffe auf TCP/IP (1) - Spoofing
Ab dieser Folge geht es um das Netzwerkprotokoll TCP/IP und mögliche Angriffe darauf. Das TCP/IP-Schichtenmodell und die verwendeten Pakete habe ich deshalb in der vorherigen Folge bereits erklärt.
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, das verschiedene Arten von Angriffen möglich sind. Einige davon werden im Folgenden beschreiben. Die möglichen 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 (DDoS), d.h. ein DoS-Angriff, der von einer Vielzahl von Rechnern ausgeht
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 dienen.
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. 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 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.
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. 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. 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:
- Der Client sendet ein Paket mit gesetztem SYN-Flag und seiner aktuellen
Sequenznummer
SEQ_Client
an den Server. - Der Server antwortet mit einem Paket mit gesetztem SYN-Flag und seiner
aktuellen Sequenznummer
SEQ_Server
sowie gesetztem ACK-Flag und der QuittungsnummerSEQ_Client+1
. - Der Client bestätigt mit einem Paket mit gesetztem ACK-Flag, der
Quittungsnummer
SEQ_Server+1
und der SequenznummerSEQ_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 passieren kann wird in der nächsten Folge beschrieben.
Kategorien: Grundlagen
Trackbacks
Dipl.-Inform. Carsten Eilers am : Angriffe auf TCP/IP (2) - DoS
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Angriffe auf TCP/IP (3) - Hijacking
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Angriffe auf TCP/IP (13) - Schutzmaßnahmen
Vorschau anzeigen