Kompleksowe szkolenie: wprowadzenie do bezpieczeństwa IT od sekuraka z rabatem 50%. Jedyna taka okazja w tym roku. Nie przegap! :-)

Wykrywanie zagrożeń sieci bezprzewodowych za pomocą bezpłatnego narzędzia klasy IDS: nzyme

09 lipca 2021, 10:57 | Teksty | komentarzy 11

Osobom mniej zaznajomionym z funkcjonowaniem sieci bezprzewodowych lub chcącym odświeżyć swoją wiedzę polecamy serię artykułów Bezpieczeństwo sieci Wi-Fi.

Nzyme jest nowym oprogramowaniem Open Source, stworzonym w wolnym czasie przez CTO Grayloga Lennarta Koopmanna. W marcu tego roku opublikowana została wersja 1.0 “Kyle Canyon”.

Nzyme służy do wykrywania zagrożeń sieci bezprzewodowych i należy do rodziny systemów Wireless Intrusion Detection System (WIDS). To prawdopodobnie najciekawszy i najlepiej dopracowany projekt WIDS z otwartym źródłem.

Do najważniejszych funkcji nzyme możemy zaliczyć:

  • wykrywanie złośliwych punktów dostępu (Access Point – AP);
  • wykrywanie znanych platform służących do atakowania sieci bezprzewodowych (WiFi Pineapple, Pwnagotchi, Wifiphisher);
  • wykrywanie błędów konfiguracyjnych AP.

W niniejszym artykule postaram się wyjaśnić, dlaczego w ogóle potrzebujemy systemu WIDS, jak zainstalować i skonfigurować nzyme oraz jak z niego korzystać.

Złośliwe punkty dostępu – a komu to potrzebne?

Ataki na sieci bezprzewodowe, szczególnie na klientów sieci bezprzewodowych, pozwalają hakerom na różne scenariusze i są również często stosowane przy audytach bezpieczeństwa. Urządzenia i platformy do przeprowadzania takich ataków cieszą się dużą popularnością. Przykład użycia WiFi Pineapple możemy obejrzeć nawet w jednym z wyżej ocenianych komediowych seriali ostatnich lat, Silicon Valley.


Z kolei w prawdziwym świecie w 2018 roku Departament Sprawiedliwości USA oskarżył siedmiu hakerów pracujących na zlecenie rosyjskiej agencji GRU o przeprowadzenie ataków, których celem były między innymi agencje antydopingowe w Brazylii i Kanadzie, firma produkująca urządzenia wykorzystujące energię nuklearną czy laboratorium chemiczne w Szwajcarii. Podczas ataków wykorzystano także wspomniane wcześniej WiFi Pineapple.

* Zdjęcie opublikowane przez Departament Sprawiedliwości Stanów Zjednoczonych pokazujące sprzęt znaleziony w wynajmowanym przez agentów GRU samochodzie

W jaki sposób przeprowadzane są takie ataki? Atakujący, będący w zasięgu sieci Wi-Fi, w pierwszej kolejności musi sprawić, aby ofiara, przykładowo pracownik firmy, połączyła się z wystawionym przez niego złośliwym punktem dostępu.

W jaki sposób wymusić połączenie?

Aby ofiara połączyła się ze złośliwym AP, atakujący może wykorzystać kilka technik. Poniżej przedstawiam w pigułce opis popularnych ataków.

Evil Twin

Stworzenie „złego bliźniaka” polega na sklonowaniu cech prawdziwego AP. W tym celu atakujący kopiuje:

  • nazwę sieci – Service Set Identifier (SSID),
  • adres fizyczny AP – Basic Service Set Identifier (BSSID),
  • metodę uwierzytelniania, na przykład WPA2-EAP-PEAP. 

W celu uzyskania optymalnej łączności z siecią urządzenia Wi-Fi wykorzystują protokoły 802.11k oraz 802.11r, które pozwalają na przełączanie się między dostępnymi AP w sposób niezauważalny dla użytkownika. Jeżeli stworzony Evil Twin będzie oferował lepszy sygnał, urządzenie automatycznie połączy się z nim, przechodząc ponownie proces uwierzytelnienia.

Karma oraz MANA

