Checkpoint zaproponował technikę ochrony Safe-Linking, która utrudnia wykorzystanie luk.

Firma Checkpoint przedstawiła mechanizm ochrony Safe-Linking, który utrudnia tworzenie exploitów manipulujących definicją lub zmianą wskaźników do buforów przydzielonych podczas wywołania malloc. Safe-Linking nie blokuje całkowicie możliwości eksploatacji luk, ale przy minimalnych obciążeniach znacząco utrudnia stworzenie niektórych kategorii exploitów, ponieważ oprócz wykorzystanego przepełnienia bufora należy również znaleźć inną lukę, która powoduje wyciek informacji o alokacji sterty w pamięci.

Łatki z implementacją Safe-Linking zostały przygotowane dla Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) oraz Google TCMalloc, a także zaproponowane do modernizacji ochrony w Chromium (w
Chromium od 2012 roku wbudowana jest technika ochrony MaskPtr, która również rozwiązuje ten sam problem, ale rozwiązanie od Checkpoint wykazuje wyższą wydajność).
Proponowane łatki zostały już zatwierdzone do dostarczenia w sierpniowej wersji Glibc 3.32 a zastosowanie Safe-Linking będzie włączone domyślnie. W uClibc-NG wsparcie dla Safe-Linking dołączyła zostało włączone w wersji 1.0.33 domyślnie. W gperftools (stary tcmalloc) zmiany zaakceptowano, ale będą zaproponowane w jednej z przyszłych wersji jako opcja.

Deweloperzy TCMalloc (nowy tcmalloc) odmówił przyjęcia zmianę, powołując się na znaczący spadek wydajności i konieczność dodania rozszerzonych testów do regularnego sprawdzania, czy wszystko działa prawidłowo. Testowanie przeprowadzone przez inżynierów Checkpoint wykazało, że metoda Safe-Linking nie prowadzi do dodatkowego zużycia pamięci, a wydajność podczas operacji na stercie w średnim przypadku spada jedynie o 0,02%, a w najgorszym przypadku o 1,5% (dla porównania, obciążenia w stosowanej w Chromium metodzie szacowane są na „poniżej 2%”). Włączenie
Safe-Linking prowadzi do wykonywania 2-3 dodatkowych instrukcji asemblerowych przy każdym wywołaniu free() i 3-4 instrukcji przy wywołaniu malloc(). Uruchomienie etapów inicjalizacji i generowania wartości losowych nie jest wymagane.

Checkpoint zaproponował technikę ochrony Safe-Linking, która utrudnia wykorzystanie luk.

Safe-Linking może być stosowane nie tylko do zwiększania bezpieczeństwa różnych implementacji sterty, ale także do dodawania środków kontroli integralności w dowolne struktury danych, w których stosowane są jedno-linkowe listy wskaźników umieszczone obok samych buforów. Metoda jest bardzo prosta do wdrożenia i wymaga jedynie dodania jednego makra oraz zastosowania go do wskaźników na następny blok w kodzie (na przykład w Glibc zmienia się zaledwie kilka linijek kodu). Metoda sprowadza się do następujących zmian:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

— nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);

Istotą metody jest zastosowanie losowych danych z mechanizmu randomizacji adresów ASLR (mmap_base) do ochrony jedno-linkowych list, takich jak Fast-Bins oraz TCache. Przed zastosowaniem do wartości wskaźnika na następny element w liście przeprowadzane jest transformacja zgodnie z maską oraz sprawdzanie wyrównania według granicy strony pamięci. Wskaźnik jest zastępowany wynikiem operacji „(L >> PAGE_SHIFT) XOR (P)”, gdzie P to wartość wskaźnika, a L to lokalizacja w pamięci, w której ten wskaźnik jest przechowywany.

Checkpoint zaproponował technikę ochrony Safe-Linking, która utrudnia wykorzystanie luk.

Przy użyciu w systemie ASLR (Address Space Layout Randomization) część bitów L z podstawowym adresem sterty zawiera losowe wartości, które są używane jako klucz do kodowania P (wyciągane operacją przesunięcia o 12 bitów dla stron o rozmiarze 4096 bajtów). Tego rodzaju manipulacja zmniejsza ryzyko przejęcia wskaźnika w exploicie, ponieważ wskaźnik nie jest przechowywany w formie pierwotnej i do jego zastąpienia należy znać informacje o rozmieszczeniu sterty. Dodatkowo w kodzie łaty znajduje się także dodatkowe sprawdzenie wyrównania bloku, które uniemożliwia atakującemu zastąpienie wskaźnika niewyrównaną wartością oraz wymaga znajomości liczby bitów, na które dokonano wyrównania, co w systemach 64-bitowych dodatkowo pozwala zablokować 15 z 16 prób ataków, które nie uwzględniają wyrównania.

Metoda jest skuteczna w ochronie przed atakami, w których wykorzystywane jest częściowe nadpisywanie wskaźników (zmiana najniższych bajtów), całkowite nadpisywanie wskaźników (przekierowanie na kod atakującego) oraz zmiana pozycji listy w niewyrównanym adresie. Jako przykład pokazano, że zastosowanie Safe-Linking w malloc mogłoby zablokować eksploatację niedawno ujawnionej tym samym badaczom podatności CVE-2020-6007 w inteligentnym oświetleniu Philips Hue Bridge, spowodowaną przepełnieniem bufora i umożliwiającą przejęcie kontroli nad urządzeniem.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster