• Home
  • Server 2003/2008
  • Windows 7
  • Office
  • Linux
  • Sieci komputerowe
  • Wujek dobra rada
  • Mapa strony
  • Napisz
  • czcionka Zmniejsz czcionkę Zmniejsz czcionkę Powiększ czcionkę Powiększ czcionkę
  • Wydrukuj
  • Email
  • Dodaj komentarz
Co w sieci siedzi. Skanowanie sieci - aktywne hosty.
pikolo pikolo

Co w sieci siedzi. Skanowanie sieci - aktywne hosty.

22 grudzień 2015
Dział: Sieci komputerowe
Czytany 63900 razy
Oceń ten artykuł
  • 1
  • 2
  • 3
  • 4
  • 5
(16 głosów)

W tym wpisie zajmiemy się skanowaniem sieci a dokładniej mówiąc wykrywaniem aktywnych hostów lecz z pominięciem wykrywania otwartych portów gdyż tą kwestią zajmiemy się w osobnym artykule. Na uzasadnienie celu wykonania takiego zabiegu przychodzą mi dwa argumenty, pierwszy – przezorny administrator co jakiś czas wykonuje skan zarządzanej przez siebie sieci celem odkrycia nieautoryzowanych hostów i drugi – skan sieci jest jednym z pierwszych etapów przeprowadzania ataku czyli mówiąc w żargonie wojskowym rozpoznaniem terenu bądź rekonesansem. Jak by na to nie patrzeć to od Ciebie Czytelniku zależy jak tą wiedzę wykorzystasz.

W przypadku skanowania sieci celem wykrycia aktywnych hostów możemy posłużyć się dwiema metodami:

metoda pasywna, która polega na nasłuchiwaniu pakietów, które do hosta dochodzą i na ich analizie. Program po odebraniu pakietów i ich analizie dostarcza informację o wykrytych hostach. W kierunku badanej sieci z hosta zbierającego informację nie zostają wysłane żadne pakiety.

metoda aktywna, która polega na wysłaniu w kierunku sieci specjalnie przygotowanych ramek bądź pakietów i analizie otrzymywanych odpowiedzi.

 

Metody skanowania możemy również podzielić ze względu na warstwę sieci w której są wykonywane i tu możemy wyróżnić skanowanie w warstwie 2, warstwie 3 oraz warstwie 4.

 

Do skanowania w warstwie 2 czyli warstwie łącza danych wykorzystywany jest protokół ARP. Protokół ten odpowiedzialny jest za powiązanie adresu IP hosta z jego adresem fizycznym czyli MAC. W czasie enkapsulacji pakietów z warstw wyższych do niższych, warstwa sieciowa (warstw 3) przekazuje swoje dane do warstwy łącza danych (warstwa 2). Warstwa druga aby wysłać ramkę musi powiązać adres IP z adresem MAC. W przypadku w którym host w swoim buforze nie znajduje odpowiedniego dopasowania musi takowe dopasowanie utworzyć sam. W tym celu zostaje wykorzystany protokół ARP. Host wysyła więc rozgłoszenie (broadcast) z pytaniem - Kto używa dany adres IP? Rozgłoszenie trafia do wszystkich urządzeń znajdujących się w danej podsieci. Każdy z hostów po otrzymaniu zapytania sprawdza czy to on nie jest poszukiwanym hostem. Urządzenie, które ma przypisany, poszukiwany adres IP wysyła odpowiedź do hosta zadającego pytanie. Reszta urządzeń zapytanie ignoruje. W odpowiedzi ARP zostaje zawarty adres MAC. Host pytający aktualizuje swój bufor ARP o odpowiedni wpis wiążący adres IP z adresem MAC. Mechanizm określania docelowego adresu MAC przedstawia rysunek poniżej.

Host1 poszukuję komputera o adresie IP 10.0.0.16. Wysyła rozgłoszenie ARP.

 image1

Odpowiada mu Host4 przesyłając w odpowiedzi ARP swój adres fizyczny.

 image2

 

Aby bardziej zrozumieć działanie mechanizmu ARP przyjrzyjmy się jeszcze przez chwilę wymianie pakietów. Host o adresie IP 192.168.0.10 poszukuje adresu fizycznego hosta 192.168.0.33.

Zostaje wysłany pakiet żądania ARP.

 image3

 

Pakiet zostaje wysłany na adres rozgłoszeniowy FF:FF:FF:FF:FF:FF (punkt 1) . Nadawca w nagłówku Ethernet zostaje ustawiony na hosta wysyłającego żądanie (punkt 2).

 

W nagłówku ARP zostaje umieszczona informacja o adresie IP i adresie MAC hosta wysyłającego żądanie (punkt 3). Natomiast w polu nagłówka poszukiwanego adresu zostaje umieszczony zerowy adres MAC (punkt 4). Zostaje również ustawione pole poszukiwanego adresu IP (punkt 5).

 

Tak spreparowane żądanie zostaje przekazane wszystkim hostom w sieci. Host o adresie 192.168.0.33 otrzymując żądanie ARP Request odsyła komunikat ARP Replay.

 image4

 

Komunikat ten jest przekazywany jako unicast czyli trafia bezpośrednio do hosta wysyłającego żądanie ARP, jest odpowiedzią na to żądanie. W komunikacie tym zostaje umieszczony poszukiwany adres MAC oraz adres IP hosta wysyłającego odpowiedź (punkt 1). Dodatkowo zostają zawarte informacje o adresie IP i adresie MAC wysyłającego żądanie (punkt 2).

 

Adres 192.168.0.33 został powiązany z adresem MAC 08:00:27:F4:7F:D2

 

Tak więc cały ten mechanizm można wykorzystać w celu odnalezienia działających hostów. Wielką zaletą skanowania w warstwie drugiej jest bardzo duża skuteczność tej metody oraz wiarygodność, wadą zaś charakter użytego protokołu. Skanowanie w warstwie drugiej nadaje się tylko do skanowania hostów znajdujących się w tej samej podsieci co system skanujący. Dzieje się tak ponieważ protokół swym działaniem obejmuje tylko daną podsieć a brodcast rozsyłany jest w obrębie całej domeny rozgłoszeniowej. Protokół ARP jest nieroutowalny co oznacza, że nie może być wykorzystywany w skanowaniu hostów zdalnych (znajdujących się w innej przestrzeni adresowej IP).

 

W warstwie 3 (warstwa sieciowa) do wykrywania hostów wykorzystywany jest protokół ICMP a tak naprawdę komunikat żądania echa (ang. Echo Request) i odpowiedzi na echo (ang. Echo Reply). Oba żądania są wykorzystywane w jakże dobrze znanym poleceniu ping. Komunikat Echo Request można porównać do sytuacji w której host wysyłający żądanie zadaje pytanie - Hej czy jest ktoś po drugiej stronie? Zaś Echo Reply jest odpowiedzią na to pytanie - Tak jestem.

 

Przykładowy pakiet Echo Request pokazano na rysunku poniżej. Komputer o adresie IP 192.168.0.10 wysyła żądanie do komputera 212.77.98.9 (punkt 1). W pakiecie zostaje zawarta informacja o typie pakietu ICMP - typ 8 i kod 0 - pakiet Echo Eequest (punkt 2). Dodatkowo w komunikacie zostaje zawarta informacja o sumie kontrolnej (punkt 3) oraz numerze sekwencyjnym (numer ten jest używany do powiązania zapytania z odpowiedzią - punkt 4). Dodatkowo pakiet zawiera losowo wygenerowane dane (punkt 5). Dane te tak naprawdę mają swój specyficzny charakter. Oznacza to, że analiza ich może dostarczyć informacji np. o systemie operacyjnym, który je wygenerował. Fakt ten jest wykorzystywany gdy atakujący chce poznać więcej szczegółów o celu. Oczywiście analizujemy dane uzyskane w odpowiedzi czyli dane zawarte w pakiecie Echo Reply.

 image5

 

