Radio definiowane programowo

https://chacker.pl/

Urządzenia bezprzewodowe można znaleźć we wszystkich aspektach naszego życia. Chociaż urządzenia te dają nam większą swobodę, eliminując przewody, otwierają również powierzchnie ataków zbliżeniowych i zdalnych. Na przykład czujnik, który jest podłączony na stałe i nie jest wystawiony na widok publiczny, jest znacznie trudniejszy w dostępie niż czujnik bezprzewodowy, którego zasięg przekracza obwód budynku. Oczywiście sam dostęp do sygnału bezprzewodowego nie gwarantuje, że można przeprowadzić niegodziwe działania, ale z pewnością otwiera drzwi. Hakerstwo częstotliwości radiowej (RF) jest zbyt skomplikowanym tematem, aby odpowiednio omówić go w jednym rozdziale. Naszym celem jest użycie prostego urządzenia, aby zapoznać Cię z niedrogim radiem definiowanym programowo (SDR), oprogramowaniem typu open source dla SDR oraz procesem oceny i testowania produktów, które wykorzystują niestandardowe lub półniestandardowe protokoły bezprzewodowe do komunikacji

Podsumowanie

https://chacker.pl/

Tu zaprezentowano analizę podatności, zarówno ze statycznego, jak i dynamicznego punktu widzenia. Zaprezentowano w nim również wykorzystanie ataku polegającego na wstrzykiwaniu poleceń zarówno z dynamicznego, jak i emulowanego punktu widzenia. W tym drugim przypadku dowiedziałeś się, że podatności można odkryć, a exploity proof-of-concept można opracować nawet bez zakupu sprzętu. Mamy nadzieję, że dzięki tym technikom etyczni hakerzy znajdą luki w zabezpieczeniach urządzeń wbudowanych i ujawnią je w sposób etyczny, dzięki czemu wszyscy będziemy bezpieczniejsi.

Wykorzystywanie oprogramowania układowego

https://chacker.pl/

Do tej pory emulowaliśmy oprogramowanie układowe Netgear WNAP320 w QEMU. Teraz czas zrobić to, po co przyszliśmy: wykorzystać oprogramowanie układowe. Dominic Chen6 i jego zespół znaleźli lukę w zabezpieczeniach polegającą na wstrzykiwaniu poleceń w tym oprogramowaniu układowym działającym w FIRMADYNE. Przetestujmy ją za pomocą FirmAE i sprawdźmy, czy można ją wykorzystać:

Z poprzedniego wyniku powinieneś zauważyć, że wstrzyknęliśmy polecenie uruchomienia serwera telnet (1). Argument telnetd –l /bin/sh uruchamia serwer telnet na domyślnym porcie i wiąże go z powłoką „/bin/sh”. Skanowanie nmap pokazuje, że port 23 jest teraz otwarty (2). Po połączeniu się z telnetem zauważysz, że użytkownik jest rootem (3). Chociaż zrobiono to na emulowanym oprogramowaniu układowym, to samo można zrobić na rzeczywistym oprogramowaniu układowym. W tym momencie atakujący ma dostęp root do urządzenia i potencjalnie może użyć urządzenia jako punktu startowego dla innych ataków w sieci.

Emulacja oprogramowania układowego

https://chacker.pl/

Teraz, gdy skonfigurowałeś środowisko, możesz emulować przykładowe oprogramowanie układowe (ponownie, jak opisano w FirmAE GitHub). Najpierw, używając skryptu run.sh, sprawdź oprogramowanie układowe dostarczone w GitHub dla tego laboratorium. Ten krok wyodrębni obraz, pobierze architekturę, wywnioskuje konfigurację sieci i skojarzy identyfikator w bazie danych w celu analizy (może to potrwać chwilę, więc bądź cierpliwy):

Teraz, gdy wiesz, jaki jest adres IP, uruchom emulator z włączonym debugowaniem, aby móc wchodzić w interakcję z powłoką lub uruchomić gdb. W naszym przypadku chcemy po prostu uzyskać dostęp do powłoki (1) i zobaczyć, co jest dostępne w BusyBox. Z danych wyjściowych BusyBox (2) wynika, że ​​telnetd (3) jest dostępny, jeśli możemy wykonywać programy za pomocą wstrzykiwania poleceń:

Jeżeli w dowolnym momencie pomylisz poprzednie polecenia i zechcesz zresetować bazę danych i środowisko, po prostu uruchom następujące polecenia:

