Angriffsvektor IP-Spoofing

02.02.2005 von THOMAS WOELFER 
IP und TCP beinhalten einige systemimmanente Schwächen, die Hacker für Angriffe ausnutzen können. Dieser Beitrag erklärt, weshalb IP-Spoofing möglich ist, wie Angreifer es einsetzen und was man dagegen unternehmen kann.

IP-Spoofing ist die am weitesten verbreitete Methode, mit der Angreifer in Netzwerken ihre wahre Identität verbergen, um dadurch Zugriff auf eine eigentlich geschützte Maschine zu erhalten. Im Wesentlichen täuscht der Angreifer dabei vor, seine Pakete würden von einem Rechner stammen, dem der angegriffene Rechner vertraut.

Das dem IP-Spoofing zu Grunde liegende Konzept ist schon seit den frühen 80er Jahren bekannt. Damals handelte es sich allerdings um reine Theorie. Erst später wurde IP-Spoofing auch in der Praxis durchgeführt. Dazu musste zunächst die Sequenzvorhersage im TCP, eine Sicherheitsschwäche im Protokoll-Stack, publik werden. Robert Moris (1985) und Stephen Bellovin (1989) - beide Angestellte von AT&T - veröffentlichten diese und ermöglichten damit die ersten echten Angriffe mit Hilfe von IP-Spoofing.

Die beiden grundlegenden Whitepapers sind Sequence Prediction und Security Problems in the TCP/IP Protocol Suite.

Das Internet Protocol (IP)

Bei IP handelt es sich um ein verbindungsloses Protokoll. Die Pakete fließen frei im Netzwerk. Es gibt keine Information darüber, ob ein gegebenes Paket sein Ziel wie gewünscht erreicht hat, oder eben nicht. Die Header der IP-Pakete enthalten dabei zunächst 12 Bytes an Informationen über das Paket, wie zum Beispiel dessen Länge, eine Service-Identifizierung und dergleichen. Die nächsten 4 Bytes des Headers beinhalten die Quelladresse des Pakets, die darauf folgenden 4 Bytes die Zieladresse.

Es gibt keinerlei Schutzmechanismen, die irgendeine dieser Angaben verschlüsseln oder sonst wie vor Manipulation durch Dritte schützen. Ebenso gibt es keine Mechanismen, die sicherstellen, dass die im IP-Header eingetragenen Angaben tatsächlich korrekt sind. Der Angreifer muss nun also im Wesentlichen die Bytes 13 bis 17 - diese enthalten die Quelladresse - verändern. Dazu stehen eine ganze Reihe an Tools zur Verfügung: Letztlich kann man jedes Paket, das durch den eigenen Rechner fließt, beliebig manipulieren.

Das Transmission Control Protocol (TCP)

TCP unterscheidet sich von IP dadurch, dass es ein verbindungsorientiertes Protokoll ist. Bei TCP muss also zunächst eine Verbindung zur Gegenstelle aufgebaut werden. Das geschieht durch eine bestimmte Handshake-Sequenz (SYN, SYN/ACK, ACK). Während der Verbindung müssen sich die beiden Teilnehmer gegenseitig über den Fortschritt der Verbindung auf dem Laufenden halten. Dies erfolgt mittels so genannter "Sequences" und "Acknowledgements". Im Wesentlichen bedeutet dies, dass der Sender vom Empfänger jedes Mal ein OK zurückbekommt, wenn dieser ein Paket empfangen hat. Trifft das OK nicht ein, so wird das Paket erneut versendet.

Der TCP-Paket-Header enthält in den ersten zwei Bytes die Nummer des Quellports und in den nächsten zwei Bytes die Nummer des Zielports. Danach folgen weitere vier Bytes für die "Sequence Number" und vier Bytes für die "Acknowledge Number".

Die Sequence Number identifiziert das Paket innerhalb der Paketfolge, während die Acknowledge Number die Sequence Number des nächsten erwarteten Pakets identifiziert. Dadurch ist gewährleistet, dass beide Seiten der Verbindung sich darüber einig sein können, dass das richtige Paket korrekt übertragen wurde. Die Sequence Number wird dabei mittels eines speziellen Algorithmus generiert.

Folgen

Aus dem Aufbau von TCP und IP resultieren zwei unschöne Konsequenzen: Die eine ist offensichtlich, denn jedermann kann ganz einfach die Quelladresse eines IP-Headers verändern oder selber setzen - und damit dem vorgeblichen Partner in der Kommunikation eine andere Maschine vorgaukeln.

Die zweite Konsequenz ist nicht ganz so einfach zu erkennen: Kann ein Angreifer die nächste Sequence Number erraten oder vorhersehen, und befindet er sich an passender Stelle zwischen den kommunizierenden Maschinen, so ist er in der Lage, "Session Hijacking" zu betreiben. Er kann sich in die Kommunikation einklinken und eigene Pakete einschmuggeln, ohne dass der andere dies merkt. Der Grund dafür ist, dass die Authentifizierung der beiden Rechner untereinander meist nur zu Beginn der Kommunikation stattfindet. Danach gehen die Kommunikationspartner davon aus, mit der richtigen Gegenstelle zu kommunizieren. Tritt der Angreifer an die Stelle eines der Beteiligten, so merkt der andere das nicht.

