Czy można stwierdzić, czy dwa adresy IP należą do tego samego serwera?

21

Biorąc pod uwagę dwa publiczne adresy IP i wiedzę, które są w tej samej sieci / 27, czy byłoby możliwe ustalenie ze zdalnej lokalizacji (tj. Innego kraju), czy należą one do jednego czy dwóch serwerów?

Michelle
źródło
2
Czy możesz wyjaśnić, co próbujesz osiągnąć, i rodzaj serwerów, które próbujesz zidentyfikować?
bobstro
3
Czasy pingowania mogą stanowić wskazówkę - na przykład, jeśli wszystkie adresy IP reagują w losowym czasie, ale dwa z nich odpowiadają z prawie takim samym opóźnieniem.
10
Czy możesz zrobić DoS jeden i sprawdzić, czy drugi również przestanie odpowiadać?
Ben Voigt
1
@ AndréDaniel Pingi czasowe całkowicie zawiodą, jeśli serwery są kolokowane. Ten sam stojak nie jest tym samym serwerem.
TomTom

Odpowiedzi:

29

Nie, w ogólnym przypadku nie.


Kilka dodatków, aby nasi goście z SO byli szczęśliwi:

  • W podstawowych protokołach TCP / IP (np. IP / TCP / UDP, ICMP) nie ma nic, co miałoby na celu dokonanie rozróżnienia wymaganego w pytaniu.
  • To samo dotyczy wielu protokołów wyższego poziomu, np. HTTP.
  • Rzeczywiście można użyć mniej lub bardziej subtelnych różnic we wzorcach odpowiedzi, aby zgadnąć o systemie. Jeśli masz dwa bardzo różne systemy, np. Linux i serwer Windows, może to być wystarczające, aby mieć pewność, że masz dwa hosty.
  • Będzie to trudniejsze, im bardziej podobne będą systemy. Dwa węzły w klastrze internetowym HA z identycznym sprzętem i systemem operacyjnym są prawdopodobnie niemożliwe do rozdzielenia w ten sposób. Uważam to za ogólny przypadek w większości dzisiejszych scenariuszy.
  • Wreszcie: czy dwie maszyny wirtualne na tym samym urządzeniu fizycznym mają jeden lub dwa serwery? W zależności od tego, dlaczego próbujesz różnicować, może to być ważne i zupełnie niemożliwe do powiedzenia na poziomie sieci.
Sven
źródło
2
Odpowiedź Svena jest w 100% poprawna, ale możliwe jest odgadnięcie, czy działają one na różnych systemach operacyjnych (za pomocą nmap lub testu ping opisanego tutaj kellyodonnell.com/content/determining-os-type-ping ). Jednak nadal mogą to być oba vms z jednego hosta.
Andy,
1
@Andy: Dlatego powiedziałem „w ogólnym przypadku”. W niektórych przypadkach możesz się dowiedzieć, ale z drugiej strony, w niektórych przypadkach nawet nie zauważysz, że nie jest to jeden komputer za jednym adresem IP, ale sto ...
Sven
3
@ Svena: Pytanie brzmi, czy dwa adresy IP są powiązane z jednym komputerem, a nie czy usługi na wspólnym adresie IP są powiązane z wieloma komputerami. Zgadzam się, że nie ma uniwersalnej metody, która gwarantowałaby działanie za każdym razem, ale jeśli można znaleźć wystarczającą podobieństwo między otrzymywanymi odpowiedziami, możliwe jest rozsądne odgadnięcie. Michelle musi dokładnie opracować, co należy osiągnąć, aby ustalić, czy istnieje przydatne rozwiązanie. Czy ma to znaczenie, na przykład, czy jest to konfiguracja z równoważeniem obciążenia, czy wirtualna?
bobstro
1
Niejednoznaczne, gdy wprowadzasz wirtualizację. Załóżmy, że masz dwie maszyny wirtualne, Gość A i Gość B, każda o innym adresie IP, ale w tej samej sieci / 27. Załóżmy ponadto, że obaj goście są hostowani przez Host C. W pewnym sensie dwa / 27 adresów należą do różnych „serwerów”, ale w innym sensie mogą przechodzić przez tę samą kartę sieciową i ten sam host, więc można argumentować, że adresy IP należą do tego samego „serwera”. Jeśli Gość A z kolei hostuje jeszcze dwie maszyny wirtualne, Gość X i Gość Y, również z własnymi adresami / 27, to który z tych adresów IP należy do tego samego komputera? Co się stanie, jeśli „vMotion” któraś z tych maszyn wirtualnych? Nie mam dobrej odpowiedzi.
Joshua Huber
13

