ICMP-Antworten mit IPTables fälschen

Einer der ersten Schritte eines Angriffs auf einen Server besteht aus einem einfachen Ping. Oft auch einfach benutzt, um herauszufinden ob ein Host verfügbar ist. Betrachtet man den „Ping“ genauer, istes nur ein ICMP Echo-Request, also ein ICMP-Paket vom Typ 8. ICMP ist eins der Internet-Protokolle auf der Transportschicht. Wenn man also gerade auf einem Linux-Server arbeitet und diesen ersten Schritt des Ausspähens erschweren möchte, kann man sich IPTables zunutze machen und mit seinem Gegenüber Katz und Maus spielen, indem man eine bestimmte (beliebige) ICMP-Antwort sendet.

Dafür schaut man sich die Tabelle der möglichen Antworten auf ICMP Echo-Requests an:
Wikipedia: Aufbau von ICMP-Paketen

Leider werden nicht von allen Betriebssystemen alle Antworten auch tatsächlich verarbeitet, also sollte man sich als grobe Richtlinie an RFC792 halten. Einen genaueren Überblick über die möglichen Antworten liefert die Übersicht über ICMP-Parameter bei der IANA. Eine definitive Antwort, welche ICMP Nachrichten-Typen gesendet werden können liefert der folgende Befehl. Hier die gekürzte Ausgabe eines Linux 2.6:

# iptables -j REJECT -h
Valid reject types:
    icmp-net-unreachable     	ICMP network unreachable
    net-unreach              	alias
    icmp-host-unreachable    	ICMP host unreachable
    host-unreach             	alias
    icmp-proto-unreachable   	ICMP protocol unreachable
    proto-unreach            	alias
    icmp-port-unreachable    	ICMP port unreachable (default)
    port-unreach             	alias
    icmp-net-prohibited      	ICMP network prohibited
    net-prohib               	alias
    icmp-host-prohibited     	ICMP host prohibited
    host-prohib              	alias
    tcp-reset                	TCP RST packet
    tcp-rst                  	alias
    icmp-admin-prohibited    	ICMP administratively prohibited (*)
    admin-prohib             	alias

Möchte man statt einem Echo-Reply dem Gegenüber klarmachen, man sei garnicht verfügbar antwortet man mit einem icmp-host-unreachable. Die Syntax sieht wie folgt aus:

# ICMP Echos mit Host unerreichbar beantworten
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable

Ein „ping“ auf den so eingerichteten Host ergibt:

# ping haven.local
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2

Ein Gedanke zu „ICMP-Antworten mit IPTables fälschen“

  1. Praktisch! Nur muss man aufpassen das man das seinen Kollegen auch sagt. Ein Kollege hat gedacht der Server wäre Off weil sein PingtestProgramm (von dem ich nichts wusste) nicht mehr funktionierte…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.