Und tatsächlich: Die Sequence Number ist vorhersagbar, wenn auch nicht ganz ohne Aufwand. In frühen Implementationen wurden die Sequence Numbers zwar recht einfach gebildet, so dass das Erraten relativ einfach war. Heute ist der Algorithmus nicht mehr so einfach gestrickt, aber mit etwas Aufwand noch immer vorhersagbar.

Auch beim Session-Hijacking kommt dabei natürlich IP-Spoofing zum Zuge: Immerhin muss der Angreifer bei der Übernahme der Kommunikation so tun, als hätte er die IP-Adresse des ersetzten Rechners. Eine einfache Methode des Session-Hijacking besteht darin, den angegriffenen Rechner mit ungültigen Nummern zu versorgen, nachdem man sich die korrekten besorgt hat. Das führt zu einer Wiederaufnahme der Kommunikation - wobei der Angreifer dann als der Kommunikationspartner der angegriffenen Maschine posiert, indem er dessen IP-Adresse fälscht und obendrein die als gültig bekannten Seq/Acks verwendet.

Dabei ist es natürlich so, dass der Angreifer die Daten blind an den angegriffenen Server senden muss - schließlich erhält er ja keine Antworten, weil diese an das System mit der eigentlichen IP-Adresse gehen. Um mit Hilfe von IP-Spoofing also in Systeme eindringen zu können, muss das angegriffene System zusätzliche Sicherheitslöcher aufweisen. Ein solches Loch könnte beispielsweise eine Remote Shell sein, an die der Angreifer dann Befehle sendet, unter anderem solche zum Anlegen von Benutzer-Accounts.

Die Kombination aus TCP und IP mit ihren jeweiligen Problemen bildet dann die Grundlage für eine ganze Reihe von Angriffen.

Die wichtigsten Angriffsformen

Non-Blind Spoofing: Diese Angriffsform wird "Non-Blind" genannt, weil sich der Angreifer dabei im gleichen Subnetz wie das Opfer befinden muss. Der Trick dabei ist, dass die IP-Pakete in diesem Fall auch an der Maschine des Angreifers vorbeikommen - und der kann dann die Sequenz- und Acknowledge-Nummern einfach aus den Paketen sniffen. Das macht es dem Angreifer leichter, weil er diese Nummern nicht raten oder berechnen muss.

Mit dieser Form ist es dem Angreifer möglich, eine Session zu übernehmen, und dadurch zuvor etablierte Authentifizierungsmaßnahmen der angegriffenen Maschine zu umgehen. Effektiv kann man mit dieser Angriffsmethode etwaige Passwort-Abfragen und Ähnliches bei Zugriffen auf Ressourcen im LAN umgehen.

Blind Spoofing: Das Blind Spoofing stellt eine aufwendigere Angriffsform dar. Der Angreifer befindet sich dabei außerhalb des Subnetzes des Angegriffenen und kann daher die Seq/Ack-Nummern nicht einfach sniffen.

Früher wurden die Nummern mit relativ einfachen Mechanismen erzeugt: Der Angreifer schickte einfach Pakete an die angegriffene Maschine und sammelte dabei aus den Antworten Seq/Acks ein. Da die Algorithmen zum Erzeugen der Nummern relativ einfach gestrickt waren, konnte man sie auf Basis einer gewissen Datenmenge ermitteln - und dann mit der Zielmaschine kommunizieren.

Heute erzeugen praktisch alle Betriebssysteme diese Nummern aus Zufallszahlen: Dadurch wird die Vorhersage zwar erschwert, aber letztlich ist es auch hier wohl nur eine Frage der Zeit, bis Mittel und Wege gefunden werden. Insbesondere, da manche Algorithmen für die Erzeugung von Zufallszahlen nicht wirklich "zufällig" sind.

Auf Grund der momentanen Schwierigkeiten bei der Vorhersage der richtigen Nummern ist diese Angriffsart sehr selten.

Angriffsformen II

Man in the Middle: Die beiden zuvor genannten Angriffsformen können auch unter einem gemeinsamen Begriff zusammengefasst werden: "Man in the Middle"-Angriff. Diese Bezeichnung beschreibt bereits die Situation: Der Angreifer befindet sich zwischen zwei Kommunikationspartnern, die einander vertrauen, und klinkt sich in deren Kommunikation ein. In diesem Zuge kann der Angreifer die Pakete kontrollieren, die zwischen den beiden Teilnehmern hin- und hergesendet werden. Dadurch ist es ihm möglich, die Informationen, die übertragen werden, zu verändern und auszulesen.

