Grupa badaczy z Politechniki w Grazu (Austria), znana wcześniej z opracowywania ataków MDS, NetSpectre, Throwhammer i ZombieLoad, opublikowała nową metodę ataku kanałem bocznym (CVE-2021-3714) na mechanizm deduplikacji pamięci , która pozwala określić obecność w pamięci określonych danych, zorganizować bajt po bajcie wyciek zawartości pamięci lub określić układ pamięci w celu ominięcia zabezpieczenia opartego na randomizacji adresów (ASLR). Nowa metoda różni się od zaprezentowanych wcześniej wariantów ataków na mechanizm deduplikacji tym, że przeprowadza atak z zewnętrznego hosta, stosując jako kryterium zmianę czasu odpowiedzi na żądania wysyłane do atakującego za pośrednictwem protokołów HTTP/1 i HTTP/2. Możliwość przeprowadzenia ataku wykazano dla serwerów opartych na systemach Linux i Windows.
Ataki na mechanizm deduplikacji pamięci wykorzystują różnicę w czasie przetwarzania operacji zapisu jako kanał do wycieku informacji w sytuacjach, gdy zmiana danych prowadzi do klonowania zdeduplikowanej strony pamięci przy użyciu mechanizmu Copy-On-Write (COW) . Podczas działania jądro wykrywa identyczne strony pamięci z różnych procesów i łączy je, odwzorowując identyczne strony pamięci w jeden obszar pamięci fizycznej, aby przechowywać tylko jedną kopię. Kiedy jeden z procesów próbuje zmienić dane powiązane z deduplikowanymi stronami, następuje wyjątek (błąd strony) i przy wykorzystaniu mechanizmu Copy-On-Write automatycznie tworzona jest osobna kopia strony pamięci, która jest przydzielana do procesu. Dokończenie kopii zajmuje dodatkowy czas, co może świadczyć o tym, że zmiany danych zakłócają inny proces.
Naukowcy wykazali, że opóźnienia wynikające z mechanizmu COW można wychwycić nie tylko lokalnie, ale także analizując zmiany w czasach dostarczania odpowiedzi w sieci. Zaproponowano kilka metod określania zawartości pamięci zdalnego hosta poprzez analizę czasu wykonania żądań za pośrednictwem protokołów HTTP/1 i HTTP/2. Do zapisywania wybranych szablonów wykorzystywane są standardowe aplikacje webowe przechowujące w pamięci informacje otrzymane w żądaniach.
Ogólna zasada ataku sprowadza się do wypełnienia strony pamięci na serwerze danymi, które potencjalnie powtarzają zawartość strony pamięci już istniejącej na serwerze. Następnie osoba atakująca czeka, aż jądro wykona deduplikację i połączenie strony pamięci, następnie modyfikuje kontrolowane zduplikowane dane i ocenia czas odpowiedzi, aby określić, czy trafienie się powiodło.
Podczas eksperymentów maksymalny współczynnik wycieku informacji wyniósł 34.41 bajtów na godzinę w przypadku ataku za pośrednictwem sieci globalnej i 302.16 bajtów na godzinę w przypadku ataku za pośrednictwem sieci lokalnej, co jest szybsze niż w przypadku innych metod wydobywania danych kanałami stron trzecich (na przykład w ataku NetSpectre szybkość przesyłania danych wynosi 7.5 bajta na godzinie pierwszej).
Zaproponowano trzy działające opcje ataku. Pierwsza opcja pozwala określić, jakie dane znajdują się w pamięci serwera WWW korzystającego z Memcached. Atak sprowadza się do załadowania określonych zestawów danych do pamięci Memcached, wyczyszczenia zdeduplikowanego bloku, ponownego zapisania tego samego elementu i stworzenia warunku wystąpienia kopiowania COW poprzez zmianę zawartości bloku. Podczas eksperymentu z Memcachedem w 166.51 sekundy udało się ustalić wersję biblioteki libc zainstalowaną w systemie działającym na maszynie wirtualnej.
Druga opcja umożliwiła sprawdzenie zawartości rekordów w systemie DBMS MariaDB podczas korzystania z magazynu InnoDB poprzez odtworzenie zawartości bajt po bajcie. Atak odbywa się poprzez wysyłanie specjalnie zmodyfikowanych żądań, co skutkuje jednobajtowymi niezgodnościami na stronach pamięci i analizowaniem czasu odpowiedzi w celu ustalenia, czy przypuszczenie co do zawartości bajtu było prawidłowe. Szybkość takiego wycieku jest niska i wynosi 1.5 bajta na godzinę w przypadku ataku z sieci lokalnej. Zaletą tej metody jest możliwość odzyskania nieznanej zawartości pamięci.
Trzecia opcja umożliwiła całkowite ominięcie mechanizmu zabezpieczającego KASLR w ciągu 4 minut i uzyskanie informacji o przesunięciu pamięci obrazu jądra maszyny wirtualnej, w sytuacji, gdy adres przesunięcia znajduje się na stronie pamięci, w której inne dane się nie zmieniają. Atak został przeprowadzony z hosta znajdującego się 14 przeskoków od atakowanego systemu. Obiecujemy, że przykłady kodu implementujące prezentowane ataki zostaną opublikowane na GitHubie.
Źródło: opennet.ru