W tym momencie oprogramowanie sprzętowe powinno działać na poprzednim IP jako urządzenie typu tap. Powinieneś również móc połączyć się z tym wirtualnym interfejsem z maszyny, na której uruchamiasz QEMU. Z poziomu maszyny wirtualnej otwórz przeglądarkę internetową i spróbuj połączyć się z wywnioskowanym IP, jak pokazano poniżej. Może być konieczne odczekanie minuty, aż usługa internetowa w pełni się uruchomi po uruchomieniu oprogramowania sprzętowego przez emulator.

Dane uwierzytelniające to admin/password, które można znaleźć w Internecie. I tak po prostu jesteśmy zalogowani do emulowanego routera, jak pokazano tutaj.

Konfigurowanie FirmAE

https://chacker.pl/

Jeśli chcesz śledzić to laboratorium, będziemy używać Kali 2021-1, uruchomionego w VMware lub VirtualBox, z ustawieniami sieciowymi NAT. Najpierw musimy skonfigurować narzędzie FirmAE, korzystając z instrukcji znajdujących się w FirmAE GitHub. Kroki instalacji są drastycznie uproszczone w porównaniu z FIRMADYNE i wymagają zainstalowania tylko trzech pakietów, build-essential, telnet i git, poza procesem instalacji. Instalacja opiera się również na fakcie, że instalacja binwalk została ukończona. Proces instalacji pokazano tutaj:

Analiza dynamiczna z emulacją

https://chacker.pl/

Okazuje się, że w niektórych przypadkach nie jest konieczne posiadanie sprzętu, aby wykonać analizę podatności i wykorzystać oprogramowanie układowe.

FirmAE

Narzędzie FirmAE3 rozszerza możliwości FIRMADYNE4, aby umożliwić emulację większej liczby oprogramowania układowego, wykorzystując różne arbitraże dla usług i hiperwizora QEMU. Arbitraże mają na celu umożliwienie uruchomienia usług sieciowych, ponieważ jest to powszechny wektor ataku. Piękno tego podejścia polega na tym, że nie trzeba kupować sprzętu, aby przetestować oprogramowanie układowe. To potężne podejście umożliwia skalowalne testowanie równoległe. Autorzy FirmAE osiągnęli wskaźnik powodzenia na poziomie 79,36 procent na 1124 urządzeniach i znaleźli 12 nowych 0-dni,5 co wcale nie jest złe. W kolejnych ćwiczeniach laboratoryjnych skonfigurujemy i uruchomimy FirmAE.

Ettercap

https://chacker.pl/

Jako szybkie przypomnienie, Address Resolution Protocol (ARP) to mechanizm rozwiązywania adresu IP na adres kontroli dostępu do nośnika (MAC). Adres MAC to unikalny adres przypisany przez producenta urządzenia sieciowego. Mówiąc prościej, gdy stacja musi komunikować się z inną stacją, używa ARP do określenia adresu MAC powiązanego z adresem IP do użycia. Podszywanie się pod ARP skutecznie zatruwa tabele ARP stacji, powodując, że używają one adresu MAC atakującego zamiast rzeczywistego adresu MAC stacji docelowej. Dlatego cały ruch do miejsca docelowego przechodzi przez stację atakującego. To skutecznie umieszcza urządzenie w linii bez konieczności fizycznej modyfikacji sieci. Ettercap to narzędzie, które pozwala nam podszywać się pod ARP w celu przeprowadzania ataków typu man-in-the-middle (MITM), analizowania pakietów, modyfikowania ich, a następnie przekazywania do odbiorcy. Na początek użyjemy Ettercap, aby sprawdzić ruch pomiędzy urządzeniem a Internetem, wydając następujące polecenie (w tym przykładzie urządzenie ma adres 192.168.1.173, a brama 192.168.1.1):

Po uruchomieniu Ettercap użyjemy Wiresharka, aby wyświetlić ruch podczas interakcji z urządzeniem. Po uruchomieniu Wiresharka i zainicjowaniu przechwytywania możemy sprawdzić, czy jest dostępna aktualizacja oprogramowania sprzętowego na stronie aktualizacji urządzenia, jak pokazano poniżej.

Po uruchomieniu Ettercap użyjemy Wiresharka, aby wyświetlić ruch podczas interakcji z urządzeniem. Po uruchomieniu Wiresharka i zainicjowaniu przechwytywania możemy sprawdzić, czy jest dostępna aktualizacja oprogramowania sprzętowego na stronie aktualizacji urządzenia, jak pokazano poniżej.

