Wystartowała Akademia NIS2/KSC2! Można jeszcze dołączyć do końca lipca!
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Bezpłatne szkolenie: AI dla admina. Top 5 zadań, które zrobisz szybciej
Wystartowała Akademia NIS2/KSC2! Można jeszcze dołączyć do końca lipca!
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Bezpłatne szkolenie: AI dla admina. Top 5 zadań, które zrobisz szybciej
Badacze bezpieczeństwa z Paradigm Shift opublikowali szczegóły nowo wykrytej podatności wraz z działającym PoC (Proof-of-Concept), której nadano nazwę usbliter8. Luka występuje w starszych urządzeniach Apple z układami SoC A12, S4/S5 oraz A13. Jej użycie może prowadzić do całkowitego przejęcia kontroli nad procesem rozruchowym urządzenia (boot-chain), co z kolei umożliwia uruchomienie dowolnego oprogramowania z najwyższymi uprawnieniami.
TLDR:
Podatność występuje w pamięci BootROM (SecureROM) i jest o tyle niebezpieczna, że nie można jej naprawić aktualizacją. Wynika to z faktu, że pamięć ta jest zapisywana danymi na etapie produkcji, a następnie “szczelnie zamykana”, aby uniemożliwić jakąkolwiek modyfikację lub jej nadpisanie złośliwym kodem. Jest to szczególnie istotne, ponieważ pamięć BootROM zawiera instrukcje startowe poszczególnych komponentów sprzętowych oraz odpowiada za bezpieczne uruchomienie samego systemu Apple.
Atak nie jest zdalny, wymaga fizycznego dostępu do urządzenia oraz wprowadzenia go w tryb DFU (Device Firmware Update). Następnie, korzystając ze specjalistycznego oprogramowania i sprzętu do przesyłania zmodyfikowanych pakietów przez interfejs USB, można przystąpić do realizacji działań.
Jak widać, proces eksploitacji nie jest trywialny i jest mało prawdopodobny do odtworzenia w warunkach domowych.
Zgodnie z opinią badaczy źródłem problemu jest kontroler USB Synopsys DesignWare (DWC2), a mówiąc dokładniej implementacja nietypowej arytmetyki na wskaźnikach pamięci. Podczas komunikacji przez USB urządzenie odbiera tzw. pakiety kontrolne (USB Setup Packets). Obsługa tych pakietów jest automatycznie realizowana przez kontroler DWC2 za pomocą mechanizmu DMA (Direct Memory Access).
W pamięci urządzenia zaalokowano miejsce na maksymalnie trzy takie pakiety, każdy po 8 bajtów, czyli w sumie 24 bajty. Kontroler działa w tym przypadku jak bufor cykliczny. Zapisuje pierwszy pakiet, następnie drugi i trzeci, po czym dla czwartego pakietu następuje zresetowanie adresu bazowego DMA, powrót na początek bufora i umieszczenie nowego pakietu na pozycji pierwszej. Kolejne dane są obsługiwane w analogiczny sposób.
<img src=”https://ps.tc/assets/images/blog/usbliter8/buffer_animation.svg”>
Gif prezentujący prawidłowy sposób zapisu danych w buforze cyklicznym. Źródło: ps.tc
A co jeśli pakiety będą miały inny rozmiar niż 8 bajtów? Inżynierowie “poszli trochę na skróty” i założyli, że wskaźnik DOEPDMA (przechowujący dokładny adres w pamięci, pod którym kontroler USB fizycznie zapisuje dane) będzie inkrementowany o rozmiar odczytanych danych, natomiast powrót będzie zmniejszał stan rejestru o stałą wartość – 24 bajty.
Dalej to już w zasadzie nie trzeba mówić nic więcej. Kontroler zapisał przykładowo 12 bajtów łącznie w trzech pakietach, po czym automatycznie cofnął licznik o 24 bajty, wykraczając poza obszar zaalokowanej pamięci. Klasyczny przykład podatności buffer underflow (najczęściej spotykamy się z overflow, jednak w tym przypadku wskaźnik cofa się przed adres początku bufora).
<img src=”https://ps.tc/assets/images/blog/usbliter8/buffer_animation_bug.svg”>
Gif prezentujący nieprawidłowe działanie mechanizmu zapisu danych – Buffer underflow. Źródło: ps.tc
W efekcie atakujący ma możliwość kontrolowanego nadpisywania obszarów pamięci, które w ogóle nie powinny być dla niego dostępne.
Co ciekawe, ten sam kontroler USB znajduje się również w starszych procesorach (A11 – znanych m.in. z iPhone’a X), jednak w ich przypadku eksploit nie zadziała. Oprogramowanie układowe (firmware) po odebraniu każdego pakietu danych prewencyjnie resetuje wartość adresu DMA, ustawiając go ponownie na początek zaalokowanego bufora.
W SecureROM dla układów A12 i A13 zrezygnowano z tej funkcjonalności, w pełni ufając poprawności implementacji kontrolera sprzętowego. Co więcej, układy te na etapie rozruchu mają domyślnie wyłączony mechanizm zabezpieczający pamięć przed nieautoryzowanym dostępem przez DMA (USB DART). Atakujący mógł zatem modyfikować kluczowe obszary pamięci, nie napotykając przy tym żadnych ograniczeń.
Konsekwencją wykrytej luki jest możliwość wstrzyknięcia własnego handlera żądań USB, czy też uruchomienie niepodpisanego obrazu iBoot. Dotychczasowa analiza nie wykazała, aby doszło do przełamania mechanizmów bezpieczeństwa procesora Secure Enclave Processor (SEP), gdzie przetwarzane są krytyczne informacje (klucze szyfrujące, dane biometryczne, itp.). Niemniej jednak przejęcie kontroli na poziomie BootROM całkowicie unieważnia bezpieczny łańcuch rozruchu opracowany przez Apple.
Z racji tego, że błąd nie może zostać naprawiony aktualizacją zaleca się rozważenie wymiany sprzętu na model z nowszym procesorem. Biorąc pod uwagę rygorystyczne warunki, które muszą być spełnione, aby doszło do ataku, zaleca się monitorowanie fizycznej lokalizacji urządzenia oraz nieudostępniania go osobom trzecim – co w zasadzie jest oczywiste.
Choć podatność pozwala na uruchomienie kodu na zablokowanym urządzeniu, należy wyjaśnić kwestie bezpieczeństwa danych. Prywatne zdjęcia, notatki czy informacje przechowywane w pamięci są zaszyfrowane kluczem powiązanym z kodem PIN i chronione przez Secure Enclave. Bez podania prawidłowego kodu na ekranie, dane użytkownika pozostają bezpieczne (o ile sam mechanizm kryptograficzny nie został złamany), nawet jeśli cyberprzestępca zmodyfikował BootROM.
Lista podatnych urządzeń:
Źródło: ps.tc
~_secmike