Miliardy komputerów na całym świecie były podatne na ataki hakerskie podczas rozruchu — z powodu luk w zabezpieczeniach LogoFAIL
Interfejsy UEFI uruchamiające urządzenia z systemem Windows i Linux można zhakować przy użyciu złośliwych obrazów logo. Miliardy komputerów z systemem Windows i Linux praktycznie każdego producenta są podatne na nowy atak, który uruchamia złośliwe oprogramowanie sprzętowe na wczesnym etapie procesu uruchamiania. W ten sposób system zostaje zainfekowany wirusami, których wykrycie lub usunięcie przy użyciu istniejących mechanizmów ochronnych jest prawie niemożliwe.
Atak, nazwany przez badaczy LogoFAIL, charakteryzuje się względną łatwością wdrożenia, szerokim zasięgiem podatnych na niego modeli klasy konsumenckiej i korporacyjnej oraz wysokim poziomem kontroli nad nimi. W wielu przypadkach LogoFAIL można wykorzystać zdalnie przy użyciu technik, których nie mogą wykryć tradycyjne produkty zabezpieczające punkty końcowe. A ponieważ exploity są uruchamiane na bardzo wczesnym etapie procesu rozruchu, mogą ominąć różne zabezpieczenia, w tym standardowy w branży system Secure Boot i inne zabezpieczenia firm Intel, AMD i innych producentów sprzętu, zaprojektowane w celu zapobiegania infekcjom przez tak zwane bootkity.
LogoFAIL to zbiór dwudziestu niedawno odkrytych luk, które przez lata, jeśli nie dekady, były ukryte w ujednoliconych, rozszerzalnych interfejsach oprogramowania układowego odpowiedzialnych za uruchamianie nowoczesnych urządzeń z systemem Windows lub Linux. Odkrycie tych luk jest efektem prawie rocznej pracy firmy Binarly, która pomaga klientom identyfikować i chronić podatne systemy.
Dotyczy to produktów firm reprezentujących prawie cały ekosystem x64-86 i ARM. Należą do nich dostawcy UEFI, tacy jak AMI, Insyde i Phoenix (zwani także IBV lub niezależnymi dostawcami BIOS-u); producenci urządzeń, tacy jak Lenovo, Dell i HP; i producenci procesorów, w tym twórcy procesorów Intel, AMD i Arm. Badacze ujawnili atak w środę podczas konferencji dotyczącej bezpieczeństwa Black Hat w Londynie.
Jak sama nazwa wskazuje, LogoFAIL wpływa na logo, w szczególności logo dostawców sprzętu, które pojawiają się na ekranie urządzenia na początku procesu uruchamiania, gdy UEFI jest nadal uruchomione. Parsery obrazów UEFI wszystkich trzech głównych dostawców UEFI mają kilkanaście krytycznych luk w zabezpieczeniach, które do tej pory pozostały niewykryte. Zastępując legalne obrazy logo identycznymi, zaprojektowanymi specjalnie w celu wykorzystania tych błędów, LogoFAIL umożliwia wykonanie złośliwego kodu na najbardziej krytycznym etapie procesu rozruchu, znanym jako DXE (Driver Execution Environment).
„Jeśli etapowi DXE uda się wykonać dowolny kod, oznacza to koniec bezpieczeństwa platformy” – stwierdzili w swoim raporcie badacze z firmy Binarly, która odkryła luki. „Od tego etapu mamy pełną kontrolę nad pamięcią i dyskiem urządzenia docelowego, w tym nad systemem operacyjnym, który zostanie uruchomiony.”
LogoFAIL może następnie dostarczyć „ładunek” drugiego etapu, który zrzuca plik wykonywalny na dysk twardy, zanim w ogóle uruchomi się główny system operacyjny. Poniższy film przedstawia exploit weryfikujący koncepcję stworzony przez badaczy. Urządzenie, którego dotyczy problem, Lenovo ThinkCentre M70s drugiej generacji z procesorem Intel Core 11. generacji z UEFI wydanym w czerwcu, obsługuje standardowe zabezpieczenia oprogramowania sprzętowego, w tym Secure Boot i Intel Boot Guard.
W swoim liście założyciel i dyrektor generalny Binarly, Alex Matrosov, napisał: „LogoFAIL to niedawno odkryty zbiór luk w zabezpieczeniach wysokiego poziomu wpływających na różne biblioteki analizujące obrazy używane w oprogramowaniu systemowym różnych producentów podczas procesu uruchamiania urządzenia. W większości przypadków luki te występują w kodzie referencyjnym, co wpływa nie tylko na jednego dostawcę, ale na cały ekosystem zawierający ten kod oraz producentów urządzeń, które go używają. Atak ten może dać ugrupowaniu zagrażającemu przewagę w ominięciu większości rozwiązań do ochrony punktów końcowych i zapewnić ukryty bootkit oprogramowania sprzętowego, który będzie przechowywany w kapsule oprogramowania sprzętowego ze zmodyfikowanym obrazem logo.
Istnieje kilka sposobów wykorzystania LogoFAIL. Zdalne ataki przeprowadzane są poprzez wykorzystanie niezałatanej luki w przeglądarce, odtwarzaczu multimedialnym lub innej aplikacji i wykorzystanie wynikającej z tego kontroli administracyjnej do zastąpienia prawidłowego obrazu logo przetworzonego na początku procesu pobierania identycznym, wykorzystującym wadę parsera. Inną metodą jest uzyskanie krótkiego dostępu do urządzenia, którego dotyczy problem, gdy jest ono odblokowane, i zastąpienie prawidłowego pliku obrazu złośliwym.
W obu przypadkach złośliwe logo powoduje, że UEFI wykonuje kod spreparowany przez osobę atakującą podczas krytycznej fazy DXE przy każdym uruchomieniu urządzenia. Wykonując kod na tak wczesnym etapie, kiedy następuje większość inicjalizacji systemu, exploit przejmuje cały dalszy przebieg wykonywania, umożliwiając ominięcie zabezpieczeń, takich jak Secure Boot i mechanizmy sprzętowej weryfikacji rozruchu, takie jak Intel Boot Guard, AMD Hardware-Validated Boot, lub Bezpieczny rozruch oparty na ARM TrustZone.
W zależności od konfiguracji UEFI, w wielu przypadkach wystarczy proste polecenie kopiuj/wklej wykonane złośliwie lub przy dostępie fizycznym, aby umieścić złośliwy obraz w tak zwanym ESP (skrót od EFI System Partition) – obszarze dysk twardy, na którym przechowywane są programy ładujące, obrazy jądra i wszelkie sterowniki urządzeń, narzędzia systemowe i inne pliki danych potrzebne przed uruchomieniem głównego systemu operacyjnego.
Takie podejście ma poważne zalety. Po pierwsze, żaden kod wykonywalny nigdy nie dociera na dysk twardy, co jest techniką znaną jako „bezplikowe złośliwe oprogramowanie”, która utrudnia wykrycie przez programy antywirusowe i inne typy oprogramowania zabezpieczającego punkty końcowe. Kolejna zaleta: po utworzeniu obrazu urządzenie pozostaje zainfekowane nawet po ponownej instalacji systemu operacyjnego lub wymianie głównego dysku twardego.
Jeśli oprogramowanie układowe systemu oparte na UEFI jest skonfigurowane tak, aby poprawnie korzystało z zabezpieczeń takich jak Intel Boot Guard i ma niemodyfikowalne logo, niemożliwe jest umieszczenie złośliwego obrazu w ESP. Jednak w wielu przypadkach możliwe jest uruchomienie bezpłatnego narzędzia ze strony internetowej IBV lub producenta urządzenia, które „przeładuje” oprogramowanie sprzętowe z systemu operacyjnego. Aby przejść kontrolę bezpieczeństwa, narzędzie instaluje to samo podpisane kryptograficznie oprogramowanie UEFI, które jest już używane, zmieniając jedynie obraz logo, który nie wymaga ważnego podpisu cyfrowego. W wielu przypadkach narzędzie IBV jest podpisane cyfrowo, co zmniejsza prawdopodobieństwo ingerencji w bezpieczeństwo punktu końcowego.
W środowej prezentacji badacze zamieścili następujący obraz ilustrujący ataki LogoFAIL w akcji.
W dokumencie towarzyszącym prezentacji badacze zauważają, co następuje:
„Jak widać na poprzednim rysunku, atak LogoFAIL można podzielić na trzy różne etapy. Osoba atakująca najpierw przygotowuje obraz złośliwego logo, przechowuje go w ESP lub w sekcji niepodpisanej aktualizacji oprogramowania sprzętowego, a następnie ponownie uruchamia urządzenie. Podczas procesu uruchamiania podatne na ataki oprogramowanie sprzętowe pobiera złośliwe logo z ESP i analizuje je za pomocą analizatora obrazu zawierającego lukę, umożliwiając osobie atakującej przejęcie przepływu wykonywania poprzez wykorzystanie luki w samym parserze. Wykorzystując to zagrożenie, atakujący może doprowadzić do wykonania dowolnego kodu na etapie DXE, co oznacza całkowity upadek bezpieczeństwa platformy.
Krótko mówiąc, jaki wpływ mają nasze ustalenia i dlaczego LogoFAIL jest tak niebezpieczne? Jak widzimy na poprzednim rysunku:
LogoFAIL nie wymaga fizycznego dostępu do urządzenia. Ponieważ można go wykonać całkowicie z poziomu systemu operacyjnego, całkowicie przełamuje wszelkie granice bezpieczeństwa pomiędzy systemem operacyjnym a oprogramowaniem sprzętowym. Nowoczesne narzędzia do ochrony systemu operacyjnego, takie jak Secure Boot, są również całkowicie nieskuteczne w walce z tym zagrożeniem.
Ataki rozpoczynające się na poziomie oprogramowania układowego mogą zainstalować bootkit i podważyć dowolny mechanizm bezpieczeństwa na poziomie systemu operacyjnego, pozostając jednocześnie całkowicie niewykrywalnymi dla rozwiązań do wykrywania zabezpieczeń.
Ponieważ LogoFAIL atakuje kod specyficzny dla UEFI, to nowe zagrożenie nie ogranicza się do jednej architektury, ale stanowi kolejny przykład wykorzystania różnych krzemów, który wpływa zarówno na urządzenia x86, jak i ARM.
Badacze odkryli luki, uruchamiając parsery obrazów UEFI za pomocą narzędzia zwanego fuzzerem. Fuzzery służą do identyfikowania błędów programistycznych poprzez wielokrotne wykonywanie małych fragmentów kodu z niewielkimi zmianami danych wejściowych. Za każdym razem, gdy wystąpi awaria, fuzzer zapisuje adres pamięci, w którym wystąpiła, oraz dane wejściowe, które ją spowodowały. Dalsza analiza przy użyciu innych narzędzi i procesów pozwoliła naukowcom wyizolować błędy, które mogłyby umożliwić wykonanie dowolnego kodu lub innego rodzaju luki w zabezpieczeniach.
„Kiedy kampania się zakończyła, byliśmy przytłoczeni liczbą wykrytych usterek – do tego stopnia, że ręczne sortowanie ich było dość trudne” – napisali badacze. W sumie zidentyfikowali 24 unikalne przyczyny źródłowe, z których 13 ich zdaniem można wykorzystać.
Wyniki nasuwają trudne pytanie: skoro fuzzerzy zidentyfikowali tak wiele luk, które można wykorzystać, dlaczego programiści UEFI (często nazywani IBV lub niezależnymi dostawcami BIOS-u) i producenci OEM sprzedający urządzenia nie skorzystali z tych narzędzi i nie naprawili leżących u ich podstaw błędów? Badacze binarni kontynuowali:
„Ten proces selekcji pozwolił nam dobrze zrozumieć pierwotne przyczyny tych błędów. Choć obejmują one szeroki zakres zagadnień związanych z bezpieczeństwem oprogramowania, ich głównym tematem jest brak weryfikacji danych dostarczonych przez atakujących. Na przykład pierwszy zrzut ekranu pokazuje błąd w parserze AMI BMP: wskaźnik „Image” jest inicjowany poprzez dodanie pola nagłówka „ImageOffset” do adresu początkowego obrazu (&Header->CharB).
Ponieważ atakujący może dowolnie ustawić to przesunięcie, zmienna „Obraz” może wskazywać niemal dowolne miejsce w pamięci. Drugi zrzut ekranu pochodzi z parsera PNG w AMI i zawiera nie jeden błąd, ale dwa. Pierwszym błędem jest brak sprawdzenia wartości zwracanej przez funkcję „EfiLibAllocateZeroPool”, która w przypadku niepowodzenia zwraca NULL. Drugi błąd to przepełnienie liczby całkowitej 32-bitowej liczby całkowitej reprezentującej rozmiar alokacji. Gdy osoba atakująca ustawi zmienną „PngWidth” na dużą wartość, pomnożenie przez dwa powoduje przepełnienie wyniku i przyjęcie małej wartości (na przykład: 0x80000200 * 2 = 0x400).
W ten sposób osoba atakująca może wymusić przydzielenie bufora, który jest zbyt mały, aby pomieścić zdekodowane dane PNG, a tym samym przepełnienie bufora, gdy jest on używany. Wyniki naszej kampanii fuzzingowej wyraźnie wskazują, że żaden z tych analizatorów obrazów nie był nigdy testowany przez IBV ani producentów OEM. Możemy to powiedzieć z całą pewnością, ponieważ fuzzer był w stanie znaleźć wiele usterek już po kilku sekundach działania, a my znaleźliśmy je w prawie każdym testowanym przez nas parserze.”
Ponieważ luki w zabezpieczeniach analizatora obrazów wykorzystywane przez LogoFAIL znajdują się w UEFI, nie ma to wpływu na komputery Mac, smartfony i inne urządzenia korzystające z alternatywnych mechanizmów rozruchu. Co ciekawe, nawet gdy Apple używał UEFI do uruchamiania komputerów Mac z procesorami Intel poprzedniej generacji, nadal nie były one podatne na LogoFAIL. Powód: Apple zakodował pliki obrazów na stałe w UEFI, co uniemożliwiło zastąpienie prawidłowego obrazu złośliwym. Jako twórca zarówno sprzętu, jak i oprogramowania dla komputerów Mac, Apple miał taką możliwość. Różnorodność ekosystemów obracających się wokół platform Windows i Linux wymaga większej elastyczności.
Wiele urządzeń sprzedawanych przez firmę Dell nie nadaje się do bezpośredniego wykorzystania, ponieważ pliki obrazów są chronione przez technologię Intel Boot Guard, co uniemożliwia ich wymianę nawet w przypadku fizycznego ataku. Jako dodatkowy środek, wiele urządzeń Dell nie pozwala na dostosowanie logo. Chociaż te środki skutecznie zamykają powierzchnię ataku LogoFAIL, Binarly zaleca załatanie luk w zabezpieczeniach analizowania obrazów wysokiego ryzyka, „ponieważ stanowią one ryzyko, które może przypadkowo stać się problemem bezpieczeństwa”.
LogoFAIL opiera się na dużej liczbie badań przeprowadzonych na przestrzeni ponad dziesięciu lat. Przejmowanie sekwencji rozruchowej poprzez wykorzystanie błędów analizy obrazu UEFI zostało po raz pierwszy zademonstrowane w prezentacji Black Hat z 2009 roku, prowadzonej przez badaczy Rafała Wojtczuka i Aleksandra Tereshkina. Od tego czasu nieustannie pojawiają się nowe odkrycia, zarówno w ramach kolejnych badań, jak i, w niektórych przypadkach, w wyniku ataków wykrywanych w prawdziwym świecie.
Pierwszy znany przypadek faktycznego ataku z wykorzystaniem możliwości UEFI miał miejsce w 2018 roku wraz z odkryciem szkodliwego oprogramowania o nazwie LoJax. LoJax, który jest przerobioną wersją legalnego oprogramowania antykradzieżowego znanego jako LoJack, został stworzony przez grupę hakerów znaną pod takimi nazwami jak Sednit, Fancy Bear i APT 28. Szkodnik został zainstalowany zdalnie przy użyciu narzędzi zdolnych do odczytu i przepisywania części dyski flash, pamięć oprogramowania sprzętowego UEFI.
W 2020 roku badacze odkryli drugi znany przypadek prawdziwego ataku złośliwego oprogramowania na UEFI. Za każdym razem, gdy zainfekowane urządzenie zostało ponownie uruchomione, UEFI sprawdzało, czy w folderze startowym systemu Windows znajduje się złośliwy plik, i jeśli go tam nie było, instalowało go. Badacze z firmy Kaspersky, którzy odkryli to szkodliwe oprogramowanie i nazwali go „MosaicRegressor”, nadal nie wiedzą, w jaki sposób doszło do infekcji UEFI. Jedną z możliwości jest to, że komputery otrzymały fałszywą aktualizację UEFI. Inną możliwością jest uzyskanie krótkiego fizycznego dostępu do urządzenia i wykorzystanie specjalnie zaprojektowanego napędu USB do zainfekowania UEFI.
Od tego czasu stało się znanych kilka nowych bootkitów UEFI. Są śledzone pod nazwami takimi jak ESpecter, FinSpy i MoonBounce. W odpowiedzi na te zagrożenia producenci urządzeń rozpoczęli wdrażanie środków mających na celu ochronę procesu rozruchu UEFI.
Kluczową funkcją zabezpieczeń jest Secure Boot, standard branżowy, który wykorzystuje podpisy kryptograficzne, aby zapewnić, że producent komputera ufa każdemu oprogramowaniu używanemu podczas rozruchu. Bezpieczny rozruch ma na celu utworzenie łańcucha zaufania, który uniemożliwi atakującym wymianę złośliwego oprogramowania przeznaczonego do rozruchu. Jeśli przynajmniej jedno ogniwo w łańcuchu startowym nie zostanie rozpoznane, funkcja Secure Boot nie pozwoli na uruchomienie urządzenia.
Na początku tego roku badacze z firmy ESET odkryli pierwszy znany przypadek złośliwego oprogramowania UEFI omijającego funkcję Secure Boot. Bootkit, nazwany Black Lotus, potrafił ominąć 12-letnie zabezpieczenia, ale miał jedno kluczowe ograniczenie — mógł zostać zniszczony przez zwykłą ponowną instalację podstawowego systemu operacyjnego. LogoFAIL nie ma takich ograniczeń. Dopóki złośliwy obraz będzie wykonywany w UEFI, komputer, na którym zainstalowane jest oprogramowanie sprzętowe, pozostanie zainfekowany. Poniższy obraz z wcześniejszej części tego artykułu pokazuje różnice między LogoFAIL i Black Lotus.
Nic nie wskazuje na to, że luki w LogoFAIL były aktywnie wykorzystywane w prawdziwym życiu przez osoby atakujące, a jest mało prawdopodobne, aby było to znane, ponieważ infekcja jest bardzo trudna do wykrycia przy użyciu tradycyjnych narzędzi i metod. Jednakże jedną oznakę naruszenia bezpieczeństwa można uzyskać, sprawdzając plik obrazu analizowany po pobraniu. Jeśli skrót kryptograficzny tego pliku różni się od skrótu pliku, który producenci urządzeń zazwyczaj udostępniają bezpłatnie, urządzenie można dalej analizować pod kątem oznak wykorzystania.
Luki w zabezpieczeniach LogoFAIL są śledzone jako CVE-2023-5058, CVE-2023-39538, CVE-2023-39539 i CVE-2023-40238. Lista ta jest obecnie niekompletna. Konsultacje dostępne są od około kilkunastu stron. Częściowa lista firm, które wydały rekomendacje, obejmuje AMI, Insyde, Phoenix i Lenovo. Pełna lista nie była dostępna w momencie publikacji. Osoby chcące dowiedzieć się, czy dane urządzenie jest podatne na ataki, powinny skontaktować się z jego producentem.
Najlepszym sposobem zapobiegania atakom LogoFAIL jest instalacja aktualizacji zabezpieczeń UEFI, które zostaną wydane w ramach skoordynowanego procesu ujawniania informacji w środowisku. Poprawki te będą dystrybuowane przez producenta urządzenia lub płyty głównej zainstalowanej w urządzeniu. Zaleca się również skonfigurowanie UEFI tak, aby w miarę możliwości korzystało z wielu warstw zabezpieczeń. Oprócz bezpiecznego rozruchu obejmuje to funkcję Intel Boot Guard i, jeśli jest dostępna, Intel BIOS Guard. Podobne dodatkowe zabezpieczenia są dostępne dla urządzeń z procesorami AMD lub ARM.