Opublikowano wydanie OpenSSH 9.8, otwartej implementacji klienta i serwera pracującego z protokołami SSH 2.0 i SFTP. Oprócz usunięcia wcześniej ogłoszonej krytycznej luki (CVE-2024-6387), umożliwiającej zdalne wykonanie kodu z uprawnieniami root przed przeprowadzeniem autoryzacji, w nowej wersji naprawiono jeszcze jedną, mniej niebezpieczną lukę oraz wprowadzono kilka istotnych zmian mających na celu zwiększenie bezpieczeństwa.
Druga luka umożliwia obejście dodanej w wersji OpenSSH 9.5 ochrony przed atakami przez kanały boczne, analizującymi opóźnienia między naciśnięciami klawiszy, aby odtworzyć wpis. Luka pozwala na rozróżnienie pakietów, które generują aktywność w tle poprzez symulację fikcyjnych naciśnięć klawiszy, od pakietów wysyłanych podczas naciśnięcia rzeczywistych klawiszy, co obniża efektywność mechanizmu ukrywania cech interaktywnego wpisu w ruchu SSH. Informacje o naciśnięciach klawiszy pozwalają na stosowanie ataków, które odtwarzają wprowadzenie tekstu na podstawie analizy opóźnień między naciśnięciami podczas pisania, które zależą od rozmieszczenia klawiszy na klawiaturze (np. reakcja podczas wpisywania litery „F” jest szybsza niż podczas wpisywania „Q” lub „X”, ponieważ do naciśnięcia wymaga mniej ruchów palców).
Ponadto ustalono, że wdrożony algorytm wysyłania pakietów z rzeczywistymi i fikcyjnymi naciśnięciami zmniejszał niezawodność innej metody ochrony przed atakami przez kanały boczne. Od wydania
OpenSSH 2.9.9 serwer wysyłał pakiety z fikcyjnymi naciśnięciami dla wprowadzania w trybie echo-off, używanego np. podczas wprowadzania haseł w su lub sudo. Nowa logika wysyłania fikcyjnych pakietów pozwalała przy pasywnej analizie ruchu na выделение pakietów z rzeczywistymi naciśnięciami w trybie echo-off do ich osobnej analizy. Przy tym dokładność informacji o czasie naciśnięć jest ograniczona, ponieważ po wprowadzeniu pakiety nie są wysyłane od razu, lecz z zachowaniem stałych odstępów czasowych (domyślnie 20 ms).
Inne zmiany w OpenSSH 9.8:
- W etapie budowy domyślnie wyłączono obsługę podpisów cyfrowych opartych na algorytmie DSA. Na początku 2025 roku implementacja DSA zostanie usunięta z bazy kodu. Powodem usunięcia jest niewystarczający poziom bezpieczeństwa DSA, który nie spełnia współczesnych wymagań. Koszty dalszego wsparcia dla niebezpiecznego algorytmu DSA nie są uzasadnione, a jego usunięcie pozwoli na zaprzestanie wsparcia DSA w innych implementacjach SSH oraz bibliotekach kryptograficznych.
- Aby dodatkowo chronić przed metodami wykorzystania luk, które wymagają nawiązania dużej liczby połączeń z sshd, wprowadzono i domyślnie włączono nowy tryb ochrony, który pomaga również w blokowaniu zautomatyzowanych ataków związanych z łamaniem haseł, w których boty próbują zgadnąć hasło użytkownika, sprawdzając różne typowe kombinacje. Ochrona realizowana jest poprzez blokadę adresów IP, z których rejestrowana jest duża liczba nieudanych prób połączeń — sshd śledzi status zakończenia procesów podrzędnych, określając sytuacje, gdy autoryzacja się nie powiodła lub proces został nagle zakończony z powodu awarii, a po przekroczeniu określonego progu zaczyna blokować zapytania z problematycznych adresów IP lub podsieci. Aby dostosować próg wyzwalania blokady, maskę blokowanej podsieci i listę wyjątków, zaproponowano parametry PerSourcePenalties, PerSourceNetBlockSize i PerSourcePenaltyExemptList.
- Podzielono sshd na kilka oddzielnych plików wykonywalnych. Z sshd wydzielono proces sshd-session, który wykonuje zadania związane z obsługą sesji. Proces sshd pozostawiono funkcje odpowiedzialne za przyjmowanie połączeń sieciowych, sprawdzanie konfiguracji, ładowanie kluczy hostów i zarządzanie uruchamianymi procesami zgodnie z parametrem MaxStartups. W ten sposób plik wykonywalny sshd teraz zawiera minimalną funkcjonalność potrzebną do przyjmowania nowego połączenia sieciowego i uruchamiania sshd-session do obsługi sesji.
- Zmienił się tekst niektórych komunikatów o błędach zapisywanych w logach. W szczególności, część komunikatów jest teraz przesyłana w imieniu procesu „sshd-session”, a nie „sshd”.
- W narzędziu ssh-keyscan informacje o wersji protokołu i nazwie hosta są teraz wyprowadzane do standardowego strumienia, a nie do STDERR. Aby wyłączyć wyjście, zaproponowano opcję „-q”.
- W ssh dodano możliwość wyłączenia przy użyciu dyrektywy HostkeyAlgorithms, co pozwala na powrót z użycia certyfikatu klucza hosta do stosowania prostych kluczy hosta.
- W przenośnej wersji sshd zakończono używanie wartości argv[0] do określenia nazwy usługi PAM. W pliku sshd_config dodano nową dyrektywę „PAMServiceName”, która domyślnie ustawiona jest na „sshd”.
- W przenośnej wersji sshd zapewniono zachowanie automatycznie generowanych plików (skrypt configure, config.h.in itd.) w gałęzi Git z wydaniami (np. V_9_8), co umożliwiło synchronizację zawartości zatwierdzonych archiwów tar z podpisem cyfrowym i gałęzi w Git.
- W przenośnej wersji ssh i ssh-agent zapewniono ustawienie trybu
SSH_ASKPASS przy obecności zmiennej środowiskowej WAYLAND_DISPLAY, analogicznie do tego, jak dla X11 robiło się to przy obecności zmiennej środowiskowej DISPLAY. - W przenośnej wersji sshd dodano obsługę wysyłania do systemd powiadomień przy tworzeniu nasłuchującego gniazda sieciowego lub ponownym uruchomieniu, wykorzystując wydzielony kod, który nie odwołuje się do biblioteki libsystemd.
Źródło: opennet.ru
