Krótkie podsumowanie akcji z #crowdstrike z zeszłego tygodnia na podstawie
wiarygodnych informacji znalezionych w internetach
-
Crowdstrike to firma amerykańska firma zajmująca się cyberbezpieczeństwem. Celują w rynek enterprise. Dostarczają własne sterowniki, które są wykonywane w Windows kernel mode.
-
Poza sterownikiem, częścią ich delivery są różne definicje wirusów, malware i cholera wie czego.
-
Problem spowodowała właśnie aktualizacja tych definicji, nie samego drivera. Otóż okazało się, że driver jest dość głupi i po prostu skanuje wybraną lokalizację w poszukiwaniu definicji. Jeśli znajdzie odpowiednie pliki, to próbuje je załadować. Nie jest jasne, jakie checki wykonuje przed załadowaniem, ale nie spodziewam się tutaj szału.
-
Plik z nowo dodaną definicją okazał się pusty, zawierał same zera. Nie zatrzymało to jednak drivera, który na jego podstawie najprawdopodobniej próbował wyliczyć jakiś adres. Oczywiście, nie miał szans zrobić tego poprawnie, dlatego ten adres był bezpośrednio z pupy - wartość, którą widziałem w jednym tłicie to 0xc9. A po wyliczeniu tego adresu, driver próbował się dobrać do pamięci pod nim. Nie mogło to się skończyć dobrze.
Side note - skoro adres nie był NULLem, czy innym None, Rustowe unwrap chyba raczej tutaj by nie pomogło (ale się nie znam, więc mogę się mylić).
- Około 8500000 maszyn na całym świecie zostało dotkniętych tym problemem. Naprawa nie jest skomplikowana, ale wymaga *fizycznego* dostępu do każdej maszyny ( ͡º͜ʖ͡º)
Moje komentarze
- Wczytywanie plików na YOLO, bez odpowiedniej weryfikacji w kernel mode to nie tylko potężna luka bezpieczeństwa, ale objaw nieskończonej głupoty. Sam driver podobno był certyfikowany przez Microsoft, ale nie wiem na czym dokładnie taka certyfikacja polega i czy sprawdzali kod.
- Crowdstrike najprawdopodobniej zdecydował się zaimplementować mechanizm wczytywania różnych definicji z zewnętrznych plików, żeby ominąć konieczność certyfikacji drivera po każdym update. Taka przyjemność pewnie zajmuje trochę czasu i do najtańszych nie należy.
- Windows teoretycznie posiada mechanizm wywalania spartaczonych driverów. No ale posiada też coś takiego jak "boot install drivers" - drivery, które koniecznie muszą być załadowane, żeby system wstał. Oczywiście, Crowdstrike w swej mądrości oznaczył swój driver jako "boot install" xDDD
- Jedynym sensownym mechanizmem obrony przed takimi akcjami jest podział na dwie partycję - instalujemy update na partycji A i próbujemy się z niej zbootwać. Jeśli to się nie uda, bootujemy się z partycji B, która nie zawiera update.
- Podobno Microsoft zamiast dawać możliwość uruchamiania kodu 3rdparties w kernel mode, chciał udostępnić API związane z cyberbezpieczeństwem. Ale UE się wtrąciła, twierdząć że byłaby to praktyka monopolistyczna. Także xD
Moje pytania
- Dlaczego Crowdstrike wypuścił pusty plik?
- Dlaczego nie dodali żadnych sanity checków podczas ładowania plików, a potem Microsoft to przyklepał?
- Czy ten driver został poprawiony? Czy wrzucenie pustego pliku w odpowiednie miejsce na dysku nadal wywali cały system?
#programowanie #programista15k #pracait