Ciekawe „dlaczego”. Obawy związane z komputerami z podwójnym bazowaniem są zazwyczaj lokalizowane jako ból głowy jakiegoś nienazwanego sysadmina. Szczegóły mają być ukryte przez model OSI.

Centralna odpowiedź na Linuxa.

Istnieje kilka sposobów generowania odcisków palców i zgadywania edukacyjnego.

  1. nmap -o i nmap z przyzwoitym skanowaniem portów. Serwery nie zawsze wiążą się z obiema kartami sieciowymi. Ale często tak robią.

  2. Adresy MAC. Jeśli masz jakieś sposoby na uzyskanie adresów MAC, producenci lubią używać kolejnych adresów dla zintegrowanego sprzętu. Dwa prawie identyczne adresy MAC są bardziej prawdopodobne na tej samej płycie głównej. Oczywiście nie dotyczy to kart z rynku wtórnego.

  3. Pozdrowienia. Telnet, ftp, smtp i tym podobne oferują informacje identyfikujące. Sprawdź, czy te usługi są uruchomione, podaj wystarczająco wyraźne informacje. Banery są dziś prawdopodobnie rzadkie, ale nadal warto spróbować.

  4. Przetestuj niezależne zachowanie karty sieciowej. Na przykład spróbuj wyzwolić odmowę hosta, podając fałszywe uwierzytelnienie ssh kilkanaście razy. Jeśli nastąpi odmowa hostów, powinieneś znaleźć gniazdo natychmiast zamknięte przy następnej próbie. Sprawdź, czy dzieje się tak również w przypadku drugiego adresu IP.

Sieć A / 27 to ... co, 29 hostów? Powiedziałbym, że szanse na zidentyfikowanie maszyny z dwoma domami z dużą pewnością są bardzo małe, może 5%. Ale biorąc pod uwagę tak małą liczbę gospodarzy, możesz być w stanie zgadnąć.

Zabawne pytanie do rozmowy kwalifikacyjnej. Mogę to ukraść.

Brian
źródło
4
Jeśli chodzi o # 4, jeśli na obu adresach działa ssh i można się z nim połączyć, możesz porównać klucze hosta. Zasadniczo dwa różne serwery mogłyby otrzymać ten sam klucz hosta, ale byłaby to bardzo dziwna konfiguracja. Jeśli więc otrzymasz ten sam klucz hosta z obu adresów, najprawdopodobniej są to ten sam serwer.
Nate Eldredge
Dwa komputery z tym samym kluczem hosta mogą wynikać z klonowania komputera.
Peter Green
7

Teoretycznie w większości przypadków można podać znaczący poziom zaufania. Istnieje jednak kilka zastrzeżeń, które znacznie utrudniają w praktyce.

Będę nakładać się na inne odpowiedzi i prawdopodobnie coś przeoczyłem, ale jest to co najmniej szczegółowe uzasadnienie, dlaczego te konkretne elementy mają znaczenie, czy nie.

Najpierw jednak zapomnij o wszelkich przemyśleniach na temat adresów MAC. Jeśli nie masz bezpośredniego dostępu do segmentu sieci, nie będziesz mógł ich zobaczyć.

Nie ufaj także skanom portów. Porty zapory ogniowej dla niektórych adresów IP są trywialne, oprogramowanie nasłuchuje tylko w przypadku niektórych adresów IP lub system IDS / IPS, który stosuje filtrowanie po wykryciu skanowania. Wszystko to zniszczy twoje testy.