Przechodząc do przechwyconego adresu URL, możemy zobaczyć, że plik XML zawiera główne i poboczne numery wersji oprogramowania sprzętowego, stronę do pobrania oraz informacje o wydaniu.

 

Uzbrojeni w te informacje możemy założyć, że jeśli zmienimy liczbę drugorzędną na 12 i łącze oprogramowania układowego do polecenia powłoki, wymusimy na urządzeniu próbę aktualizacji i w konsekwencji uruchomienie naszego polecenia. Aby wykonać to zadanie, musimy utworzyć filtr Ettercap (1) (wcześniej zapisany i wyświetlony tutaj), skompilować go (2), a następnie uruchomić (3), w następujący sposób:

Aby ustalić, czy nasze polecenie jest wykonywane, musimy pingować urządzenie i monitorować komunikaty pingowania podczas wydawania aktualizacji. Ale najpierw zauważ, że po kliknięciu przycisku Check for New Firmware widzimy, że jest dostępna wersja 1.12 do pobrania.

Przed kliknięciem przycisku Upgrade Firmware musimy skonfigurować ping, aby monitorować urządzenie. Po kliknięciu przycisku Upgrade Firmware powinniśmy zobaczyć następujące pole postępu pobierania:

Zauważysz, że host przestaje odpowiadać (1), a później wraca do trybu online (2). Oznacza to, że urządzenie zostało ponownie uruchomione. W tym momencie udowodniliśmy, że możemy wstrzyknąć polecenie do adresu URL aktualizacji, a urządzenie je wykona. Bez przesłania pliku wykonywalnego na urządzenie jesteś ograniczony tym, co znajduje się na urządzeniu. Na przykład, jak wyjaśniono wcześniej, jeśli telnetd jest skompilowany w BusyBox (nie ma go w tym systemie), możesz go po prostu uruchomić, aby uzyskać dostęp do powłoki bez hasła, w następujący sposób:

To podejście jest zademonstrowane w następnej sekcji. W razie potrzeby można skompilować plik binarny, taki jak netcat, dla tego procesora, a następnie przesłać go przez tftp lub tfcp, jak pokazał Craig Heffner2, lub można użyć innej metody.

Konfiguracja środowiska testowego

https://chacker.pl/

Wybrana przez nas konfiguracja testowa wykorzystuje 64-bitowy Kali Linux 2021.1, Ettercap, bezprzewodowy extender zasięgu DAP-1320 z wersją oprogramowania układowego 1.11 i standardową sieć bezprzewodową. Pomysł polega na podszywaniu się pod ARP DAP-1320, tak aby cały ruch do i z urządzenia przechodził przez nasz system Kali Linux. Chociaż moglibyśmy po prostu umieścić urządzenie w linii między extenderem a routerem, które może przekazywać ruch po inspekcji i modyfikacji, podszywanie się pod ARP byłoby prawdopodobnym mechanizmem ataku używanym w terenie.

Analiza dynamiczna ze sprzętem

https://chacker.pl/

Część oceny analizy statycznej jest ukończona. Od tego momentu będziemy patrzeć na system, który działa na sprzęcie, a nie emulacji. Musimy skonfigurować środowisko do przechwytywania żądań z urządzenia do sieci WAN, podłączyć DAP-1320 do naszej sieci testowej i rozpocząć ćwiczenie procesu aktualizacji oprogramowania układowego. Końcowym celem jest wykonanie czegoś na bezprzewodowym extenderze za pomocą wstrzyknięcia polecenia.

Przeprowadzanie analizy podatności

https://chacker.pl/

W tym momencie analiza podatności nie różni się wiele od tego, czego uczono w poprzednich sekcjach. Można wyszukiwać podatności typu command-injection, format-string, bufferoverflow, use-after-free, misconfiguration i wiele innych. W tym przypadku użyjemy techniki wyszukiwania podatności typu commandinjection w plikach wykonywalnych. Ponieważ /bin/ssi jest plikiem binarnym, poszukamy ciągów formatujących, które używają %s (dla string), a następnie przekierujemy dane wyjściowe do /dev/null (co oznacza, że ​​nie interesują nas dane wyjściowe). Ten wzorzec jest interesujący, ponieważ może wskazywać na funkcję sprintf, która tworzy polecenie z potencjalnie kontrolowaną przez użytkownika zmienną do użycia z popen lub systemem. Na przykład polecenie sprawdzające, czy inny host jest aktywny, można utworzyć w następujący sposób:

