Internet Control Message Protocol
| ICMP (Internet Control Message Protocol) | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Familie: | Internetprotokollfamilie | |||||||||||||||||
| Einsatzgebiet: |
Obligatorischer Zusatz |
|||||||||||||||||
|
||||||||||||||||||
| Standards: | RFC 792 (1981) | |||||||||||||||||
Das Internet Control Message Protocol (ICMP) dient in Rechnernetzwerken dem Austausch von Informations- und Fehlermeldungen über das Internet-Protokoll in der Version 4 (IPv4). Für IPv6 existiert ein ähnliches Protokoll mit dem Namen ICMPv6.
ICMP ist Bestandteil von IPv4, wird aber wie ein eigenständiges Protokoll behandelt. Es wird von jedem Router und jedem Rechner erwartet, dass diese ICMP „verstehen“. Die meisten ICMP-Pakete enthalten Diagnose-Informationen: Sie werden vom Router zur Quelle zurückgeschickt, wenn der Router Pakete verwirft, etwa weil beispielsweise das Ziel nicht erreichbar ist oder die TTL abgelaufen ist. Es gelten folgende Grundsätze:
- ICMP benutzt IP als Kommunikationsbasis, indem es sich selbst als Protokoll einer höheren Schicht interpretiert, d. h. ICMP-Nachrichten werden in IP-Paketen gekapselt.
- ICMP erkennt einige Fehlerzustände, macht aber IP zu keinem zuverlässigen Protokoll.
- ICMP analysiert Fehler in jedem IP-Paket, mit Ausnahme solcher, die eine ICMP-Nachricht tragen.
- ICMP-Nachrichten werden nicht als Antwort auf Pakete an Zieladressen versendet, bei denen es sich um Multicast- oder Broadcast-Adressen handelt.
- ICMP-Nachrichten antworten nur einer eindeutigen Quell-IP-Adresse.
Inhaltsverzeichnis
Die ICMP-Pakettypen[Bearbeiten]
Der Typ des ICMP-Pakets steht als 8-Bit-Zahl am Anfang des ICMP-Headers. Die Zahlen haben dabei folgende Bedeutungen:
- 0 = Echo Reply
- 1-2 = Reserved
- 3 = Destination Unreachable
- 4 = Source Quench
- 5 = Redirect
- 8 = Echo Request
- 9 = Router Advertisement
- 10 = Router Solicitation
- 11 = Time Exceeded
- 12 = Parameter Problem
- 13 = Timestamp (erleichtert die Zeitsynchronisation)
- 14 = Timestamp Reply
- 15 = Information Request
- 16 = Information Reply
- 17 = Address Mask Request
- 18 = Address Mask Reply
- 19 = Reserved (for Security)
- 20–29 = Reserved (for Robustness Experiment)
- 30 = Traceroute
- 31 = Datagram Conversion Error
- 32 = Mobile Host Redirect
- 33 = Ursprünglich IPv6 Where-Are-You (ersetzt durch ICMPv6)
- 34 = Ursprünglich IPv6 I-Am-Here (ersetzt durch ICMPv6)
- 35 = Mobile Registration Request
- 36 = Mobile Registration Reply
- 37 = Domain Name Request
- 38 = Domain Name Reply
- 39 = SKIP
- 40 = Photuris
- 41 = ICMP messages utilized by experimental mobility protocols such as Seamoby
- 42–255 = Reserved
Port Unreachable[Bearbeiten]
Gängige Konvention ist das Absetzen eines „Port Unreachable“ als Antwort auf einen Verbindungsversuch zu einem Port, der nicht von einem Dienst geöffnet wurde. Die Antwort „Port Unreachable“ besteht aus einem Paket vom Typ 3 (Destination Unreachable), das den Code 3 enthält (siehe Aufbau).
Firewalling: Port unreachable versus "drop"[Bearbeiten]
Ein gängiger Fehler bei der Konfiguration einer Firewall ist das Verwerfen (drop) der Pakete bei einem ungewünschten Verbindungsaufbau, anstatt eine ICMP-Nachricht des Types Port Unreachable zurückzusenden.
Bei dem Versuch, eine Verbindung herzustellen, bekommt der Netzwerkclient überhaupt keine Antwort auf seine Anfrage und wartet so lange ab, bis eine Zeitüberschreitung eintrifft. Dies kann bei Programmen zu lästigen Wartezeiten für die Benutzer oder zu weiteren unerwünschten Nebeneffekten führen.
Das führt nicht nur zu technischen, sondern auch zu sicherheitsrelevanten Problemen. Beispielsweise kann ein Angreifer zwar nicht auf den Dienst zugreifen, aber er kann erahnen, ob dieser läuft oder nicht. Damit könnte er dann versuchen, über einen erreichbaren Dienst den gesicherten Dienst zu manipulieren. Beispielsweise ein geschützter Datenbankserver über den für jeden erreichbaren Webserver.
Zu sehen ist das hier am Beispiel der Ausgabe der Portscanners nmap: Zu erkennen ist, dass unter anderem der TCP-Port 3306 den Status filtered (gefiltert) hat. Das bedeutet, dass keine Antwort bei der Überprüfung kam; die Anfrage wurde von der Firewall einfach verworfen. Daraus lässt sich schließen, dass jemand den Datenbankdienst MySQL dahinter vor Fremdzugriffen schützen will, dieser aber dennoch läuft. Der TCP-Port 80 (http) hat den Status open (offen) und steht für Netzwerkanfragen zur Verfügung.
$ nmap -p 1- homeserver.internal Starting Nmap 6.40 ( http://nmap.org ) at 2014-02-10 17:05 CET Nmap scan report for homeserver.internal (192.168.0.1) Host is up (0.022s latency). rDNS record for 192.168.0.1: homeserver.internal Not shown: 65512 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http 106/tcp open pop3pw 110/tcp open pop3 135/tcp filtered msrpc 137/tcp filtered netbios-ns 138/tcp filtered netbios-dgm 139/tcp filtered netbios-ssn 143/tcp open imap 443/tcp open https 445/tcp filtered microsoft-ds 465/tcp open smtps 587/tcp open submission 993/tcp open imaps 995/tcp open pop3s 3306/tcp filtered mysql 5314/tcp open unknown 5432/tcp filtered postgresql 8443/tcp open https-alt 8880/tcp open cddbp-alt Nmap done: 1 IP address (1 host up) scanned in 301.14 seconds
Time-To-Live[Bearbeiten]
Um die Route eines Pakets zu einem bestimmten Ziel-Host festzustellen, versendet das Analyseprogramm Traceroute speziell präparierte Datagramme mit verringerter Time-To-Live (TTL) und wartet auf ICMP-Meldungen „Time to live exceeded in transit“ und „Destination unreachable“ als Antworten. Abhängig von der Implementation von Traceroute können das ICMP (z. B. unter Windows) oder UDP (z. B. unter Linux) sein.
Aufbau[Bearbeiten]
ICMP sendet und empfängt eine Vielzahl von Nachrichten. Im IP-Header wird die ICMP-Nachricht durch die Protokollnummer 1 angezeigt. ICMPv6 trägt dagegen die Protokollnummer 58. Das ICMP-Nachrichtenformat besteht aus nur wenigen Feldern:
| 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 31 | |
| Typ | Code | Prüfsumme | |||||||
| Daten (optional) | |||||||||
Das Typfeld spezifiziert die Nachricht. Das Codefeld interpretiert die Nachrichtenart genauer. Die Daten enthalten typischerweise einen Teil der ursprünglichen IP-Nachricht. Einige der häufiger vorkommenden Typ-Code-Kombinationen sind:
| Typ | Typname | Code | Bedeutung |
|---|---|---|---|
| 0 | Echo-Antwort | 0 | Echo-Antwort |
| 3 | Ziel nicht erreichbar | 0 | Netzwerk nicht erreichbar |
| 1 | Host (Zielstation) nicht erreichbar | ||
| 2 | Protokoll nicht erreichbar | ||
| 3 | Port nicht erreichbar | ||
| 4 | Fragmentierung nötig, Don’t Fragment aber gesetzt | ||
| 5 | Route nicht möglich (die Richtung in IP-Header-Feld Option falsch angegeben) | ||
| 13 | Communication administratively prohibited (Paket wird von der Firewall des Empfängers geblockt) | ||
| 4 | Entlasten der Quelle | 0 | Datagramm verworfen, da Warteschlange voll |
| 8 | Echo-Anfrage | 0 | Echo-Anfrage (besser bekannt als „Ping“) |
| 11 | Zeitlimit überschritten | 0 | TTL (Time To Live, Lebensdauer) abgelaufen |
| 1 | Zeitlimit während der Defragmentierung überschritten | ||
| 30 | Traceroute | Traceroute |
Ein zusätzliches Feld „Daten“ trägt bei vielen ICMP-Nachrichten im ersten 32-Bit-Wort genauere Informationen zur Zuordnung der ICMP-Nachricht. Oft werden ab dem zweiten Datenwort auch IP-Header des auslösenden Datagramms sowie die ersten 64 Bit des Pakets übermittelt. Das „Daten“-Feld kann jedoch auch dazu missbraucht werden, um Nutzdaten zu übertragen (ICMP-Tunneling). Die notwendige Fehlerbehandlung beziehungsweise Fehlerkorrektur und Ähnliches muss dann jedoch auf der Anwendungsebene implementiert werden.
DoS-Angriff mit ICMP[Bearbeiten]
Bei fehlerhafter Konfiguration des Systems kann das Verwaltungsprotokoll ICMP für einen Angriff per Denial of Service (DoS) missbraucht werden. Hierzu wird das Programm Ping benutzt, das bei den meisten Betriebssystemen in der Grundinstallation enthalten ist. Unter den Unixen, Unix-Derivaten (*BSD, Mac OS X) und Linux besitzt das Programm standardmäßig die Flood-ping-Funktion (engl.: flood = Flut), welche nur dem Super-User (root) zur Verfügung steht. Diese sendet auf jede Antwort so schnell wie möglich eine erneute Anfrage (maximal 100 Anfragen pro Sekunde). Durch diese Flut von Daten kann man erreichen, dass die Bandbreite des Zielrechners oder sogar der Rechner selbst so stark ausgelastet wird, dass andere Anfragen nicht mehr beantwortet werden können. Jedoch wird die eigene Bandbreite und Rechenleistung genauso stark beansprucht.
Rein prinzipiell eignet sich jede Art von Daten für so einen Angriff. Dadurch, dass quasi überall das Programm Ping schon installiert ist, steht damit schon ein sehr einfaches Mittel zur Verfügung.
Weblinks[Bearbeiten]
- RFC 792 – Internet Control Message Protocol
- RFC 1122 – Requirements for Internet Hosts – Communication Layers (u. a. ICMP-Erweiterungen)
- IANA ICMP Parameters – vollständige Liste der ICMP-Typen und Codes