informacje o nowym (CVE-2020-1968) w protokole TLS, noszącego nazwę kodową
i pozwalającego w rzadkich okolicznościach określić wstępny klucz główny (pre-master), który można wykorzystać do odszyfrowania połączeń TLS, w tym HTTPS, podczas przechwytywania ruchu tranzytowego (MITM). Zauważono, że atak ten jest bardzo trudny do zrealizowania w praktyce i ma bardziej teoretyczny charakter. Do przeprowadzenia ataku wymagana jest specyficzna konfiguracja serwera TLS oraz możliwość bardzo dokładnego pomiaru czasu przetwarzania operacji przez serwer.
Problem występuje bezpośrednio w specyfikacji TLS i dotyczy tylko połączeń wykorzystujących szyfry oparte na protokole wymiany kluczy DH (Diffie-Hellman, TLS_DH_*). Szyfry ECDH nie wykazują tego problemu i pozostają bezpieczne. Vulnerable są jedynie protokoły TLS do wersji 1.2 włącznie, protokół TLS 1.3 nie jest podatny na tę problematykę. Wrażliwość objawia się w implementacjach TLS, które ponownie wykorzystują sekretny klucz DH w różnych połączeniach TLS (podobne zachowanie występuje na około 4,4% serwerów z rankingu Alexa Top 1M).
W OpenSSL 1.0.2e i wcześniejszych wersjach klucz główny DH jest ponownie wykorzystywany we wszystkich połączeniach serwerowych, chyba że wyraźnie ustawiona jest opcja SSL_OP_SINGLE_DH_USE. Począwszy od OpenSSL 1.0.2f klucz główny DH jest ponownie wykorzystywany tylko podczas korzystania z statycznych szyfrów DH ("DH-*", na przykład "DH-RSA-AES256-SHA"). W OpenSSL 1.1.1 ta podatność nie występuje, ponieważ w tej gałęzi nie stosuje się klucza głównego DH i nie używa się statycznych szyfrów DH.
Podczas korzystania z metody wymiany kluczy DH obie strony połączenia generują losowe klucze prywatne (nazywane kluczami „a” i „b”), na podstawie których obliczane są i przesyłane klucze publiczne (ga mod p i gb mod p). Po otrzymaniu kluczy publicznych każda ze stron oblicza wspólny klucz główny (gab mod p), który jest używany do formowania kluczy sesyjnych. Atak Raccoon pozwala określić klucz główny poprzez analizę informacji za pośrednictwem bocznych kanałów, opierając się na tym, że w specyfikacjach TLS do wersji 1.2 zaleca się odrzucenie wszystkich początkowych zerowych bajtów klucza głównego przed obliczeniami z jego udziałem.
W tym przypadku skrócony klucz główny jest przekazywany do funkcji generacji klucza sesyjnego, opartej na funkcjach haszujących, które mają różne opóźnienia przy przetwarzaniu różnych danych. Dokładne pomiary czasu operacji serwera z kluczem umożliwiają atakującemu określenie wskazówek (oracle), które mogą wskazywać, czy klucz główny zaczyna się od zera, czy nie. Na przykład atakujący może przechwycić wysłany przez klienta klucz publiczny (ga), przesłać go ponownie do serwera i ustalić
czy wynikowy klucz główny zaczyna się od zera.
Samo określenie jednego bajta klucza nic nie daje, ale przechwytując przesłaną w trakcie ustalania połączenia wartość 'ga', atakujący może stworzyć zestaw innych wartości powiązanych z 'ga' i wysłać je do serwera w oddzielnych sesjach ustalania połączenia. Tworząc i wysyłając wartości 'gri*ga', atakujący może przez analizę zmiany opóźnień w odpowiedzi serwera określić wartości prowadzące do otrzymania kluczy głównych zaczynających się od zera. Określając takie wartości, atakujący może stworzyć zestaw równań dla i obliczyć pierwotny klucz główny.

W OpenSSL istnieją luki o niskim poziomie niebezpieczeństwa, a poprawka polegała na przeniesieniu zarażonych szyfrów 'TLS_DH_*' do domyślnej kategorii szyfrów o niewystarczającym poziomie ochrony ('weak-ssl-ciphers'). Podobnie postąpili deweloperzy Mozilla, którzy w bibliotece NSS, używanej w Firefoxie, odłączyli zestawy szyfrów DH i DHE. Począwszy od Firefox 78, problematyczne szyfry zostały wyłączone. W Chrome wsparcie dla DH zostało zakończone jeszcze w 2016 roku. Biblioteki BearSSL, BoringSSL, Botan, Mbed TLS i s2n nie są podatne na problem, ponieważ nie obsługują szyfrów DH ani statycznych wariantów szyfrów DH.
Osobno zwraca się uwagę na dodatkowe problemy () w stosie TLS urządzeń F5 BIG-IP, które sprawiają, że atak jest bardziej realistyczny. W szczególności wykryto odchylenia w zachowaniu urządzeń w przypadku wystąpienia zera bajtowego na początku klucza głównego, które można wykorzystać zamiast pomiaru dokładnego czasu opóźnienia podczas obliczeń.
Źródło: opennet.ru