Host po otrzymaniu pakietu żądania Echo Reply odpowiada pakietem Echo Request. Poniżej zamieszczono przechwycony pakiet Echo Reply, który jest odpowiedzią na pakiet Echo Request przedstawiony powyżej (punkt 1). Typ pakietu zostaje ustawiony na 0 natomiast kod również na 0, co oznacza, że mamy do czynienia z pakietem Echo Reply. Jak można przekonać się po analizie numerów sekwencyjnych (punkt 3) prezentowane pakiety są ze sobą powiązane.

 image6

 

Zaletą tego typu skanowania w porównaniu z wcześniejszą metodą przy współudziale ARP jest możliwość wykrywania hostów zdalnych. Oznacza to, że pakiety ICMP są routowalne. Na plus należy również zaliczyć dużą szybkość skanowania lecz czas potrzebny do skanu jest dłuższy niż w przypadku użycia protokołu ARP. Wadą metody jest nie do końca skuteczność i miarodajność uzyskanych wyników gdyż protokół ICMP bardzo często jest blokowany przez zapory sieciowe.

 

Zdarza się, że filtracji podlega tylko ruch związany wyłącznie z pakietami ICMP Echo Request/Replay. A pakiet Echo Request nie jest jedynym pakietem z zbioru ICMP na który zdalny host po odpytaniu udziela odpowiedzi. Dlatego też można spróbować wysyłać pakiety typu Timestamp Request (ICMP - typ 13) bądź Address Mask Request (ICMP - typ 17). Oba pakiety są zapytaniami na które system zdalny może udzielić odpowiedzi. W pierwszym przypadku mamy do czynienia z komunikatem żądania synchronizacji czasu, zaś w drugim z zapytaniem o maskę sieci przez urządzenie, które nie zna własnej maski podsieci. Istnieje jeszcze jeden pakiet zapytania a mianowicie żądanie informacji o adresie - Information Request (ICMP - typ 15.) Komunikat tego typu jest wysyłany przez urządzenie, które nie posiada przypisanego własnego adresu IP. Pakiety ICMP typ 15 oraz 17 zostały wyparte przez protokół DHCP zaś komunikat ICMP typ 13 przez protokół NTP. Zapytania ICMP typu Information Reques oraz Address Mask Request nie są już używane, ale nic nie stoi na przeszkodzie by spróbować je wykorzystać w procesie skanowania sieci w celu odkrycia aktywnych hostów. Jeśli zaś chodzi o pakiet typu Timestamp Request to jest on w powszechnym użyciu i nawet tak nowy system jak Windows 10 na wysłane zapytanie tego typu odpowie nam.

Poniżej przedstawiono przechwycony pakiet Timestamp Request.

 image7

 

1 - Pakiet wysłany z hosta o adresie IP 192.168.0.30 do hosta 192.168.0.10,

2 - Pakiet typu Timestamp Request (ICMP typ 13),

3 - Identyfikator oraz numer sekwencji,

4 - Stempel czasowy.

Po wysłaniu pakietu Timestamp Request, host odpowiada komunikatem Timestamp Reply.

 image8

 

1 - Pakiet wysłany z hosta o adresie IP 192.168.0.10 do hosta 192.168.0.30 (odpowiedź),

2 - Pakiet typu Timestamp Reply (ICMP typ 14),

3 - Identyfikator oraz numer sekwencji,

4 - Stempel czasowy (wartość jest liczbą milisekund, które upłynęły od północy czasu UTC).

 

Pakiety Address Mask Request oraz Address Mask Replay zostały przedstawione poniżej. Na pakiet tego typu odpowiedzą hosty pracujące pod kontrolą systemu: Solaris 2.6, Solaris 2.7, Solaris 2.8, Windows 95, Windows 98, Windows 98 SE, Windows NT 4 WRKS SP 3.

 image9

 

1 - Pakiet wysłany z hosta o adresie IP 192.168.0.30 do hosta 192.168.0.166,

2 - Pakiet typu Address Mask Request (ICMP typ 17),

3 - Maska adresu.

 

Odpowiedzią na wysłany pakiet Address Mask Request jest komunikat Address Mask Reply

 image10

 

1 - Pakiet wysłany z hosta o adresie IP 192.168.0.166 do hosta 192.168.0.30,

2 - Pakiet typu Address Mask Request (ICMP typ 18),

3 - Maska adresu. Host odpowiada wartością: 255.255.255.0

 

Ostatnim typem pakietu ICMP jest żądanie informacji o adresie - Information Request

 image11

 

1 - Pakiet wysłany z hosta o adresie IP 192.168.0.22 do hosta 192.168.0.10,

2 - Pakiet typu Timestamp Request (ICMP typ 15),

3 - Identyfikator oraz numer sekwencji,

 

Pakietu Information Reply niestety nie udało mi się uzyskać gdyż liczba systemów odpowiadająca na tego typu żądanie jest bardzo mała np. niektóre routery firmy Cisco: Cisco 3600 pracujące pod kontrolą IOS 11.2 czy Cisco 7200 z systemem IOS 11.3

 

Warto wiedzieć, że protokół ICMP wraz z protokołem IP jest również używany w celu wyznaczenia drogi pakietu (na pewno znane Ci polecenie tracert). Prześledźmy drogę pakietu z sieci lokalnej od hosta o adresie 192.168.0.242 do strony wp_pl

 image12

 

Jak widać po powyższym zrzucie aby pakiet mógł dotrzeć do celu musi przejść przez 12 routerów.

 

Pierwszym etapem jest wysłanie żądania Echo Request (punkt 2) na adres 212.77.98.8 (punkt 1). Przy czym pole życia pakietu TTL (ang. Time to Live) zostaje ustawione na 1 (punkt 3). Oznacza to, że pakiet dotrze tylko do pierwszego routera a następnie zostanie odrzucony.

 image13

 

Pierwsza odpowiedź został wysłana przez router domowy (brama) o adresie 192.168.0.1 (punkt 1) Jest to odpowiedź informująca o braku możliwości dotarcia pakietu do miejsca przeznaczenia - ICMP typ: 11 kod: 0 (ang. Time-to-live exceeded). Odpowiedź tego typu jest skutkiem przekroczenia wartości pola TTL. Pakiet tego typu jest często nazywany pakietem podwójnym ponieważ w pakiecie tym zawarta jest kopia pakietu Echo Request (punkt 3).

 image14

 

Host po odebraniu takiego pakietu w kierunku celu (punkt 1) wysyła kolejny pakiet ICMP Echo Request (punkt 2) lecz tym razem pole TTL zostaje ustawione na 2 (pakiet opuści pierwszy router i dotrze do drugiego, punkt 3).

 image15

 

Drugim w kolejności jest router o adresie 89.76.176.1 (punkt 1) Router ten jak poprzednik odeśle pakiet z informacją o niedostępności celu na skutek przekroczenia wartości pola TTL (punkt 2).

 image16

 

Cały proces trwa (wraz z zwiększaniem pola TTL) aż do osiągnięcia celu. W ten sposób poznajemy drogę pakietu.

Ostatni typ skanowanie jakie możemy przeprowadzić jest to skanowanie z wykorzystaniem protokołów warstwy 4 (warstwa transportowa) czyli protokołu TCP lub UDP. W tym wpisie tak dokładnie protokołów tych nie omówię gdyż opis ich i sposób działania przedstawię w kolejnym wpisie traktującym o skanowaniu portów. Więcej informacji o protokołach tych znajdziesz w moim wcześniejszym wpisie - O co w tych sieciach komputerowych chodzi? Garść podstawowych informacji - choć przedstawiony opis, tematu do końca nie wyczerpuje. W tym artykule przedstawię tylko sposoby wykorzystania ich do ocenienia dostępności hosta w sieci.

 

