Aktualności

regreSSHion (CVE-2024-6387)

regreSSHion (CVE-2024-6387)

Wprowadzenie

1 lipca 2024 r. Qualys Threat Research Unit (TRU) ujawnił informacje o luce wykrytej w OpenSSH [1] – jednej z najpopularniejszych i najbezpieczniejszych usług zdalnego dostępu do serwerów, wykorzystywanej głównie w systemach Linux.

Luce przypisano identyfikator CVE CVE-2024-6387, a w bazie danych NVD scharakteryzowano ją w następujący sposób:

Odkryto błąd bezpieczeństwa (CVE-2006-5051) w serwerze OpenSSH (sshd). Istnieje warunek wyścigu, który może prowadzić sshd do obsługi niektórych sygnałów w niebezpieczny sposób. Nieuwierzytelniony, zdalny atakujący może być w stanie wywołać ten stan, nie uwierzytelniając się w określonym czasie. [2]
National Vulnerability Database (NVD) to kompleksowe repozytorium informacji o znanych lukach w cyberbezpieczeństwie, w tym szczegóły dotyczące ich wagi, wpływu i poprawek. Common Vulnerabilities and Exposures (CVE) to system, który zapewnia unikalne identyfikatory publicznie znanych luk i zagrożeń.
Jednym z najbardziej intrygujących aspektów tej luki jest to, że była ona obecna w OpenSSH i została nawet przypisana CVE-2006-5051 dawno temu. Jednak z powodu błędu programistycznego, gdy kod OpenSSH został zmodyfikowany, podatność pojawiła się ponownie od października 2020 r.
Podatność można podsumować jako warunek wyścigu obsługi sygnału, który umożliwia nieuwierzytelnione zdalne wykonanie kodu z uprawnieniami roota. Aby lepiej zrozumieć, co to oznacza, podzielimy ten opis na podstawowe elementy i wyjaśnimy każdy termin w przystępny sposób.

Czym jest OpenSSH?

OpenSSH (Open Secure Shell) to szeroko stosowany pakiet narzędzi open-source zaprojektowany w celu zapewnienia bezpiecznego zdalnego dostępu i przesyłania danych przez niezabezpieczone sieci. Opracowany w ramach projektu OpenBSD, OpenSSH oferuje solidny, szyfrowany protokół do bezpiecznej komunikacji między systemami. Głównym narzędziem do bezpiecznego zdalnego dostępu do powłoki jest sshktóry umożliwia użytkownikom bezpieczne logowanie i wykonywanie poleceń na zdalnych maszynach. OpenSSH wykorzystuje silne mechanizmy szyfrowania i uwierzytelniania w celu ochrony danych przed podsłuchem i manipulacją. Obsługuje różne metody uwierzytelniania, w tym uwierzytelnianie oparte na hasłach i kluczach oraz zaawansowane funkcje, takie jak przekierowanie portów i bezpieczne tunelowanie. W praktyce serwer OpenSSH jest najczęściej używaną opcją do nawiązywania połączeń z systemami Linux.

Kim jest root?

Root jest najbardziej uprzywilejowanym użytkownikiem w systemie Linux. Ma on pełny i nieograniczony dostęp do całego systemu.

Czym jest RCE?

Remote Code Execution (RCE) to luka, która stanowi krytyczną lukę w zabezpieczeniach, która pozwala atakującemu na wykonanie dowolnego kodu w zdalnym systemie za pośrednictwem sieci. Można powiedzieć, że jest to rodzaj luki, o której marzy każdy haker. Wykonanie zdalnego kodu może prowadzić do wielu poważnych konsekwencji. Na przykład hakerzy mogą uzyskać dostęp do wrażliwych zasobów na komputerze, zainstalować złośliwe oprogramowanie i backdoory (które umożliwią im uzyskanie trwałości i ponowne połączenie się z zaatakowanym systemem) oraz zakłócić lub wpłynąć na usługi działające w systemie. W skrajnych przypadkach zdalne wykonanie kodu pozwala hakerom przejąć całkowitą kontrolę nad zaatakowanym systemem.

Jaka jest idea warunku wyścigu obsługi sygnału w OpenSSH?

Programy obsługi sygnałów to funkcje w programie, które reagują na sygnały, które są powiadomieniami wysyłanymi do procesu. Warunek wyścigu ma miejsce, gdy czas zdarzeń prowadzi do nieoczekiwanego lub nieprawidłowego zachowania. W przypadku funkcji obsługi sygnałów często wiąże się to z problemami wynikającymi z działań asynchronicznych (rzeczy dzieją się poza kolejnością). Jeśli zarówno program obsługi sygnału, jak i zwykły kod uzyskują dostęp do tych samych zmiennych globalnych lub danych statycznych, a program obsługi sygnału modyfikuje je, podczas gdy zwykły kod ich używa, może to powodować problemy, takie jak uszkodzenie danych lub awarie. Atakujący mogą wykorzystać te warunki wyścigu do uszkodzenia stanu programu, potencjalnie powodując jego awarię lub umożliwiając nieautoryzowane wykonanie kodu.

