Krótkie podsumowanie akcji z #crowdstrike z zeszłego tygodnia na podstawie wiarygodnych informacji znalezionych w internetach

  1. 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.
  2. Poza sterownikiem, częścią ich delivery są różne definicje wirusów, malware i cholera wie czego.
  3. 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.
  4. 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ć).
  1. 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
m_h

Mogę się mylić ale:


Nie wiem jak to wygląda w Windowsach ale z tego co się kiedyś uczyłem to np w Linuxie należy unikać dostępu do filesystemu z poziomu kernela ponieważ kernel może nie znać tego fs'a. Lepiej jest to wykonać jakimś wrapperem z userspace'a.


Dodatkowo, windows wspiera 2 rodzaje driverów: user mode drivers foundation oraz kernel mode driver foundation i o ile to możliwe, developerzy powinni jak ognia unikać pisania softu pod KMDF.

Syster

@groman43 dałem pioruna ale teoria o NULLach została już obalona. To nie była aż tak banalna wpadka. Tylko oczywiście najbardziej wybiła się ta najprostsza.


Jak znajdę w historii X to podrzucę

groman43

@Syster To była trywialna wpadka. Kod wziął NULLa, dodał sobie offset i stąd wziął 0x9c.

Syster

@groman43 Polecam zapoznać się z podpiętymi analizami. Tak, OOB deref ale nie prosty NULL.

groman43

@Syster A czy ja gdzieś napisałem, że to był NULL pointer dereference?

lurker_z_internetu

@groman43 Crowdstrike w swej mądrości oznaczył swój driver jako "boot install" xDDD


To akurat wygląda sensownie. Nie chcesz, żeby korporacyjny komputer dało się włączyć z pominięciem softu odpowiedzialnego za bezpieczeństwo.


Brak sanity checka w takim sofcie to na prawdę poważne zaniedbanie, zadziwiające, że to nikt tego nie zauważył.

groman43

@lurker_z_internetu To nie do końca tak - jeśli driver funkcjonuje poprawnie, to i tak zostanie załadowany, nawet jeśli nie jest oznaczony jak boot install. Na prawdę nie widzę sensu oznaczania czegokolwiek, co nie jest związane bezpośrednio ze sprzętem (i to tylko tym, absolutnie koniecznym do uruchomienia systemu) jako boot install.

pushack

@groman43 ja się pytam jak to przeszło testy??

Dzemik_Skrytozerca

@pushack


Nie przeszło, albo plik został uszkodzony w drodze do odbiorcy.


Mnie też wkurza to, że puszczali to na produkcję bez testow.

groman43

@pushack To pytanie zadaje sobie mniej wiecej teraz połowa świata xD

GrindFaterAnona

@pushack właśnie nie przeszło, stąd ta awaria xD

wombatDaiquiri

@groman43 ehh biedny stażysta, chłop pewnie ze stresu spać nie może od tygodnia xD

lurker_z_internetu

@wombatDaiquiri wyobraź sobie, że odjebaleś tak bardzo, że prezydent USA dzwoni w tej sprawie do Twojego szefa, a połowa rządów na świecie zwołuje spotkania kryzysowe.

wombatDaiquiri

@lurker_z_internetu jeśli miałeś możliwość tak zjebać to było zjebane już wcześniej, tylko do tej pory mieli więcej farta

enkamayo

Współczuję temu, kto wcisnął enter i obserwował jak "caly świat" się nagle psuje.

Zaloguj się aby komentować