Mayhem - atak polegający na uszkodzeniu bitów pamięci w celu ominięcia uwierzytelniania Sudo i OpenSSH

Badacze z Worcester Polytechnic Institute (USA) wprowadzili nowy typ ataku Mayhem, który wykorzystuje technikę dynamicznego zniekształcania bitów pamięci RAM Rowhammer w celu zmiany wartości zmiennych stosu używanych jako flagi w programie decydujące o tym, czy kontrole uwierzytelnienia i bezpieczeństwa przeszły pomyślnie. Pokazano praktyczne przykłady ataku omijającego uwierzytelnianie w SUDO, OpenSSH i MySQL, a także zmieniającego wynik kontroli bezpieczeństwa w bibliotece OpenSSL.

Atak można zastosować wobec aplikacji, które wykorzystują kontrole do porównywania wartości różniących się od zera. Przykład podatnego kodu: int auth = 0; ... // kod weryfikacyjny zmieniający wartość autoryzacji w przypadku pomyślnego uwierzytelnienia if(auth != 0) return AUTH_SUCCESS; w przeciwnym razie zwróć AUTH_FAILURE;

W kontekście tego przykładu, do udanego ataku wystarczy uszkodzenie dowolnego bitu pamięci powiązanego z 32-bitową zmienną uwierzytelniającą na stosie. Jeśli jakikolwiek bit zmiennej jest uszkodzony, wartość nie będzie już wynosić zero, a operator warunkowy określi pomyślne zakończenie uwierzytelniania. Takie wzorce walidacji są dość powszechne w aplikacjach i można je znaleźć na przykład w SUDO, OpenSSH, MySQL i OpenSSL.

Mayhem - atak polegający na manipulacji bitami pamięci w celu ominięcia uwierzytelniania Sudo i OpenSSH

Atak można zastosować również do porównań postaci „if(auth == 1)”, ale w tym przypadku jego realizacja staje się bardziej skomplikowana, ponieważ konieczne jest zniekształcenie nie żadnego bitu 32, ale ostatniego bitu. Metodę można również wykorzystać do wpływania na wartości zmiennych w rejestrach procesora, ponieważ zawartość rejestrów można tymczasowo opróżnić na stos po uruchomieniu przełącznika kontekstu, wywołania funkcji lub obsługi sygnału. W czasie, gdy wartości rejestrów znajdują się w pamięci, do tej pamięci mogą zostać wprowadzone zniekształcenia, a zmieniona wartość zostanie przywrócona do rejestru.

Mayhem - atak polegający na manipulacji bitami pamięci w celu ominięcia uwierzytelniania Sudo i OpenSSH

Do zniekształcania bitów wykorzystywana jest jedna z modyfikacji ataku klasy RowHammer. Ponieważ pamięć DRAM jest dwuwymiarowym układem komórek, z których każde składa się z kondensatora i tranzystora, ciągłe odczytywanie tego samego obszaru pamięci powoduje wahania napięcia i anomalie, które powodują niewielką utratę ładunku w sąsiednich komórkach. Jeżeli intensywność odczytu będzie duża, sąsiednia komórka może stracić wystarczająco dużą ilość ładunku i kolejny cykl regeneracji nie będzie miał czasu na przywrócenie stanu pierwotnego, co doprowadzi do zmiany wartości danych przechowywanych w komórce . Aby zabezpieczyć się przed RowHammerem, producenci chipów dodali mechanizm TRR (Target Row Refresh), który w szczególnych przypadkach blokuje uszkodzenie komórek, ale nie chroni przed wszystkimi możliwymi odmianami ataków.

Aby zabezpieczyć się przed atakiem Mayhem, zaleca się, aby w porównaniach nie stosować oceny różnic od zera lub zbieżności z jedynką, ale sprawdzenie dopasowania przy użyciu losowej wartości początkowej z niezerowymi oktetami. W tym przypadku, aby ustawić żądaną wartość zmiennej, konieczne jest dokładne zniekształcenie znacznej liczby bitów, co jest nierealne, w przeciwieństwie do zniekształcenia jednego bitu. Przykład kodu niemożliwego do ataku: int auth = 0xbe406d1a; ... // kod weryfikacyjny ustawiający wartość autoryzacji na 0x23ab8701 w przypadku pomyślnego uwierzytelnienia if(auth == 0x23ab8701) return AUTH_SUCCESS; w przeciwnym razie zwróć AUTH_FAILURE;

Podana metoda ochrony została już zastosowana przez twórców sudo i została uwzględniona w wersji 1.9.15 jako poprawka luki CVE-2023-42465. Planują opublikować prototyp kodu do przeprowadzenia ataku po wprowadzeniu poprawek do głównych podatnych na ataki projektów.

Źródło: opennet.ru

Dodaj komentarz