何が起こるか見てみましょうか?
8.8.8.8は良い例です。少なくとも私の場所から、との両方でアクセスできるtraceroute
からping
です。
最初にping 8.8.8.8
何が起こるか見てみましょう:
$ 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
したがってping
、ICMPエコー要求を送信し、ICMPエコー応答を予期します。
今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
だからtraceroute
、少なくとも私がインストールした実装はICMPを送信しません。むしろ、UDPパケットを送信します。
このトレースに表示されないのは(詳細度を上げるためにtcpdump
a -v
を指定した場合)、最初のプローブのttlが1であり、その後のプローブのttlが増加することです。これにより、私と8.8.8.8の間のルーターはICMP ttl超過エラーで応答します。これは、tracerouteがこことそこの間のルーターを検出する方法です。
最終的に、ttlは8.8.8.8に達するのに十分な長さであり、UDPポート44838でリッスンするプロセスがないため、8.8.8.8はICMPポート到達不能エラーで応答します。これは、tracerouteが最終宛先に到達したことを知る方法です。
こことそこの間の何かがすべての ICMPをブロックしている場合、pingもtracerouteも機能しません。
しかし、すべての ICMPがブロックされることは通常ありませんが、まれでもありません。すべてのICMPをブロックすることには問題があります。たとえば、ICMPフラグメンテーションが必要なエラーに依存するパスMTUディスカバリーを中断します。ICMPパケットにはタイプとコードがあり、責任のあるネットワークオペレーターは、悪用される可能性のあるタイプまたはコード、特定の情報を開示するタイプまたはコードのみを選択的にブロックします。
たとえば、一部のホストはICMPエコー要求にまったく応答しないため、pingは機能しません。アイデアは、pingに応答しないことにより、ネットワーク上に存在するホストを攻撃者が発見するのが難しくなるというものです。ホストをプローブする他の方法があるため、実際にはこれは疑わしいです。たとえば、TCP SYNをポート80に送信してWebサーバーを見つけることができます。
また、多くのホストは、プロセスがリッスンしていないポートにUDPデータグラムまたはTCP SYNを取得した場合、ICMPポート到達不能エラーを送信しません。これにより、tracerouteが破損します。繰り返しになりますが、攻撃者がネットワークをマップするのをより困難にするという考え方ですが、これも攻撃者にとってはささいなフラストレーションにすぎません。
tracerouteは特定のプロトコルではなくプログラムであるため、他の調査方法があります。それらはすべてTTLの増分に依存してルーターを検出しますが、エンドポイントからの応答を引き出す可能性が多少異なる可能性のあるさまざまな種類のプローブを送信できます。たとえば、myにman tcpdump
は、-I
pingと同じICMPエコープローブを使用するオプションがリストされています。また-T
、UDPの代わりにTCP SYNプローブを使用する必要があります。あなたが知っている場合は、ホストに応答しますping
、その後-I
多くの意味になります。ホストが特定のTCPポートでリッスンしていることがわかっている場合は-T
、おそらく-p
、ポートを選択するオプションと組み合わせて意味があります。
残念ながら、これらのオプションにはルートまたは特別な機能が必要な場合があるため、UDPはかなりデフォルトになっています。実際、同様のツールのtracepath
manページには次のように書かれています:
記述
このパスに沿ってMTUを検出する宛先へのパスをトレースします。UDPポートポートまたはランダムポートを使用します。tracerouteに似ており、スーパーユーザー特権のみを必要とせず、特別なオプションはありません。