By precyzyjnie wytłumaczyć, na czym polegają te techniki ataku, omówimy najpierw kilka pojęć:

  • Preferred Network List (PNL) – każde urządzenie Wi-Fi ma listę sieci, z którymi łączyło się w przeszłości. Lista ta zawiera informację o SSID, BSSID i zabezpieczeniach sieci. Na podstawie tego wykazu urządzenie może automatycznie łączyć się z dostępnymi, znanymi sieciami.
  • Active Scanning – jeden z mechanizmów wyboru sieci zdefiniowany przez standard 802.11. Klient aktywnie poszukuje dostępnych sieci, aby się z nimi połączyć. Może tego dokonać na dwa sposoby:
    • Direct Probing – klient aktywnie wysyła ramki Probe Request. Na podstawie PNL w ramkach zawarta jest nazwa sieci, której klient poszukuje. AP odbiera ramkę, weryfikuję nazwę sieci i jeżeli jest zgodna z jego nazwą, odpowiada ramką Probe Response. Następuje połączenie.
    • Broadcast Probing (Null Probing) – podobnie jak wyżej, urządzenie aktywnie wysyła ramki Probe Request. W ramkach nie jest natomiast wysłana nazwa sieci. Wszystkie AP, które są w zasięgu, odpowiadają Probe Response z własną nazwą. Klient porównuje zwrócone nazwy sieci ze znanymi sieciami w PNL. W przypadku zgodności nawiązuje połączenie z AP.
  • Passive Scanning –  jeden z mechanizmów wyboru sieci zdefiniowany przez standard 802.11. Klient nasłuchuje na kolejnych kanałach, szukając ramek Beacon wysyłanych przez AP. Jeżeli ramka zawiera nazwę sieci zgodną z PNL, klient nawiązuje połączenie.

Atak KARMA wykorzystuje dość oczywistą słabość w mechanizmie Direct Probing. Klient sam zdradza swoją PNL, a decyzja o odpowiedzi leży po stronie AP. W tym ataku złośliwy AP odpowiada na każdą Probe Request

* Ilustracja ataku KARMA

Atak KARMA jest jednak mało efektywny w odniesieniu do obecnych urządzeń. Ze względów bezpieczeństwa i prywatności nowsze urządzenia zachowują się inaczej i nie łączą się z AP, który nie odpowiedział wcześniej na Broadcast Probing lub korzystają jedynie z Passive Scanning.

Atak MANA jest nowszą wersją ataku KARMA. Podczas ataku MANA złośliwy AP w przypadku otrzymania ramki Direct Probe nie odpowiada na nią od razu, a zapisuje w pamięci BSSID klienta i oczekiwany przez niego SSID sieci. Znając te wartości, jest w stanie poprawnie odpowiedzieć na Broadcast Probe. W przypadku gdy klient wykorzystuje jedynie Passive Scanning, atakujący musi posłużyć się inną techniką.

Known Beacon

W tym ataku złośliwy AP posiada listę potencjalnych SSID, z którymi atakowany klient może próbować się łączyć. Na podstawie słownika wysyłane są ramki Beacon z możliwymi nazwami sieci. Jeżeli atakujący prawidłowo odgadnie oczekiwaną nazwę sieci, klient spróbuje nawiązać połączenie ze złośliwym AP.

Free Wi-Fi!

Na koniec – najmniej wymagająca technika. Wystawiając otwartą sieć z atrakcyjną nazwą w pobliżu biura, w którym pracuje kilkaset osób, można liczyć na ewentualność, że jeden z pracowników będzie chciał z niej skorzystać – bez większego powodu. 

Co po połączeniu?

Wystawienie odpowiednio skonfigurowanego złośliwego AP niesie za sobą wiele możliwości. Poniżej zostały przedstawione niektóre z nich.

Przejęcie danych logowania

Popularnym scenariuszem atakowania sieci firmowych zabezpieczonych WPA2-EAP-PEAP jest wystawienie Evil Twin. Urządzenie użytkownika, w trakcie łączenia się ze złośliwym AP, będzie próbowało uwierzytelnić się w serwerze RADIUS. Urządzenia z systemem Windows domyślnie wykorzystują protokół MS-CHAPv2. W efekcie atakujący jest w stanie uzyskać login użytkownika oraz jego hasło w formie hasha NTLM.

Warto wspomnieć, że urządzenia Android oraz iOS domyślnie nie używają protokołu MS-CHAPv2, przez co atakujący może uzyskać hasło w postaci tekstu jawnego.

Przykład ataku, w którym do wystawionej sieci WPA2-EAP-PEAP uwierzytelnienie nastąpiło bez protokołu MS-CHAPv2

Ataki socjotechniczne

Kolejnym popularnym scenariuszem jest stworzenie fałszywego Captive Portal podszywającego się pod prawdziwą usługę atakowanej firmy. W ten sposób możliwe jest wyłudzanie danych logowania lub innych cennych informacji.

Ataki Man-in-the-Middle (MITM)

