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.

Analiza pakietu aktualizacji

https://chacker.pl/

W większości przypadków pakiety aktualizacji dla urządzenia można pobrać ze strony dostawcy. Obecnie wiele, jeśli nie większość aktualizacji, nie jest szyfrowanych, dlatego potencjalnie można je zdekonstruować za pomocą różnych narzędzi, takich jak unzip, binwalk i Firmware Mod Kit. W celach instruktażowych przyjrzymy się systemowi opartemu na systemie Linux, ponieważ prawdopodobnie znasz te systemy. W systemach wbudowanych opartych na systemie Linux pakiety aktualizacji często zawierają nową kopię wszystkich niezbędnych plików i katalogów wymaganych do obsługi systemu. Wymagane katalogi i pliki są określane jako system plików głównych (RFS). Jeśli atakujący może uzyskać dostęp do RFS, będzie miał procedury inicjalizacji, kod źródłowy serwera WWW, wszelkie pliki binarne wymagane do uruchomienia systemu, a także prawdopodobnie niektóre pliki binarne, które zapewnią atakującemu przewagę podczas próby wykorzystania systemu. Na przykład, jeśli system używa BusyBox i zawiera serwer telnetd, atakujący może wykorzystać serwer Telnet do zapewnienia zdalnego dostępu do systemu. Dokładniej, serwer telnetd zawarty w BusyBox dostarcza argument, który pozwala na jego wywołanie bez uwierzytelniania i powiązanie z dowolnym programem (/usr/sbin/telnetd –l /bin/sh). Jako przykład zbadamy starszą wersję aktualizacji oprogramowania sprzętowego bezprzewodowego wzmacniacza zasięgu D-Link DAP-1320 (wersja 1.1 sprzętu A). Wybraliśmy tę aktualizację, ponieważ jest to starsza aktualizacja, która została załatana, a ujawnienie podatności (www.kb.cert.org/vuls/id/184100) zostało zgłoszone przez kilku autorów.

Pierwszym krokiem jest stworzenie środowiska do dekonstrukcji oprogramowania sprzętowego. W naszym przypadku użyjemy binwalk. Podstawowym systemem hosta do naszej analizy jest Kali Linux 2021.1. Aby zainstalować binwalk, musimy najpierw zainstalować wymagania wstępne za pomocą menedżera pakietów apt-get, aby zainstalować pip3 i usunąć zainstalowaną wersję binwalk (1). Po spełnieniu wymagań wstępnych instalacja wymaga sklonowania projektu z GitHub, sprawdzenia określonej znanej działającej wersji, zmodyfikowania skryptu deps.sh w celu skorygowania błędów związanych z Kali, uruchomienia skryptu deps.sh (2) i zainstalowania binwalk. Następnie próbujemy wyodrębnić oprogramowanie sprzętowe (3) , a jeśli pakiet i typy zawartości są znane narzędziu, zostaną one wyodrębnione w celu dalszej analizy. Z danych wyjściowych możemy wywnioskować, że narzędzie znalazło zarówno obraz jądra MIPS Linux (4), jak i system plików squashfs (5)(6). Przeglądając ekstrakcję, identyfikujemy ją jako system rootfs (7) i weryfikujemy, czy pliki binarne są kompilowane dla MIPS (8).

Teraz, gdy pakiet aktualizacji został wyodrębniony, nadszedł czas na przeglądanie plików, szukając funkcji, konfiguracji lub nieznanych aplikacji. Tabela  definiuje niektóre elementy, których należy szukać podczas przeglądania.

UWAGA Każda znaleziona wersja pliku wykonywalnego lub biblioteki musi zostać sprawdzona pod kątem znanych luk. Na przykład użyj wyszukiwania Google pod kątem luki <name> <version number>.

Po zebraniu wszystkich tych informacji będziesz chciał zrozumieć, co przetwarza żądania z przeglądarki lub jakichkolwiek uruchomionych usług. Ponieważ wykonaliśmy już wszystkie poprzednie kroki, skróciliśmy poniższy przykład, aby analiza była bardziej skondensowana i prostsza. Odkryto, że serwerem internetowym jest lighttpd (1), który używa lighttpd*.conf (2) i modules.conf (3) do konfiguracji. Ponadto używa cgi.conf (4), który kieruje prawie całą obsługę do /bin/ssi (5) (plik wykonywalny binarny).

Mamy już pomysł, jak postępować i rozpoczniemy analizę podatności.

Statyczna analiza luk w zabezpieczeniach urządzeń wbudowanych

https://chacker.pl/

Statyczna analiza luk w zabezpieczeniach polega na wyszukiwaniu luk w zabezpieczeniach poprzez inspekcję pakietów aktualizacji, systemów plików i plików binarnych systemu bez konieczności uruchamiania ocenianego urządzenia. W rzeczywistości w większości przypadków atakujący nie musi mieć urządzenia, aby wykonać większość analizy statycznej. W tej sekcji zapoznasz się z niektórymi narzędziami i technikami przeprowadzania analizy statycznej na urządzeniu wbudowanym.

Wykorzystywanie urządzeń wbudowanych

https://chacker.pl/

