Firmware Analysis
Wprowadzenie
Oprogramowanie układowe to istotne oprogramowanie umożliwiające urządzeniom poprawne działanie poprzez zarządzanie i ułatwianie komunikacji między komponentami sprzętowymi a oprogramowaniem, z którym użytkownicy wchodzą w interakcje. Jest przechowywane w pamięci stałej, zapewniając urządzeniu dostęp do istotnych instrukcji od momentu włączenia zasilania, co prowadzi do uruchomienia systemu operacyjnego. Badanie i ewentualna modyfikacja oprogramowania układowego to kluczowy krok w identyfikowaniu podatności na ataki.
Zbieranie informacji
Zbieranie informacji to kluczowy początkowy krok w zrozumieniu budowy urządzenia i technologii, które wykorzystuje. Proces ten obejmuje zbieranie danych na temat:
Architektury CPU i systemu operacyjnego, który uruchamia
Szczegółów bootloadera
Układu sprzętowego i kart katalogowych
Metryk kodu źródłowego i lokalizacji źródeł
Zewnętrznych bibliotek i typów licencji
Historii aktualizacji i certyfikatów regulacyjnych
Diagramów architektonicznych i przepływu
Oceny bezpieczeństwa i zidentyfikowanych podatności
W tym celu narzędzia open-source intelligence (OSINT) są nieocenione, podobnie jak analiza dostępnych składników oprogramowania open-source za pomocą procesów manualnych i zautomatyzowanych. Narzędzia takie jak Coverity Scan i Semmle’s LGTM oferują bezpłatną analizę statyczną, którą można wykorzystać do znalezienia potencjalnych problemów.
Pobieranie oprogramowania układowego
Uzyskanie oprogramowania układowego można podejść na różne sposoby, z różnym stopniem złożoności:
Bezpośrednio od źródła (deweloperów, producentów)
Budowanie go z dostarczonych instrukcji
Pobieranie z oficjalnych stron wsparcia
Wykorzystanie zapytań Google dork do znalezienia hostowanych plików oprogramowania układowego
Bezpośredni dostęp do przechowywania w chmurze za pomocą narzędzi takich jak S3Scanner
Przechwytywanie aktualizacji za pomocą technik man-in-the-middle
Wyodrębnianie z urządzenia poprzez połączenia takie jak UART, JTAG lub PICit
Podglądanie żądań aktualizacji w komunikacji urządzenia
Identyfikowanie i korzystanie z zahardcodowanych punktów końcowych aktualizacji
Dumpowanie z bootloadera lub sieci
Usuwanie i odczytywanie chipa pamięci, gdy wszystko inne zawodzi, za pomocą odpowiednich narzędzi sprzętowych
Analiza oprogramowania układowego
Teraz, gdy masz oprogramowanie układowe, musisz wyodrębnić informacje na jego temat, aby wiedzieć, jak je traktować. Różne narzędzia, których możesz użyć do tego:
Jeśli nie znajdziesz wiele za pomocą tych narzędzi, sprawdź entropię obrazu za pomocą binwalk -E <bin>
, jeśli entropia jest niska, to prawdopodobnie nie jest zaszyfrowany. Jeśli entropia jest wysoka, jest prawdopodobnie zaszyfrowany (lub skompresowany w jakiś sposób).
Ponadto, możesz użyć tych narzędzi do wyodrębnienia plików osadzonych w oprogramowaniu układowym:
pageFile/Data Carving & Recovery ToolsLub binvis.io (kod) do inspekcji pliku.
Pobieranie Systemu Plików
Dzięki wcześniej wspomnianym narzędziom, takim jak binwalk -ev <bin>
, powinieneś być w stanie wyodrębnić system plików.
Binwalk zazwyczaj wyodrębnia go do folderu nazwanego tak jak typ systemu plików, który zazwyczaj jest jednym z następujących: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Ręczne Wyodrębnianie Systemu Plików
Czasami binwalk nie będzie miał magicznego bajtu systemu plików w swoich sygnaturach. W takich przypadkach użyj binwalka, aby znaleźć przesunięcie systemu plików i wydobyć skompresowany system plików z pliku binarnego, a następnie ręcznie wyodrębnij system plików zgodnie z jego typem, korzystając z poniższych kroków.
Uruchom poniższą komendę dd wycinając system plików Squashfs.
Alternatywnie można również uruchomić następujące polecenie.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Dla squashfs (użytego w powyższym przykładzie)
$ unsquashfs dir.squashfs
Pliki znajdą się w katalogu "squashfs-root
" po wykonaniu powyższych poleceń.
Pliki archiwum CPIO
$ cpio -ivd --no-absolute-filenames -F <bin>
Dla systemów plików jffs2
$ jefferson rootfsfile.jffs2
Dla systemów plików ubifs z pamięcią NAND
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Analiza Firmware
Po uzyskaniu firmware'u konieczne jest jego analizowanie w celu zrozumienia struktury i potencjalnych podatności. Proces ten polega na wykorzystaniu różnych narzędzi do analizy i wydobycia wartościowych danych z obrazu firmware'u.
Narzędzia do Analizy Początkowej
Zestaw poleceń jest dostarczany do wstępnej inspekcji pliku binarnego (nazwanego <bin>
). Te polecenia pomagają zidentyfikować typy plików, wydobywać ciągi znaków, analizować dane binarne oraz zrozumieć szczegóły partycji i systemu plików:
Aby ocenić stan szyfrowania obrazu, sprawdzana jest entropia za pomocą binwalk -E <bin>
. Niska entropia sugeruje brak szyfrowania, podczas gdy wysoka entropia wskazuje na możliwe szyfrowanie lub kompresję.
Do wyodrębniania osadzonych plików zaleca się korzystanie z narzędzi i zasobów takich jak dokumentacja file-data-carving-recovery-tools oraz binvis.io do inspekcji plików.
Wyodrębnianie systemu plików
Za pomocą binwalk -ev <bin>
zazwyczaj można wyodrębnić system plików, często do katalogu nazwanego zgodnie z typem systemu plików (np. squashfs, ubifs). Jednak gdy binwalk nie rozpoznaje typu systemu plików z powodu braku magicznych bajtów, konieczne jest ręczne wyodrębnienie. Polega to na użyciu binwalk
do zlokalizowania przesunięcia systemu plików, a następnie polecenia dd
do wyodrębnienia systemu plików:
Analiza systemu plików
Po wyodrębnieniu systemu plików rozpoczyna się poszukiwanie luk w zabezpieczeniach. Uwaga jest skupiona na niezabezpieczonych demonach sieciowych, stałych poświadczeniach, punktach końcowych interfejsu API, funkcjach serwera aktualizacji, nie skompilowanym kodzie, skryptach uruchamiania oraz skompilowanych binariach do analizy offline.
Kluczowe lokalizacje i elementy do sprawdzenia obejmują:
etc/shadow i etc/passwd dla poświadczeń użytkowników
Certyfikaty SSL i klucze w etc/ssl
Pliki konfiguracyjne i skryptowe pod kątem potencjalnych podatności
Osadzone binaria do dalszej analizy
Powszechne serwery WWW urządzeń IoT i binaria
Kilka narzędzi pomaga w odkrywaniu poufnych informacji i podatności w systemie plików:
LinPEAS i Firmwalker do wyszukiwania poufnych informacji
The Firmware Analysis and Comparison Tool (FACT) do kompleksowej analizy oprogramowania układowego
FwAnalyzer, ByteSweep, ByteSweep-go i EMBA do analizy statycznej i dynamicznej
Sprawdzanie zabezpieczeń skompilowanych binariów
Zarówno kod źródłowy, jak i skompilowane binaria znalezione w systemie plików muszą być dokładnie przeanalizowane pod kątem podatności. Narzędzia takie jak checksec.sh dla binariów Unix oraz PESecurity dla binariów Windows pomagają zidentyfikować niezabezpieczone binaria, które mogą być wykorzystane.
Emulowanie oprogramowania układowego do analizy dynamicznej
Proces emulowania oprogramowania układowego umożliwia analizę dynamiczną działania urządzenia lub pojedynczego programu. Ten podejście może napotkać wyzwania związane z zależnościami sprzętowymi lub architektonicznymi, ale przeniesienie systemu plików głównego lub określonych binariów do urządzenia o pasującej architekturze i kolejności bajtów, takiego jak Raspberry Pi, lub do wirtualnej maszyny zainstalowanej wcześniej, może ułatwić dalsze testowanie.
Emulowanie pojedynczych binariów
Przy badaniu pojedynczych programów istotne jest zidentyfikowanie kolejności bajtów i architektury CPU programu.
Przykład z architekturą MIPS
Aby emulować binaria z architekturą MIPS, można użyć polecenia:
I do zainstalowania niezbędnych narzędzi do emulacji:
Emulacja architektury ARM
Dla binarnych plików ARM proces jest podobny, z użyciem emulatora qemu-arm
do emulacji.
Emulacja pełnego systemu
Narzędzia takie jak Firmadyne, Firmware Analysis Toolkit i inne ułatwiają pełną emulację oprogramowania układowego, automatyzując proces i pomagając w analizie dynamicznej.
Analiza dynamiczna w praktyce
W tym etapie używane jest środowisko rzeczywiste lub emulowane urządzenia do analizy. Istotne jest utrzymanie dostępu do powłoki systemu operacyjnego i systemu plików. Emulacja może nie doskonale odwzorowywać interakcji sprzętowych, co wymaga czasami ponownego uruchomienia emulacji. Analiza powinna ponownie przejrzeć system plików, wykorzystać wystawione strony internetowe i usługi sieciowe oraz badać podatności bootloadera. Testy integralności oprogramowania układowego są kluczowe dla identyfikacji potencjalnych podatności na tylne drzwi.
Techniki analizy w czasie rzeczywistym
Analiza w czasie rzeczywistym polega na interakcji z procesem lub plikiem binarnym w jego środowisku operacyjnym, używając narzędzi takich jak gdb-multiarch, Frida i Ghidra do ustawiania punktów przerwania i identyfikowania podatności poprzez testowanie losowe i inne techniki.
Eksploatacja binarna i dowód koncepcji
Rozwinięcie PoC dla zidentyfikowanych podatności wymaga głębokiego zrozumienia architektury docelowej i programowania w językach niskiego poziomu. Ochrony czasu wykonania binarnego w systemach wbudowanych są rzadkie, ale gdy występują, mogą być konieczne techniki takie jak Return Oriented Programming (ROP).
Przygotowane systemy operacyjne do analizy oprogramowania układowego
Systemy operacyjne takie jak AttifyOS i EmbedOS zapewniają prekonfigurowane środowiska do testów bezpieczeństwa oprogramowania układowego, wyposażone w niezbędne narzędzia.
Przygotowane systemy operacyjne do analizy oprogramowania układowego
AttifyOS: AttifyOS to dystrybucja przeznaczona do przeprowadzania oceny bezpieczeństwa i testów penetracyjnych urządzeń Internetu Rzeczy (IoT). Oszczędza czas, dostarczając prekonfigurowane środowisko z wszystkimi niezbędnymi narzędziami.
EmbedOS: System operacyjny do testów bezpieczeństwa wbudowany w Ubuntu 18.04, załadowany narzędziami do testowania bezpieczeństwa oprogramowania układowego.
Podatne oprogramowanie układowe do praktyki
Aby ćwiczyć odkrywanie podatności w oprogramowaniu układowym, użyj następujących projektów podatnego oprogramowania układowego jako punktu wyjścia.
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
Referencje
Szkolenia i certyfikaty
Last updated