Scenariusz dość oczywisty – atakujący kontroluje bramę domyślną oraz serwer DNS. To mniej popularna w dzisiejszych czasach forma ataku. Większa część usług korzysta z SSL/TLS oraz HTTP Strict Transport Security (HSTS), niemniej jednak taki scenariusz jest wciąż możliwy.

Dostęp do klienta

Atakujący, znajdując się w jednej sieci, może bezpośrednio skanować i atakować podłączone urządzenie. Podatne, niezaktualizowane usługi sieciowe, jak np. SMB czy RDP, mogą być szybką drogą do uzyskania dostępu do maszyny ofiary.

Stawiamy nzyme

Czego potrzebujemy?

Serwer

Do postawienia własnej instancji nzyme polecane są Raspberry Pi 3 lub Raspberry Pi 4 odnośnie do lokalizacji o większym natłoku ramek w eterze (na przykład w biurowcach). Możemy również wykorzystać inny, dowolny sprzęt pracujący na Linuxie. Polecaną dystrybucją jest Ubuntu 20.04. 

Karta sieciowa

Oprogramowanie wymaga karty sieciowej wspierającej tryb monitor mode, który pozwala na przechwytywanie wszystkich ramek z powietrza. Kluczowe jest również odpowiednie wsparcie w postaci sprawnie działających sterowników.

Poniżej zamieszczam przykładową listę standardowo polecanych kart sieciowych, wykorzystywanych w audytach bezpieczeństwa sieci bezprzewodowych.

Dla sieci 2,4 GHz:

  • TP-Link TL-WN722N* (AR9271),
  • Alfa AWUS036NH, 
  • Alfa AWUS036NHA,
  • Panda PAU05,
  • Panda PAU06.

Dla sieci 2,4 GHz oraz 5 GHz:

  • Alfa AWUS036ACH, 
  • Panda PAU09,
  • Alfa AWUS1900.

*Uwaga: karta TP-Link TL-WN722N występuje na rynku w kilku wersjach. Polecana opcja to v1, która wykorzystuje chipset Atheros AR9271. Wersja ta niestety nie jest już produkowana i pozostaje nam jedynie rynek wtórny. Poniższe zdjęcie prezentuje, w jaki sposób rozpoznać odpowiednią wersję.

asd
* Oznaczenie wersji v1 karty sieciowej TP-Link TL-WN722N

Jak przebiega instalacja?

Poniżej przedstawiam instrukcję instalacji na systemie Ubuntu 20.04. Proces instalacji na Raspberry jest bardzo zbliżony.

  1. Instalujemy zależności.

$ sudo apt update && sudo apt install -y libpcap0.8 openjdk-11-jre-headless postgresql-12 wireless-tools

  1. Pobieramy odpowiedni plik ze strony https://www.nzyme.org/download.

$ wget https://assets.nzyme.org/releases/nzyme-1.1.0.deb

  1. Instalujemy nzyme.

$ sudo dpkg -i nzyme-1.1.0.deb

  1. Weryfikujemy i notujemy nazwę naszego interfejsu sieciowego.

$ iwconfig
lo no wireless extensions.

eno1 no wireless extensions.

wlx14cc20167022 IEEE 802.11 Mode:Monitor Frequency:2.457 GHz Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off

  1. Tworzymy plik 

/etc/netplan/01-nzyme.yaml, w którym wklejamy nazwę naszego interfejsu.

network:
version: 2
renderer: networkd
ethernets:
wlx00c0caac2a8f: {}

  1. Konfigurujemy bazę danych.

$ sudo -u postgres psql
postgres=# create database nzyme;
CREATE DATABASE
postgres=# create user nzyme with encrypted password 'TWOJE HASLO’;
CREATE ROLE
postgres=# grant all privileges on database nzyme to nzyme;
GRANT
postgres=# \q

  1. W celu konfiguracji HTTPS self-signed tworzymy poniższy plik o nazwie openssl-nzyme.cnf. Należy edytować wpisy pod [req_distinguished_name] oraz [alt_names].
  1. Generujemy klucze na podstawie pliku.

$ openssl req -x509 -days 365 -nodes -newkey rsa:2048 -config openssl-nzyme.cnf -keyout pkcs5-plain.pem -out cert.pem

  1. Konwertujemy klucze do formatu PKCS#8.

$ openssl pkcs8 -in pkcs5-plain.pem -topk8 -nocrypt -out key.pem

  1. Usuwamy zbędny plik.

$ rm pkcs5-plain.pem

  1. Tworzymy hash hasła dla konta administratora. 

$ nzyme echo -n secretpassword | sha256sum

  1. Kopiujemy przykładowy plik konfiguracyjny.

