Pierwszą i największą trudnością jest fakt, że proces przechwytywania ogranicza się do jednego kanału w danej chwili czyli chcąc przechwytywać dane pochodzące z sieci pracującej np. na kanale 1 musimy tak skonfigurować kartę WiFi by pracowała ona na tym kanale a równoczesny przechwyt pakietów innej sieci, która operuje np. na kanale 6 jest utrudniony.
Przechwytywanie pakietów danych pochodzących z różnych kanałów jest możliwy dzięki:
a) można zastosować oprogramowanie (np. Kismet), które ma możliwość automatycznej zmiany kanału. Cała procedura sprowadza się do tak szybkiego przeskakiwania poprzez dostępne kanały żeby przechwycić jak największą ilość pakietów. Wszak sposób ten gwarantuje przechwycenie większości pakietów ale nie daje nam 100% pewności zapisania całej komunikacji.
b) gwarancję przechwycenia pakietów z dwóch odrębnych sieci możemy uzyskać tylko dzięki zastosowaniu dwóch kart sieciowych (bądź więcej) i ich odrębnej konfiguracji. Karty takie działają równocześnie a każda z nich jest odpowiedzialna za przechwytywanie pakietów pojawiających się na danym kanale.
Wszystkie zaprezentowane w tym artykule czynności i przykłady zostały wykonane w systemie Linux Kali, który jest następcą sławnego już BackTrack-a. Oba systemy zawierają szereg narzędzi, które pozwolą nam na bardzo dokładną analizę sieci komputerowej. A co najważniejsze wszystko jest dostępne i wpełni działa już po instalacji systemu. Narzędzia te bardzo często wykorzystywane są podczas testów penetracyjnych czy audytów systemów komputerowych.
Mógłbyś zapytać czytelniku – A czemu nie Windows? Odpowiedź jest bardzo prosta narzędzia z których będziemy korzystać są darmowe i zostały napisane dla systemu Linux. Dodatkowo dochodzi kwestia doboru odpowiedniej karty sieciowej, która może pracować w trybie RFMON. Posiadanie takiej karty nie daje nam gwarancji wykorzystania jej w systemie Windows ponieważ nie pozwalają na to sterowniki. Większość sterowników po prostu nie pozwala na przestawienie karty WiFi w ten tryb działania. Osoby, które się uprą i stwierdzą, że jednak pozostaną przy systemie Windows można pocieszyć, iż sprawa nie jest tak do końca beznadziejna ponieważ istnieją urządzenia, które jednak umożliwią nam rejestrację pakietów sieci standardu 802.11 pod tym systemem. Jednym z takich urządzeń jest AirPcap firmy Riverbed, lecz niestety produkt aktualnie jest wyceniony na 175$ (najuboższa wersja) co myślę, że dość skutecznie odstrasza potencjalnych nabywców gdy tak naprawdę swoją przygodę z sniffingiem WiFi możemy rozpocząć całkowicie za darmo. Choć niestety często się zdarza, że trzeba zakupić kompatybilną kartę bezprzewodową.
Na stronie http://www.aircrack-ng.org/doku.php?id=compatibility_drivers znajdziesz odpowiednie modele kart.
Aby rozpocząć naszą przygodę z przechwytywaniem pakietów sieci bezprzewodowej musimy zacząć od przygotowania i konfiguracji bezprzewodowej karty sieciowej.
Karta sieciowa została podłączona do komputera aby poznać nazwę interfejsu, która została przypisana do karty wydaj polecenie ifconfig.
Polecenie ifconfig uwidacznia nam wszystkie aktywne interfejsy sieciowe. Karcie, która zostanie użyta do przechwytywania pakietów został przypisany interfejs wlan1. Użytkownik, który już kiedykolwiek miał do czynienia z systemem Linux od razu stwierdzi, że zainstalowana karta WiFi nie jest jedyną dostępną kartą bezprzewodową. I oczywiście jest to prawda ponieważ numerowanie interfejsów w systemie Linux zaczyna się od 0. Jeśli kiedykolwiek będziesz miał problem z skojarzeniem nazwy interfejsu z odpowiednią kartą zawsze możesz posiłkować się adresem MAC. Zauważ, że polecenie ifconfig uwidacznia adres fizyczny interfejsu sieciowego, wystarczy tylko sprawdzić czy adres MAC uzyskany dzięki poleceniu ifconfig pokrywa się z adresem danego urządzenia a odczytanym najczęściej z naklejki umieszczonej na urządzeniu. W ten sposób uzyskasz pewność, że wydając kolejne polecenia będą się one odnosić do właściwej karty.
Aby uaktywnić konkretny interfejs w wierszu poleceń wydajemy polecenie ifconfig <nazwa_interfejsu> up natomiast by wyłączyć interfejs posłuż się komendą ifconfig <nazwa_interfejsu> down.
Aby poznać wszystkie dostępne interfejsy bezprzewodowe wydaj polecenie iwconfig.
Jak widać na powyższym zrzucie dostępne są dwa takie interfejsy.
By uzyskać informację o aktywnych sieciach bezprzewodowych wydaj polecenie iwlist <interfejs> scan
Naszym celem będzie przechwycenie pakietów sieci WiFiTest. Dzięki poleceniu iwlist uzyskaliśmy informację o:
- adres MAC punktu dostępowego,
- używany kanał,
- częstotliwość pracy urządzenia,
- jakość sygnału,
- szyfrowanie,
- nazwa rozgłaszanej sieci,
- obsługiwane prędkości.
Jak widać polecenie te dostarcza nam ogrom informacji, informacje te wykorzystamy w późniejszym czasie. Co ważne informacje te są dostępne niezależnie od uaktywnienia opcji ukrywania sieci. Tak więc włączenie ukrywania sieci jak widać poniżej (pusty ESSID) nie chroni nas przed odkryciem podstawowych parametrów pracy sieci i faktu istnienia danej sieci WiFi.
Jak widać punk dostępowy rozgłasza sieć otwartą. Celem uproszczenia i lepszego zrozumienia poszczególnych aspektów działania sieci WiFi przyjmijmy założenie, że sieć której pakiety będziemy przechwytywać pracuje w trybie open.
Jeśli sieć bezprzewodowa pracuje w trybie otwartym możemy spróbować podłączyć się do niej. Abyś czytelniku nie nabrał fałszywego przekonania to od razu zaznaczam, że nawiązanie połączenia z daną siecią nie jest niezbędne by przechwytywać ruch danej sieci WiFi. Podłączenie do sieci możemy wykonać jako dodatkowe ćwiczenie.
Sieć pracująca w trybie otwartym uwierzytelnia wszystkich użytkowników. By uzyskać połączenie z siecią bezprzewodową WiFiTest wydaj polecenie iwconfig <nazwa_interfejsu> essid <nazwa_sieci>.
Weryfikacja połączenia następuje po wydaniu komendy iwconfig <nazwa_użytego_interfejsu>
Połączenie zostało nawiązane prawidłowo o czym świadczy obecny adres MAC w polu Access Point (jak widać po powyższym rysunku adres MAC 00:1F:1F:0E:70:68 jest zgody z adresem ukazanym podczas identyfikacji dostępnych sieci – patrz polecenie iwlist).
W sieci bezprzewodowej przyjęto adresację 192.168.1.0/24 a więc skonfigurujmy klienta do pracy w tej sieci.
Przypisanie adresu IP do interfejsu dokonujemy dzięki poleceniu ifconfig <nazwa_użytego_interfejsu> <adres_IP> netmask <maska> up. By zweryfikować wprowadzone ustawienia wydaj polecenie ifconfig <nazwa_użytego_interfejsu>. Jak widać adres IP został przypisany do interfejsu.
Kolejnym krokiem jest dodanie adresu bramy domyślnej. Ścieżkę domyślną możemy sprawdzić za pomocą polecenia route –n. Jak widać w tabeli znajduje się tylko adres dostępnej sieci.
Adres bramy domyślnej dodajemy za pomocą polecenia route add default gw <adres_IP_bramy> <interfejs_przez_który_brama_jest_dostępna>. Ponowne wywołanie polecenia ukazuje wpis 0.0.0.0 192.168.1.1 który powoduje przekazanie, każdego nie pasującego pakietu do reszty wpisów na adres 192.168.1.1. w myśl zasady „ja nie wiem co mam z tym pakietem zrobić niech się brama martwi”.
Adresy DNS dodajemy/zmieniamy poprzez edycję pliku /etc/resolf.conf, serwer DNS dodajemy za pomocą wpisu nameserver <adres_serwera_DNS>
Po wykonaniu tych wszystkich czynności uzyskamy dostęp do Internetu.
Oczywiście wszystkie czynności możemy zautomatyzować poprzez skorzystanie z serwera DHCP. Pobranie wszystkich niezbędnych adresów dokonamy po wydaniu komendy dhclient <nazwa_interfejsu>.
A więc mamy dwa sposoby aby skonfigurować nasz interfejs do komunikacji z daną siecią bezprzewodową, pierwszy polega na wprowadzeniu wszystkich potrzebnych adresów samemu, drugi zaś na uzyskaniu danych z serwera DHCP. Na pewno czytelniku nasuwa Ci się pytanie – po co się męczyć w wydawanie kilku poleceń (adresacja statyczna) gdy za pomocą jednej komendy (adresacja dynamiczna – DHCP) możemy uzyskać poprawną łączność z daną siecią? Odpowiedź jest taka - gdy zależy Ci na zachowaniu jak największej anonimowości i zminimalizowaniu ryzyka wykrycia stosuj adresację statyczną gdy zaś na jak najszybszej konfiguracji hosta adresację dynamiczną. Dzieje się tak ponieważ czas dzierżawy adresu IP może wynosić kilkadziesiąt godzin. Przez ten czas w routerze zostaje zapisana informacja, że taki a taki host uzyskał połączenie z urządzeniem i w przypadku ponownego połączenia zostanie mu przydzielony ponownie adres IP, który był używany podczas ostatniej sesji. Rozpoznanie i identyfikacja hosta następuje po adresie MAC. A więc administrator, który przegląda te informacje jest w stanie wykryć, że nieautoryzowane urządzenie uzyskało połączenie z siecią. W przypadku adresacji statycznej ten problem nie występuje lecz nie oznacza to że fakt połączenia pozostanie ukryty. Nawiązanie połączenia może zostać odkryte np. poprzez analizę tzw. sysloga czyli rejestr operacji/czynności jakie zostały wykonane przez dane urządzenie. Choć oczywiście są dostępne inne techniki.
Do tej pory czytelniku uzyskałeś informację jak wykonać konfigurację hosta po podłączeniu się do sieci WiFi. Jak wspomniałem wcześniej to by przechwytywać ruch pochodzący od/do danej sieci nie jest wymagane nawiązanie połączenia z nią. Proces rejestracji pakietów wiąże się ze sposobem wykorzystania współdzielonego medium, jak i tym, że pakiety sieci WiFi „wprost nas otaczają”. Trzeba tylko posiądź wiedzę jak zrozumieć tę „mowę”.
Pierwszym i niezbędnym krokiem jest (zresztą jak już wspomniałem) posiadanie odpowiedniego sprzętu, który umożliwi nam rejestrację pakietów wysyłanych przez urządzenia tworzące fizyczną infrastrukturę sieci WLAN tj. router, AP czy inne karty WiFi. Niestety nie każda karta bezprzewodowa ma możliwość przeprowadzenia takiego nasłuchu. Ja z moich doświadczeń mogę polecić dwa rozwiązania jednym z nich jest karta ALFA AWUS036H (polecana zresztą na różnych stronach czy forach zajmujących się tą tematyką) oraz karta Intel PRO/Wireless 3945ABG. Używam dwóch kart ponieważ ALFA obsługuje sieci standardu 802.11b/g a Intel dodatkowo ma obsługę sieci WiFi działającej w standardzie 802.11a (czyli spectrum obejmujące zakres częstotliwości 5 GHz).
Rozpoczęcie przechwytywanie sprowadza się od przestawienia karty sieciowej w tryb umożliwiający nasłuch. W przypadku sieci WiFi mówimy o trybie monitoringu (RFMON mode, monitor mode).
Cała procedura przygotowania karty do przeprowadzenia nasłuchu sprowadza się do (patrz poniżej):
- wyłączenia interfejsu sieci bezprzewodowej – ifconfig <nazwa_interfejsu> down,
- przełączenie karty w tryb monitoringu – iwconfig <nazwa_interfejsu> mode monitor,
- ponownego włączenia interfejsu – ifconfig <nazwa_interfejsu> up,
- sprawdzenia trybu pracy karty WiFi – iwconfig <nazwa_interfejsu>.
Po powyższym zrzucie widać, że karta została przestawiona w tryb nasłuchiwania. By móc zacząć rejestrować pakiety trzeba jeszcze upewnić się, że karta pracuje na prawidłowym kanale. Nasza testowa sieć pracuje na kanale 1 (polecenie iwlist) by przełączyć kartę na odpowiedni kanał wydaj polecenie iwconfig <nazwa_interfejsu> channel <numer_kanału>. Wprowadzone ustawienie zweryfikujesz po wydaniu polecenia iwconfig. W sekcji frequency podana jest częstotliwość na której aktualnie pracuje karta WiFi - 2,412 GHz odpowiada kanałowi pierwszemu.
Od tej pory możliwe jest użycie narzędzi do rejestracji pakietów. Jednym z najlepszych narzędzi do przeprowadzenia sniffingu jest narzędzie Wireshark. Program dostępny jest na wszystkie platformy a ciągłe aktualizacje zapewniają stały rozwój aplikacji.
Po uruchomieni programu musimy określić interfejs, który zostanie użyty do rejestracji przechwytywanych danych. Po wskazaniu interfejsu (w naszym przypadku wlan1) wybieramy Start.
Następuje proces rejestracji. Kolejne przechwycone pakiety powinny pojawiać się w głównym oknie programu.
Program domyślnie ma włączone kilka kolumn, które pozwalają nam uzyskać informacje o typie przechwyconych pakietów lecz warto zdefiniować dodatkowe kolumny w których będą podawane informacje, które są charakterystyczne dla sieci bezprzewodowej.
-
- kolumna Frequency/Channel wyświetlającą częstotliwość oraz kanał, na którym został przechwycony pakiet.
- kolumna RSSI podająca siłę sygnału przechwyconego pakietu,
- kolumna TX Rate pokazująca szybkość transferu przechwyconego pakietu,
Aby dodać kolumny wykonaj następujące kroki:
- z górnego menu wybierz Edit a następnie Preferences,
- wskaż sekcję Columns i kliknij przycisk Add,
- rozwiń menu Field type,
- wskaż interesującą Cię opcję,
- czynność powtórz celem dodania reszty kolumn.
Po zatwierdzeniu nowe kolumny powinny pojawić się w oknie programu.
Innym sposobem prowadzenia nasłuchu jest skorzystanie z narzędzi zawartych w pakiecie Aircrack-ng. Pakiet ten przeznaczony jest do detekcji i analizy przechwyconych pakietów lecz także umożliwia łamanie zabezpieczeń WEP, WPA/WPA2.
Zacznijmy od wydania polecenia airmon-ng, polecenie uwidoczni nam listę interfejsów, które mogą być użyte celem przeprowadzenia sniffingu. Mówiąc inaczej listę interfejsów, które mogą być ustawione w tryb monitoringu.
W naszym przypadku mamy dwa takie interfejsy, które są reprezentowane przez różne karty fizyczne.
By zacząć proces należy w pierwszej kolejności włączyć nowy interfejs, który będzie pracować w trybie RFMON. Włączenie interfejsu następuje po wydaniu komendy airmon-ng start <nazwa_interfejsu>.Wykonanie polecenia w pierwszej kolejności powoduje wykrycie włączonych usług, które mogą wpłynąć na prawidłowe działanie narzędzia airmon-ng. Gdy z jakiś powodów będą występowały problemy zacznij od wyłączenia tych usług. Kolejnym krokiem jest utworzenie nowego interfejsu mon0, który zostaje powiązany z interfejsem fizycznym. W omawianym przykładzie interfejs mon0 zostaje powiązany z interfejsem wlan1.
Aktualne ustawienia interfejsu poznamy po wydaniu znanych nam już poleceń ifconfig oraz iwconfig. Jak widać poniżej interfejs mon0 pracuje w trybie monitora.
By zacząć nasłuchiwanie trzeba jeszcze zidentyfikować kanał pracy punktu dostępowego. Kanał pracy możemy zidentyfikować dzięki znanemu już poleceniu iwlist scan ale dzięki też poleceniu airodump-ng --bssid <adres_MAC_AP> <interfejs_RFMON> czyli w naszym przykładzie polecenie przyjmie postać airodump-ng --bssid 00:1F:1F:0E:70:68 mon0
Kanał pracy interfejsu mon0 zmieniamy tradycyjnie za pomocą polecenia iwconfig.
Po ustaleniu wszystkich parametrów możemy przejść do przechwytywania pakietów.
Pojawiająca się ilość rejestrowanych pakietów jest bardzo duża odszukanie konkretnych interesujących nas pakietów jest utrudnione a dodatkowo ze względu na współdzielenie (nachodzenie na siebie) tych samych częstotliwości przez sąsiednie kanały powoduje, że przechwycone dane zawierają ruch sieciowy należący do różnych sieci i klientów. Na szczęście narzędzie Wireshark zostało wyposażone w szereg filtrów, których zastosowanie powoduje odfiltrowanie (odrzucenie) niepotrzebnych danych, które mogą nam przeszkadzać w prowadzonej analizie.
Gdy będziemy przeprowadzać analizę przechwyconego ruchu najczęściej będziemy zajmowali się ruchem pochodzącym od jednego punktu dostępowego bądź jednego, konkretnego hosta. Każdy AP ma nadany unikalny identyfikator sieci tzw. BSSID (ang. Basic Service Set Identifier), który tak naprawdę najczęściej jest adresem MAC bezprzewodowego interfejsu urządzenia (choć nie zawsze) a adres ten znajdziemy w pakietach zarządzania oraz w pakietach zawierających dane. Tak więc aby wyświetlić dane pochodzące od jednego punktu dostępowego w polu Filter programu Wireshark umieść następujące wyrażenie - wlan.bssid eq <adres MAC> czyli w naszym przypadku umieszczamy wyrażenie wlan.bssid eq 00:1F:1F:0E:70:68. Wyrażenie eq (ang. equal – jest równe) można zastąpić symbolem == (podwójne równa się).
Filtrować możemy również po adresie IP. Jeżeli znamy adres IP punktu dostępowego możemy użyć następujących filtrów:
- ip.addr == <adres_IP_AP> czyli np. ip.addr == 192.168.1.1 – filtr pokaże pakiety dotyczące wymiany danych w których uczestniczy host o zadanym adresie IP.
- ip.src == <adres_IP_AP> czyli np. ip.src == 192.168.1.1 - filtr wyświetla pakiety z źródłowego adresu IP.
- ip.dst == <adres_IP_AP> czyli np. ip.dst == 192.168.1.1 - filtr wyświetla pakiety przeznaczone dla żądanego adresu IP.
Dzięki zastosowaniu porównań oraz operatorów logicznych możemy budować bardzo rozbudowane filtry, które będą nam pokazywać pakiety, które spełnią zadane kryterium
Dozwolone jest użycie następujących porównań:
Format angielski: |
Format w stylu C: |
Znaczenie: |
eq |
== |
jest równe (equal) |
ne |
!= |
nie jest równe (Not Equal) |
gt |
> |
większe od (Greater than) |
lt |
< |
mniejsze od (Less than) |
ge |
>= |
większe lub równe (Greater or equal) |
le |
<= |
mniejsze lub równe (Less or equal) |
i następujących wyrażeń:
Format angielski: |
Format w stylu C: |
Znaczenie: |
and |
&& |
AND (logiczne "I") – obydwa warunki muszą przyjąć wartość prawda |
or |
|| |
OR (logiczne "LUB") – jeden z warunków musi przyjąć wartość prawda |
xor |
^^ |
XOR (logiczne "XOR") - jeden i tylko jeden z warunków musi przyjąć wartość prawda |
not |
! |
NOT (logiczne zaprzeczenie) - żaden z warunków nie może przyjąć wartości prawda |
By zrozumieć użycie tych operatorów przedstawię poniżej kilka przykładów:
-
- ip.addr==192.168.1.1 && ip.addr==192.168.1.100 – filtr wyświetlający pakiety w których występują podane adresy IP.
-
- ip.addr>= 192.168.1.1 && ip.addr <= 192.168.1.100 - filtr wyświetlający pakiety w których adresy IP zawarte są pomiędzy podanymi (włącznie).
- ip.addr==192.168.1.1 && ip.addr!=192.168.1.255 - filtr wyświetlający pakiety zawierające adres IP 192.168.1.1 z wykluczeniem pakietów które zawierają adres 192.168.1.255.
- ip.addr==192.168.1.1 && http – filtr wyświetlający ruch httppowiązany z adresem 192.168.1.1
- pop || imap || smtp – ruch poczty elektronicznej
Oczywiście by zdefiniować kierunek ruchu filtry w których jest zawarte ip.addr możemy zmodyfikować dodając ip.src (źródłowy adres IP) bądź ip.dst (docelowy adres IP).
W sytuacji w której analizowany ruch pochodzi z różnych kanałów by wyświetlić ruch pochodzący z jednego kanału skorzystaj z filtra - radiotap.channel.freq == <częstotliwość>. Skorzystaj z częstotliwości środkowej kanału.
Numer |
Dolna |
Środkowa |
Górna |
1 |
2,401 |
2,412 |
2,423 |
2 |
2,406 |
2,417 |
2,428 |
3 |
2,411 |
2,422 |
2,433 |
4 |
2,416 |
2,427 |
2,438 |
5 |
2,421 |
2,432 |
2,443 |
6 |
2,426 |
2,437 |
2,448 |
7 |
2,431 |
2,442 |
2,453 |
8 |
2,436 |
2,447 |
2,458 |
9 |
2,441 |
2,452 |
2,463 |
10 |
2,446 |
2,457 |
2,468 |
11 |
2,451 |
2,462 |
2,473 |
12 |
2,456 |
2,467 |
2,478 |
13 |
2,461 |
2,472 |
2,483 |
14 |
2,473 |
2,484 |
2,495 |
Tak więc by wyświetlić ruch, który pochodzi z kanału numer 11 wydaj polecenie radiotap.channel.freq == 2462
Jeżeli znamy adresy MAC urządzeń sieciowych możemy użyć filtrów, które pokażą nam pakiety zawierające te informacje. Skorzystamy z filtrów:
-
- wlan.sa: source address
- wlan.ra: receiver address
- wlan.ta: transmitter address
- wlan.da: destination addres
Przypuśćmy, że mamy dwa hosty (dla uproszczenia pierwszy nazwijmy Cisco) o adresie MAC 00:25:9c:08:73:39 , oraz host drugi (Netgear) o adresie MAC 28:be:9b:34:50:72 i hosty te podłączone są do jednego AP o adresie MAC 00:1f:1f:0e:70:68. W naszym scenariuszu host Cisco wysyła informację do hosta Netgear. Wysłane pakiety w pierwszej kolejności trafiają do AP. Tak więc adresem wlan.sa będzie adres hosta Cisco - 00:25:9c:08:73:39 natomiast adresem wlan.da adres hosta Netgear - 28:be:9b:34:50:72. Adres wlan.ra to adres AP czyli 00:1f:1f:0e:70:68. Podczas przekazania pakietów od AP do hosta Netgear, adres wlan.sa oraz adres wlan.da nie ulegają zmianie natomiast pojawia się adres wlan.ta, który jest adresem MAC punktu dostępowego czyli 0 00:1f:1f:0e:70:68.
Bardzo często zachodzi potrzeba wyświetlenia konkretnego typu pakietu (bądź podtypu). Dlatego narzędzie Wireshark zostało również wyposażone w filtry, których zastosowanie gwarantuje nam wyświetlenie określonego rodzaju pakietów. Przykładowo by wyświetlić ramki typu probe request należy użyć filtru wlan.fc.type_subtype eq 0x04.
Poniżej w tabeli zawarte filtry w zależności od typu i pod typu wyświetlanego pakietu.
Rodzaj ramki |
Filtr |
Management frame |
wlan.fc.type eq 0 |
Control frame |
wlan.fc.type eq 1 |
Data frame |
wlan.fc.type eq 2 |
Management frame |
|
Association request |
wlan.fc.type_subtype eq 0x00 |
Association response |
wlan.fc.type_subtype eq 0x01 |
Reassociation request |
wlan.fc.type_subtype eq 0x02 |
Reassociation response |
wlan.fc.type_subtype eq 0x03 |
Probe request |
wlan.fc.type_subtype eq 0x04 |
Probe response |
wlan.fc.type_subtype eq 0x05 |
Beacon |
wlan.fc.type_subtype eq 0x08 |
ATIM |
wlan.fc.type_subtype eq 0x09 |
Disassociate |
wlan.fc.type_subtype eq 0x0A |
Authentication |
wlan.fc.type_subtype eq 0x0B |
Deauthentication |
wlan.fc.type_subtype eq 0x0C |
Action frame |
wlan.fc.type_subtype eq 0x0D |
Control frame |
|
Block ACK requests |
wlan.fc.type_subtype eq 0x18 |
Block ACK |
wlan.fc.type_subtype eq 0x19 |
Power save poll |
wlan.fc.type_subtype eq 0x1A |
Request to send |
wlan.fc.type_subtype eq 0x1B |
Clear to send |
wlan.fc.type_subtype eq 0x1C |
ACK |
wlan.fc.type_subtype eq 0x1D |
Contention free period end |
wlan.fc.type_subtype eq 0x1E |
Contention free period end + Contention free period ack |
wlan.fc.type_subtype eq 0x1F |
Data frame |
|
Data |
wlan.fc.type_subtype eq 0x20 |
Data + CF-ack |
wlan.fc.type_subtype eq 0x21 |
Data + CF-poll |
wlan.fc.type_subtype eq 0x22 |
Data +CF-ack +CF-poll |
wlan.fc.type_subtype eq 0x23 |
NULL data |
wlan.fc.type_subtype eq 0x24 |
CF-ack |
wlan.fc.type_subtype eq 0x25 |
CF-poll |
wlan.fc.type_subtype eq 0x26 |
CF-ack +CF-poll |
wlan.fc.type_subtype eq 0x27 |
QoS data |
wlan.fc.type_subtype eq 0x28 |
QoS data + CF-ack |
wlan.fc.type_subtype eq 0x29 |
QoS data + CF-poll |
wlan.fc.type_subtype eq 0x2A |
QoS data + CF-ack + CF-poll |
wlan.fc.type_subtype eq 0x2B |
Null QoS data |
wlan.fc.type_subtype eq 0x2C |
QoS + CF-poll (no data) |
wlan.fc.type_subtype eq 0x2E |
Qos + CF-ack (no data) |
wlan.fc.type_subtype eq 0x2F |
Gdy już mamy omówione podstawowe pojęcia, spróbujmy wykonać małe ćwiczenie i podpatrzyć jak wygląda sposób uwierzytelnienia do sieci, która pracuje w trybie otwartym. W trybie tym AP pozytywnie rozpatruje każde żądanie uwierzytelnienia a ruch pomiędzy klientem a AP nie jest w żaden sposób szyfrowany. Nie oznacza to, że przesyłanie danych w tak działającej sieci nie jest w żaden sposób chronione ponieważ szyfrowanie może być realizowane poprzez wyższe warstwy modelu ISO/OSI.
Rozważmy o to taki scenariusz w którym to jeden z użytkowników korzysta z sieci działającej w trybie otwartym i dzięki tej sieci uzyskuje dostęp do Internetu. Scenariusz ten myślę, dobitnie pokaże jak niebezpieczne może być korzystanie z takiej sieci i ile danych wprawny użytkownik, który ma pojęcie o sniffingu jest w stanie uzyskać dzięki rejestracji i późniejszej analizie przechwyconych pakietów. Z sieci otwartych najczęściej korzystamy w sytuacjach w których to została wdrożona sieć bezprzewodowa by zapewnić wszystkim użytkownikom bezproblemowy sposób podłączenia do sieci Internet. Czyli najczęściej sieci tego typu spotykamy w hotelach, restauracjach, lotniskach, w pojazdach transportu miejskiego (tramwaje, autobusy) czy na dworcach. Oczywiście sieci te często są również wynikiem nieprawidłowej konfiguracji punktu dostępowego czy kompletnej nieznajomości zagadnień związanych z sieciami bezprzewodowymi. Pomimo coraz większej świadomości użytkowników ciągle dochodzi do sytuacji w których to urządzenie bezpośrednio wyciągnięte z pudełka i bez żadnej konfiguracji zaczyna działać i udostępniać połączenie dla każdego zainteresowanego klienta.
Przebieg komunikacji (rodzaj i typ wysyłanych ramek) pomiędzy podłączającym się hostem a punktem dostępu przedstawia poniższy schemat.
Naszą eksplorację rozpoczynamy od analizy ramki beacon, której głównym zadaniem jest dostarczenie klientowi informacji o istnieniu sieci oraz informacji o podstawowych parametrach sieci bezprzewodowej.
By móc odszukać daną sieć klient rozsyła ramki probe request, które zawierają identyfikator SSID szukanej sieci WiFi. Jeśli klient próbuje wykryć wszystkie sieci WLAN dostępne na danym obszarze (skanowanie aktywne) wtedy wysyła ramkę rozgłoszeniową (bez indentyfikatora SSID) na którą odpowiadają wszystkie punkty dostępowe będące w zasięgu klienta.
AP w odpowiedzi na prośbę probe request, wysyła odpowiedź w postaci ramki probe response. Ramka zawiera dane niezbędne do połączenia się z daną siecią.
W następnym kroku dochodzi do wymiany pakietów authentication. W naszym scenariuszu szyfrowanie nie jest używane dlatego też klient wysyła jeden pakiet authentication request natomiast AP odpowiada pakietem authentication response.
Ostatnim krokiem jest wymiana pakietów association. Klient wysyła do AP pakiet association request zawierający informacje o stacji np. adres MAC.
AP po analizie pakietu association request otrzymanego od klienta dokonuje analizy otrzymanych danych i podejmuje decyzję o zezwoleniu bądź odrzuceniu połączenia (jeśli jest aktywny mechanizm filtrowania adresów MAC). Po poprawnej weryfikacji AP przypisuje identyfikator AID (association identifier) klientowi i zezwala na przyłączenie do sieci. Zostaje wysłany pakiet association response.
Podczas przeglądu zarejestrowanych danych możemy napotkać pakiety typu reassociation request. Pakiety teużywane są w sytuacji gdy dany host zlokalizuje punkt dostępu, który będzie oferował sygnał lepszej jakości. Automatycznie zostaje wysłany pakiet reassociation request proszący o przyłączenie do silniejszego nadajnika.
Pakiet reassociation response podobnie jak to miało miejsce w przypadku pakietów association wysyłany jest w odpowiedzi na pakiet reassociation request celem akceptacji bądź odrzucenia połączenia.
Pakiet disassociation jest wysyłany przez hosta celem poinformowania o przerwaniu połączenia z siecią celem zwolnienia zasobów np. podczas wyłączania hosta.
Powracamy do naszego scenariusza w którym to klient (nazwijmy go dla uproszczenia XXX) łączy się z otwartą siecią WiFi i dzięki tak zestawionemu połączeniu zaczyna korzystać z Internetu. Natomiast drugi klient (niech się nazywa YYY) dzięki przestawieniu karty w tryb monitora i uruchomionemu sniffera pakietów zaczyna przechwytywać cały ruch.
Cała sytuacja jest oczywiście zainscenizowana lecz niestety wysoce prawdopodobna. Zobaczmy co mogłoby zostać przechwycone.
Po włączeniu sniffera jesteśmy wprost zalani ogromną ilością przechwyconych pakietów. Dla osoby analizującej przepływ strumienia danych jedną z ważniejszych informacji jest to z kim łączył się użytkownik oraz z jakich stron bądź usług korzystał. Celem odkrycia tej tajemnicy wywołajmy okno Endpoints. Opcja dostępna jest po wybraniu z menu pola Statistics.
Po wyświetleniu okna uzyskujemy informację o tzw. punktach końcowych czyli zbiorze adresów IP z którymi nastąpiło połączenie.
Zaznaczone adresy IP są adresami, które zostaną użyte w dalszej części artykułu.
Użytkownik XXX wykonuje typowe czynności, które to każdy z nas wykonuje na co dzień.
W pierwszej kolejności klient XXX, dokonuje małej korekty w ustawieniach swojego routera oczywiście, podczas wykonywania tej czynności zostaje podane login i hasło dostępu do urządzenia.
Drugi użytkownik YYY już po rejestracji przechwyconych danych odkrywa, że klient XXX łączy się z domyślną bramą. W naszym przykładzie użytkownik XXX ma przypisany adres 192.168.1.103 natomiast bramą dla tej sieci jest router o adresie 192.168.1.1 Przechwycona sesja HTTP powiązana z adresem bramy domyślnej prawie w 100% oznacza nawiązanie połączenia z urządzeniem. Dzieje się tak ponieważ protokół HTTP bardzo często jest wykorzystywany celem przeprowadzenia konfiguracji urządzenia. Protokół http wszystkie dane przesyła w postaci otwartej bez szyfrowania.
Jak widać na poniższym zrzucie przegląd pakietów protokołu HTTP uwidacznia nam login i hasło – login: admin natomiast hasło: tajnehaslo. Od tej pory uzyskujemy dostęp do urządzenia, które możemy skonfigurować w taki sposób by w przyszłości uzyskiwać dostęp do sieci.
Bardzo często jedną z najczęściej wykonywanych czynności jest sprawdzanie emaila. I tym razem użytkownik XXX połączył się z swoją skrzynką celem sprawdzenia nowych wiadomości. Do połączenia został ponownie wykorzystany protokół HTTP.
Skąd wiemy, że użytkownik korzystał z poczty? Otóż świadczy o tym adres IP 217.74.64.236 uzyskany dzięki opcji Endpoints.
Wykonanie polecenia ping z parametrem –a spowoduje zamianę adresu IP na adres DNS.
Aby uzyskać bardziej szczegółowe informacje możemy skorzystać z usług reverse IP bądź whois. Obie usługi dostępne są np. pod adresem - http://www.ip-adress.com/reverse_ip/
Uzyskanie wiadomości o tym, że dany użytkownik korzystał z poczty elektronicznej powoduje, że wiemy na co należy zwrócić uwagę. Uzyskanie informacji o stronach/usługach z którymi nastąpiła łączność bardzo ułatwia późniejszą analizę ponieważ wiemy czego szukać.
Jak widać poniżej dostęp do skrzynki został uzyskany. Adres email to biedronka1980(at)interia.eu natomiast hasło do skrzynki to: P@ssw0rd (%40 – odpowiada znakowi @)
Aby ochronić się przed tego typu błędem wystarczy skorzystać z szyfrowania, które to jest dostępne podczas logowania użytkownika.
Jak już jesteśmy przy poczcie elektronicznej należy również pamiętać o osobach, które zamiast przeglądarki do obsługi emaila używaj wszelakiej maści klientów – np. Windows Mail, Mozilla Thunderbird, IncrediMail czy The Bat (oczywiście aplikacji jest znacznie więcej). Niepoprawnie skonfigurowany program a raczej brak szyfrowania powoduje, że atakujący również może uzyskać dostęp do naszej skrzynki pocztowej poprzez zdobycie loginu i hasła a także do uzyskania wglądu w treść emaila.
Poniżej przechwycona sesja użytkownika XXX ale tym razem użytkownik ten aby uzyskać dostęp do poczty użył klienta Windows Mail. Jak widać po analizie danych protokołu POP wykorzystywanego do odbioru poczty (dla ścisłości POP3, bo to trzecia wersja tego protokołu jest aktualnie w użyciu) widać, że dane uwierzytelniające są przesyłane otwartym tekstem.
Przechwycone dane pokrywają się z danymi przechwyconymi gdy użytkownik do łączności z pocztą użył przeglądarkę internetową czyli adres email to biedronka1980(at)interia.eu natomiast hasło do skrzynki to: P@ssw0rd
Przechwycony ruch SMTP (protokół wykorzystywany do wysyłania wiadomości) daje nam wgląd w treść wysyłanych wiadomości. Jak widać poniżej przechwycona wiadomość pochodzi od użytkownika biedronka1980(at)interia.eu do użytkownika pikolo(at)slow7.pl a treść tej wiadomości zawiera tekst – wiadomość testowa.
Po skorzystaniu z protokołu SSL, uzyskanie danych wykorzystanych podczas autoryzacji czy dobranie się do treści wysyłanych wiadomości staje się niemożliwe. Ponieważ cała transmisja pomiędzy danym hostem a serwerem pocztowym jest szyfrowana.
Wielu użytkowników Internetu korzysta z serwisów rozrywkowych umożliwiających nam zagranie w nasze ulubione gry. Nierzadko tego typu rozrywka trwa kilka lat a zainwestowany czas i nieraz pieniądze przekładają się na bardzo realną wartość konta (czasem wartość konta sięga kilka tysięcy zł).
To że użytkownik logował się do gry on-line wiemy dzięki analizie adresu IP 213.53.139.23
Tak więc nasz użytkownik loguje się do swojej ulubionej gry co zostaje skrzętnie odnotowane. Login: biedronkaXXX, hasło: P@ssw0rd1234.
Przykłady można by mnożyć. Mam, nadzieję, że te przedstawione dobitnie ilustrują z czym wiąże się przesyłanie informacji w niezabezpieczonej sieci. Odkrycie jednego loginu bądź hasła a już na pewno uzyskanie dostępu do emaila jest niczym „żyła złota” ponieważ nie ma co ukrywać, że poświadczenia wykorzystane w jednym serwisie bardzo często są dublowane w innych. Tak więc czytelniku zadaj sobie pytanie – Czy przypadkiem hasło użyte do konta pocztowego nie pokrywa się z hasłem do konta bankowego bądź innego serwisu? Oczywiście możliwych kombinacji może być wiele.
Kolejny wniosek, który powinien Ci się czytelniku nasunąć jest taki: że jeśli przypadkiem korzystasz z sieci otwartych to zadbaj o to by szyfrowanie przesyłanych danych zapewnić przez inne mechanizmy.
Na tym etapie chciałbym zakończyć swoje rozważania na temat sniffingu w sieciach bezprzewodowych. Zaraz podniosą się głosy - A co z WEP i z WPA? Odpowiem tak - Sieci zabezpieczone to już nie tylko sniffing lecz również forma ataku. Do tej pory wszystkie informacje mogliśmy uzyskać pasywnie bez wysłania ani jednego pakietu z swojej strony (bądź ich niewielkiej liczbie). WEP i WPA wymaga od nas większej ingerencji w sieć a więc oprócz sniffingu przeprowadzany jest równolegle atak na infrastrukturę WLAN. A zagadnienia te są już materiałem na następny wpis. Więc w kolejnej odsłonie spróbuję przedstawić kulisy nieautoryzowanego dostępu do sieci WLAN.
BIBLIOGRAFIA:
- http://www.thegeekstuff.com/2012/07/wireshark-filter/
- http://www.wildpackets.com/resources/compendium/wireless_lan/wlan_packets
- http://www.wi-fiplanet.com/tutorials/article.php/1447501
- http://www.h3c.com/portal/Technical_Support___Documents/Technical_Documents/WLAN/Access_Point/H3C_WA2200_Series_WLAN_Access_Points/Configuration/Operation_Manual/H3C_WA_Series_WLAN_Access_CG-6W100/02/201009/691527_1285_0.htm
- Building display filter expressions
- Top 10 Wireshark Filters (by Chris Greer)
Komentarze