WikiDer > Internetprotokoll-Spoofing
Internetprotokoll-Spoofing oder IP-Spoofing ist eine Technik, um unbefugten Zugriff auf ein Computer durch Service IP-Stack. Die Technik basiert auf der Fälschung der Identität eines anderen Computers und ist besonders effektiv, wenn die gefälschte Identität die einer Instanz ist, der der angegriffene Computer vertraut.
Die Basis
IP-Spoofing verwendet zwei Dinge, um einen erfolgreichen Angriff zu starten:
- Ein angegriffener Computer erkennt die Herkunft von TCP/IP-Paketen allein durch die IP Adresse das steht im IP-Header; dieser Header kann einfach geändert werden.
- Wenn eine Nachricht in Teilen über a . gesendet wird Internetverbindung, wird die Reihenfolge der Teile in einem Zähler im TCP-Header jedes Pakets gehalten. Die Art und Weise, in der der Zähler für jedes Paket und für jede Nachricht inkrementiert wird, macht die nächste Zahl, die ein Computer erwartet, in einem Paket zu empfangen, mit einem gewissen Grad an Genauigkeit vorhersehbar.
Bei einem IP-Spoofing-Angriff versucht der Angreifer mit diesen beiden Dingen, seinem Opfer vorzutäuschen, dass es sich um einen anderen (vertrauenswürdigen) Computer handelt, als er tatsächlich ist.
Die Idee
Computer in einem Internetverbindung nutze es TCP/IP-Protokoll Nachrichten zu senden. Diese Nachrichten bestehen aus Daten, die von einem Sender Z an einen Empfänger O gesendet werden.
Da das Internet ein unzuverlässiges Medium ist, werden eine Reihe von Techniken verwendet, um eine zuverlässige Kommunikation für die Endbenutzer von Z und O zu simulieren. Die Nachricht wird nicht sofort gesendet, sondern in kleine Pakete aufgeteilt, die leicht erneut gesendet werden können. Jedes Paket wird in einem "Umschlag" mit administrativen Informationen wie Absender, Empfänger, zurückgelegte Route und Reihenfolge des Pakets innerhalb der Nachricht gesendet.
Um den Endbenutzern eine langfristige Verbindung anbieten zu können, verwendet das TCP/IP-Protokoll mehrere Schichten. Die IP-Schicht ist für das Senden und Empfangen von Paketen verantwortlich. Die TCP-Schicht ist (unter anderem) dafür verantwortlich, Pakete zu sogenannten Übertragungssitzungen zu verknüpfen. Eine Übertragungssitzung besteht darin, dass die TCP-Schichten von Z und O eine Reihe von Kontrollnachrichten ("shake hands") austauschen, um eine Sitzung zu eröffnen, dann gegenseitig Datenpakete übertragen und schließlich Kontrollnachrichten austauschen, um die Sitzung zu beenden.
Wenn Z eine Sitzung mit O eröffnen möchte, muss O entscheiden, ob dies zulässig ist und wie die Nachrichten von Z behandelt werden. Wenn O entscheidet, dass Z eine Sitzung öffnen und bestimmte Aktionen für O ausführen darf, sagen wir, dass O von Z vertraut wird.
Angenommen, ein Angreifer A möchte eine Sitzung mit O eröffnen. A könnte dies tun, indem er O davon überzeugt, dass er tatsächlich Z ist.
Der Angriff
Es ist nicht so schwer für A zu behaupten, er sei Z: wenn er IP Adresse Z weiß (und muss es, sonst kann er nicht behaupten, Z zu sein), dass er beginnen kann, TCP/IP-Pakete mit der IP-Adresse von Z als Absenderadresse zu senden (die nirgendwo überprüft oder verboten ist).
Das Problem für A ist, dass er, um eine Sitzung mit O zu eröffnen, nicht nur behaupten muss, Z zu sein, sondern auch die Hand schütteln muss. Das heißt, er muss Pakete austauschen. Und letzteres ist weniger einfach, weil A Pakete an O senden kann, aber die Antworten von O an Z gehen und nicht an A (weil Z angeblich der Absender war). Dies hat für A zwei Nachteile:
- A kann nicht sehen, was O tut. So kann er die Reihenfolge der Pakete durcheinander bringen oder etwas anderes tun, das O dazu bringt, die Verbindung abzulehnen.
- O erhält eine Aufforderung von Z (eigentlich A), die Hand zu schütteln und eine Sitzung zu beginnen. Dann sagt O zu Z (dem echten Z): "Das ist in Ordnung". Natürlich antwortet Z mit der Aussage "Ich weiß nicht, wovon Sie reden" (in der TCP-Terminologie eine Reset-Nachricht). Daraufhin bricht O die Verbindung ab.
Der erste Schritt bei A's Angriff sollte also darin bestehen, Z irgendwie vom Himmel zu holen, damit es keine Reset-Nachricht senden kann. Dazu a Denial of Service Angriff, z.B. durch SYN-Überflutung (es werden so viele SYN-Nachrichten gesendet, dass der TCP/IP-Stack von Z zerstört wird).
Danach kann A mit O einen Handshake-Vorgang starten. Hier wird A dadurch behindert, dass O denkt, dass der Handshake von Z gestartet wurde und schickt daher alle seine Antworten an Z. A sieht also nicht, wie O auf den Versuch von A reagiert, sich die Hand zu schütteln.
Was den IP-Stack angeht, spielt es keine Rolle. Aber der TCP-Stack von O sieht sich die Reihenfolge der Nachrichten an und bestimmt die Nummer, bei der der Zähler der Pakete in der Nachricht zu laufen beginnt. Innerhalb einer Nachricht müssen die Pakete reziproke, fortlaufende Nummern haben. Die Nummer des ersten Pakets kann aber prinzipiell überall im 32-Bit-Bereich liegen, also zwischen 0 und 4.294.967.295.
An dieser Stelle machen sich die meisten Spoofing-Angriffe die Tatsache zunutze, dass die Nummerierung des TCP-Stack normalerweise nicht zufällig, sondern eher vorhersehbar ist. Wenn A seinen Angriff startet, indem er einige Pakete an O unter seiner eigenen Adresse sendet, erhält A oft eine Reihe von Reset-Nachrichten (mit einer TCP-Ziffer) von O. Aus einer einzigen Nachricht weiß A ziemlich genau, wo der Zähler von O ist. Bei mehreren Nachrichten kann A sehen, wie viel Zeit Pakete benötigen, um von A nach O und zurück zu reisen, und wie schnell der Zähler von O aktualisiert wird. Damit kann A oft vernünftig abschätzen, wie sich der Zähler von O den Wert ändert.
Mit diesen Informationen kann A versuchen, O die Hand zu schütteln. Hiermit sendet A eine Sitzungsanfrage an O (angibt, Z zu sein). Dann schätzt A, wie lange es dauert, bis O eine Antwort an Z sendet und wie viele Antworten diese Antwort haben wird. Dann schickt A wiederum die gewünschte Antwort (wieder vermeintlich von Z) mit der richtigen Nummer.
Aktuell gibt es mehrere Möglichkeiten:
- Wenn A unterschätzt hat, erhält O ein Paket mit einer Nummer, die bereits passiert ist. O geht dann davon aus, dass es sich um ein wiederholtes Paket handelt und verwirft es. An diesem Punkt schlägt der Angriff fehl (aber A kann natürlich erraten, wo er schief gelaufen ist, und es erneut versuchen).
- Wenn A richtig rät, hat A eine Sitzung mit O. Dann kann A versuchen, O einige Befehle zu senden.
- Hat A zu hoch gezockt, gibt es wieder zwei Möglichkeiten:
- A hat zu hoch gezockt, aber im möglichen Zahlenbereich (es gibt eine Grenze, wie weit die Zahlen der nächsten erwarteten Zahl voraus sein dürfen). In diesem Fall geht der TCP-Stack davon aus, dass noch Pakete kommen und speichert das angreifende Paket, bis die fehlenden Pakete eintreffen. Infolgedessen kann der Angriff dennoch erfolgreich sein und eine andere Kommunikation kann fehlschlagen.
- A hat zu hoch gespielt und viel zu hoch gespielt. Der TCP-Stack von O verwirft das Paket. Aber der TCP-Stack sendet eine Nachricht an Z, die die nächste erwartete Zahl enthält. Wenn A nun O erneut eine Reset-Nachricht generieren lässt, kann A anhand des "Sprungs" in Zahlen erraten, was bei seinem Angriff schief gelaufen ist.
Nützlichkeit
Ein Spoofing-Angriff ist normalerweise eine Vorbereitung auf etwas Größeres. Eine Sitzung ist nie ein großes Ganzes, vor allem, weil sie vom Administrator des angegriffenen Systems nicht bemerkt werden kann und weil A durch seine Blindheit zu eingeschränkt ist, um wirklich große Dinge zu tun. Die meisten Spoof-Angriffe dienen dazu, eine Hintertür in das Zielsystem einzubauen, die es A ermöglicht, sich später einfach am Zielsystem anzumelden – am besten als Administrator. Dann kann A das Zielsystem vollständig übernehmen.
Gegenmaßnahmen
Gegen die unterschiedlichen Varianten von Spoofing-Angriffen gibt es mehrere Gegenmaßnahmen. Die meisten Abwehrmaßnahmen basieren auf Paketfilterung durch Firewalls. Dies beinhaltet die Analyse von Paketen durch das angegriffene System, um zu erkennen, dass ein Paket möglicherweise nicht von dem im Paket beanspruchten System stammen kann. Beispielsweise kann ein Paket, das aus dem offenen Internet kommt, nicht aus dem internen Netzwerk kommen.
Ganz anders ist die Verteidigung des Systems, die von einem Angreifer nachgeahmt wird. Der Angreifer muss dieses System deaktivieren. Wenn dieses System gegen die bekannteren DOS-Angriffe (wie SYN-Floods) gewappnet ist, dann ist das auch eine Abwehr von Spoofing.
Quellen, Anmerkungen und/oder Verweise
|