$ sudo cp /etc/nzyme/nzyme.conf.example /etc/nzyme/nzyme.conf

  1. Modyfikujemy w pliku /etc/nzyme/nzyme.conf utworzony wcześniej hash hasła administratora oraz hasło do bazy danych.
  1. Dalej w pliku /etc/nzyme/nzyme.conf modyfikujemy adres URL, z którego będziemy chcieli mieć dostęp do panelu www nzyme, oraz wskazujemy wygenerowane klucze SSL.
  1. Restartujemy usługę.

systemctl restart nzyme

  1. Jeżeli wszystko działa poprawnie, możemy przejść do panelu www nzyme. W widoku Networks możemy zobaczyć aktualnie dostępne sieci. 
*  Widok Networks w nzyme

  1. Należy kliknąć na sieć, którą chcemy monitorować. W dalszym widoku odnajdziemy Fingerprint naszej sieci, który należy skopiować. Na tym etapie warto przez jakiś czas poobserwować naszą sieć. W większości przypadków nasz Access Point będzie się przedstawiał więcej niż jednym Fingerprintem.
* Fingerprint sieci

  1. Wracamy do modyfikacji pliku nzyme.conf i konfigurujemy nasz Access Point.

Od tej pory nasza sieć będzie monitorowana przez nzyme.

Co potrafi nzyme?

Zanim przejdziemy do omówienia możliwości detekcji oferowanych przez nzyme, zapoznajmy się z dwoma terminami, używanymi przez platformę:

  1. Fingerprint
  2. Bandit. 

Fingerprint

Atakujący może z łatwością skopiować cechy AP, takie jak: SSID, BSSID czy kanał pracy. Z tego powodu w nzyme zaimplementowano zdecydowanie trudniejszy do podrobienia mechanizm, jakim jest Fingerprint. Nzyme do obliczenia Fingerprintu, który ma postać hasha SHA-256, wykorzystuje informacje zawarte w ramkach Beacon oraz Probe Response wysyłanych przez AP, w mapie Tagged Parameters

  • Supported Rates (ID 1),
  • Country Information (ID 7),
  • HT Capabilities (ID 45),
  • RSN (ID 48),
  • Extended Supported Rates (ID 50),
  • Extended Capabilities (ID 127),
  • Vendor Specific Parameters (ID 221) 00:50:F2-4 (WPS) and 00:50:F2-1 (WPA).
* Tagged Parameters widoczne w programie Wireshark

Bandit 

Zdefiniowany AP, którego wykrycie będzie alertowane. Nzyme posiada listę predefiniowaną, na której umieszczono fingerprinty takich platform, jak: WiFi Pineapple, Wifiphisher czy esp8266_deauther. Mamy również możliwość tworzenia własnych definicji Bandits na podstawie czterech parametrów: Fingerprint, SSID, siły sygnału oraz tożsamości Pwnagotchi. 

Nzyme w obecnej wersji może wykryć dziewięć zdarzeń:

  • UNEXPECTED_BSSID – wykrycie AP z niezgodnym BSSID;
  • UNEXPECTED_SSID – wykrycie AP z niezgodnym SSID;
  • CRYPTO_CHANGE – wykrycie zmian w konfiguracji zabezpieczeń sieci, przykładowo zmiana z WPA2 na WEP; dla ciekawych – fragment kodu pokazujący, jakie parametry brane są pod uwagę:
* Fragment kodu. Na obrazku zaznaczono przykładową wartość argumentu używanego w alercie CRYPTO_CHANGE

  • UNEXPECTED_CHANNEL – wykrycie AP na kanale innym niż oczekiwany;
  • UNEXPECTED_FINGERPRINT – wykrycie AP z Fingerprintem innym niż oczekiwany;
  • BEACON_RATE_ANOMALY – wykrycie anomalii w częstotliwości wysyłanych przez AP ramek Beacon; 
  • MULTIPLE_SIGNAL_TRACKS – nzyme monitoruje siłę sygnału skonfigurowanych AP; w przypadku gdy siła sygnału będzie różniła się od historycznych wartości, zostanie to odnotowane jako incydent;
  • PWNAGOTCHI_ADVERTISEMENT – wykrycie urządzenia Pwnagotchi; 
  • BANDIT_CONTACT – wykrycie zdefiniowanego Bandita. 

Test nzyme