Protokoły te są podstawą działania Internetu a usługi udostępniane przez hosty bazują na ich wykorzystaniu. Dla nas oznacz to, że pomimo stosowania zabezpieczeń w postaci zapór sieciowych, odpowiednio dobrane żądanie (czytaj wysłane na odpowiedni port) da nam odpowiedź informującą nas o dostępności danego hosta. Skanowanie TCP polega na wysłaniu w kierunku skanowanego hosta spreparowanych pakietów TCP. Pakiety te mogą mieć ustawione różne flagi czego konsekwencją jest różna reakcja hosta otrzymującego tak przygotowany pakiet. Ze względu, na to że zależy nam na określeniu dostępności hosta a nie usług przez niego oferowanych jakakolwiek uzyskana odpowiedź jest dla nas wystarczającym potwierdzeniem działania hosta.

 

Zaletą wykorzystania protokołu TCP i UDP jest tak jak w przypadku protokołu ICMP możliwość wykrywania hostów zdalnych. Metoda z wykorzystaniem TCP zapewnia nam większą wiarygodność uzyskanych wyników gdyż stosowane filtrowanie jest mniej powszechne a w przypadku całkowitego filtrowania wszystkich usług wykorzystujących TCP można wykorzystać protokół UDP.

 

Po tym wstępie teoretycznym przechodzimy do przykładów praktycznych i do omówienia programów. Prezentowane programy działają pod kontrolą systemu Linux oraz Windows (niektóre są dostępne w obu wersjach systemu). Przy opisywaniu narzędzi zaznaczę z jakim systemem operacyjnym mamy do czynienia, choć nie ma się co łudzić (ta uwaga dotyczy sympatyków systemu Windows) większość narzędzi pracuje pod kontrolą systemu Linux (programy zawierają więcej opcji, są bardziej zróżnicowane oraz uzyskiwane wyniki są bardziej szczegółowe).

 

Rozpoczynamy od skanowanie w warstwie drugiej by po omówieniu narzędzi przejść do warstw wyższych.

 

Jednym z najbardziej znanych programów pozwalających nam na przeskanowanie sieci jest Nmap. Nmap jest wieloplatformowym narzędziem co oznacza, że uruchomimy go zarówno pod Windowsem jak i Linuxem. Do programu tego nie raz będziemy wracać. Narzędzie pozwala nam na wykonanie skanu z wykorzystaniem wielu metod a jedną z nich jest metoda z wykorzystaniem protokołu ARP (prezentowane zrzuty będą pochodzić z systemu Linux a mówiąc bardziej szczegółowo z dystrybucji Linux Kali gdyż w systemie tym wszystkie prezentowane narzędzia są nam dane z dobrodziejstwem inwentarza - czytaj dostępne bez dodatkowej instalacji). I na koniec jeszcze mała uwaga w przypadku Nmap-a wielkość liter w definiowanych parametrach ma znaczenie, tak więc Czytelniku zwróć na to uwagę.

 

Aby przeprowadzić skanowanie ARP należy wykorzystać polecenie, którego ogólna składnia przedstawia się następująco: nmap -sn <adrs_hosta/adres_sieci> (użyta flaga -sn zakazuje wykonania skanowania portów).

 

Tak więc aby przeskanować całą podsieć (pamiętaj, że trzeba znajdować się w obrębie skanowanej sieci, protokół ARP nie jest routowalny) możemy posłużyć się poleceniem: nmap -sn 10.0.0.0-255 (określamy zakres skanowanych portów) bądź w notacji CIDR: nmap -sn 10.0.0.0/24 (skanujemy całą podsieć).

 image17

 

Aby uzyskać informację o dostępności hosta o danym adresie IP można posłużyć się poleceniem: nmap -sn 192.168.0.1

 image18

 

Dodatkowo, gdy zakres skanowanych adresów ma charakter selektywny możemy skorzystać z opcji, która wywoła skanowane adresy z zewnętrznego pliku: nmap -iL listahostow.txt -sn

 image19

 

Z narzędziem Nmap dostępna jest graficzna nakładka Zenmap, która umożliwi nam obsługę programu z poziomu interfejsu graficznego z pominięciem linii poleceń. Po otwarciu programu mamy zdefiniowane kilka profilów, które możemy wybrać z listy. Oczywiście nakładka umożliwia nam wprowadzanie poleceń, tak jak to odbywa się w wierszu poleceń. Poniżej przykład skanowanie sieci 10.0.0.0.24 z wykorzystaniem protokołu ARP (nazwa profilu Ping skan jest dosyć myląca, gdyż sugeruje wykorzystanie protokołu ICMP działającego w warstwie 3).

 image20

 

Netdiscover jest jednym z niewielu programów (dostępny w systemie Linux), który pozwoli nam na przeprowadzenie skanowania w sposób aktywny ale również całkowicie pasywny. Program powstał z myślą o zastosowaniu go w sieciach bezprzewodowych gdzie świetnie spełnia swoją rolę ale nic nie stoi na przeszkodzie by używać go również w tradycyjnych sieciach kablowych. Po uruchomieniu programu zostaje przeprowadzony skan poprzez wysłanie pakietów żądań ARP na wszystkie możliwe adresy IP w zdefiniowanej sieci.

 image21

 

Po wywołaniu tylko samej nazwy programu, narzędzie rozpoczyna skanowanie wszystkich podsieci prywatnych celem odnalezienia hostów.

 image22

 

Wynikiem działania programu jest tabela, która w miarę czasu działania narzędzia będzie uzupełniana o kolejne wpisy. Każdy z wpisów reprezentuje aktywnego hosta. W wierszu tabeli znajdziemy informację o:

 

1 – adres IP aktywnego hosta,

2 – adres MAC hosta,

3 – liczbę otrzymanych odpowiedzi,

4 – rozmiar odpowiedzi,

5 – nazwa producenta karty sieciowej, nazwa jest ustalana w oparciu o adres MAC.

 

image23

 

Aby zdefiniować konkretną sieć należy użyć przełącznika -r po którym należy podać adres skanowanej sieci. Adres sieci podajemy w notacji CIDR

 

Aby zdefiniować adresy, które mają zostać przeskanowane można je umieścić w pliku tekstowym i za pomocą przełącznika -l <nazwa_pliku> uruchomić proces odkrywania hostów.

 

W przypadku w którym w naszym systemie mamy zdefiniowane wiele interfejsów sieciowych za pomocą przełącznika -i możemy określić wybór interfejsu przeprowadzającego skanowanie.

 

Za pomocą przełącznika -c możemy ustalić odstęp czasu pomiędzy wysyłaniem kolejnych żądań ARP. Poniżej na przykładzie odstęp ten został zdefiniowany na 7 sekund (kolumna Time), wartość czasu podajemy w milisekundach.

 image24

 

Wszystkie przeprowadzane do tej pory skanowania odbywały się w sposób aktywny poprzez wysyłanie specjalnie spreparowanych ramek ARP. Jak zaznaczyłem wyżej Netdiscover ma zaimplementowaną funkcję wykrywania hostów w sposób całkowicie pasywny. Aby uruchomić pasywny tryb działania programu należy w poleceniu użyć flagi: -p Po uruchomieniu programu narzędzie rozpoczyna monitorowanie otrzymywanych pakietów żądań i odpowiedzi ARP i na ich podstawie buduje listę dostępnych i aktywnych hostów.

 image25

 

Kolejnym programem pozwalającym nam na użycie mechanizmu ARP w celu wykrycia hostów a dostępnym również z poziomu systemu Linux jest ARPing.

 

Działanie programu sprowadza się do wydania polecenia: arping <adres_hosta> Po wywołaniu komendy program próbuje wykryć czy host o podanym adresie istnieje (bardzo podobnie jak polecenie ping). Wysyłanie żądań ARP następuje do czasu przerwania działania programu. Aby ograniczyć liczbę żądań należy użyć przełącznika -c. Poniżej na zrzucie wykorzystanie narzędzia celem sprawdzenia istnienia hostów o adresach IP 192.168.0.1 oraz 192.168.0.233

 image26

 

