OpenSSH 8.2 išleidimas su FIDO / U2F dviejų veiksnių autentifikavimo žetonų palaikymu

Po keturių mėnesių vystymosi pateiktas paleisti OpenSSH 8.2, atviras kliento ir serverio diegimas, skirtas darbui naudojant SSH 2.0 ir SFTP protokolus.

Pagrindinis OpenSSH 8.2 išleidimo patobulinimas buvo galimybė naudoti dviejų veiksnių autentifikavimą naudojant įrenginius, kurie palaiko protokolą U2F, sukurtas aljanso FIDO. U2F leidžia sukurti nebrangius aparatūros žetonus, kad būtų galima patikrinti fizinį vartotojo buvimą, sąveikaujant su jais per USB, Bluetooth arba NFC. Tokie įrenginiai reklamuojami kaip dviejų veiksnių autentifikavimo priemonė svetainėse, juos jau palaiko pagrindinės naršyklės ir gamina įvairūs gamintojai, įskaitant Yubico, Feitian, Thetis ir Kensington.

Norint sąveikauti su įrenginiais, kurie patvirtina vartotojo buvimą, prie OpenSSH buvo įtraukti nauji raktų tipai „ecdsa-sk“ ir „ed25519-sk“, kurie naudoja ECDSA ir Ed25519 skaitmeninio parašo algoritmus kartu su SHA-256 maiša. Sąveikos su žetonais procedūros pateikiamos tarpinėje bibliotekoje, kuri įkeliama panašiai kaip PKCS#11 palaikymo biblioteka ir yra bibliotekos viršuje esantis paketas. libfido2, kuriame pateikiami įrankiai, skirti bendrauti su žetonais per USB (palaikomi FIDO U2F/CTAP 1 ir FIDO 2.0/CTAP 2 protokolai). Tarpinė biblioteka libsk-libfido2, parengta OpenSSH kūrėjų įskaitant į pagrindinį libfido2, taip pat HID vairuotojas skirtas OpenBSD.

Norėdami autentifikuoti ir generuoti raktą, nustatymuose turite nurodyti parametrą „SecurityKeyProvider“ arba nustatyti aplinkos kintamąjį SSH_SK_PROVIDER, nurodantį kelią į išorinę biblioteką libsk-libfido2.so (eksportuoti SSH_SK_PROVIDER=/path/to/libsk-libfido2. taip). Galima sukurti openssh su įmontuotu sluoksnių bibliotekos palaikymu (--with-security-key-builtin), tokiu atveju reikia nustatyti parametrą „SecurityKeyProvider=internal“.
Tada turite paleisti „ssh-keygen -t ecdsa-sk“ arba, jei raktai jau sukurti ir sukonfigūruoti, prisijungti prie serverio naudodami „ssh“. Kai paleisite ssh-keygen, sugeneruota raktų pora bus išsaugota „~/.ssh/id_ecdsa_sk“ ir gali būti naudojama panašiai kaip ir kiti raktai.

Viešasis raktas (id_ecdsa_sk.pub) turi būti nukopijuotas į serverį, esantį author_keys faile. Serverio pusėje tikrinamas tik skaitmeninis parašas, o kliento pusėje atliekama sąveika su žetonais (serveryje nereikia diegti libsk-libfido2, bet serveris turi palaikyti „ecdsa-sk“ rakto tipą) . Sugeneruotas privatus raktas (id_ecdsa_sk) iš esmės yra rakto rankena, kuri sudaro tikrąjį raktą tik kartu su slapta seka, saugoma U2F prieigos rakto pusėje. Jei id_ecdsa_sk raktas patenka į užpuoliko rankas, norint perduoti autentifikavimą, jis taip pat turės gauti prieigą prie aparatinės įrangos prieigos rakto, be kurio id_ecdsa_sk faile saugomas privatus raktas yra nenaudingas.

Be to, pagal numatytuosius nustatymus, atliekant bet kokias operacijas su raktais (tiek generuojant, tiek autentifikuojant), reikalingas vietinis vartotojo fizinio buvimo patvirtinimas, pavyzdžiui, siūloma paliesti jutiklį ant žetono, todėl sunku vykdyti nuotolines atakas prieš sistemas su prijungtu prieigos raktu. Kaip dar viena gynybos linija, slaptažodis taip pat gali būti nurodytas ssh-keygen paleidimo fazėje, kad būtų galima pasiekti rakto failą.

Naujoji OpenSSH versija taip pat paskelbė apie būsimą algoritmų, naudojančių SHA-1 maišą, naudojimą dėl skatinimas susidūrimo atakų su nurodytu priešdėliu efektyvumas (susidūrimo pasirinkimo kaina yra apytiksliai 45 tūkst. dolerių). Viename iš būsimų leidimų jie planuoja pagal numatytuosius nustatymus išjungti galimybę naudoti viešojo rakto skaitmeninio parašo algoritmą „ssh-rsa“, kuris minimas originaliame SSH protokolo RFC ir išlieka plačiai paplitęs praktikoje (siekiant išbandyti naudojimą ssh-rsa savo sistemose, galite pabandyti prisijungti per ssh su parinktimi „-oHostKeyAlgorithms=-ssh-rsa“).