W krótkim filmie, do którego link znajduje się poniżej, możemy obejrzeć przykładowy scenariusz, w którym atakujący wystawia złośliwy Access Point za pomocą narzędzia eaphammer, kopiując nazwę atakowanej sieci, ale z nieprawidłowym BSSID. Nzyme w niedługim czasie wykrywa intruza i alertuje zdarzenie. W pozostałych sytuacjach, takich jak: nieprawidłowy SSID, Fingerprint czy zmiana zabezpieczeń sieci, zagrożenie było wykrywane równie sprawnie.

Dodatkowe funkcje

Pozostałymi ciekawymi funkcjami, o których warto wspomnieć, są między innymi:

  • przesyłanie zdarzeń za pomocą Sysloga lub Grayloga (GELF);
  • wysyłanie alertów na e-mail;
  • możliwość zbudowania trackera do fizycznego lokalizowania złośliwych AP;
  • tworzenie pułapek, czyli fałszywych AP.

Problemy wieku młodzieńczego

Podczas testów w nzyme widocznych było kilka niedociągnięć, co jest sytuacją raczej spodziewaną dla tak młodego projektu Open Source. Jednym z powtarzających się błędów było niewłaściwe wyświetlanie nazw sieci, co widać na poniższym screenie.

* Krzaki” w widoku Networks w kolumnie Advertised Networks

Kolejnym problemem jest niedokładne działanie mechanizmu Fingerprint. W przypadku urządzeń Mikrotik, OpenWRT czy pochodzących od dostawców UPC oraz Vectry nzyme czasami przypisywał setki fingerprintów do jednego AP, co oczywiście generowało również taką samą liczbę alertów false positive. Problem ten można tymczasowo rozwiązać poprzez wyłączenie alertu unexpected_fingerprint. W tym celu należy zakomentować odpowiednią linię w pliku nzyme.conf:

Podsumowanie

Oprogramowanie nzyme wydaje się obiecującym systemem do wykrywania zagrożeń sieci bezprzewodowych. Do plusów zdecydowanie możemy zaliczyć takie jego wyróżniki, jak: otwarte źródło, prostota instalacji, obsługi oraz konfiguracji i przyjazny dla oka interfejs.

Jeżeli jesteś odpowiedzialny za bezpieczeństwo sieci Wi-Fi w firmie, warto rozważyć aspekty zagrożeń, które zostały opisane w tym artykule, a także przemyśleć wdrożenie nzyme lub alternatywnego systemu monitorującego.

Gracjan Jaśkiewicz, pomaga zabezpieczać systemy IT w ramach Securitum.

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Adso

    Świetny, merytoryczny artykuł :)

    Odpowiedz
  2. Root

    Super artykuł i narzędzie, będzie testowane w labie.

    Odpowiedz
  3. Marek

    Wow, stary dobry Sekurak! To chyba najlepszy tutorial od marca 2019 (omawialiście wtedy protokół http).

    Odpowiedz
  4. Marcin

    Nie wiecie, czy jest wersja na dockera ?

    Odpowiedz
  5. Rafał Serafin

    Właśnie odpaliłem u siebie, ogólnie fajny projekt, jednak z OpenWRT nie lubi się chyba znacznie bardziej niż w sposób wymieniony w artykule. Dostaję znaczą ilość fałszywych alertów „crypto_change”.

    Odpowiedz
  6. Edward

    Swietny artykul.
    Old school sekurakowy. Powrot na wlasciwe tory.
    Jest co poczytac, co technicznie wykonac i co wykorzystac w zyciu codziennym.
    Propsy

    Odpowiedz
    • mAcin

      No tak,zgadzam sie w zupelnosci. Chcialbym wiecej i wiecej tego typu tekstow. Autor, polaczyl prezentacje nowego narzedzia z opisem technik ataku.

      Obawiam sie jednak ze na, Sekurak zawita to,co pojawilo sie juz jakis czas temu na portalu z pod znaku wscieklego Lucyfera. Byl to niezly portal, a teraz…. a teraz reklama😎

      Odpowiedz
  7. Janusz
    Odpowiedz
  8. yarroom

    Postawilem calego nzyme, ale mam problem z tym ze moj interfejs nie przelacza sie z automatu w tryb monitora. Teraz pytanie czy musze dodatkowo instalowac dla karty drivery i przelaczyc ja recznie? widze ze na waszym screenie z iwconfiga dziala juz jako monitor.

    Odpowiedz
    • jacek

      airmon-ng start wlan0

      Odpowiedz
  9. Przemyslaw

    Czy ktoś ma kilka AP i takie same nazwy SSID? Nzyme wyrzuca blad przez co mogę monitorować tylko jednego SSID’a… Ktoś może poradził sobie z takim przypadkiem?

    Odpowiedz

Odpowiedz na yarroom