Narzędzie to ma jeszcze kilka innych zastosowań ale funkcje te nie dotyczą tematu wpisu. Jeśli jesteś zainteresowany zajrzyj do pomocy programu.

 

Bardzo podobnym narzędziem jest arp-scan Program pozwala nam również na wysłanie żądań ARP przy czym jego funkcjonalność nie ogranicza się do skanowania pojedynczego hosta jak to było w przypadku arping ale można go użyć do przeskanowania całej podsieci. Arp-scan jest dostępny w systemie Linux.

 image27

 

W arsenale programów dostępnych pod Linuxa znajdziemy narzędzie scapy. Jest to program, który pozwala nam na definicję pakietów. Za jego pomocą możemy zdefiniować (zbudować) pakiet, który następnie można wysłać w kierunku danego hosta. Narzędzie pozwala nam na dowolną definicję informacji w wysyłanym pakiecie. Oznacza to, że możemy w sposób całkowicie niestandardowy wpływać na dane zawarte w wysyłanych pakietach co otwiera przed nami pole do badań zachowania systemów zdalnych po otrzymaniu ruchu sieciowego nie pasującego do przyjętych wzorców. Program daje nieograniczone opcje intruzowi, który próbuje przełamać zabezpieczenia naszej sieci gdyż w bardzo skuteczny sposób może wpływać na działanie urządzeń sieciowych. Aż prosi się o jakiś przykład tak więc może taki: intruz przygotowuje pakiet DHCP, który symuluje pojawienie się nowego urządzenia w sieci. Serwer DHCP urządzeniu przydziela adres IP zmniejszając tym samym pulę dostępnych do przypisania adresów IP. Intruz wysyła kolejne pakiety DHCP tak długo aż pula serwer zostaje wyczerpana. Efektem ataku jest zakłócenie pracy serwera, który poprzez wyczerpanie puli adresów IP nie może pełnić swojej roli. Serwer DHCP wraca do pracy po wygaśnięciu dzierżawy przyznanych adresów IP. Oczywiście dostępnych scenariuszy może być bardzo wiele możemy wpływać na działanie protokołów routingu czy protokołów odpowiedzialnych za prawidłową pracę przełączników (np. protokół STP). Program wspiera wiele protokołów a ich pełną listę uzyskamy po wydaniu polecenia: ls()

 image28

 

Aby uruchomić program wywołujemy terminal i wydajemy polecenie: scapy Narzędzie posiada swoją własną listę poleceń tak więc by zbudować ramkę ARP musimy posłużyć się odpowiednimi poleceniami. Naszym celem jest zbudowanie komunikatu ARP tak by za jego pomocą móc skanować sieć w poszukiwaniu aktywnych hostów. Aby wyświetlić domyślne ustawienia protokołu ARP wydajemy polecenie: ARP().display() (funkcja display() jest odpowiedzialna za wyświetlenie wartości paramentów danego protokołu) Jak widać poniżej parametr hwscr (adres MAC interfejsu lokalnego - punkt 1) oraz parametr psrc (lokalny adres IP - punkt 2) zostają zdefiniowane automatycznie. Kod operacji (parametr op) również domyślnie został ustawiony na wysłanie ramki arp request.

 image29

 

Kolejnym krokiem jest utworzenie nowej zmiennej scanarp do której przypisujemy funkcję ARP (punkt 1) a po niej następuje definicja docelowego adresu IP 192.168.0.10 - za pomocą zdefiniowanej zmiennej scanarp następuje modyfikacja parametru pdst funkcji ARP (punkt 3). W przypadku błędnie wpisanej nazwy zmiennej zostaniemy o tym fakcie powiadomieni (użyta nazwa skanarp zamiast scanarp - punkt 2). Po określeniu adresu IP efekt przeprowadzonych operacji możemy sprawdzić za pomocą funkcji display (punkt 4).

 image30

 

Po sprawdzeniu wszystkich ustawień pakiet jest gotowy o wysłania. Wysłanie przygotowanego pakietu odbywa się za pomocą funkcji sr1. Aby wysłać pakiet należy wydać polecenie: sr1(scanarp) Jak widać poniżej komunikat ARP został wysłany, adresat pakietu udziela odpowiedzi.

 image31

 

Wysłanie pakietu ARP możemy zrealizować za pomocą polecenia: sr1(ARP(pdst="192.168.0.10")) Polecenie nakazuje wysłać pakiet (funkcja sr1) ARP (oczywiście ARP moglibyśmy zastąpić wcześniej zdefiniowaną zmienną scanarp) w którym docelowy adres IP zostaje ustawiony na 192.168.0.10

 image32

 

Tak zdefiniowana komenda nie uchroni nas przed jednym z problemów a mianowicie działanie programu trwa tak długo aż zostanie udzielona odpowiedź. Oznacza to, że w przypadku wysłania pakietu do nie istniejącego hosta tracimy możliwość komunikacji z programem, musimy go zakończyć ręcznie. Poniżej przykład wysłania zbudowanego komunikatu ARP na adres IP 192.168.0.11, host nie istnieje program cały czas czeka na odpowiedź.

 image33

 

Aby uniknąć tego typu zdarzenia należy do komendy dodać zmienną timeout, która nakaże wyłączenie skanu po zdefiniowanym czasie. Bądź mówiąc prościej za pomocą parametru timeout określamy maksymalny czas oczekiwania na odpowiedź. Zmodyfikujmy więc naszą komendę o nowy parametr: sr1(scanarp, timeout=1) i spróbujmy jeszcze raz wysłać żądanie ARP do hosta 192.168.0.11 Jak można zaobserwować poniżej host nie odpowiada ale przerwanie funkcji sr1 następuje po 1 sekundzie.

 image34

 

Oczywiście polecenie: sr1(ARP(pdst="192.168.0.10"), timeout=1) również jest prawidłowe.

 image35

 

Kolejnym już narzędziem, które możemy użyć do przeprowadzenia skanowania sieci w warstwie 2 jest framework Metasploit. Program jako całość jest potężnym narzędziem służącym do przeprowadzania ataków sieciowych ale również bardzo często jest wykorzystywany jako narzędzie do wykonywania testów penetracyjnych. Program jest zbiorem wszelkiej maści modułów, który każdy pełni inną rolą. Wśród dostępnych modułów możemy znaleźć te które są odpowiedzialne za skanowanie sieci. Jednym z dostępnych narzędzi jest moduł skanujący sieć z wykorzystaniem protokołu ARP. Metasploit jest dostępny z poziomu systemu Linux.

 

Aby uruchomić narzędzie wydajemy komendę: msfconsole

 

Po wydaniu polecenia podobnie jak to miało miejsce w przypadku narzędzia scapy uzyskujemy dostęp do odrębnej linii poleceń przynależnej narzędziu Metasploit.

 

Aby uruchomić skaner ARP wydajemy polecenie: use auxiliary/scanner/discovery/arp_sweep (nazwy możemy dopełniać klawiszem TAB) - punkt 1. Każdy moduł przed uruchomieniem należy skonfigurować. Aby przejrzeć dostępne ustawienia należy posłużyć się poleceniem: show options (punkt 2). Po wydaniu komendy uzyskamy listę parametrów, które można skonfigurować opcjonalnie (kolumna Required - no) oraz te, które musimy określić obowiązkowo (kolumna Required - yes). Po sprawdzeniu poniższego zrzutu, stwierdzamy, że parametrem obowiązkowym jest RHOSTS (punkt 3) określający cel skanowania. Dwa pozostałe obowiązkowe parametry THREADS oraz TIMEOUT zostały skonfigurowanie z domyślnymi ustawieniami.

 image36

 

Aby ustawić parametr RHOSTS używamy polecenia set. Nasze polecenie przyjmie postać: set RHOSTS 192.168.0.0/24 Po wydaniu polecenia efekt wprowadzonych zmian możemy sprawdzić za pomocą znanego nam polecenia: show options Parametr RHOSTS został ustawiony.

 image37

 

