Schauen wir uns an, was passiert.
8.8.8.8 ist ein gutes Beispiel, denn zumindest von meinem Standort aus kann ich es sowohl mit traceroute
als auch erreichen ping
.
Lassen Sie uns zuerst versuchen, zu ping 8.8.8.8
beobachten, was passiert:
$ tcpdump -n host 8.8.8.8 or icmp
15:36:51.045994 IP 10.4.27.179 > 8.8.8.8: ICMP echo request, id 7215, seq 0, length 64
15:36:51.062458 IP 8.8.8.8 > 10.4.27.179: ICMP echo reply, id 7215, seq 0, length 64
15:36:52.048350 IP 10.4.27.179 > 8.8.8.8: ICMP echo request, id 7215, seq 1, length 64
15:36:52.073657 IP 8.8.8.8 > 10.4.27.179: ICMP echo reply, id 7215, seq 1, length 64
So ping
sendet eine ICMP - Echo - Request und erwartet eine ICMP - Echo - antworten.
Jetzt traceroute -n 8.8.8.8
:
15:41:31.803324 IP 10.4.27.179.44838 > 8.8.8.8.33435: UDP, length 24
15:41:31.815184 IP 10.250.32.2 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.815343 IP 10.4.27.179.44838 > 8.8.8.8.33436: UDP, length 24
15:41:31.819654 IP 10.250.32.2 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.819791 IP 10.4.27.179.44838 > 8.8.8.8.33437: UDP, length 24
15:41:31.824609 IP 10.250.32.2 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.824754 IP 10.4.27.179.44838 > 8.8.8.8.33438: UDP, length 24
15:41:31.830506 IP 64.124.23.161 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.830649 IP 10.4.27.179.44838 > 8.8.8.8.33439: UDP, length 24
15:41:31.834469 IP 64.124.23.161 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.834565 IP 10.4.27.179.44838 > 8.8.8.8.33440: UDP, length 24
15:41:31.840962 IP 64.124.23.161 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.841061 IP 10.4.27.179.44838 > 8.8.8.8.33441: UDP, length 24
15:41:31.847440 IP 64.125.26.21 > 10.4.27.179: ICMP time exceeded in-transit, length 148
15:41:31.847634 IP 10.4.27.179.44838 > 8.8.8.8.33442: UDP, length 24
15:41:31.853664 IP 64.125.26.21 > 10.4.27.179: ICMP time exceeded in-transit, length 148
15:41:31.853761 IP 10.4.27.179.44838 > 8.8.8.8.33443: UDP, length 24
15:41:31.859221 IP 64.125.26.21 > 10.4.27.179: ICMP time exceeded in-transit, length 148
15:41:31.859269 IP 10.4.27.179.44838 > 8.8.8.8.33444: UDP, length 24
15:41:31.864149 IP 64.125.31.15 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.864192 IP 10.4.27.179.44838 > 8.8.8.8.33445: UDP, length 24
15:41:31.870843 IP 64.125.31.15 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.870922 IP 10.4.27.179.44838 > 8.8.8.8.33446: UDP, length 24
15:41:31.876200 IP 64.125.31.15 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.876352 IP 10.4.27.179.44838 > 8.8.8.8.33447: UDP, length 24
15:41:31.882148 IP 64.125.13.111 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.882249 IP 10.4.27.179.44838 > 8.8.8.8.33448: UDP, length 24
15:41:31.890076 IP 64.125.13.111 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.890156 IP 10.4.27.179.44838 > 8.8.8.8.33449: UDP, length 24
15:41:31.896100 IP 64.125.13.111 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.896163 IP 10.4.27.179.44838 > 8.8.8.8.33450: UDP, length 24
15:41:31.905037 IP 108.170.242.225 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.905235 IP 10.4.27.179.44838 > 8.8.8.8.33451: UDP, length 24
15:41:31.913206 IP 108.170.242.225 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.913283 IP 10.4.27.179.44838 > 8.8.8.8.33452: UDP, length 24
15:41:31.923428 IP 108.170.242.241 > 10.4.27.179: ICMP time exceeded in-transit, length 76
15:41:31.923520 IP 10.4.27.179.44838 > 8.8.8.8.33453: UDP, length 24
15:41:31.932266 IP 108.170.237.9 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.932441 IP 10.4.27.179.44838 > 8.8.8.8.33454: UDP, length 24
15:41:31.939961 IP 209.85.251.9 > 10.4.27.179: ICMP time exceeded in-transit, length 76
15:41:31.940043 IP 10.4.27.179.44838 > 8.8.8.8.33455: UDP, length 24
15:41:31.947460 IP 108.170.237.21 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.947508 IP 10.4.27.179.44838 > 8.8.8.8.33456: UDP, length 24
15:41:31.954824 IP 8.8.8.8 > 10.4.27.179: ICMP 8.8.8.8 udp port 33456 unreachable, length 36
15:41:31.954888 IP 10.4.27.179.44838 > 8.8.8.8.33457: UDP, length 24
15:41:31.963601 IP 8.8.8.8 > 10.4.27.179: ICMP 8.8.8.8 udp port 33457 unreachable, length 36
15:41:31.963671 IP 10.4.27.179.44838 > 8.8.8.8.33458: UDP, length 24
15:41:31.972407 IP 8.8.8.8 > 10.4.27.179: ICMP 8.8.8.8 udp port 33458 unreachable, length 36
So traceroute
zumindest die Umsetzung habe ich installiert, nicht ICMP senden. Es werden vielmehr UDP-Pakete gesendet.
Was in diesem Trace nicht sichtbar ist (obwohl es wäre, wenn ich tcpdump
a gäbe, -v
um die Ausführlichkeit zu erhöhen), ist, dass die ersten Sonden eine ttl von 1 haben und dann die ttl für spätere Sonden inkrementieren. Dies führt dazu, dass die Router zwischen mir und 8.8.8.8 mit einem ICMP-TTL-Überschreitungsfehler antworten. Auf diese Weise erkennt traceroute die Router zwischen hier und da.
Schließlich ist die ttl lang genug, um bis 8.8.8.8 zu gelangen, und 8.8.8.8 antwortet mit einem nicht erreichbaren ICMP-Port-Fehler, da kein Prozess den UDP-Port 44838 überwacht. Auf diese Weise weiß traceroute, dass er das endgültige Ziel erreicht hat .
Wenn zwischen hier und da etwas alles ICMP blockiert , funktionieren weder Ping noch Traceroute.
In der Regel ist jedoch nicht alles ICMP blockiert, obwohl dies auch nicht selten der Fall ist. Das Blockieren des gesamten ICMP ist problematisch: Beispielsweise wird die Pfad-MTU-Erkennung unterbrochen , die auf einem für die ICMP-Fragmentierung erforderlichen Fehler beruht. ICMP-Pakete haben einen Typ und einen Code, und verantwortliche Netzbetreiber blockieren nur einige Typen oder Codes, die möglicherweise missbräuchlich sind oder bestimmte Informationen preisgeben.
Einige Hosts reagieren beispielsweise überhaupt nicht auf eine ICMP-Echoanforderung, und daher funktioniert Ping nicht. Die Idee ist, dass es für einen Angreifer schwieriger ist, herauszufinden, welche Hosts im Netzwerk vorhanden sind, wenn er nicht auf Pings antwortet. In der Praxis ist dies fraglich, da es andere Möglichkeiten gibt, nach einem Host zu suchen. Beispielsweise kann ein TCP-SYN an Port 80 gesendet werden, um Webserver zu finden.
Viele Hosts senden auch keinen nicht erreichbaren ICMP-Port-Fehler, wenn sie ein UDP-Datagramm oder eine TCP-SYN an einen Port senden, an dem sie keinen Prozess überwachen, und dies führt zu einer Unterbrechung der Traceroute. Wieder ist die Idee, es einem Angreifer zu erschweren, das Netzwerk zuzuordnen, aber dies ist für einen Angreifer nur eine kleine Enttäuschung.
Da es sich bei traceroute um ein Programm und kein bestimmtes Protokoll handelt, gibt es andere Möglichkeiten zum Prüfen. Sie alle sind darauf angewiesen, die TTL zu erhöhen, um die Router zu ermitteln. Es können jedoch verschiedene Arten von Tests gesendet werden, die mehr oder weniger die Chance haben, eine Antwort vom Endpunkt auszulösen. Beispielsweise man tcpdump
listet my eine -I
Option zur Verwendung von ICMP-Echosonden auf, die mit ping identisch ist. -T
Anstelle von UDP müssen auch TCP-SYN-Prüfpunkte verwendet werden. Wenn Sie ein Host wissen reagieren wird ping
dann -I
macht sehr viel Sinn. Wenn Sie wissen, dass der Host einen bestimmten TCP-Port -T
überwacht, ist dies möglicherweise in Verbindung mit der -p
Option zur Auswahl des Ports sinnvoll .
Leider erfordern diese Optionen möglicherweise Root- oder spezielle Funktionen, sodass UDP einen angemessenen Standardwert darstellt. Tatsächlich hat ein ähnliches Tool tracepath
in seiner Manpage Folgendes zu sagen:
BESCHREIBUNG
Entlang dieses Pfades wird der Pfad zum Ziel verfolgt, an dem MTU entdeckt wurde. Es wird ein UDP-Port-Port oder ein zufälliger Port verwendet. Es ist ähnlich wie traceroute, erfordert nur keine Superuser-Rechte und hat keine ausgefallenen Optionen.