W OpenSSH błąd warunku wyścigu obsługi sygnału pojawia się, gdy klient nie uwierzytelni się w ciągu LoginGraceTime . Parametr LoginGraceTime określa czas dozwolony na pomyślne uwierzytelnienie na serwerze SSH. Im dłuższy okres karencji, tym dłużej mogą trwać nieuwierzytelnione połączenia. [Domyślna wartość tego parametru wynosi 120 sekund. Jeśli ten limit czasu zostanie osiągnięty, program obsługi SIGALRM jest uruchamiany asynchronicznie i wywołuje funkcje, które nie są bezpieczne dla programów obsługi sygnału, takie jak syslog(). W wersjach wcześniejszych niż 4.4p1 atakujący mógł wykorzystać funkcję free() używaną w funkcji syslog() podczas obsługi sygnału. W wersjach od 8.5p1 do 9.7p1 zarówno funkcje free(), jak i malloc() są podatne na exploity. Dowód koncepcji z Qualys Threat Research Unit opiera się na wykorzystaniu segmentu danych klucza publicznego do wysłania ładunku exploita. Jeśli exploit się powiedzie, atakujący wymusza wykonanie kodu, który pozwala mu uzyskać powłokę roota. Ponieważ exploit wymaga idealnego wyczucia czasu, statystycznie potrzeba wielu prób, aby odnieść sukces. Na przykład, w przypadku OpenSSH w systemie 32-bitowym do pomyślnego wykonania kodu potrzeba było średnio 10 000 prób.Qualys Threat Research Unit jest w trakcie tworzenia i testowania exploitów na systemy 64-bitowe[5]. [5]

SIGALRM jest sygnałem używanym w uniksowych systemach operacyjnych do powiadamiania procesu o wygaśnięciu timera. Proces może przechwycić ten sygnał i obsłużyć go za pomocą funkcji obsługi sygnału. Funkcja ta jest wykonywana po odebraniu sygnału. Funkcje wymienione w powyższym tekście są częścią języka C: syslog( ) – ta funkcja służy do zapisywania komunikatów dziennika do dziennika systemowego. malloc() – ta funkcja alokuje (rezerwuje) blok pamięci do użycia.free() – ta funkcja służy do zwalniania pamięci, która została wcześniej przydzielona przez funkcję malloc().

Wersje, których to dotyczy

Aby podsumować informacje o podatnym oprogramowaniu [5]:

Pamiętaj jednak, że teoretycznie podatna wersja może zostać załatana. Na przykład, łatka została wprowadzona dla różnych wersji OpenSSH dla systemu operacyjnego Ubuntu. [6, 3] Tak więc wersja OpenSSH nie jest jednoznacznym wskaźnikiem obecności luk.

Aby sprawdzić wersję OpenSSH w systemie, wykonaj następujące polecenie w terminalu:

ssh -V

Zauważ, że nie dotyczy to systemów Windows. Co więcej, Alpine Linux i OpenBSD prawdopodobnie nie są podatne na ten atak. Red Hat Enterprise Linux 9 może być potencjalnie podatny, ale inne mechanizmy kontrolne zatrzymały ścieżkę do wykorzystania. [4]

Środki zaradcze

Aby bezpośrednio złagodzić podatność CVE-2024-6387, możesz wykonać następujące czynności:

Możesz również zastosować następujące dodatkowe kroki w celu ogólnego ograniczenia ryzyka związanego z możliwością nadużycia usługi OpenSSH:

Podkreślmy to jeszcze raz – powyższe dodatkowe kroki są dobrymi praktykami pozwalającymi na ogólne wzmocnienie serwera OpenSSH, ale nie zmniejszają bezpośrednio zagrożenia związanego z opisaną luką regreSSHion.

Kluczowe wnioski

Bibliografia

[1] B. Jogi, “regreSSHion: Remote Unauthenticated Code Execution Vulnerability in OpenSSH server”, [Online]. Dostępne: https://blog.qualys.com/vulnerabilities-threat-research/2024/07/01/regresshion-remote-unauthenticated-code-execution-vulnerability-in-openssh-server#affected-openssh-versions.
[2] “NVD NIST,” [Online]. Dostępne: https://nvd.nist.gov/vuln/detail/CVE-2024-6387.
[3] “Ensure SSH LoginGraceTime is set to one minute or less,” SecScan, [Online]. Dostępne: https://secscan.acron.pl/centos7/5/2/14.
[4] “RegreSSHion exploit, CVE-2024-6387: A Write-Up,” Offsec Team, [Online]. Dostępne: https://www.offsec.com/blog/regresshion-exploit-cve-2024-6387/.
[5] “regreSSHion: RCE w serwerze OpenSSH, w systemach Linux opartych na glibc (CVE-2024-6387)”, Qualys Security Advisory, [Online]. Dostępne: https://www.qualys.com/2024/07/01/cve-2024-6387/regresshion.txt.
[6] “CVE-2024-6387,” Ubuntu Security, [Online]. Dostępne: https://ubuntu.com/security/CVE-2024-6387.