Określiliśmy wszystkie wymagane parametry. Aby uruchomić moduł wydajemy polecenie: run Po wydaniu polecenia, skaner rozpoczyna działanie a efekty działania modułu możemy obserwować na bieżąco.

 image38

 

W systemie Windows z dostępnych, darmowych narzędzi możemy użyć programu Arp scannet oraz IPtoMAC. Pierwszy z nich pozwala nam na określenie zakresu adresów, które zostaną przeskanowane (punkt 1) dodatkowo mamy możliwość określenie szybkości skanu. Podczas pracy programu będziemy na bieżąco informowani o postępie zadania (punkt 2).

 image39

 

IPtoMAC jest prostym programem dzięki któremu poznamy adres MAC zdalnego hosta. Obsługa programu sprowadza się do zdefiniowania adresu IP hosta, którego adres MAC chcemy poznać gdy w wyniku działania programu uda się nam uzyskać adres MAC oznacza to, że komputer jest dostępny w sieci.

 image40

 

Ostatnim narzędziem, które chciałbym zaprezentować jest program nping, który dostępny jest po zainstalowaniu już omawianego Nmapa. Aby przeprowadzić skanowanie należy wydać polecenie: nping arp <adres_sieci/adres_hosta> Poniżej przykład skanowania sieci 192.168.0.0/24 jak widać dwa hosty 192.168.0.1 oraz 192.168.0.10 odpowiedziały na żądanie ARP.

 image41

 

W definicji polecenia można użyć pojedynczego adresu IP, aby określić ilość żądań ARP użyj przełącznika -c aby zdefiniować interfejs należy posłużyć się flagą -e.

 image42

 

Po omówieniu narzędzi działających w warstwie 2 przechodzimy do warstwy 3

 

Zasadnicza różnica pomiędzy programami już omówionymi a tymi, które przedstawię poniżej jest sposób ich działania. Wszystkie programy warstwy 2 wymagają od nas abyśmy znajdowali się w sieci lokalnej zaś programy operujące w warstwie 3 poszerzają zakres wykonywanego skanu gdyż użyty protokół ICMP stanowiący podstawę działania aplikacji należy do protokołów routowalnych.

 

Podstawowym i najprostszym narzędziem dostępnym zarówno w systemie Windows jak i Linux jest ping. Myślę, że narzędzie jest na tyle powszechne i znane, że nie wymaga osobnego omówienia. W zamian zajmiemy się programami, które pozwolą nam na skorzystaniu z funkcji niedostępnych narzędziu ping.

 

Pierwszym narzędziem, które pozwala nam na wykonanie skanu sieci z wykorzystaniem protokołu ICMP jest fping (system Linux) Wysłanie pakietu odbywa się po zdefiniowaniu docelowego adresu IP. Po wysłaniu pakietu gdy host jest aktywny otrzymujemy komunikat: is alive w przypadku braku odpowiedzi: ICMP host unreachable

 image43

 

Aby zdefiniować zakres skanowanych adresów możemy posłużyć się metodą w której określamy pierwszy i ostatni adres IP bądź wykorzystujemy notację CIDR (użyta flaga: -g). Na przykładzie poniżej zostały dodatkowo określone dwa parametry: -c - ilość wysyłanych komunikatów ICMP oraz -i - interwał (czas określamy w milisekundach). Po wykonaniu skanu otrzymujemy dodatkowo podsumowanie całego zadania.

 image44

 

Gdy chcemy wykonać skanowanie określonych hostów ich adresy IP możemy umieścić w pliku tekstowym i za pomocą parametru -f określić ścieżkę do pliku. Dodatkowy parametr -s wyświetla bardziej szczegółową statystykę skanu.

 image45

 

Skanowanie sieci możemy również wykonać narzędziem Nmap. Aby wykonać operację wykrywania hostów należy wydać polecenie: nmap -sP <adres_IP/zakres_IP> Polecenie te jest równoznaczne z nmap -sn <adres_IP/zakres_IP> Po wydaniu polecenia jest wykonywane skanowanie sieci. Możliwe jest również zdefiniowanie zakresu adresów w notacji CIDR. Uważny Czytelnik na pewno zauważy, że takie samo polecenie zostało użyte przy skanowaniu z wykorzystaniem protokołu ARP. Tak więc nasuwa się pytanie - W której warstwie skanowanie następuje? A odpowiedź na tak postawione pytanie brzmi - Wszystko zależy od zdefiniowanych adresów IP. Nmap jest na tyle przewidującym narzędziem, że potrafi adoptować się do rodzaju skanu w zależności od tego w jakiej sieci się znajduje. W przypadku wykrycia skanowania w sieci lokalnej (adres interfejsu należy do sieci skanowanej) Nmap użyje skanowania z wykorzystaniem protokołu ARP zaś gdy skanowanie dotyczy sieci zdalnej (zdefiniowane w poleceniu adresy nie należą do puli adresów przynależnych interfejsowi przez który odbywa się skan, leżą poza siecią lokalną) zostanie wybrany protokół ICMP.

 

Poniżej przykład skanowania adresów (bez skanowania portów) z zakresu 10.0.0.1 - 10.0.0.6

 image46

 

Gdy zależy nam na zapisaniu wyników skanu w linii poleceń należy wykorzystać operator przekierowania. Dzięki użytemu przekierowaniu uzyskane wyniki można zapisać w pliku zewnętrznym (metodę tą można wykorzystać z każdym z omawianych narzędzi).

 image47

 

Po instalacji narzędzia Nmap dostępna będzie również aplikacja nping. Aby wykonać operację odkrywania hostów w warstwie 3 należy posłużyć się poleceniem: nping --icmp <adres_IP/zakres_IP> Po wywołaniu komendy narzędzie przeprowadza proces wykrywania aktywnych hostów z zdefiniowanego zakresu.

 image48

 

Po wywołaniu polecenia otrzymujemy sporo informacji aby szybko odszukać adresy hostów, które udzieliły odpowiedzi można wyniki skanowania przekierować do narzędzia grep: nping --icmp <adres_IP/zakres_IP> | grep "RCVD"

 image49

 

Dodatkowo za pomocą narzędzia nping jak i również Nmap można wysłać żądania ICMP typu Timestamp Request oraz Address Mask Request. Żądanie Information Request uda nam się wysłać za pomocą programu nping. Poniżej na zrzucie przedstawiono wysłanie żądania Timestamp Request do hosta o adresie IP 192.168.0.1 (adres bramy, domowy router) - polecenie: nping --icmp-type time 192.168.0.1 -c 1

 image50

 

Do skanowania w warstwie trzeciej możemy użyć opisywanego już wcześniej narzędzia scapy.

 

Aby móc wysłać pakiet ICMP w pierwszej kolejności musimy go utworzyć. Tworzony pakiet będzie składał się z informacji potrzebnych do zbudowania żądania ICMP oraz z informacji protokołu IP. Po zdefiniowaniu i scaleniu ze sobą wszystkich danych nastąpi wysłanie pakietu.

 

Rozpoczynamy od protokołu IP. Dokonujemy utworzenia zmiennej icmp, którą przypisujemy do obiektu IP - polecenie: icmp=IP() a następnie wyświetlamy atrybuty utworzonej zmiennej icmp (są to parametry protokołu IP) za pomocą komendy: icmp.display(). Przeglądając parametry stwierdzamy, że zdefiniowany adres IP celu jest ustawiony na adres pętli zwrotnej (parametr: dst=127.0.0.1).

 image51

 

Parametr dst musimy zmodyfikować tj. należy do niego przypisać adres hosta, który ma zostać przeskanowany. W naszym scenariuszu wysyłamy żądanie ICMP Echo do hosta o adresie IP 192.168.0.10. Aby zmienić docelowy adres wydajemy polecenie: icmp.dst="192.168.0.10" Po zmianie docelowego adresu za pomocą funkcji display() sprawdzamy efekt dokonanych zmian (polecenie: icmp.display()) Źródłowy adres IP został ustawiony na adres IP interfejsu lokalnego wykonującego skanowanie (src=192.l168.0.42).