Kontynuując od katalogu squashfs-root z laboratorium 21-1, przeanalizujemy plik binarny ssi. Jeśli zmienna jest kontrolowana przez atakującego i nie jest czyszczona, a polecenie cmd jest używane do wykonania w powłoce, atakujący może wstrzyknąć swoje polecenie do zamierzonego polecenia. W tym przypadku mamy dwa interesujące ciągi znaków, które wydają się pobierać plik:

Uzbrojeni w te dwa ciągi znaków, zaczniemy odwracać kod binarny, aby sprawdzić, czy mamy kontrolę nad zmienną. Ghidra będzie naszym narzędziem z wyboru w tym laboratorium, ponieważ jest dostępna bezpłatnie. Zapoznaj się z rozdziałem 4, aby uzyskać instrukcje dotyczące instalowania i tworzenia projektu. Głównym celem analizy Ghidra jest ustalenie, czy ciąg jest używany w sposób, który umożliwia atakującemu jego zmianę. Po otwarciu pliku binarnego SSI w Ghidra i upewnieniu się, że procesor jest ustawiony na MIPS, wykonujemy następujące kroki:

  1. Wyszukaj interesujący Cię ciąg znaków.
  2. Określ, w jaki sposób jest używany ciąg znaków.
  3. Określ, skąd pochodzi adres URL (jeśli jest zakodowany na stałe, nie jesteśmy nim zainteresowani).

Przejdź do menu Szukaj | Dla ciągów znaków, aby wyświetlić ekran wyszukiwania tekstu, pokazany tutaj. Pozostaw ustawienia domyślne, a następnie kliknij Szukaj.

Po zakończeniu wyszukaj „wget” (zauważ spację po wget), a zobaczysz dwa ciągi, które znaleźliśmy, używając wiersza poleceń (1) strings na liście. Znajdujemy tylko dwa wystąpienia „wget”: jedno to ciąg formatu statycznego, a drugie to odwołanie do ciągu statycznego

Dwukrotne kliknięcie wyróżnionego wyniku przeniesie nas do tego adresu w liście dezasemblacji. Po przejściu do okna Listing naciśnij CTRL-SHIFT-F, gdy kursor znajduje się pod adresem 00428458 i kliknij dwukrotnie jedyne odniesienie pod adresem 00409010. Teraz zobaczysz zdezasemblowany kod w odniesieniu po lewej stronie i zdekompilowaną wersję zdezasemblowanego kodu po prawej stronie. Przewijając w dół, zobaczymy, że ciąg jest używany w sprintf do skonstruowania polecenia pobierania, które jest przekazywane do systemu, jak pokazano poniżej.

W tym momencie wiemy przynajmniej, że ciąg jest używany do wywołania systemu. Stąd musimy zrozumieć, w jaki sposób dostarczany jest adres URL w ciągu formatu. Wymaga to od nas prześledzenia przepływu sterowania programu do tego punktu. Aby prześledzić przepływ sterowania do wejścia tej podprogramu/funkcji, musimy przewinąć do góry funkcji i wybrać adres (00408f30) po lewej stronie. Po wybraniu adresu po prostu naciskamy CTRL-SHIFT-F, aby przejść do odniesienia, jak pokazano tutaj.

Odwołanie krzyżowe do procedury pobierania jest w rzeczywistości tabelą wyszukiwania ze wskaźnikami funkcji do punktów wejścia dla każdego polecenia. Kod wyszukuje polecenie i przechodzi do wskaźnika procedury, który jest obok niego. Zobaczysz polecenia dla „Funkcji IPv6”, „Pobierz FW i język do DUT” i „get_wan_ip”, tuż nad i pod adresem. Zwróć uwagę, że polecenia mają formę krótkiej nazwy, wskaźnika funkcji i długiej nazwy. Ponieważ jest to tabela wyszukiwania, musimy znaleźć początek tabeli, aby zlokalizować do niej odwołanie krzyżowe. Przewijając w górę, widzimy, że adres 004466dc wydaje się być podstawą tabeli skoków. Naciśnięcie CTRL-SHIFT-F na tym adresie powoduje, że otrzymujemy kod, który przetwarza tabelę skoków, jak pokazano poniżej (ssi_cgi_tool_main).

Chociaż nie udało nam się całkowicie prześledzić pochodzenia wywołania systemowego do roota, można śmiało powiedzieć, że wskazuje ono na polecenie cgi w celu pobrania oprogramowania sprzętowego. Kilka poleceń greps (2) (4) w rootfs dla ciągu „download_fw_lp” daje nam pochodzenie (3)(5). W tym momencie przejdziemy do próby wykorzystania urządzenia poprzez aktualizację oprogramowania sprzętowego.