Interesująca podatność w protokole SSH-2

2009-05-19 00:00:00 +0100


Grupa brytyskich badaczy opublikowała interesujący acz niekompletny opis interesującej podatności w protokole SSH-2, który do tej pory uchodził za całkowicie bezpieczny z kryptograficznego punktu widzenia. Dzięki umiejętnej manipulacji trybem CBC możliwia on odzyskanie 4 bajtów z zaszyfrowanego strumienia danych. Informacja została oficjalnie opublikowana przez brytyjski Centre for the Protection of National Infrastructure (CPNI) w listopadzie 2008, ale ujrzała światło dzienne dopiero w lutym 2009 po opublikowaniu poprawionej wersji OpenSSH 5.2.

Opis CPNI (Plaintext Recovery Attack Against SSH) jest dość skąpy i ogranicza się do następującej informacji o sposobie działania podatności:

The attack works by analysing the behaviour of the SSH connection when handling certain types of errors. (...) If exploited, this attack can potentially allow an attacker to recover up to 32 bits of plaintext from an arbitrary block of ciphertext from a connection secured using the SSH protocol in the standard configuration. If OpenSSH is used in the standard configuration, then the attacker's success probability for recovering 32 bits of plaintext is $2^{-18}$.

Można z tego wywnioskować, że jest to atak typu oracle, w którym z odpowiedzi udzielanych przez serwer w wyniku odpowiednio sprowokowanych błędów wnioskujemy kolejne fragmenty bitów tekstu jawnego.

Problem został załatany za pomocą zmiany domyślnego trybu pracy szyfru blokowego w OpenSSH 5.2 z CBC na CTR. Nie jest to rozwiązanie doskonałe, bo AES-CTR nie jest trybem standardowym dla oryginalnego protokołu SSH-2, choć został zaproponowany w 2006 roku w RFC 4344 i jest obsługiwany przez OpenSSH. Dla pozostałych, tradycyjnych, trybów CBC zaimplementowano mechanizm wykrywający próbę przeprowadzenia ataku metodą opisaną przez CPNI.

http://www.cpni.gov.uk/docs/vulnerability_advisory_ssh.txt http://www.openssh.com/txt/release-5.2

Przypomnijmy, że w 1998 roku opublikowany został dość podobny jeśli chodzi o miejsce występowania podatności atak SSH Insertion (zwany też “SSH CRC-32 Compensation”), w którym do nieautoryzowanego wstrzykiwania treści do strumienia SSH wykorzystano słabość użytej funkcji ochrony integralności za pomocą CRC-32.

Problem ten - wymagający przeprojektowania protokołu - również załatano wówczas ad hoc za pomocą kodu wykrywającego próbę wstrzyknięcia. Co zabawne, w 2001 roku Michał Zalewski wykrył w tym kodzie typowy błąd programistyczny skutkujący podatnością typu denial of service (SSH1 CRC-32 compensation attack detector vulnerability).