OpenSSH dodaje obsługę uniwersalnego uwierzytelniania dwuskładnikowego

Do bazy kodu OpenSSH dodany eksperymentalna obsługa uwierzytelniania dwuskładnikowego przy użyciu urządzeń obsługujących ten protokół U2F, opracowany przez sojusz FIDO. U2F umożliwia tworzenie tanich tokenów sprzętowych w celu weryfikacji fizycznej obecności użytkownika, wchodząc z nim w interakcję za pośrednictwem USB, Bluetooth lub NFC. Urządzenia tego typu są promowane na stronach internetowych jako sposób uwierzytelniania dwuskładnikowego, są już obsługiwane przez główne przeglądarki i są produkowane przez różnych producentów, w tym Yubico, Feitian, Thetis i Kensington.

Aby móc wchodzić w interakcję z urządzeniami potwierdzającymi obecność użytkownika, do OpenSSH dodano nowy typ kluczy „[email chroniony]” („ecdsa-sk”), który wykorzystuje algorytm podpisu cyfrowego ECDSA (Elliptic Curve Digital Signature Algorithm) z krzywą eliptyczną NIST P-256 i skrótem SHA-256. Procedury interakcji z tokenami umieszczone są w bibliotece pośredniej, która ładowana jest w podobny sposób jak biblioteka obsługująca PKCS#11 i stanowi opakowanie na bibliotekę libfido2, który udostępnia narzędzia do komunikacji z tokenami przez USB (obsługiwane są protokoły FIDO U2F/CTAP 1 i FIDO 2.0/CTAP 2). Biblioteka pośrednia libsk-libfido2 przygotowana przez programistów OpenSSH w zestawie do rdzenia libfido2, a także Kierowca HID dla OpenBSD.

Aby włączyć U2F, możesz użyć świeżego fragmentu bazy kodu z magazyn OpenSSH i oddział HEAD biblioteki libfido2, który zawiera już warstwę niezbędną dla OpenSSH.
Libfido2 obsługuje OpenBSD, Linux, macOS i Windows.

Aby uwierzytelnić i wygenerować klucz, należy ustawić zmienną środowiskową SSH_SK_PROVIDER, wskazując w niej ścieżkę do libsk-libfido2.so (eksport SSH_SK_PROVIDER=/path/to/libsk-libfido2.so) lub zdefiniować bibliotekę poprzez SecurityKeyProvider ustawienie, a następnie uruchom „ssh-keygen -t ecdsa-sk” lub, jeśli klucze zostały już utworzone i skonfigurowane, połącz się z serwerem za pomocą „ssh”. Po uruchomieniu ssh-keygen wygenerowana para kluczy zostanie zapisana w „~/.ssh/id_ecdsa_sk” i będzie można jej używać podobnie jak innych kluczy.

Klucz publiczny (id_ecdsa_sk.pub) należy skopiować na serwer w pliku autoryzowane_klucze. Po stronie serwera weryfikowany jest tylko podpis cyfrowy, a po stronie klienta odbywa się interakcja z tokenami (nie musisz instalować na serwerze libsk-libfido2, ale serwer musi obsługiwać typ klucza „ecdsa-sk”) . Wygenerowany klucz prywatny (id_ecdsa_sk) jest w istocie uchwytem klucza, tworzącym prawdziwy klucz tylko w połączeniu z tajną sekwencją przechowywaną po stronie tokena U2F.

Jeżeli klucz id_ecdsa_sk wpadnie w ręce atakującego, aby przejść uwierzytelnienie będzie on musiał uzyskać dostęp także do tokena sprzętowego, bez którego klucz prywatny zapisany w pliku id_ecdsa_sk będzie bezużyteczny. Ponadto domyślnie przy wykonywaniu jakichkolwiek operacji na kluczach (zarówno podczas generowania, jak i podczas uwierzytelniania) wymagane jest lokalne potwierdzenie fizycznej obecności użytkownika, np. proponowane jest dotknięcie czujnika na tokenie, co utrudnia przeprowadzać zdalne ataki na systemy z podłączonym tokenem. Jako kolejną linię obrony można również określić hasło podczas fazy uruchamiania ssh-keygen, aby uzyskać dostęp do pliku klucza.

Klucz U2F można dodać do ssh-agent poprzez „ssh-add ~/.ssh/id_ecdsa_sk”, ale ssh-agent musi być zbudowany z obsługą kluczy „ecdsa-sk”, warstwa libsk-libfido2 musi być obecna i agent musi działać w systemie, do którego podłączony jest token.
Dodano nowy typ klucza „ecdsa-sk”, ponieważ format kluczy OpenSSH ecdsa różni się od formatu U2F dla podpisów cyfrowych ECDSA w obecności dodatkowych pól.

Źródło: opennet.ru

Dodaj komentarz