Auf diese Weise bringt der Angreifer durch Vorgabe einer falschen Identität den Angegriffenen dazu, vertrauliche Informationen weiterzugeben. Der Trick besteht darin, dass der angreifende Rechner beide an der Kommunikation beteiligten Rechner mit gefälschten Paketen versorgen kann - ein komplexer Vorgang, der aber reichlich Platz fürs Ausspähen von Daten bietet.

Denial of Service: Bei Denial-of-Service-Attacken wird nahezu immer IP-Spoofing verwendet. Bei (klassischen) DoS-Attacken interessiert sich der Angreifer nicht dafür, irgendwelche Regeln einzuhalten, sondern will den Angegriffenen einfach nur mit einer möglichst großen Zahl an Paketen überfluten. Gleichzeitig soll der Angriff natürlich auch möglichst lange anhalten. Das ist jedoch am effektivsten, wenn die eigentlich angreifenden Rechner nicht ohne weiteres aufgespürt werden können.

Also fälscht der Angreifer die IP-Adressen der Pakete, die seinen Rechner verlassen. Dadurch fällt es dem Angegriffenen deutlich schwerer, die Quelle oder die Quellen des Angriffs zu entdecken.

Typisches DoS-Beispiel: Syn-Flooding

Ein typischer DoS-Angriff per IP-Spoofing ist das Syn-Flooding. Normalerweise wird eine Kommunikationssitzung mit drei Schritten eingeleitet: Der Client sendet SYN, der Empfänger antwortet mit SYN-ACK und der Client bestätigt das mit ACK. Was aber, wenn der Client ein Angreifer ist und mit IP-Spoofing arbeitet?

In diesem Fall wird der angegriffene Rechner das ACK nie erhalten - die Verbindung ist also halb geöffnet. Es kann aber nur eine beschränkte Anzahl halb offener Verbindungen geben: Bei Überschreiten dieser Grenze kann der Server keine weiteren Verbindungen mehr annehmen und ist effektiv für andere Hosts im Internet nicht mehr erreichbar: Der Server wurde mit Syn-Anforderungen überflutet. Derlei Angriffe sind allerdings nicht mehr ganz neu und werden automatisch von gängigen Firewalls blockiert und auch von Server-Programmen ohne weitere Maßnahmen erkannt und umgangen.

Leben ohne Antwort: Anonymisieren nicht möglich

Beim reinen IP-Spoofing fälscht der Angreifer die Quelladresse eines Pakets: Das bedeutet natürlich, dass er keine Antworten erhält! Diese Antworten werden nämlich an den Rechner mit der IP-Adresse gesendet, die der Angreifer in seinen Paketen verwendet hat.

Mit einer gespooften IP-Adresse lässt sich also keine normale Internet-Verbindung aufbauen. Was mit dem vielfach geäußerten Gerücht aufräumt, es wäre möglich, mit Hilfe von IP-Spoofing anonym im Internet zu arbeiten. "Aufhalten" kann man sich vielleicht anonym - aber echtes Arbeiten dürfte sich ohne ein einziges Antwortpaket der anderen Hosts doch ein wenig schwierig gestalten.

Mittel gegen die Angriffe

Das einfachste Mittel gegen IP-Spoofing ist die Verwendung vernünftiger Regeln in der Firewall. Ist dem Administrator erst bewusst, dass IP-Spoofing in der Praxis existiert, dann gilt zumindest eine Firewall-Regel: Die Firewall muss von außen eingehende Pakete daraufhin überprüfen, ob deren IP-Header aus der IP-Range des internen Netzes stammen. Ist das der Fall, handelt es sich mit Sicherheit um eine gefälschte Adresse und beim Paket möglicherweise um einen Angriffsversuch, denn die internen Adressen befinden sich ja auf der anderen Seite der Firewall. Mit anderen Worten: Eingehende Pakete mit Adressen aus dem internen Adressbereich müssen blockiert werden.

Als gute Tat für die Allgemeinheit sollte man auch ausgehende Pakete filtern - und zwar dahin gehend, ob diese Adressen verwenden, die gar nicht zum eigenen Paket an öffentlichen Adressen passen. Werden solche Pakete gefunden, fälscht jemand aus dem eigenen Netzwerk Adressen und verschickt derart gefälschte Pakete ins Internet. Das ist natürlich zu unterbinden. Würden alle ISPs diese einfache Regel beachten, wäre schon viel verbessert.

Eine weitere Lösung ist die Verwendung von IPv6, denn die nächste Version des Internet-Protokolls ist gegen aktuelle Spoofing-Angriffe durch Authentifizierungs- und Verschlüsselungsmechanismen geschützt. Leider lässt sich IPv6 nicht einfach durch Umlegen eines Schalters überall geschlossen zum Einsatz bringen: Bis dahin wird man als Netzwerk-Admin mit Spoofing-Problemen leben müssen. (mha)