Ok, więc sposób, w jaki można to stwierdzić, jest prosty: prawdopodobieństwo, że dwa pola będą identyczne, jest niskie, chyba że i tak są powiązane. Więc tak naprawdę próbujesz udowodnić, że to różne pudełka, a nie próbujesz udowodnić, że są takie same.

  1. Świst. Musisz przetestować oba jednocześnie i wykonać wiele testów. Okazuje się, że chociaż w czasach sieci występuje jitter, jest to dość wysokiej jakości pseudolosowy hałas, jeśli masz wystarczająco dużo próbek w krótkim przedziale czasowym, szum uśrednia się wystarczająco, aby zapewnić dokładne porównanie.

    Każdy przeskok warstwy 2 w sieci dodaje niewielką latencję, różne poziomy przeciążenia dadzą różne wartości latencji. Jeśli dwa adresy IP wykazują znacząco różne współbieżne opóźnienia, możesz założyć, że prawdopodobnie nie są to te same skrzynki.

    Zastrzeżenie 1: Pojedynczy serwer z dwoma łączami wysyłającymi (niepowiązanymi) i skonfigurowany z innym adresem IP na każdym łączu wysyłającym może mieć wystarczającą nierównowagę łącza wysyłającego, aby to zrzucić.

  2. Skanowanie portów. Porty docelowe mogą znajdować się w jednym z trzech stanów: nasłuchiwanie, zamknięcie, filtrowanie. To, w czym się znajdują, nie jest tak naprawdę przydatne, jak wspomniano powyżej, ale wciąż jest wiele przydatnych informacji.

    1. Skrzynki z portami otwartymi dla wielu adresów IP najprawdopodobniej będą uruchamiać to samo oprogramowanie na wszystkich adresach IP. Można uruchomić, powiedzmy, nginx na jednym IP i apache na innym, ale większość ludzi nie przejmuje się. Odcisk palca uruchomionych usług w poszukiwaniu podobieństw. Sprawdź, jakie oprogramowanie i wersja sama reklamuje, jakie opcje obsługuje, jaka nazwa hosta (jeśli istnieje) jest reklamowana, czy są jakieś dziwactwa w zachowaniu oprogramowania, takie rzeczy.

      Usługi sieciowe są najmniej przydatne do tego, o wiele bardziej przydatne są takie rzeczy jak SMTP (trudne do mieszania i dopasowywania ze względu na obsługę sendmaila, przecieki wielu informacji), SNMP (kopalnia złota informacji), SSH (kto obsługuje wiele demonów SSH? ) i HTTPS (jeśli masz szczęście i korzystają z tego samego oprogramowania, możesz sprawdzić różnice w konfiguracji SSL, dobra identyczna, ale nietypowa konfiguracja jest dobrym wskaźnikiem). NTP był kiedyś dobrym testem, ale obecnie jest mocno blokowany ze względu na intensywne stosowanie jako wzmacniacza DoS, SNTP nie jest wystarczająco dokładny dla pistoletu do palenia w ten sam sposób.

    2. Odcisk palca warstwy 3. Główny sposób zdalnego pobierania odcisków palców systemu operacyjnego polega na dziwactwach związanych z implementacją protokołu TCP / IP. Dokładne szczegóły są o wiele za długie, aby je tu omówić, ale w zasadzie metadane pakietu przeciekają wiele informacji, podobnie jak to, jak zamknięty lub filtrowany port reaguje na połączenie i jak zachowuje się host podczas odbierania zniekształconych pakietów. Chociaż te cechy nie są pewną informacją o tym, co jest uruchomione, są w zasadzie gwarantowane, że są zbliżone do tego samego dla każdego adresu IP związanego z określonym stosem TCP / IP. Znacząco różne systemy powinny mieć znacząco różne cechy.

    Zastrzeżenie 2: Dwa urządzenia z dokładnie tym samym systemem operacyjnym i łatami dostawcy prawdopodobnie będą wyglądać tak samo. W systemie Windows dwie kopie tej samej wersji systemu Windows z automatycznymi aktualizacjami będą dość nie do odróżnienia, chyba że mają uruchomione różne zapory ogniowe. W Linuksie różnice prawdopodobnie będą dotyczyły głównie tego, jaka wersja jądra i opcje są dostarczane. Ten test może dać tylko duże prawdopodobieństwo, że dwa adresy IP nie są w tym samym systemie operacyjnym.

  3. Powtórz ataki. Z listą portów otwartych na obu adresach IP, wykonaj identyczne działania na każdym adresie IP i poszukaj rozbieżności w zachowaniu. Rzeczy takie jak przekroczenia limitu czasu, komunikaty o błędach, limity ponownych prób itp. Niektóre programy są trudniejsze lub rzadziej skonfigurowane tak, aby różniły się w zależności od adresu IP. Jeśli wiesz, że jeden adres IP akceptuje pocztę dla określonej domeny, sprawdź, czy drugi adres IP również akceptuje pocztę dla tej domeny.

    Zastrzeżenie 3: Dane te są niższej jakości niż część usługi polegająca na pobieraniu odcisków palców w teście 2, ponieważ łatwiej jest inaczej skonfigurować te ustawienia dla różnych adresów IP i możliwe są różne rodzaje interakcji za sceną. Duża szansa na fałszywe wyniki sprawia, że ​​wyniki są mało pewne.

