1. Co było przyczyną awarii?
Awaria została spowodowana przez rutynową aktualizację pliku konfiguracyjnego w oprogramowaniu CrowdStrike. Niestety, aktualizacja zawierała błąd, który prowadził do próby zapisu z nieprawidłowego obszaru pamięci, co skutkowało awarią systemu operacyjnego.
Celem feralnej aktualizacji było usprawnienie wykrywania złośliwego oprogramowania. Falcon, flagowy produkt firmy, monitoruje komunikację między procesami na komputerze oraz w sieci, aby identyfikować potencjalne zagrożenia. Aktualizacja wprowadzała nowy zestaw reguł, mających pomóc w wykrywaniu podejrzanych nazw tzw. "potoków nazwanych" (named pipes). Potoki nazwane to mechanizm komunikacji między procesami, wykorzystywany zarówno do wymiany danych między dwoma programami na jednym komputerze, jak i do komunikacji sieciowej. Są one powszechnie stosowane w różnych systemach operacyjnych, nie tylko w Windows.
Problem pojawił się w pliku konfiguracyjnym zawierającym nowe reguły dotyczące nazewnictwa potoków. CrowdStrike nazywa takie pliki "Channel files". W wyniku błędu w zaktualizowanym pliku, podczas próby wykonania tych reguł, wystąpiła próba przeniesienia danych z pamięci o nieprawidłowej lokalizacji. W skrócie: program próbował uzyskać dostęp do obszaru pamięci, który nie istniał. Rezultat? Program się scrashował, a że działał na poziomie jądra systemu operacyjnego, to pociągnął za sobą cały system.
2. Dlaczego awaria była tak rozległa?
CrowdStrike dostarcza swoje oprogramowanie do milionów urządzeń na całym świecie. Aktualizacja została wypuszczona globalnie i jednocześnie, co spowodowało, że awaria dotknęła ogromną liczbę urządzeń w różnych branżach.
3. Czy awarii można było zapobiec przez dokładniejsze testy?
Zdecydowanie tak. Chociaż CrowdStrike twierdzi, że przeprowadził testy, awaria może wskazywać na luki w procesie testowania. Możemy więc tylko gdybać, że testy nie uwzględniły wszystkich scenariuszy, zwłaszcza tych związanych z działaniem oprogramowania na poziomie jądra systemu. Wnioski dla testerów są więc jasne: jeśli oprogramowanie działa na poziomie jądra, testy muszą uwzględniać specyfikę tego środowiska, powinny obejmować nie tylko pozytywne scenariusze, ale także sytuacje awaryjne, takie jak nieprawidłowe dane konfiguracyjne, a w przypadku oprogramowania o dużej skali, niezbędne są również testy wydajnościowe, aby upewnić się, że system poradzi sobie z dużym obciążeniem.
CrowdStrike mógł również zastosować wdrażanie stopniowe (kanarkowe), czyli testowanie zmian na mniejszej grupie użytkowników przed wdrożeniem na szeroką skalę.
4. Czy były jakieś sygnały ostrzegawcze?
Pojawiły się doniesienia, że CrowdStrike doświadczył już podobnej awarii na systemach Linux kilka miesięcy wcześniej. Jeśli to prawda, ignorowanie tych sygnałów było poważnym błędem. Testerzy powinni zwracać uwagę na wszelkie nieprawidłowości, nawet te, które wydają się mało istotne, i zgłaszać je zespołowi deweloperskiemu.
5. Jakie są 3 najważniejsze wnioski dla testerów oprogramowania?
- Testowanie nie może być powierzchowne. Musimy uwzględniać wszystkie możliwe scenariusze, nawet te wydawałoby się mało prawdopodobne.
- Testy jednostkowe to nie wszystko. Ważne są również testy integracyjne, które sprawdzają, jak poszczególne elementy systemu współpracują ze sobą.
- Wdrażanie stopniowe to konieczność. Pozwala na wykrycie błędów na wczesnym etapie, zanim dotkną one dużej liczby użytkowników.
Awaria CrowdStrike jest bolesnym, ale cennym przypomnieniem o tym, jak ważne jest dokładne testowanie oprogramowania. Miejmy nadzieję, że zarówno CrowdStrike, jak i inni producenci oprogramowania wyciągną z tego wnioski i w przyszłości będą bardziej ostrożni przy wdrażaniu jakichkolwiek aktualizacji.