Ta część dotyczy wykorzystywania urządzeń wbudowanych. Temat ten staje się coraz ważniejszy wraz z pojawieniem się Internetu rzeczy (IoT), jak omówiono w poprzednich rozdziałach. Od wind po samochody, tostery i wszystko, co „inteligentne”, urządzenia wbudowane stają się wszechobecne, a luki w zabezpieczeniach i zagrożenia stają się niezliczone. Jak zauważył Bruce Schneier, jest to jak Dziki Zachód lat 90.; wszędzie, gdzie spojrzymy, są luki w zabezpieczeniach tych urządzeń wbudowanych. Schneier wyjaśnia, że ​​dzieje się tak z powodu wielu czynników, w tym ograniczonych zasobów samych urządzeń i ograniczonych zasobów producentów w niskomarżowej dziedzinie produkcji urządzeń wbudowanych. Miejmy nadzieję, że więcej etycznych hakerów stanie na wysokości zadania i zrobi wgniecenie w fali luk w zabezpieczeniach urządzeń wbudowanych.

Podsumowanie

https://chacker.pl/

Krótko omówiliśmy różnice między różnymi pakietami CPU (mikrokontroler, mikroprocesor i SoC), kilkoma interesującymi interfejsami szeregowymi, JTAG i oprogramowaniem wbudowanym. W naszej dyskusji na temat interfejsów szeregowych, zostałeś wprowadzony do JTAGulatora w przykładzie odkrywania portów UART (szeregowych). JTAGulatora można również użyć do odkrywania portów debugowania JTAG i potencjalnie kilku innych interfejsów. Krótko omówiliśmy również różne przypadki użycia oprogramowania, w tym bootloadery, brak systemu operacyjnego, RTOS i ogólny system operacyjny. Na tym etapie powinieneś mieć już wspólne słownictwo dotyczące systemów wbudowanych i kilka obszarów wymagających uwagi, gdy będziesz próbował lepiej je zrozumieć.

Ogólny system operacyjny

https://chacker.pl/

Termin ogólny system operacyjny jest używany do opisu systemów operacyjnych innych niż RTOS. Linux jest najczęstszym przykładem ogólnego systemu operacyjnego. Linux dla systemów wbudowanych nie różni się zbytnio od Linuxa dla systemu stacjonarnego. Systemy plików i architektura są takie same. Główne różnice między wersjami wbudowanymi i stacjonarnymi to ograniczenia dotyczące urządzeń peryferyjnych, pamięci masowej i pamięci. Aby pomieścić ogólnie mniejszą pamięć masową i pamięć, system operacyjny i system plików są minimalizowane. Na przykład zamiast używać typowych programów instalowanych z Linuksem, takich jak bash, telnetd, ls, cp i tym podobne, zwykle używa się mniejszego monolitycznego programu o nazwie BusyBox. BusyBox zapewnia funkcjonalność w ramach pojedynczego pliku wykonywalnego, używając pierwszego argumentu jako żądanego programu. Chociaż chciałbym powiedzieć, że nieużywane usługi są usuwane w celu zmniejszenia powierzchni ataku, prawdopodobnie są usuwane tylko w celu zaoszczędzenia miejsca. Chociaż większość urządzeń celowo nie zapewnia użytkownikowi dostępu do konsoli, wiele z nich ma port szeregowy do dostępu do konsoli na płycie. Gdy tylko uzyskasz dostęp do głównego systemu plików, albo przez konsolę, albo przez wyodrębnienie obrazu z pamięci masowej, będziesz chciał poszukać wersji aplikacji i bibliotek, katalogów zapisywalnych przez wszystkich, wszelkich trwałych pamięci masowych i procesu inicjalizacji. Proces inicjalizacji dla Linuksa, znajdujący się w /etc/inittab i /etc/init.d/ rcS, da ci pojęcie o tym, jak aplikacje są uruchamiane podczas rozruchu.

System operacyjny czasu rzeczywistego

https://chacker.pl/

Systemy, które są bardziej złożone i mają trudne wymagania dotyczące przetwarzania czasu, zazwyczaj używają systemu operacyjnego czasu rzeczywistego (RTOS), takiego jak VxWorks. Zaletą RTOS jest to, że zapewnia on funkcjonalność systemu operacyjnego, taką jak zadania, kolejki, stosy sieciowe, systemy plików, obsługę przerwań i zarządzanie urządzeniami, z dodatkową możliwością deterministycznego harmonogramu. Na przykład autonomiczne lub wspomagane przez kierowcę systemy samochodowe prawdopodobnie używają RTOS, aby zapewnić, że reakcje na różne czujniki zachodzą w granicach tolerancji bezpieczeństwa systemu (sztywny). Dla tych, którzy są przyzwyczajeni do systemów z systemem Linux, VxWorks jest zupełnie inny. Linux ma dość standardowy system plików ze wspólnymi programami, takimi jak telnet, BusyBox, ftp i sh, a aplikacje działają jako oddzielne procesy w systemie operacyjnym. W przypadku VxWorks wiele systemów działa w zasadzie z jednym procesem, z wieloma zadaniami i bez standardowego systemu plików lub aplikacji pomocniczych. Podczas gdy Linux ma wiele informacji dotyczących ekstrakcji oprogramowania sprzętowego i inżynierii wstecznej, jest bardzo mało informacji dotyczących VxWorks. Ekstrakcja oprogramowania sprzętowego za pomocą SPI lub I2C lub użycie pobranego pliku dostarczy Ci ciągów i kodu, które można rozmontować. Jednak w przeciwieństwie do Linuksa, zazwyczaj nie otrzymasz łatwo przyswajalnych danych. Analiza ciągów pod kątem haseł, certyfikatów, kluczy i ciągów formatujących może przynieść przydatne sekrety do wykorzystania w aktywnym systemie. Ponadto użycie JTAG do ustawienia punktów przerwania i wykonania działań na urządzeniu jest prawdopodobnie najskuteczniejszą metodą odwrócenia tej funkcjonalności.