image52

 

Komunikat IP jest gotowy. Kolejnym etapem jest utworzenie żądania ICMP Echo. Zaczynamy od utworzenia kolejnej zmiennej echo do której przypisujemy obiekt ICMP - komenda: echo=ICMP() Po dokonaniu przypisania sprawdzamy parametry obiektu echo. Jak widać poniżej parametry obiektu ICMP domyślnie są ustawione na wysłanie komunikatu echo request (parametr type).

 image53

 

Aby zbudować komunikaty ICMP innego typu należy użyć opcji przedstawionych poniżej. Jak widać zostały zbudowane w kolejności pakiety ICMP typu: Timestamp Request, Information Request oraz Address Mask Request.

 image54

 

Po ustaleniu zmiennych protokołu IP oraz ICMP oba utworzone komunikaty należy połączyć w jeden pakiet. Została utworzona nowa zmienna o nazwie ping do której zostały przypisane utworzone komunikaty - polecenie: ping=(icmp/echo) Za pomocą funkcji display() sprawdzamy parametry pakietu (komenda: ping.display()). Pakiet został poprawnie utworzony.

 image55

 

Po dokonaniu wszystkich sprawdzeń nie pozostało nam nic innego aby tak utworzony pakiet wysłać. Wysłanie pakietu dokonujemy za pomocą funkcji sr1 - polecenie: sr1(ping, timeout=1) Nie zapominamy o dołączeniu funkcji timeout gdyż w przypadku braku odpowiedzi funkcja sr1 nie zostanie zakończona. Wysłanie komunikatu ICMP Echo Request możemy wykonać również za pomocą polecenia przez bezpośrednie określanie parametrów obiektu IP oraz ICMP: sr1(IP(dst="192.168.0.10")/ICMP(),timeout=1)

 image56

 

Kolejnym już narzędziem, które może być wykorzystane w warstwie trzeciej do wykrywania aktywnych hostów jest narzędzie hping3. Program posiada szereg opcji, które możemy definiować a dodatkowo program ten może być użyty również w warstwie czwartej. Koncentrujemy się w tej chwili nad wykorzystaniem protokołu ICMP tak więc gdy przejdziemy do omawiania skanowania w warstwie czwartej do narzędzia powrócimy. Narzędzie dostępne jest w systemie Linux.

 

Aby wykorzystać narzędzie do odkrywania hostów z wykorzystaniem komunikatów Echo Request należy wydać polecenie: hping3 --icmp <adres_IP> bądź hping3 -1 <adres_IP>. Na rysunku opcjonalny parametr -c <wartość> odpowiada za zdefiniowanie ilości wysyłanych komunikatów ICMP (domyślnie narzędzie wysyła pakiety w sposób ciągły aż do wymuszenia zamknięcia narzędzia).

 image57

 

Narzędzie niestety nie umożliwia nam określenia zakresu skanowanych adresów IP ani podania adresu sieci. Aby przeskanować wiele hostów musimy wydać szereg poleceń, które będą od siebie oddzielone przecinkiem. Poniżej na zrzucie przedstawiono polecenie nakazujące wykonanie skanowania hostów 192.168.0.1 oraz 192.168.0.10

 image58

 

Aby zakończyć temat warstw 3 i na koniec przedstawię jeszcze jedno narzędzia lecz tym razem dostępne z poziomu systemu Windows. Oprócz już przedstawionego Nmapa bardzo popularny jest również program SuperScan. Program oprócz wykorzystania protokołu ICMP umożliwia nam również wykonanie operacji skanowania portów (ale o tym już w kolejnym wpisie). Narzędzie posiada swój własny interfejs graficzny.

 

Po uruchomieniu programu na zakładce Scan określamy zakres skanowanych adresów. W przykładzie poniżej został zdefiniowany zakres od 192.168.0.1 do 192.168.10

 image59

 

Na zakładce Host and Service Discovery możemy określić dodatkowe opcje wykonywanego skanowania. My na tym etapie zajmujemy się warstwą 3 tak więc najważniejsze parametry pracy programu określamy w sekcji Host discovery. Z opcji na które mamy wpływ to: typ użytego żądania ICMP oraz czas wysyłania żądania.

 image60

 

Aby rozpocząć skanowanie należy powrócić do zakładki Scan i wybrać ikonę trójkąta (skojarzyć z play). Wyniki skanu zostaną przedstawione w oknie powyżej.

 

Tak więc kończymy omawianie programów niezbędnych do przeprowadzenia skanowania sieci w warstwie 3 i przechodzimy do ostatniej warstwy a mianowicie warstwy transportowej w której niepodzielnie rządzą dwa protokoły: TCP (ang. Transmission Control Protocol) i UDP (ang. User Datagram Protocol).

 

Warstwę czwartą rozpoczynamy od Nmap-a i od użycia protokołu TCP.

 

Aby uzyskać odpowiedź od hosta należy wysłać np. pakiet z ustawioną flagą ACK (czemu taki pakiet o tym za chwilę). W definicji polecenia oczywiście musimy określić docelowy adres IP oraz numer portu. Port musi myć w stanie open tak by można było uzyskać odpowiedź a co za tym idzie potwierdzenie dostępności hosta. O ile z adresem IP nie ma problemu to w przypadku definicji portu już tak - Po skąd mamy wiedzieć, który port jest otwarty a który nie? Wiele systemów i programów ma domyślnie ustawione korzystanie z góry określonych portów a te najczęściej spotykane to:

DNS – 53 (TCP, UDP)

FTP – 20, przesyłanie danych (TCP)

FTP – 21, przesyłanie poleceń (TCP)

HTTP – 80, (TCP)

HTTPS – 443 (HTTP na SSL) (TCP)

IMAP – 143 (TCP)

POP3 – 110 (TCP)

SMTP – 25 (TCP)

Tak więc z powodzeniem możemy spróbować wykorzystać numery portów zamieszczone na powyżej. Dodatkowo bardzo obszerną listę portów i korzystających z nich aplikacji znajdziesz tu: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml

 

W przykładzie poniżej do hosta o adresie IP 10.0.0.10 z adresu 192.168.0.10 został wysłany komunikat TCP z ustawioną flaga ACK (specjalnie zestawiłem połączenie pomiędzy różnymi sieciami gdyż jak już wspomniałem Nmap w pierwszej kolejności do wykrycia dostępności hosta użyłby protokołu ARP), host 10.0.0.10 udziela odpowiedzi (linia: Host is up). Aby wysłać pakiet TCP należy posłużyć się poleceniem: nmap <adres_IP> -PA<numer_portu> -sn (użyty port 25 - usługa SNMP).

 image61

 

W przechwyconym ruch sieciowym komunikacja pomiędzy hostami przebiega następująco:

Z adresu 192.168.0.10 w kierunku hosta 10.0.0.10 (punkt 1) zostaje wysłany pakiet z ustawioną flagą ACK (punkt 3). Adres docelowy portu to TCP 25 (punkt 2).

 image62

 

Host 10.0.0.10 odebrany pakiet uznaje jako niespodziewany, gdyż nie jest on zgodny z etapami przeprowadzania połączenia TCP (ang. three-way handshake) i jako odpowiedź (punkt 1) zostaje wysłany pakiet z ustawioną flagą RST - punkt 2 (dla nas jest to potwierdzenie, że host jest dostępny).

 image63

 

Aby wykorzystać protokół UDP (mniej popularny i mniej usług wykorzystuje jego działanie) należy posłużyć się poleceniem: nmap <adres_IP> -PU<numer_portu> -sn (użyty port 137 - usługa NETBIOS Name Service - mapowanie nazwa komputera via adres IP). Jak można stwierdzić po analizie poniższego zrzutu ten sam host 10.0.0.10 na wysłane zapytanie UDP odpowiada z powodzeniem.

 image64

 

W przechwyconym ruch sieciowym komunikacja pomiędzy hostami przebiega następująco:

