r   e   k   l   a   m   a
r   e   k   l   a   m   a

Broadpwn: tak dziś się robi radiowe robaki na miliard smartfonów

Strona główna AktualnościBEZPIECZEŃSTWO

Ujawniona w kwietniu technika ataku na procesory pasma podstawowego Broadcoma zmusiła zarówno Apple jak i Google do wprowadzenia szybkich poprawek w mobilnych systemach: ta luka zagrażała setkom milionów urządzeń. Teraz najwyraźniej mamy powtórkę z tej historii. Zademonstrowany podczas ostatniej konferencji Black Hat atak pozwala na zdalne nadpisanie firmware czipów Wi-Fi z rodziny BCM43xx, a następnie zdalne uruchomienie kodu, zarówno na Androidzie jak i iOS-ie.

Odkrywca luki, Nitay Artenstein, może być z siebie dumny. Coraz trudniej stworzyć zdalne exploity, które nie wymagają żadnej interakcji ze strony użytkownika – a takie interakcje, przeprowadzane głównie przez przeglądarki (kliknij bo inaczej twój telefon będzie zawirusowany!) działają jedynie na najbardziej naiwne osoby. Ostatnim takim skutecznym, samodzielnie się propagującym w Sieci zagrożeniem był robak Conficker z 2008 roku. Zbudowany przez Artensteina exploit Broadpwn zapisze się w historii jako pierwszy po Confickerze samopropagujący się robak sieciowy, który wykorzystując sieć Wi-Fi zaraża urządzenia mobilne.

Broadcom jest największym na świecie dostawcą czipów radiowych Wi-Fi, wykorzystywanym w najpopularniejszych markach smartfonów, w tym iPhone’ach i Samsungach Galaxy. Smartfonowe czipy radiowe to zaś o wiele ciekawsze ofiary, niż te, które wykorzystuje się w komputerach osobistych. Obsługują one nie tylko warstwę fizyczną (PHY), ale ze względu na optymalizację zużycia energii w urządzeniach mobilnych, także warstwę kontroli dostępu do nośnika (MAC) i podwarstwę zarządzania uwierzytelnianiem (MLME) – jest to tzw. FullMAC. Oznacza to, że sterownik w kernelu otrzymuje „na tacy” pakiety danych do wysłania, nie musi z nimi już sam nic robić.

r   e   k   l   a   m   a

Od zabezpieczeń głowa nie boli

Podczas testów przeprowadzonych na czipach Wi-Fi Broadcoma udało się ustalić, że są one wolne od jednej z największych bolączek współczesnych napastników: zabezpieczeń DEP i ASLR. Nie tylko dysponujemy przewidywalną przestrzenią adresową, możemy także czytać, pisać i uruchamiać kod z dowolnego miejsca w pamięci – tak jak to było za starych dobrych czasów Windowsa 95 czy 98.

A co siedzi w takim czipie? Sporo ciekawostek. Co prawda firmware Wi-Fi jest proste, w badanych czipach udało się zidentyfikować około 9 tys. funkcji, o rząd wielkości mniej, niż w procesorach pasma podstawowego, więc i potencjał do exploitowania jest mniejszy. Z drugiej jednak strony łatwo się zabrać za jego badanie. Firmware jest niezaszyfrowane, ładowane do pamięci operacyjnej czipu za każdy razem gdy jest on resetowany, nie ma też żadnych testów poprawności – więc można łatwo modyfikować kod i patrzeć, co z tego będzie.

Okazuje się, że w środku czipów Wi-Fi Broadcoma działa mikrokontroler ARM Cortex-R4, obsługujący warstwy MAC i MLME przed przekazaniem otrzymanych pakietów do jądra, ale to nie wszystko. Tkwi tam jeszcze własnościowy układ Broadcoma, obsługujący warstwę fizyczną, oraz specjalny interfejs do procesora głównego smartfonu.

Na tym ARM-owym mikrokontrolerze działa jakiś bliżej nieznany, zamknięty system czasu rzeczywistego HNDRTE. To że jest zamknięty, wcale nie znaczy, że nie ma nigdzie jego kodu źródłowego. Artenstein z kolegami odkrył, że jego kod źródłowy wyciekł wraz ze źródłami firmware zapomnianego dziś routera Zyxel VMG-1312. Co prawda była to starsza wersja, nie obejmująca najnowszych protokołów 802.11, ale i tak okazała się ogromnie pomocna w analizie funkcji obsługujących pakiety.

Przepełnij mi bufor: ta funkcja sama się prosiła

