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

Ujawniona w kwietniu technika ataku na procesory pasmapodstawowego Broadcoma zmusiłazarówno Apple jak i Google do wprowadzenia szybkich poprawek wmobilnych systemach: ta luka zagrażała setkom milionów urządzeń. Teraz najwyraźniej mamy powtórkę z tejhistorii. Zademonstrowany podczas ostatniej konferencji Black Hatatak pozwala na zdalne nadpisanie firmware czipów Wi-Fi z rodzinyBCM43xx, a następnie zdalne uruchomienie kodu, zarówno naAndroidzie jak i iOS-ie.

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

02.08.2017 21:06

Odkrywca luki, Nitay Artenstein, może być z siebie dumny. Coraztrudniej stworzyć zdalne exploity, które nie wymagają żadnejinterakcji ze strony użytkownika – a takie interakcje,przeprowadzane głównie przez przeglądarki (kliknij bo inaczej twójtelefon będzie zawirusowany!) działają jedynie na najbardziejnaiwne 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 historiijako 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 radiowychWi-Fi, wykorzystywanym w najpopularniejszych markach smartfonów, wtym iPhone’ach i Samsungach Galaxy. Smartfonowe czipy radiowe tozaś o wiele ciekawsze ofiary, niż te, które wykorzystuje się wkomputerach osobistych. Obsługują one nie tylko warstwę fizyczną(PHY), ale ze względu na optymalizację zużycia energii wurządzeniach mobilnych, także warstwę kontroli dostępu do nośnika(MAC) i podwarstwę zarządzania uwierzytelnianiem (MLME) – jest totzw. FullMAC. Oznacza to, że sterownik w kernelu otrzymuje „natacy” pakiety danych do wysłania, nie musi z nimi już sam nicrobić.

Od zabezpieczeń głowa nie boli

Podczas testów przeprowadzonych na czipach Wi-Fi Broadcoma udałosię ustalić, że są one wolne od jednej z największych bolączekwspółczesnych napastników: zabezpieczeń DEP i ASLR. Nie tylkodysponujemy przewidywalną przestrzenią adresową, możemy takżeczytać, 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 firmwareWi-Fi jest proste, w badanych czipach udało się zidentyfikowaćokoło 9 tys. funkcji, o rząd wielkości mniej, niż w procesorachpasma podstawowego, więc i potencjał do exploitowania jestmniejszy. Z drugiej jednak strony łatwo się zabrać za jegobadanie. Firmware jest niezaszyfrowane, ładowane do pamięcioperacyjnej 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łamikrokontroler ARM Cortex-R4, obsługujący warstwy MAC i MLME przedprzekazaniem otrzymanych pakietów do jądra, ale to nie wszystko.Tkwi tam jeszcze własnościowy układ Broadcoma, obsługującywarstwę fizyczną, oraz specjalny interfejs do procesora głównegosmartfonu.

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ł wrazze źródłami firmware zapomnianego dziś routera Zyxel VMG-1312. Coprawda była to starsza wersja, nie obejmująca najnowszychprotokołów 802.11, ale i tak okazała się ogromnie pomocna wanalizie 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łamodularność kodu, przystosowanego do obsługi różnych protokołów802.11. Ostatecznie uwagę zwróciła funkcja wlc_bss_parse_wme_ie,będąca częścią Wireless Multimedia Extension – rozszerzeniamającego pozwolić na priorytetyzację ruchu sieciowego dlamultimedió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.

Programy

Zobacz więcej
Wybrane dla Ciebie
Komentarze (29)