Z adresu 192.168.0.10 w kierunku hosta 10.0.0.10 (punkt 1) zostaje wysłany pakiet z zapytaniem NBNS (punkt 3). Adres docelowy portu to UDP 137 (punkt 2).

 image65

 

Host 10.0.0.10 na odebrany pakiet wysyła odpowiedź (punkt 1) z nazwą komputera (punkt 2) - dla nas jest to potwierdzenie, że host jest dostępny.

 image66

 

Modyfikując numer portu i dobierając odpowiedni typ skanowania możemy sprawdzać dostępność hostów w sieci.

 

Aby przeprowadzić skanowanie w warstwie 4 z wykorzystaniem narzędzia nping należy posłużyć się poleceniem: nping --tcp -p <numer_portu> --flags ack <adres_IP> -c 1

 image67

 

Natomiast by użyć UDP - nping --udp -p <numer_portu> <adres_IP> -c 1

 

Przy omawianiu programów użytych w warstwie 3 obiecałem, że powrócę do narzędzia hping3. Tak więc obietnicę spełniam i poniżej krótki opis zastosowania narzędzia w warstwie 4.

 

Aby wykonać skan z wykorzystaniem protokołu UDP należy posłużyć się poleceniem: hping3 --udp <adres_IP> (zamiast --udp można uzyć flagi -2)Po wydaniu polecenia wykonuje skanowanie systemu a o efektach jego działania jesteśmy informowani na bieżąco. Skanowanie jest wykonywane aż do momentu jego przerwania po którym to uzyskujemy podsumowanie wykonanej operacji (skanowany host odpowiedział na 5 pakietów).

 image68

 

Aby określić liczbę wysłanych pakietów UDP należy posłużyć się przełącznikiem -c.

 

W przypadku wyboru skanowania TCP (domyślnie ustawione) polecenie zostało zdefiniowane następująco: hping3 -A -p 23 10.0.0.10 -c 1 W komendzie ustawiona opcja -A nakazuje wysłanie pakietu TCP z ustawioną flagą ACK na port 23 (usługa Telnet) pod adres IP 10.0.0.10. Nastąpić ma wysłanie tylko jednego pakietu.

 image69

 

Po wysłaniu pakietu uzyskujemy odpowiedź TCP z ustawioną flagą RST - host jest dostępny.

 

Przejdźmy zatem do dobrze znanego nam narzędzia scapy i wykorzystajmy go do zbudowania pakietu TCP, którego użyjemy do sprawdzenia dostępności hosta.

 

Rozpoczynamy od zbudowania komunikatu IP. W pierwszej kolejności została utworzona zmienna ip do której został przypisany obiekt IP(). Po sprawdzeniu parametrów komunikatu okazuje się że zmianie musi ulec parametr dst definiujący adres hosta docelowego.

 image70

 

Za pomocą komendy: ip.dst="10.0.0.10" zdefiniowano adres celu.

 image71

 

Po zbudowaniu komunikatu IP tworzymy przechodzimy do protokołu TCP. Do zmiennej tcpA został przypisany obiekt TCP() - polecenie: tcpA=TCP() Po sprawdzeniu parametrów domyślnych zmienimy dwa parametry a mianowicie parametr dport określający docelowy port (na port o numerze 25 - SNMP) oraz parametr flags ustawiając go na komunikat typu ACK.

 image72

 

Flagę ACK ustawiamy za pomocą polecenia: tcpA.flags="A" a port docelowy za pomocą komendy: tcpA.dport=25

 image73

 

Komunikaty potrzebne do zbudowania pakietu zostały określone, kolejnym krokiem jest ich scalenie. Scalenia dokonujemy za pomocą polecenia: pakiet=(ip/tcpA) Po utworzeniu pakietu kontrolnie sprawdzamy poprawność wykonanej konfiguracji. Wszystko się zgadza.

 image74

 

Aby wysłać pakiet wydajemy polecenie: sr1(pakiet,timeout=1)

 image75

 

Oczywiście pakiet możemy wysłać bezpośrednio bez definiowania zmiennych za pomocą polecenia: sr1(IP(dst="10.0.0.10")/TCP(flags="A",dport=25),timeout=1)

 image76

 

Udało uzyskać się nam odpowiedź od hosta. Host jest dostępny.

 

Przejdźmy do protokołu UDP. Za pomocą narzędzia scapy został zbudowany pakiet UDP, który zostanie wysłany na port 53 (usługa DNS) hosta o adresie IP 10.0.0.10.

 

Po wysłaniu komunikatu nie dostajemy żadnej odpowiedzi - polecenie: pakiet.display()

 image77

 

Wróćmy zatem do narzędzia hping3 i za jego pomocą sprawdźmy dostępność hosta. Jak widać poniżej również hping3 na wysłane zapytanie nie uzyskał żadnej odpowiedzi.

 image78

 

To nie pozostaje nam nic innego jak jeszcze swoje przypuszczenia o niedostępności hosta sprawdzić za pomocą narzędzia Nmap. Po wydaniu polecenia: nmap -PU53 10.0.0.10 -sn i tu niespodzianka program stwierdza, że host jest dostępny. Również analiza ruch sieciowego potwierdza wysłanie zapytania DNS i odpowiedzi na nie.

 image79

 

Rodzi się pytanie - Dlaczego scapy oraz hping3 po wysłaniu zapytania na port usługi DNS odpowiedzi nie uzyskały a Nmap - TAK? I na tym przykładzie została pokazana wyższość narzędzia Nmap. Nmap w swojej bazie posiada zapisane wzorce pakietów, które są wysyłane w zależności od zdefiniowanych opcji. Otwarte porty UDP nasłuchujące na danym hoście czekają na odebranie ściśle zdefiniowanych pakietów i tylko na pakiet zawierający sprecyzowane dane odpowiedzą.

 

Ale Czytelnik, który uważnie śledzi wpis po chwili stwierdzi, że przecież narzędzie hping3 na zapytania UDP uzyskało odpowiedź (sprawdź kilka wersów powyżej). Więc kolejne pytanie - Skąd i jak uzyskano odpowiedź. Paradoksalnie w przypadku protokołu UDP często zdarza się, że lepszą opcją jest wysłanie pakietu na port zamknięty gdyż o zamkniętym porcie zostaniemy poinformowani.

 

Poniżej za pomocą narzędzia scapy pakiet UDP został wysłany do hosta 10.0.0.10 na port 4444. Po wydaniu polecenia: pakiet.display() uzyskujemy informacje zawarte w odpowiedzi. (polecenie nakazujące wysłanie pakietu UDP zostało przypisane do zmiennej pakiet).

 image80

 

Po analizie danych zawartych w odpowiedzi stwierdzamy, że odpowiedź została wysłana z hosta 10.0.0.10 (punkt 1) a zawiera informację o niedostępności portu (punkt 2).

 

Przechwycone pakiety potwierdzają tylko dane uzyskane dzięki narzędziu scapy. Pakiet odpowiedzi pochodzi od hosta 10.0.0.10 (punkt 1) i zawiera informację o niedostępności portu 4444 (punkt 2). Otrzymany pakiet jest pakietempodwójnym ponieważ w pakiecie tym zawarta jest kopia pakietu UDP (punkt 3).

 image81

 

Tak więc aby zakończyć temat skanowania w warstwie 4 i całego wpisu pozostaje nam omówienie narzędzia SuperScan.

 

Rozpoczynamy na zakładce Scan od zdefiniowania celu skanowania. Oczywiście możemy wykonać skan pojedynczego hosta bądź zdefiniować zakres adresów IP. Decydujemy się na pojedynczy adres IP 10.0.0.6

 image82

 

Na zakładce Host and Service Discovery definiujemy użyty protokół oraz określamy docelowy port bądź porty. Został określony port UDP 53.

 image83

 

Po zdefiniowaniu wszystkich opcji powracamy do zakładki Scan i wykonujemy skanowanie. Lista aktywnych hostów pojawi nam się w podsumowaniu operacji. Host 10.0.0.6 jest dostępny.

 image84

 

