W OpenSSH dodano wsparcie dla uniwersalnej uwierzytelniania dwuetapowego

W kodzie źródłowym OpenSSH dodano eksperymentalne wsparcie dla uwierzytelniania dwuskładnikowego z wykorzystaniem urządzeń obsługujących protokół U2F, rozwijanym przez alianse FIDO. U2F umożliwia tworzenie niedrogich tokenów sprzętowych do potwierdzania fizycznej obecności użytkownika, z którymi interakcja odbywa się przez USB, Bluetooth lub NFC. Takie urządzenia są promowane jako środek dwuetapowego uwierzytelniania na stronach internetowych, są już obsługiwane przez główne przeglądarki i produkowane przez różnych producentów, w tym Yubico, Feitian, Thetis i Kensington.

Aby współdziałać z urządzeniami potwierdzającymi obecność użytkownika, w OpenSSH dodano nowy typ kluczy „sk-ecdsa-sha2-nistp256@openssh.com” („ecdsa-sk”), który wykorzystuje algorytm podpisu cyfrowego ECDSA (Elliptic Curve Digital Signature Algorithm) z krzywą eliptyczną NIST P-256 oraz hasz SHA-256. Procedury взаимодействия z tokenami przeniesione zostały do pośredniej biblioteki, która ładowana jest analogicznie do biblioteki obsługującej PKCS#11 i stanowi interfejs nad biblioteką. libfido2, która zapewnia środki komunikacji z tokenami przez USB (obsługiwane są protokoły FIDO U2F/CTAP 1 i FIDO 2.0/CTAP 2). Opracowana przez deweloperów OpenSSH pośrednia biblioteka libsk-libfido2 wliczona jest częścią libfido2, tak jak sterownik HID dla OpenBSD.

Aby włączyć U2F, można użyć świeżego zrzutu kodu źródłowego z repozytorium OpenSSH i gałęzi HEAD biblioteki libfido2, która już zawiera potrzebną do OpenSSH warstwę.
Libfido2 wspiera działanie w OpenBSD, Linuxie, macOS i Windowsie.

Aby przeprowadzić uwierzytelnienie i wygenerować klucz, należy ustawić zmienną środowiskową SSH_SK_PROVIDER, podając w niej ścieżkę do libsk-libfido2.so (export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), lub określić bibliotekę w ustawieniu SecurityKeyProvider, a następnie uruchomić „ssh-keygen -t ecdsa-sk” lub, jeśli klucze już zostały utworzone i skonfigurowane, połączyć się z serwerem za pomocą „ssh”. Przy uruchomieniu ssh-keygen utworzona para kluczy zostanie zapisana w „~/.ssh/id_ecdsa_sk” i może być używana podobnie jak inne klucze.

Otwarty klucz (id_ecdsa_sk.pub) należy skopiować na serwer do pliku authorized_keys. Po stronie serwera tylko weryfikowana jest podpis cyfrowy, a interakcja z tokenami odbywa się po stronie klienta (na serwerze nie trzeba instalować libsk-libfido2, ale serwer musi obsługiwać typ kluczy „ecdsa-sk”). Wygenerowany klucz prywatny (id_ecdsa_sk) w zasadzie jest uchwytem klucza, tworzącym rzeczywisty klucz tylko w połączeniu z sekretną sekwencją przechowywaną po stronie tokena U2F.

W przypadku przejęcia klucza id_ecdsa_sk przez atakującego, do przeprowadzenia uwierzytelnienia będzie również potrzebny dostęp do sprzętowego tokena, bez którego zapisany w pliku id_ecdsa_sk klucz prywatny jest bezużyteczny. Ponadto, domyślnie przy wykonywaniu jakichkolwiek operacji z kluczami (zarówno przy generacji, jak i przy uwierzytelnieniu) wymagana jest lokalna weryfikacja fizycznej obecności użytkownika, na przykład przez dotknięcie czujnika na tokenie, co utrudnia przeprowadzanie zdalnych ataków na systemy z podłączonym tokenem. Jako dodatkowy poziom zabezpieczeń, na etapie uruchamiania ssh-keygen można również ustawić hasło do pliku z kluczem.

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

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster