Rozpoznawanie systemu operacyjnego na podstawie TTL

Kilka dni temu pisałem o wykorzystywaniu TTL do ustalania tras pakietów. Pomyślałem wtedy, że przecież TTL można wykorzystać też do rozpoznawanie systemu operacyjnego. Okazuje się bowiem, że różne systemy operacyjne wysyłają pakiety z różnymi wartościami TTL.

Wartości TTL dla najpopularniejszych systemów wyglądają następująco:

System operacyjnyTTL
Linux (kernel 2.4 i 2.6)64
Unix64
FreeBSD64
MacOS64
Windows128
Cisco iOS255

Wystarczy, że ustalimy, jaka była początkowa wartość TTL i dzięki temu dowiemy się, z jaką rodziną systemów operacyjnych mamy do czynienia.

Jak ustalić początkową wartość TTL

Ustalenie początkowej wartości TTL i rozpoznanie systemu operacyjnego jest bardzo proste. Najpierw za pomocą PING ustalamy wartość TTL, jaką widzimy w odpowiedzi. Później za pomocą tracert/traceroute ustalamy liczbę routerów, przez które przeszły pakiety. Na końcu dodajemy wartość TTL do liczby routerów i otrzymaną wartość porównujemy z tabelą powyżej. W praktyce wygląda to następująco:

Najpierw PING

>ping networkacademy.pl

Pinging networkacademy.pl [77.79.248.195] with 32 bytes of data:
Reply from 77.79.248.195: bytes=32 time=10ms TTL=57
Reply from 77.79.248.195: bytes=32 time=9ms TTL=57
Reply from 77.79.248.195: bytes=32 time=10ms TTL=57
Reply from 77.79.248.195: bytes=32 time=9ms TTL=57

Ping statistics for 77.79.248.195:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 9ms, Maximum = 10ms, Average = 9ms

Później tracer/tracerute

>tracert -d networkacademy.pl

Tracing route to networkacademy.pl [77.79.248.195]
over a maximum of 30 hops:

  1     *        *        *     Request timed out.
  2     1 ms     1 ms     1 ms  81.30.128.1
  3    14 ms     7 ms     7 ms  178.216.40.175
  4     8 ms     8 ms     7 ms  212.91.10.53
  5     *        *        *     Request timed out.
  6     6 ms     7 ms     7 ms  31.186.80.119
  7     9 ms     9 ms     9 ms  77.79.248.195

Trace complete.

Teraz wystarczy dodać wartość TTL z polecenia ping (57) do liczby przeskoków na trasie (7) i uzyskujemy 57 + 7 = 64, czyli serwer, na którym działa moja witryna działa na systemie Linux.

W rzeczywistości możemy to nawet nieco uprościć. Ponieważ różnice wartości TTL dla poszczególnych systemów są bardzo duże, a routing odbywa się zazwyczaj przez kilka lub kilkanaście routerów, możemy założyć z dużym prawdopodobieństwem, że dla wartości TTL poniżej 64 mamy do czynienia z Linuksem/Unixem, dla TTL w przedziale 65 – 128 z Windowsem a dla TTL w przedziale 129 – 255 z systemem Cisco iOS.

Mogą się oczywiście zdarzyć przypadki bardzo starych systemów, dla których wartość TTL będzie inna. Np. Linux wykorzystujący kernel w wersji 2.2 wykorzystywał TTL=255, ale tak stare systemy są już bardzo rzadko wykorzystywane i prawdopodobieństwo, że na nie natrafimy, jest coraz mniejsze.

Może być też tak, że administrator systemu umyślnie zmieniła wartość TTL w systemie, żeby wprowadzić w błąd potencjalnych atakujących i utrudnić identyfikację systemu, dlatego nasze wnioski nie powinny opierać się tylko na tym jednym badaniu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.