Tak jak powiedziałem, podstawową teorią jest to, że różne hosty prawdopodobnie będą miały różne konfiguracje i że wycieka informacja.

Nie uwzględnia to faktu, że o wiele trudniej jest stwierdzić, czy ta sama witryna działająca na dwóch adresach IP jest tym samym serwerem, czy dwoma serwerami skonfigurowanymi do nadmiarowości. Nie uwzględnia również administratorów systemów, którzy zarządzają konfiguracją, aby utrzymać bardzo podobny system. Nie uwzględnia również hostów, które obsługują DNAT dla wielu usług działających na różnych hostach do jednego adresu IP.

Technologia wirtualizacji rzuca dziwne klucze w prace. Systemy konteneryzowane, takie jak Docker, dzielą wystarczającą ilość stosu, aby osobne kontenery wyglądały bardziej podobnie, niż mogłyby być. Wirtualne karty sieciowe połączone z nicią fizyczną powinny być niemożliwe do odróżnienia od fizycznie oddzielnego sprzętu, ale tak nie jest, ponieważ wynika to głównie z faktu, że most jest oprogramowaniem, a zatem pakiety muszą przechodzić przez stos IP hosta.

Istnieje wiele sposobów na pomylenie osób próbujących przetestować powtarzalność. Najlepsze, na co możesz liczyć, to wzór o niskim marginesie wątpliwości.

Morał tego, dla osób korzystających z serwerów, jest taki, że powinieneś skonfigurować swoje serwery, aby ujawniały jak najmniej informacji:

  1. Zmniejsz informacje o banerach, o ile to możliwe. Im mniej atak wie o twojej konfiguracji, tym lepiej dla Ciebie.

  2. Oprogramowanie może akceptować tylko połączenia w adresie IP, na którym ma służyć i tylko w razie potrzeby. Jeśli nie musi być dostępny z zewnątrz, należy powiązać go tylko z hostem lokalnym. Zmniejszenie powierzchni ataku jest zawsze dobre.

  3. Jeśli absolutnie musisz mieć coś do słuchania i chcesz uniknąć korelacji między dwoma adresami IP, spróbuj ograniczyć nietypowe opcje do minimum. Chcesz, żeby się wtopiło.

  4. Uruchom zaporę z domyślnymi zasadami usuwania. Myślę, że może być wartość w konfiguracji IDS, która reaguje na atakujących losowymi odpowiedziami, hałas utrudniłby atakującemu zaufanie do jego wyników, ale powoduje, że wyróżniasz się.

  5. Moduły losowego opóźnienia są bezwartościowe, aby zapobiegać atakom czasowym. Nie naprawdę. Wybierz losową liczbę, a następnie rzuć kostką kilka razy, zapisując wynik plus liczbę, którą wybrałeś na początku. To, co kończysz, to zakres ze stałym przesunięciem. Jeśli liczba losowa zostanie podstawiona, zakres się zmienia. Jeśli zakres zostanie zmieniony, przesunięcie pozostanie takie samo i wystarczy powtórzyć proces próbkowania, aby uzyskać nową linię bazową.

  6. Normalizatory stosu IP istnieją, ale były zaniedbaną częścią badań nad bezpieczeństwem podczas ostatniego przeglądania. Prawdopodobnie byłby to dobry rynek dla inwestorów.

Kaithar
źródło