Znalezienie ciekawych błędów było już proste. Pomogła modularność kodu, przystosowanego do obsługi różnych protokołów 802.11. Ostatecznie uwagę zwróciła funkcja wlc_bss_parse_wme_ie, będąca częścią Wireless Multimedia Extension – rozszerzenia mającego pozwolić na priorytetyzację ruchu sieciowego dla multimediów. To właśnie tam znaleziono klasyczny wręcz błąd: program wywołuje kopiowanie fragmentu pamięci, bez sprawdzenia, czy bufor jest dość duży, by pomieścić kopiowaną zawartość. Tak – to zwyczajne przepełnienie bufora. Co więcej, kopiowane dane zawsze trafiają w to samo miejsce, w tej samej strukturze danych.

Napisanie exploita nie było jakoś specjalnie trudne. Napastnik może czynić sensowne założenia co do przestrzeni adresowej atakowanego programu, samo zaś zawieszenie czipu Wi-Fi nie jest dla użytkownika zbytnio zauważalne – ot po prostu straci połączenie sieciowe, zauważy, że zniknęła ikonka z paska powiadomień. Zbudowany więc został słownik adresów dla poszczególnych wersji firmware Broadcoma, a następnie siłowo atakowano Wi-Fi spreparowanymi pakietami, aż ustalono poprawne zestawy adresów (ulepszona wersja exploitu nawet tego nie potrzebuje). Później już „tylko” pozostało poszukać metody na uruchomienie wgranego tak kodu. Też nie było to trudne – pomogła funkcja obsługująca tablicę adresów, spod których ten dziwny system operacyjny HNDRTE uruchamiał łatki aktualizacji. A gdzie umieścić shellcode? Miejsce znalazło się w specjalnym buforze systemu, używanym do zapisu pakietów z warstwy PHY przed ich przetworzeniem.

Atak wygląda więc trywialnie – złośliwy kod rozgłaszany jest po Wi-Fi na wszystkich kanałach. Gdy czip radiowy smartfonu ofiary skanuje eter pod kątem nowych punktów dostępowych, jego bufor zostaje załadowany bojowym ładunkiem exploita. Kolejne pakiety przenoszą zaś kod, który szuka w buforze specjalnej liczby – początku ładunku – i skacze do niego.

Jak od uruchomienia kodu na czipie radiowym przejść do uruchomienia kodu na procesorze aplikacyjnym? Przygotowany atak wykorzystał chyba najprostszą metodę, choć możliwe jest wykorzystanie innych metod, np. ataku po PCIe czy exploitowania sterownika w kernelu. W tym wypadku czeka się, aż użytkownik wejdzie na niezaszyfrowaną stronę (HTTP), a następnie przekierowuje go na złośliwy adres, wpisując w pakiet sieciowy polecenie JavaScriptu.

Radiowy robak

Sama natura odkrytego błędu, który można wykorzystać bez jakiegokolwiek uwierzytelniania, jak i stabilność jego działania, pozwoliły na jego podstawie stworzyć samoreplikującego się radiowego robaka. Zakażony smartfon może stać się mobilnym centrum zarazy, rozsiewającym Broadpwn.

Wystarczyło zmienić kod tak, by odpytującym o nowe punkty dostępowe urządzenia wysyłać odpowiedzi podszywające się pod te punkty dostępowe, a następnie przeprowadzić sekwencję wymiany pakietów uwierzytelniających, zawierających kod aktywujący odkryty błąd. Nawet jeśli czip się zawiesi, użytkownik tego nie zauważy, można więc siłowo dopasować się do jego wersji firmware i odkryć właściwe lokacje w pamięci.

Z przeprowadzonych testów wynikać ma, że w ciągu godziny sniffowania pakietów ruchu sieciowego w zatłoczonej przestrzeni miejskiej, 70% z nich pochodziło z czipów Wi-Fi produkcji Broadcoma. Można sobie tylko wyobrazić konsekwencje wypuszczenia takiego robaka na wolność.

Co robić i jak żyć?

Ujawnienie tych informacji przychodzi oczywiście już po wydaniu przez Broadcoma łatek. Podatność oznaczona jako CVE-2017-9417 została w Androidzie załatana w biuletynie bezpieczeństwa z 5 lipca, Apple włączyło poprawkę do iOS-a 10.3.3 wydanego 19 lipca.

Teraz tylko ręka w górę ci użytkownicy Androida, którzy mają zainstalowane biuletyny bezpieczeństwa z 5 lipca.

Ze szczegółami działania Broadpwn zapoznacie się we wpisie blogowym Nitaya Artensteina.

© dobreprogramy
r   e   k   l   a   m   a
r   e   k   l   a   m   a

Komentarze

r   e   k   l   a   m   a
r   e   k   l   a   m   a
Czy wiesz, że używamy cookies (ciasteczek)? Dowiedz się więcej o celu ich używania i zmianach ustawień.
Korzystając ze strony i asystenta pobierania wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.