Jakiś czas temu wspominałem o scenariuszu związanym z network forensic (Network Forensic: Nitroba University Harassment Scenario). Opierając się na dostępnym w ramach tego przykładu zapisie ruchu sieciowego, pokażę małą ciekawostkę. Jak ruch NTP może posłużyć do ustalenia ile komputerów jest aktywnych za NAT.
Ile komputerów za NAT?
Dlaczego podejrzewam NAT
Wykorzystane w przykładzie dane można pobrać z tego adresu, konkretnie chodzi o plik nitroba.pcap. Interesuje nas adres IP 192.168.15.4. Jeśli przyjrzymy się informacjom zebranym choćby przez NetworkMiner na temat tego adresu IP, przypuszczać można, że za tym adresem działa więcej niż jedna maszyna:

Zwracam uwagę na wiele zebranych wartości User-Agent. Co prawda nie ma problemu, by na jednej maszynie korzystać z więcej niż jednej przeglądarki, ale w tym wypadku nagłówki sugerują również więcej niż jeden system operacyjny (co najmniej Windows i Mac OS X). To już sugeruje, że systemów jest więcej, choć oczywiście komputer może być jeden, w końcu od czego jest wirtualizacja.
W tym konkretnym przypadku możemy jednak przypuszczać, że nie o wirtualizację tutaj chodzi. Z opisu zawartego w scenariuszu wynika, że do sieci podłączony został access point. Adres IP 192.168.15.4 będzie więc adresem zewnętrznego interfejsu urządzenia, za którym "ukrywane" będą adresy korzystających z tego AP maszyn.
Co ujawnia NTP
Co ciekawego zobaczymy, jeśli przefiltrujemy ruch sieciowy tak, by zobaczyć wyłącznie pakiety protokołu NTP wychodzące z adresu 192.168.15.4?

Jak widać pojawiają się trzy różne adresy docelowe:
- 17.151.16.20 (time4.apple.com)
- 17.151.16.22 (time6.apple.com)
- 207.46.232.182 (microsoft?)
To przesłanka sugerująca, że za jednym adresem kryją się (co najmniej) trzy różne komputery. Dlaczego?
Dwa różne systemy operacyjne
Przede wszystkim prawdopodobnie są dwa systemy operacyjne - Mac oraz Windows. Istnienie tych systemów wynika nie tylko z zebranej listy wartości nagłówków User-Agent, ale znajduje również potwierdzenie w zebranym ruchu NTP.
W przypadku Windows prawdopodobnie system odpytuje o nazwę DNS time.windows.com, która jest rozwijana do adresu IP 207.46.232.182. System następnie usiłuje zsynchronizować czas ze wskazanym serwerem NTP. Stosowne zapytanie DNS można znaleźć w pakiecie 70419. Warto dodać, że serwer time.windows.com jest domyślnym serwerem, z którym systemy Windows synchronizują czas.

To, że pojawia się pytanie o domyślny serwer synchronizacji czasu jest mocną przesłanką, że przynajmniej jeden z systemów to Windows (prawdopodobnie co najmniej Windows XP). Od Windows XP (lub 2000, nie pamiętam w tej chwili dokładnie) w system wbudowana została automatyczna synchronizacja czasu z serwerem time.windows.com. Sama usługa (S)NTP pojawiła się w Windows 2000, co miało związek z wykorzystaniem protokołu Kerberos, który z kolei do poprawnego funkcjonowania wymaga synchronizacji czasu. Informacja zawarta w zebranych nagłówkach wskazuje na to, że rzeczywiście, przynajmniej jeden ze systemów to Windows XP (czyli Windows NT 5.1).
Automatyczna synchronizacja czasu trafiła również do innych desktopowych systemów. Nazwy timeX.apple.com sugerują, że są to serwery przeznaczone właśnie do synchronizacji systemów (i urządzeń?) produkcji Apple. Z tego, co na szybko udało mi się znaleźć, to do synchronizacji wykorzystany jest standardowy demon NTP.
2x Mac
Dlaczego twierdzę, że z faktu istnienia komunikacji z użyciem protokołu NTP z maszynami time4 i time6 wynika istnienie (co najmniej) dwóch różnych komputerów za NAT? Przecież klient NTP może synchronizować się jednocześnie z więcej niż jednym źródłem. Również wiele różnych klientów może synchronizować się z jednym serwerem NTP. Mam jednak przesłanki, które potwierdzają moją tezę. Konkretnie przesłanki są dwie.
Jak często pytam o czas
Pierwsza przydatna informacja to pooling interval określająca jak często klient pyta się, która godzina.

Jeśli teraz z kolei prześledzić zapytania wysyłane z adresu 192.168.15.4 do 17.151.16.22, widać bardzo dokładną korelację między wartością pool interval a czasem pojawienia się pakietów NTP:

Wireshark pozwala prezentować czas na różne sposoby. Jedną z dostępnych opcji jest wyświetlanie czasu od poprzedniego wyświetlonego pakietu. Tu ten czas jest co do zasady zgodny z wartością pokazaną jako pooling interval. W pewnej chwili ten czas się zwiększa, ale znajduje to odbicie we wcześniejszej wartości parametru pooling interval.
Analogicznie sytuacja przedstawia się dla adresu drugiego serwera 17.151.16.20. No, prawie. Tam w pewnej chwili ta zgodność zostaje zachwiana. Nie na tyle jednak, by z całkowitą pewnością stwierdzić, że są dwa komputery synchronizujące się jednocześnie z tym samym serwerem NTP pod adresem 17.151.16.20.
Z kim jestem zsynchronizowany
Druga przydatna informacja zapisana w pakiecie NTP to Reference Clock ID (widoczny na wcześniejszych zrzutach), czyli to, z kim/czym w danej chwili zegar jest zsynchronizowany. W tym przypadku "coś" odpytujące się regularnie serwera 17.151.16.20 zsynchronizowane jest właśnie z tym serwerem. Analogicznie w przypadku adresu 17.151.16.22 to właśnie ten adres podany jest jako Reference Clock ID. To dość mocna przesłanka sugerująca dwa różne komputery (jeden komputer -> jeden ntpd -> jeden Reference Clock ID). Oczywiście, równie dobrze można twierdzić, że na jednej maszynie uruchomione są dwa ntpd, z których każdy zsynchronizowany jest z innym zegarem.
I co z tego wynika?
Całość pokazuję jako ciekawostkę odnośnie tego, jak wiele informacji "cieknie" w trakcie normalnego działania komputerów i jakie informacje może uzyskać ktoś, kto jest w stanie monitorować ruch na wyjściu. Tu pokazałem to na przykładzie NTP, ale warto też przypomnieć choćby o p0f. Źródeł informacji jest oczywiście więcej. Posłuchajcie swoich komputerów, kiedy "nic" nie robią.
Komputerów jest prawdopodobnie więcej
Na podstawie ruchu NTP stwierdziłem, że za NAT powinny być co najmniej trzy różne komputery (1x Windows XP i 2x MacOS). Jeśli jednak popatrzeć na nagłówki User-Agent, można przypuszczać, że maszyn będzie więcej. Podejmie się ktoś przypisania zebranych nagłówków User-Agent do (hipotetycznych maszyn) maszyn?
czyli faktycznie możemy określić, ze jakieś komputery za natem odpytują serwery czasu.