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 operacyjny | TTL |
Linux (kernel 2.4 i 2.6) | 64 |
Unix | 64 |
FreeBSD | 64 |
MacOS | 64 |
Windows | 128 |
Cisco iOS | 255 |
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.