11 bajtów złośliwego kodu łamie protokół OpenSSL, na którym opiera się Internet


11 bajtów złośliwego kodu łamie protokół OpenSSL, na którym opiera się Internet

Niewielki, złośliwy pakiet może spowodować atak DDoS na serwerach z zainstalowaną biblioteką OpenSSL z powodu błędów alokacji pamięci. Dostępne są już wersje z poprawkami.

Twórcy OpenSSL zamknęli lukę w zabezpieczeniach bez przypisywania identyfikatora CVE i rozpowszechnili poprawkę we wszystkich wersjach, także starszych. Oprogramowanie OpenSSL odgrywa podstawową rolę w bezpiecznej komunikacji internetowej, więc odpowiednie organizacje muszą jak najszybciej zintegrować poprawioną wersję odpowiedniej biblioteki.

Serwery OpenSSL mogą zostać wyłączone przy użyciu niewielkiego złośliwego kodu — „ładunek” ma długość zaledwie 11 bajtów.

Badacze z Okta nazwali tę lukę HollowByte. Według nich, w trakcie nawiązywania połączenia TLS każda wiadomość ma 4-bajtowy nagłówek, który określa rozmiar przychodzącej wiadomości. Jednak podatne na ataki wersje OpenSSL przydzielają przestrzeń pamięci na zadeklarowaną długość wiadomości jeszcze przed odebraniem treści i sprawdzeniem jej rozmiaru.

Po nadejściu złośliwego nagłówka, komponent stanu uruchamia niesprawdzoną alokację pamięci. W rezultacie, gdy 11-bajtowy złośliwy ładunek dotrze do serwera, maszyna stanów TLS odczytuje 4-bajtowy nagłówek uzgadniania i uruchamia niesprawdzoną wstępną alokację pamięci na podstawie deklaracji długości 3-bajtowego nagłówka:

Read Header⟶grow_init_buf()⟶OPENSSL_clear_realloc()⟶malloc(attacker_size).

Ponieważ na tym etapie nie jest przeprowadzana żadna walidacja danych, funkcja malloc() przydziela do 131 KB pamięci wyłącznie na podstawie fałszywych danych. Wątek roboczy wchodzi wtedy w nieskończoną pętlę, czekając na dane, które nigdy nie dotrą.

Starsz sztuczka, nowe możliwości

Naukowcy zauważają, że wielokrotne otwieranie połączeń w celu szybkiego wyczerpania zasobów serwera to stara sztuczka. Jednak HollowByte stwarza dodatkowy problem ze względu na sposób, w jaki biblioteka GNU C (glibc) obsługuje pamięć.

Po zakończeniu złośliwego połączenia OpenSSL zwalnia przydzielony bufor. Jednak glibc nie zwraca od razu  zasobów przydzielonych systemowi operacyjnemu, a biblioteka przechowuje je do potencjalnego ponownego wykorzystania.

Wysyłając wiele fal żądań połączenia z różnymi zadeklarowanymi długościami komunikatów, atakujący uniemożliwia realokację zwolnionych obszarów pamięci. Powoduje to znaczną fragmentację sterty, co powoduje, że maksymalny rozmiar pamięci rezydentnej stale rośnie i pozostaje zawyżony nawet po zakończeniu ataku. Jedynym sposobem na realokację pamięci jest zatrzymanie procesu OpenSSL.

„Aby ocenić zagrożenie, przetestowaliśmy niezabezpieczone i zabezpieczone instancje OpenSSL działające w środowisku NGINX w różnych warunkach obciążenia” – piszą badacze. „W standardowym środowisku z 1 GB pamięci RAM niezabezpieczony serwer uległ awarii z powodu błędu braku pamięci (OOM), gdy zużyto 547 megabajtów zamrożonej, pofragmentowanej pamięci. Podczas testów w środowiskach o wyższej wydajności (16 GB pamięci RAM) atak skutecznie zablokował 25% pamięci systemu, mieszcząc się w limicie połączeń, co oznacza, że ​​standardowe środki zaradcze ograniczające liczbę połączeń przychodzących nie byłyby w stanie go zatrzymać”.

„Zasadniczo taki atak jest bardzo łatwy do przeprowadzenia, trudny do odparcia, a jego konsekwencje będą podobne do rozproszonego ataku typu DoS ” – piszą eksperci . „Szkody wynikające z przestoju, w zależności od obciążenia serwera, mogą być ogromne, dlatego aktualizacja bibliotek jest priorytetem, o ile jeszcze tego nie zrobiono”.

Konieczne aktualizacje

Biblioteka OpenSSL jest wbudowana w popularne pakiety, takie jak Nginx , Apache środowiska uruchomieniowe, Node.js, Python, Ruby i PHP, a także bazy danych MySQL i PostgreSQL. Jest ona preinstalowana w większości dystrybucji Linuksa i obsługuje szyfrowanie TLS oraz obsługę certyfikatów bezpieczeństwa.

Wersje 4.0.1, 3.6.3, 3.5.7, 3.4.6 i 3.0.21 zostały poprawione. Teraz bufor pamięci jest przydzielany nie na podstawie rozmiaru zadeklarowanego w nagłówku, ale na podstawie rzeczywistego rozmiaru przychodzącej wiadomości. 

Spodobało Ci się? Podziel się ze znajomymi!

Pokaż / Dodaj komentarze do:

11 bajtów złośliwego kodu łamie protokół OpenSSL, na którym opiera się Internet
 0