IP (Internet Protocol) Geschrieben von Marc Ruef für http://www.computec.ch/ Version 2.0a 04. April 2000 ----------------------------------------------------------------- 1.0 Inhaltsverzeichnis 1.0 Inhaltsverzeichnis 2.0 Einführung 3.0 Der Header 3.1 Version 3.2 Länge des Headers 3.3 Service-Typ 3.4 Priorität 3.5 Länge des Paketes 3.6 Identifikations-Feld 3.7 Flags 3.8 Fragment-Offset 3.9 Protokoll 3.10 Header-Checksumme 3.11 Absender-Adresse 3.12 Empfänger-Adresse 3.13 Optionen 3.14 Padding 4.0 Angriffsmöglichkeiten 4.1 Die Vorbereitungen: IP-Sniffing 4.1a IP via ICQ & Netstat 4.1b IP via Java-Chat & Subnet 4.2 IP-Spoofing 4.3 IP-Fragmentierung 5.0 Schutzmöglichkeiten 2.0 Einführung Eine IP-Adresse ist eine 32 Bit (4 Byte) Binärziffer, die einen in ein Netzwerk implementierte Komponente, sei dies nun Computer oder Router, eindeutig kennzeichnet. Diese Nummer wird im Dotted Quad-Format ausgedrückt, welches aus den Dezimalwerten der vier Byte besteht, die durch Punkte getrennt sind. Der eigene Computer in einem Netz besitzt stets auch die IP-Adresse 127.0.0.1, wobei ein Senden an diese eigene IP-Adresse intern geroutet wird, und somit die Pakete nicht wirklich durch die Drähte des Netzes gejagt werden. Die niedrigste mögliche IP-Adresse bträgt 0.0.0.0 und die grösste 255.255.255.255, wobei jene binär als 000000000000000000000000000 (die kleinste) und als 11111111111111111111111111111111 (die grösste) dargestellt werden. Die ersten ein, zwei oder drei Bytes der Adresse kennzeichnen das Netzwerk, mit welchem der Host ver-bunden ist, und werden von InterNIC Registrations Services zugewiesen. Die restlichen 4 Byte können den maximalen Wert von 232 oder ungefähr 4 Milliarden Hosts angeben. Wenige Bereiche in diesem Ziffernsatz kommen nicht zum Zuge. DNS ist die Abkürzung für Domain Name System, welches die IP- Adressen den Hosts im Internet alpha-nummerische Domänenadressen zuteilt. So lautet zum Beispiel die IP-Adresse von computec.ch 207.154.76.253. Da sich Wortketten einfacher zu merken sind, als diese 11-stelligen Ziffern, bietet dies ei-nen enormen Vorteil im Komfort für die Menschen. Da es leider eine begrenzte Anzahl von IP-Adressen gibt, werden diese je nach Internet Service Provider (abgekürzt ISP) dynamisch verteilt. Dabei erhält jeder User beim einloggen eine IP-Adresse, welche mit einem Verfallsdatum gekennzeichnet ist. Sobald dieses Datum erreicht wurde, oder er sich ausloggt, wird die IP-Adresse frei, und jemand anderes kann diese IP-Adresse benutzen. In gewissen Fällen stellt der Computer dem ISP jedoch einen Antrag auf Verlängrung seiner dynamischen IP-Adresse, welche meist auch of Das Gegenteil einer dynamischen Adresse ist eine statische IP- Adresse, welche immer unter allen Umständen gleich bleibt. Es gibt Vor- und Nachteile einer statischen IP. Eine der Vorteile ist, dass ein Server-Betrieb komfortabler möglich ist. Dieser PC ist dann nämlich immer unter der gleichen IP-Adresse erreichbar, was für die Remo-te-User einen gewissen Komfort zum Vorteil hat. Dieser Vorteil kann sich aber schnell zum Nachteil umwandeln. Möchte uns nämlich nun jemand etwas böses, und er ist im Besitze unserer IP-Adresse, erspart ihm dies jeweils einiges an Zeit, Aufwand und Nerven. Seine eigene IP-Adresse kann man unter Windows mit dem Öffnen des Programms winipcfg.exe ermitteln, welches sich im Windows- Verzeichnis befindet. "winipcfg" ist die Abkürzung für "Windows IP Configuration", zu Deutsch Windows-IP-Konfiguration. Es ist ein Hilfsprogramm aus dem Lieferumfang von Microsoft Windows 9X, das es den Benutzern ermöglicht, Einstellungen hinsichtlich des Protokolls TCP/IP (Transmission Control Protocol/Internet Protocol) und der Netzwerkkarte einzusehen. Nach dem Aufruf des Programms (winipcfg.exe) wird das Fenster IP-Konfiguration angezeigt, aus dem die physikalische Adresse, die IP-Adresse, die Subnet-Maske und das standardmässige Gateway der TCP/IP-Karte hervorgeht. Die Informationen sind auch bei der Fehlersuche und - beseitigung hilfreich. 3.0 Der Header Jedes durch ein Netz geschicktes IP-Paket (Internet Protocol) ist zwangsweise im Besitze eines Headers, welcher folgenden Aufbau aufweist: 1 4 8 12 16 20 24 28 32 +-------------------------------------------------------------+ |VersionüLänge | Service-Typ | Totale Länge | |----------------------------+--------------------------------| | Identifikation |Flags| Fragment-Offset | |----------------------------+--------------------------------| | Lebensdauer | Protokoll | Header-Checksumme | |----------------------------+--------------------------------| | Absender-Adresse | |----------------------------+--------------------------------| | Empfänger-Adresse | |----------------------------+--------------------------------| | Optionen | Padding | |----------------------------+--------------------------------| | Daten | +-------------------------------------------------------------+ 3.1 Version Enthält die Versions-Nummer des eingesetzten IP-Protokolls. Gebräuchlich sind momentan die Versionen 4 und 6. 3.2 Länge des Headers Gibt die Gesamtlänge des Headers in Form von 32 Bit an. Der kleinste Wert beträgt 5, was 20 Byte entspricht, wobei dies nur beim Fehlen des Options-Feldes vorkommen kann. Der IP-Header kann maximale 60 Bytes gross sein, wobei in jenem Falle das Länge-Feld 15 als Wert eingetragen hat. 3.3 Service-Typ Dieses Feld definiert, wie das eigentliche Paket gehandhabt werden soll. Der Standartwert für dieses Feld beträgt 0. 1 2 3 4 5 6 7 +-----+-----+-----+-----+-----+-----+-----+ | Priorität | D | T | R | 0 | 0 | +-----+-----+-----+-----+-----+-----+-----+ 3.4 Priorität Die Priorität wird in 2 Bits angegeben. Sie kann von 0 (normales Paket) bis 7 (Steuerungs-Paket) reichen. Die Flags geben an, in welcher Form der Host die Priorität setzen muss: +-------+-+--------------------------+------------------+ |Bit 0-2| |Priorität |Precedence | |Bit 3 |0|Normal Verzögert |Normal Delay | |Bit 3 |1|Kurz Verzögert |Low Delay | |Bit 4 |0|Normaler Durchsatz |Normal Throughput | |Bit 4 |1|Hoher Durchsatz |High Throughput | |Bit 5 |0|Normale Zuverlässigkeit |Normal Reliability| |Bit 5 |1|Hohe Zuverlässigkeit |High Reliability| |Bit 6-7| |Reserviert für die Zukunft|Reserved | +-------+-+--------------------------+------------------+ Die ersten drei Bits sind sher wichtig, und werden wie folgt dargestellt: 111 - Network Control 110 - Internetwork Control 101 - CRITIC/ECP 100 - Flash Override 011 - Flash 010 - Immediate 001 - Priority 000 - Routine 3.5 Länge des IP-Paketes Die totale Länge des gesamten Paketes wird in einem separaten Feld definiert, und kann maximale 65'535 Bytes betragen. 3.6 Identifikations-Feld Hier wird dem Ziel-Computer mitgeteilt, wo das neu ankommende Daten-Fragment hingehört. Diese Nummer wird vom Sender definiert, und es gilt jeweils für alle Fragmente eines Datengramms dieselbe Nummer. 3.7 Flags Definiert, wie die Fragmentierung im Zusammenhang mit dem besagten Paket gehandhabt werden soll. Folgende Werte sind möglich: 1 Bit: ungenutzt 2 Bit: DF - Don't fragment. Es sind keine Fragmente erlaubt. 3 Bit: MF - More fragments. Wird bei allen Fragmenten, ausser dem letzten gesetzt 3.8 Fragment-Offset Gibt an, wwohin dieses Fragment in Form eines IP-Paketes gehört. Ein Datengramm kann aus maximal 8192 Fragmenten bestehen, wobei all jene, ausser dem letzten eintrefenden, grösser als 8 Bytes sein müssen. 3.9 Protokoll Einthält als Wert einen Code, der die Nummer des Transport- Protokolls kennzeichnet, an welches das Paket weitergeleitet werden muss. Die Codierung ist einheitlich in RFC 1700 definiert, und bei Unix-Derivaten in der Datei /etc/protocols. 3.10 Header-Checksumme Die obligatorische Prüfsumme des IP-Headers wird bei jedem Durchlaufen des Paketes durch einen Knoten des Netzes neu berechnet, da sich das Lebenszeit-Feld bei jedem Passiereb eines Knotens verändert. Die Checksumme wird aus dem 1er-Komplement der Summe aller 16 Bit Halbwörter der vorkommenden und überprüfenden Daten genereiert. 3.11 Absender-Adresse Dieses Feld enthält als Wert die in 32 Bit geschriebene IP- Adresse des Absenders. 3.12 Empfänger-Adresse Damit die einzelnen Knoten eines Netzes wissen, wohin dieses Paket eigentlich gehört, wird im IP-Header wieder in 32 Bit die IP-Adresse des Empfängers notiert. 3.13 Optionen Das Options-Feld erlaubt verschiedene "Spielereien", welche für DoS-Attacken durchaus von Bedeutung gewinnen können. 3.14 Padding Dieses Feld dient Füllzwecken, und expandiert den Header, wenn das Optionsfeld nicht seine vorgeschriebene Länge von 32 Bit erreichen konnte. 4.0 Angriffsmöglichkeiten 4.1 Die Vorbereitung - IP-Sniffing 4.1a ICQ & Netstat Eine der gängigsten und einfachsten Methoden die IP-Adresse eines potentiellen Opfers ausfindig zu machen, ist das Nutzen von ICQ und seinen Schwachstellen. Standardmässig wird beim Aufstarten des Chat-Programms ICQ von Mirabilis automatisch die eigene IP- Adresse für alle anderen IPQ-Chatter sichtbar. Möchte man nun die IP-Adresse seines Gegenübers wissen, klickt man einfach seinen Nickname in der eigenen Liste an, wählt den Eintrag "user details" und erkennt die aktuellste IP-Adresse in der nun folgenden Maske. Nun gibt es jedoch im Gewirr von ICQ auch die Möglichkeit, seine IP-Adresse mit den normalen Möglichkeiten zu fälschen oder unterdrücken. Dies kann wie folgt unternommen werden: Einfach den ICQ-Button im ICQ-Tool anklicken, den Eintrag "preferences & security" und weiter "security & provacy" wählen. Daraufhin erscheint ein neues Fenster. Um nun die eigene IP-Adresse zu unterdrücken, aktiviert man die Box neben "Do not publish IP adress". Um nun die IP-Adresse von jemandem herauszufinden, welcher seine aktuelle Adresse unterdrückt, bemächtigt man sich entweder eines ICQ-IP-Sniffers oder eines kleinen Tricks. Den IP-Sniffer für ICQ gibts auf jeder zweiten Hackerseite. Zu bedienen ist ein solches Tool ganz einfach: Die ICQ-Uin des zu scannenden eingeben, und man erhält seine wahre IP-Adresse. Der Trick, welcher ein Sniffing- Tool überflüssig macht, funktioniert wie folgt: Man schreibt als erstes eine Message im ICQ an sein Opfer. So schnell wie möglich gibt man startet man nun das Tool "netstat" mit dem "-a"-Parameter. Nun erhält man auf dem Screen eine Liste aller Verbindungen mit unserem Computer angegeben sind. Nun muss man jenen Eintrag finden, welcher mit dem ICQ in Verbindung steht. Als kleine Hilfe: Hinter jenem sollte das Wort "Etablished" stehen. Als kleine Hilfe: ICQ benutzt standardmässig den Port 4000 für Verbindungen. Am besten hält man einfach nach dem Eintrag in Netstat Ausschau, welcher über Port 4000 geht. Diesen Eintrag muss man nun nur noch anpingen, und schon ist man im Besitze der IP-Adresse. Das Nutzen von Traceroute geht natürlich auch, und bietet noch einiges mehr an Informationen über das Ziel. 4.1b Java-Chat & Subnet Eine andere Möglichkeit des IP-Sniffens kann mittels Java-Chats und Subnet-Abfragen durchgeführt werden. Die IP-Adresse eines Users kann man meist in (Java-)Chats durch die Eingabe von "/whois name_des_opfers" herausfinden. Nach dieser Eingabe bekommt man die Subnet-Maske des Opfers, wel-che man sich merken muss. Nun startet man eine Anfrage der IP-Adresse, welche zum Beispiel unter http://www.checkdomain.com getätigt werden kann. Die nun erscheinende Ausgabe der Anfrage stellt eine Liste von IP-Adressen dar. Nun scannt man jene einfach noch, bis man die IP-Adresse des Opfers herausgefunden hat. 4.2 IP-Spoofing Viele Firewall-Komponente filtern den Paket-Verkehr mittels des Verbietens von gewissen, im Header vor-kommenden, IP-Adressen. Um nun eines Portal zu sprengen, behilft man sich des IP-Spoofings. Dabei werden im ersten Schritte individuell die Informationen im Header des IP-Pakets manipuliert. Gelingt einem dieses Vorhaben, bietet dies einen hervorragenden Angriffspunkt für weitere Attacken. Das Überdenken und Überarbeiten der Konfiguration der Firewall kann bei externen Attacken für die Sicherheit des Netzes von unerlässlichem Vorteil sein. Prinzipiell sollten von einer Firewall-Komponente keine externen Pakete hereingelassen werden, welche eine intern existierende IP-Adresse aufweisen. 4.3 IP-Fragmentierung Eine strikt destruktive Angriffsform ist die Fragmentierung der IP-Pakete, was auch "Ping of Death" genannt wird. Ein einzelnes IP-Paket ist inklusive Header maximal 65'535 Bytes lang, Ethernet-Pakete können jedoch maximale 1'500 Bytes Daten übertragen. Grössere Pakete werden fragmentiert und beim Empfänger wieder defragmentiert, wobei die Zusammensetzung anhand eines Offset-Wertes erfolgt. Dies wird gemacht, um Netzwerkabschnitte zu überwinden, welche lediglich eine maximale Paketlänge unterstützen. Jedes Paket-fragment erhält neben dem Offset-Wert auch noch eine Identifikationsnummer, aber nur das erste enthält den TCP-Header und damit die Port-Nummer. Dieser Offset-Wert bestimmt für jedes Fragment, wohin es gehört oder wohin es soll. Dadurch ist es möglich, dem letzten Fragment einen Offset zu geben, der inklusive Fragmentgrösse einen grösseren Wert als die maximalen 65'535 Bytes ergibt. Dieses übergrosse Ping-Paket erzeugt anschliessend einen Buffer-Overflow. Dieser Angriff funktioniert nicht nur mit ICMP und Ping, sondern auch mit UDP und TCP. Obwohl ein ordentlicher Ping-Befehl keine Pakete grösser als 65'507 Bytes (65'535 Bytes abzüglich 20 Bytes IP- Header und 8 Bytes ICMP-Header) zulässt, bot bei den ersten Versionen von Windows 95 der dort implementierte Ping-Befehl das antsprechende Feature in Form eines Parameters. Einfach "ping -l 65510 zielhost" eingeben, und der Todes-Ping wird ausgeführt. TCP-Filter können auch in der Regel nicht mehr sicher unterscheiden, ob die Paket ins interne Netz gelasssen werden dürfen, da die Port-Information bei den meisten Paketen fehlt. Wenn die Zielstation nun auch noch unvollständige Paketfragmentfolgen auswertet - und jene auch nicht verwirft - kann eine Firewall ohne grössere Probleme umgangen werden. Anfang 1997 war von dieser Attacke so ziemlich alles betroffen, was einen IP-Stack hatte. Von der Workstation bis zum Drucker war damals praktisch nichts dagegen gewappnet. 5.0 Schutzmöglichkeiten Generell sollten Authentifizierungen von Clients nicht nur anhand der IP stattfinden. Es sollte grundsätzlich bei wichtigen Checkpoints auch eine Überprüfung der Zulassung anhand eines Kennwortes stattfinden. ----------------------------------------------------------------- Siehe auch Denial of Service, Firewall, ICMP, IP-Forwarding, IP- Masquerading, Proxy, RFC 791, Router, TCP, UDP ----------------------------------------------------------------- Dieser Text ist unverfälscht frei kopierbar! Marc Ruef http://www.computec.ch/