Siekiant sklandžiai pereiti prie naujų OpenSSH algoritmų, būsimame leidime pagal numatytuosius nustatymus bus įjungtas UpdateHostKeys nustatymas, kuris automatiškai perkels klientus į patikimesnius algoritmus. Rekomenduojami perkėlimo algoritmai yra rsa-sha2-256/512, pagrįstas RFC8332 RSA SHA-2 (palaikomas nuo OpenSSH 7.2 ir naudojamas pagal numatytuosius nustatymus), ssh-ed25519 (palaikomas nuo OpenSSH 6.5) ir ecdsa-sha2-nistp256/384 pagrįstas521/5656/5.7 RFCXNUMX ECDSA (palaikoma nuo OpenSSH XNUMX).

OpenSSH 8.2 versijoje vis dar galima prisijungti naudojant „ssh-rsa“, tačiau šis algoritmas buvo pašalintas iš sąrašo CASignatureAlgorithms, kuris apibrėžia algoritmus, leidžiamus skaitmeniniu būdu pasirašyti naujus sertifikatus. Panašiai, algoritmas diffie-hellman-group14-sha1 buvo pašalintas iš numatytųjų palaikomų raktų mainų algoritmų. Pažymima, kad SHA-1 naudojimas sertifikatuose yra susijęs su papildoma rizika, nes užpuolikas turi neribotą laiką ieškoti susidūrimo su esamu sertifikatu, o atakos prieš pagrindinio kompiuterio raktus laiką riboja ryšio laikas (LoginGraceTime ).

Vykdant ssh-keygen dabar numatytasis algoritmas rsa-sha2-512, kuris palaikomas nuo 7.2 versijos OpenSSH, todėl gali kilti suderinamumo problemų bandant apdoroti sertifikatus, pasirašytus OpenSSH 8.2, sistemose, kuriose veikia senesni OpenSSH leidimai (kad būtų išvengta problemos, kai kada generuodami parašą, galite aiškiai nurodyti „ssh-keygen -t ssh-rsa“ arba naudoti ecdsa-sha2-nistp256/384/521 algoritmus, palaikomus nuo OpenSSH 5.7).

Kiti pakeitimai:

  • Į sshd_config buvo įtraukta direktyva Include, kuri leidžia įtraukti kitų failų turinį į dabartinę konfigūracijos failo vietą (nurodant failo pavadinimą galima naudoti glob maskus);
  • Prie ssh-keygen buvo pridėta parinktis „no-touch-required“, kuri išjungia poreikį fiziškai patvirtinti prieigą prie prieigos rakto generuojant raktą;
  • Prie sshd_config buvo pridėta PubkeyAuthOptions direktyva, kuri sujungia įvairias parinktis, susijusias su viešojo rakto autentifikavimu. Šiuo metu palaikoma tik žyma „nereikia liesti“, kad būtų galima praleisti fizinio buvimo patikrinimus, kad būtų galima autentifikuoti prieigos raktą. Pagal analogiją, parinktis „no-touch-required“ buvo įtraukta į author_keys failą;
  • Prie ssh-keygen pridėta parinktis "-O write-attestation=/path", kad generuojant raktus būtų galima rašyti papildomus FIDO atestacijos sertifikatus. OpenSSH šių sertifikatų dar nenaudoja, bet vėliau juos galima naudoti norint patikrinti, ar raktas yra patikimoje techninės įrangos parduotuvėje;
  • Ssh ir sshd nustatymuose dabar galima nustatyti srauto prioritetų režimą naudojant IPQoS direktyvą LE DSCP (Mažesnės pastangos per apynį);
  • Ssh, nustatant reikšmę „AddKeysToAgent=yes“, jei rakte nėra komentaro lauko, jis bus įtrauktas į ssh-agent, nurodant kelią iki rakto kaip komentaras. IN
    ssh-keygen ir ssh-agent dabar taip pat naudoja PKCS#11 etiketes ir X.509 temos pavadinimą vietoj bibliotekos kelio kaip komentarus rakte;

  • Pridėta galimybė eksportuoti DSA ir ECDSA raktų PEM į ssh-keygen;
  • Pridėtas naujas vykdomasis failas ssh-sk-helper, naudojamas FIDO/U2F prieigos raktų prieigos bibliotekai izoliuoti;
  • Pridėta „--with-zlib“ kūrimo parinktis prie ssh ir sshd, kad būtų galima kompiliuoti su zlib bibliotekos palaikymu;
  • Pagal RFC4253 reikalavimą prisijungimo metu rodomoje reklamjuostėje pateikiamas įspėjimas apie prieigos blokavimą dėl MaxStartups limitų viršijimo. Siekiant supaprastinti diagnostiką, sshd proceso antraštė, matoma naudojant ps įrankį, dabar rodo šiuo metu autentifikuotų jungčių skaičių ir MaxStartups limito būseną;
  • Ssh ir ssh-agent iškviečiant programą, kad ekrane būtų rodomas kvietimas, nurodytas per $SSH_ASKPASS, dabar papildomai perduodama vėliavėlė su kvietimo tipu: „patvirtinti“ - patvirtinimo dialogas (taip/ne), „nėra“. ” - informacinis pranešimas, „tuščias“ – slaptažodžio užklausa;
  • Prie ssh-keygen pridėta nauja skaitmeninių parašų operacija „find-principals“, skirta leistinų pasirašiusiųjų faile ieškoti vartotojo, susieto su nurodytu skaitmeniniu parašu;
  • Patobulintas sshd procesų izoliavimo palaikymas Linux sistemoje naudojant seccomp mechanizmą: išjungiami IPC sistemos iškvietimai, leidžiami clock_gettime64(), clock_nanosleep_time64 ir clock_nanosleep().

Šaltinis: opennet.ru

Добавить комментарий