I zanim zakończymy jeszcze mała uwaga - wszystkie przedstawione narzędzia z systemu Linux dzięki temu, że pracują w linii poleceń można rozszerzyć ich działanie poprzez napisanie odpowiednich skryptów. Pamiętasz Czytelniku, że narzędzie hping3 nie umożliwia przeskanowanie sieci poprzez podanie adresu sieci, każdy z adresów IP trzeba wywoływać osobno. Te nieudogodnienie możemy znieść właśnie poprzez wywołanie skryptu, który zdefiniowane przez nas polecenie wywoła cyklicznie.

 

Poniżej kod prostego skryptu, który pozwoli nam przeskanowanie całej sieci z wykorzystaniem narzędzia hping3.

#!/bin/bash

if [ "$1" == "" ]; then

echo "Polecenie: ./hping3scan.sh"

echo "Przykład: ./hping3scan.sh 10.0.0.1"

else

index=$(echo $1 | cut -d '.' -f 1-3)

for adres in $(seq 1 254); do

hping3 --icmp $index.$adres -c 1

done

fi

Po zapisaniu skryptu w pliku: hping3scan.sh należy nadać mu uprawnienia do wykonania. Uprawnienie to nadamy za pomocą polecenia: chmod 744 hping3scan.sh

 image85

 

Po wydaniu polecenia możemy skrypt uruchomić. Uruchomienie odbywa się za pomocą komendy: ./hping3scan.sh <adres_sieci> Jak widać poniżej skrypt przystępuje do działania i rozpoczyna się skanowanie adresów.

 image86

 

Skrypt oczywiście możemy modyfikować i nic nie stoi na przeszkodzie by użyć go z innymi przedstawionymi narzędziami.

 

Wykrywanie hostów myślę, że zostało omówione. Jak widać w arsenale mamy wiele narzędzi które pozwalają nam wykonać skan sieci pod kątem dostępności hostów. Oczywiście niektóre z przedstawionych programów posiadają jeszcze inną funkcjonalność ale tym zajmiemy się w kolejnym wpisie, który będzie traktował o skanowaniu portów.

 


BIBLIOGRAFIA

 

http://www.blackhat.com/presentations/bh-europe-00/OfirArkin/OfirArkin2.pdf

https://github.com/andrewjkerr/security-cheatsheets/blob/master/nping

Ostatnio zmieniany sobota, 05 marzec 2016 23:52
Etykiety
  • Linux
  • Windows
  • arping
  • ping
  • ARP
  • ICMP
  • TCP
  • UDP
  • Nmap
  • netdiscover
  • arpscan
  • scapy
  • Metasploit
  • fping
  • nping
  • hping3
  • SuperScan
  • warstwa 2
  • warstwa 3
  • warstwa 4
  • warstwa łącza danych
  • warstwa sieciowa
  • warstwa transportowa

Artykuły powiązane

  • Jak utworzyć RAMdysk w systemie Windows?
  • Wyszukiwanie plików w systemie Windows
  • Co w sieci siedzi. Protokół DNS.
  • Windows Server 2012. Poradnik administratora. We dwoje raźniej.
  • Konwersja maszyny fizycznej na wirtualną (odsłona druga).
Więcej w tej kategorii: « Co w sieci siedzi. Warstwa 2 - konfiguracja sieci VLAN. Protokół VTP. Co w sieci siedzi. Agregacja interfejsów przełącznika. »

Dodaj komentarz



Odśwież

Wyślij
Skasuj
JComments
Powrót na górę

Wujek dobra rada

Szybkie pytania i szybkie odpowiedzi czyli garść porad do wykorzystania w codziennej pracy z komputerem.

  • Jak utworzyć RAMdysk w systemie Windows? Jak utworzyć RAMdysk w systemie Windows?

    RAMdysk jest wydzieloną częścią pamięci, która w systemie operacyjnym jest widziana jak kolejny dysk/partycja. Praca z tak wydzielona przestrzenią pamięci odbywa się jak z normalnym dyskiem. Dostępne są wszystkie operacje związane z plikami.  

    Napisano poniedziałek, 04 grudzień 2017 21:44
  • Bezpieczny pendrive Bezpieczny pendrive

    Jak zabezpieczyć nasze dane w sytuacji utraty pendiva/karty pamięci.

    Napisano czwartek, 29 czerwiec 2017 12:00
  • Wyszukiwanie plików w systemie Windows Wyszukiwanie plików w systemie Windows

    Krótki opis jak wyszukać pliki przy wykorzystaniu Eksploratora plików.

    Napisano sobota, 17 czerwiec 2017 20:31
  • Diagnostyka pamięci RAM Diagnostyka pamięci RAM

    Jak zdiagnozować uszkodzenie modułu pamięci RAM

    Napisano wtorek, 16 maj 2017 12:39
  • Konwersja maszyny fizycznej na wirtualną (odsłona druga). Konwersja maszyny fizycznej na wirtualną (odsłona druga).

    W poprzednim wpisie (Konwersja maszyny fizycznej na wirtualną) opisałem konwersję maszyny fizycznej do wirtualnej, efektem Naszych działań było przeniesienie systemu działającego na fizycznym hoście do środowiska opartego o oprogramowanie Vmware. Zaś w tym wpisie wykonamy podobne działanie lecz efektem będzie uzyskanie maszyny działającej w VirtualBox.

    Napisano czwartek, 04 maj 2017 11:53
Czytaj więcej...

Najczęściej komentowane

  • Jak wyznaczyć broadcast, adres sieci i liczbę hostów? (+19)
  • Instalacja Windows XP/Vista/7 z pendriv'a. (+12)
  • Dostęp zdalny oraz prawa użytkownika w urządzeniach CISCO (+12)
  • Co w sieci siedzi. Protokół DNS. (+10)
  • Windows i Linux w jednej stali sieci. (+8)

Najnowsze komentarze

  • Dzak 07.09.2020 17:32
    Witam. Nie rozumiem dlaczego zamiast podziału na podsieci nie możemy po prostu ustanowić 7 lokalnych ...
     
  • fgm 03.09.2020 06:47
    jak nie pamietam daty rozszezenia i dokladnej nazwy tylko podobna to jak wyszukac taki plik lub wiele ...
     
  • Andrzej 13.08.2020 07:26
    Usunięcie x z /etc/passwd uważam za niebezpieczne rozwiązanie. Ponieważ po takiej operacji i ustawieniu ...
     
  • Andrzej 13.08.2020 07:15
    To zdanie Utworzenie użytkownika w ten sposób powoduje wyłączenie konta poprzez wstawienie znaku x w ...
     
  • goodbye world 01.07.2020 10:20
    Będą jakieś nowe wpisy?

Ostatnio komentowane

  • Słów kilka o adresacji sieci. (3)
  • Wyszukiwanie plików w systemie Windows (1)
  • Dogadać się z Linuksem. Zarządzanie kontem użytkownika. (3)
  • Yubico czyli jak chronić dostęp do naszych kont (6)
  • Atak na warstwę 2 modelu ISO/OSI - preludium (4)

Popularne tagi

80211 Active Directory arkusz kalkulacyjny CISCO cmd DHCP domena EXCEL filtrowanie formuła FTP funkcja GPO grupy jednostka organizacyjna JEŻELI kontroler LibreOffice Linux MSOffice panel sterowania PowerShell przełącznik rejestr Router Serwer SUMA switch TCP trunk Ubuntu UDP usługi VirtualBox VLAN warstwa 2 warstwa 3 warstwa sieciowa warstwa łącza danych wifi Windows wirtualizacja WORD zakres ŚREDNIA

UWAGA! Ten serwis używa cookies

Brak zmiany ustawienia przeglądarki oznacza zgodę na to.

Zrozumiałem

Created by: clivio.pl

Copyright © Created by: 2022 All rights reserved. Custom Design by Youjoomla.com
Home