W dzisiejszym artykule omówimy, jak działają ataki BYOVD, w jaki sposób podatne na nie sterowniki były wykorzystywane przez cyberprzestępców takich jak grupy Cuba Ransomware i Lazarus, oraz co możemy zrobić, aby zapobiec tym atakom.
Temat wykorzystania BYOVD przez grupy przestępcze pojawiał się już kilkukrotnie na Kapitanie, dlatego postanowiliśmy w końcu omówić go dokładniej. Zanim jednak przejdziemy do opisu tego modelu ataku, warto wyjaśnić, jaką funkcję pełnią i czym są w systemie operacyjnym sterowniki.
Czym są sterowniki w systemie operacyjnym?
Sterowniki to oprogramowanie, które działa jako pośrednik między systemem operacyjnym a urządzeniem. Sterownik tłumaczy instrukcje systemu operacyjnego na działania, które urządzenie może zrozumieć i wykonać. Bez sterownika komputer nie byłby w stanie korzystać z różnych podłączonych urządzeń. Są one również opracowywane w celu zapewnienia obsługi aplikacji lub funkcji w systemie operacyjnym, które nie są w nim natywnie obecne. Przykładem jest sterownik systemu plików, umożliwiający dostęp do różnych typów systemów plików (ExFat, Ext4), których system operacyjny nie obsługuje natywnie. Jak każde oprogramowanie, sterownik może mieć luki w zabezpieczeniach. Atakujący wykorzystują je w celu uzyskania uprawnień jądra podczas ataku zwanego atakiem typu Bring Your Own Vulnerable Driver (BYOVD).
Jaki jest związek pomiędzy sterownikiem a pamięcią jądra systemu operacyjnego?
Jądro to „serce systemu operacyjnego” – całkowicie kontroluje sprzęt i oprogramowanie urządzenia. Jego kod ładowany jest do oddzielnego chronionego regionu w pamięci i zabezpieczony przed dostępem innych niekrytycznych części systemu operacyjnego (lub złośliwego oprogramowania). Dojście do funkcjonalności jądra z aplikacji trybu użytkownika jest dozwolone tylko za pośrednictwem określonych interfejsów API, zwanych wywołaniami systemowymi lub sterownikami (przez IOCTL).
Aplikacje działające w trybie użytkownika (user mode) mają mniejsze uprawnienia do sterowania systemem. Mogą uzyskać dostęp tylko do zwirtualizowanego widoku pamięci, która jest odizolowana i chroniona przed resztą systemu. Z drugiej strony sterownik działa w pamięci jądra (kernel mode) i może wykonywać dowolne operacje, tak jak jądro.
Sterownik może uzyskiwać dostęp do krytycznych struktur bezpieczeństwa i je modyfikować. Modyfikacje te mogą prowadzić do ataków takich jak eskalacja uprawnień, arbitralny odczyt-zapis oraz wyłączenie usług bezpieczeństwa odpowiedzialnych za ochronę systemu operacyjnego.
Opisane powyżej zależności i komunikację między komponentami trybu użytkownika i trybu jądra ilustruje poniższy diagram.
Po tym krótkim wstępie możemy przejść do omówienia ataków z wykorzystaniem sterowników.
Czym jest BYOVD?
BYOVD lub Bring Your Own Vulnerable Driver to atak, w którym grupa cyberprzestępcza (APT) wykorzystuje legalnie podpisany i podatny na ataki sterownik w celu wykonania złośliwych działań w systemie. W ataku BYOVD osoba atakująca może wykorzystać luki w sterowniku do wykonania złośliwych działań z uprawnieniami na poziomie jądra(!).
Różne grupy APT i podmioty zajmujące się zagrożeniami adaptują podatne na ataki sterowniki w celu obejścia kontroli bezpieczeństwa i uzyskania lepszej pozycji w systemie. Ponieważ sterowniki są podpisane przez Microsoft, są z natury uznawane za zaufane przez rozwiązania bezpieczeństwa. Co więcej, ponieważ sterowniki działają z uprawnieniami na poziomie jądra, można ominąć choćby wykrycia oparte na zachowaniu (z ang. behavioral analysys).
Grupa Lazarus – pierwsze odnotowane nadużycie BYOVD
Pierwsze odnotowane nadużycie dotyczące wrażliwych sterowników miało miejsce w 2021 r., kiedy grupa Lazarus użyła podatnego sterownika firmy Dell do wyłączenia siedmiu źródeł monitorowania dostarczanych przez system Windows.
O późniejszym ataku tej grupy pisaliśmy na łamach portalu tutaj w zeszłym roku.
Wykorzystując niewłaściwą kontrolę dostępu i prymitywne luki w jądrze do odczytu i zapisu, byli oni w stanie wyłączyć monitorowanie różnych zdarzeń, takich jak rejestr, system plików, tworzenie procesów itp.
Dzięki temu mogli oszukać wszelkie oprogramowanie zabezpieczające działające w systemie, prowadząc do fałszywego poczucia bezpieczeństwa organizacji.
Innym przykładem BYOVD jest Avast Vulnerable Driver, wykorzystywany przez grupę Cuba Ransomware. Sterownik Vulnerable umożliwiał dowolnemu użytkownikowi zabijanie procesów z uprawnieniami na poziomie jądra. Funkcja dała operatorom systemu ransomware możliwość eskalacji swoich uprawnień i zabicia chronionych procesów, takich jak oprogramowanie zabezpieczające, bez autoryzacji.
Kolejny przykład to opisywany przez nas ostatnio atak BYOVD grupy Scattered Spider z wykorzystaniem starego sterownika Intel. Chociaż luka w sterowniku została naprawiona w 2015 r., hakerzy znaleźli sposób, jak podmienić na zaatakowanych urządzeniach nowy sterownik na starą, wciąż podatną na ataki wersję.
Przykładowy kod źródłowy i PoC z BYOVD
Istnieje wiele PoC o otwartym kodzie źródłowym, które pokazują wykorzystanie tych wrażliwych sterowników w celu obejścia zabezpieczeń. Przykładem jest projekt o nazwie „dellicious”, wykorzystujący sterownik Dell Vulnerable do wyłączenia ochrony PPL w procesie lsass.exe.
W Internecie możemy znaleźć także przykład innego projektu – mhyprot, który wykorzystuje wrażliwą wersję anty-cheat Genshin Impact do zapewnienia dowolnego odczytu i zapisu w pamięci jądra.
Projekt open-source o nazwie Kernel Cactus również przekonwertował podatny na ataki sterownik Dell w bibliotekę, której można używać do funkcji Handle Elevation, kradzieży tokenów, przełączania PPL i wielu innych obejść kontroli bezpieczeństwa.
Projekty takie jak powyższe zapewniają możliwości zarówno atakującym, jak i obrońcom, dlatego konieczne jest zaktualizowanie modelu zagrożeń w celu uwzględnienia ataków BYOVD.
Jak można zapobiec atakom BYOVD?
Użytkownicy systemu Windows powinni włączyć listę zablokowanych sterowników w celu ochrony przed atakami typu BYOVD. Wskazówki, jak to wykonać, znajdziesz tutaj. Rozwiązanie to ma jednak pewne wady – włączenie integralności pamięci na urządzeniach, które mogą nie mieć nowszych sterowników, może być trudne.
Zabezpieczenie na ogół polega na blokowaniu IoC (takich jak skróty plików sterowników) odpowiednich dla znanych podatnych na ataki sterowników. Istotne jest aktualizowanie listy zablokowanych sterowników w systemie Windows dzięki najnowszych informacji o zagrożeniach i IoC.
Inną metodą jest egzekwowanie podpisu sterownika. Systemy operacyjne dysponują środkami zaradczymi takimi jak wymuszanie podpisów sterowników, co umożliwia ładowanie do systemu tylko sterowników podpisanych przez Microsoft. Gwarantuje to, iż w przypadku wykrycia jakiejkolwiek luki w zabezpieczeniach lub złośliwego użycia podpis może zostać unieważniony i uniemożliwić wykorzystanie systemu.
Należy zrozumieć, iż te metody chronią tylko przed znanymi podatnymi na ataki sterownikami, a osoby atakujące mogą odkryć nowe podatne na ataki sterowniki, nieznane społeczności.
Dla osób zainteresowanych rozwinięciem technik BYOVD w pisaniu sterowników polecamy również interesujący blog Ido Velltzmana.