OpenSSH 8.2:n julkaisu, joka tukee FIDO/U2F-kaksitekijätodennustunnisteita

Neljän kuukauden kehitystyön jälkeen esitetty vapauta OpenSSH 8.2, avoin asiakas- ja palvelintoteutus SSH 2.0- ja SFTP-protokollien kautta työskentelemiseen.

Keskeinen parannus OpenSSH 8.2:n julkaisuun oli kyky käyttää kaksivaiheista todennusta protokollaa tukevilla laitteilla U2Fliittouman kehittämä FIDO. U2F mahdollistaa edullisien laitteistotunnusten luomisen, joilla varmistetaan käyttäjän fyysinen läsnäolo vuorovaikutuksessa heidän kanssaan USB:n, Bluetoothin tai NFC:n kautta. Tällaisia ​​laitteita mainostetaan verkkosivustoilla kaksivaiheisen todennuksen välineenä, suuret selaimet tukevat jo niitä ja niitä ovat valmistaneet useat valmistajat, kuten Yubico, Feitian, Thetis ja Kensington.

Jotta voidaan olla vuorovaikutuksessa käyttäjän läsnäolon vahvistavien laitteiden kanssa, OpenSSH:hon on lisätty uudet avaintyypit “ecdsa-sk” ja “ed25519-sk”, jotka käyttävät ECDSA- ja Ed25519-digitaalisen allekirjoituksen algoritmeja yhdistettynä SHA-256-tiivisteeseen. Tokenien kanssa vuorovaikutuksessa käytettävät menettelyt sijoitetaan välikirjastoon, joka ladataan samalla tavalla kuin PKCS#11-tuen kirjasto ja on kirjaston päällä oleva kääre. libfido2, joka tarjoaa työkaluja kommunikointiin tokenien kanssa USB:n kautta (FIDO U2F/CTAP 1- ja FIDO 2.0/CTAP 2 -protokollia tuetaan). OpenSSH-kehittäjien laatima välikirjasto libsk-libfido2 mukana libfido2-ytimeen sekä HID kuljettaja OpenBSD:lle.

Todentaaksesi ja luodaksesi avaimen sinun on määritettävä "SecurityKeyProvider"-parametri asetuksissa tai asetettava SSH_SK_PROVIDER-ympäristömuuttuja, joka osoittaa polun ulkoiseen kirjastoon libsk-libfido2.so (vie SSH_SK_PROVIDER=/polku/libsk-libfido2. niin). On mahdollista rakentaa openssh sisäänrakennetulla tasokirjaston tuella (--with-security-key-builtin), tässä tapauksessa sinun on asetettava parametri ”SecurityKeyProvider=internal”.
Seuraavaksi sinun on suoritettava "ssh-keygen -t ecdsa-sk" tai, jos avaimet on jo luotu ja määritetty, muodosta yhteys palvelimeen käyttämällä "ssh". Kun suoritat ssh-keygenin, luotu avainpari tallennetaan kansioon "~/.ssh/id_ecdsa_sk" ja sitä voidaan käyttää samalla tavalla kuin muita avaimia.

Julkinen avain (id_ecdsa_sk.pub) tulee kopioida palvelimelle authorised_keys-tiedostoon. Palvelinpuolella vain digitaalinen allekirjoitus varmistetaan, ja asiakaspuolella suoritetaan vuorovaikutusta tokeneiden kanssa (sinun ei tarvitse asentaa libsk-libfido2:ta palvelimelle, mutta palvelimen on tuettava "ecdsa-sk"-avaintyyppiä) . Luotu yksityinen avain (id_ecdsa_sk) on olennaisesti avainkahva, joka muodostaa oikean avaimen vain yhdessä U2F-merkkipuolelle tallennetun salaisen sekvenssin kanssa. Jos id_ecdsa_sk-avain joutuu hyökkääjän käsiin, hänen on päästävä läpi todennuksen myös laitteistotunnukseen, jota ilman id_ecdsa_sk-tiedostoon tallennettu yksityinen avain on hyödytön.

Lisäksi oletusarvoisesti avaimilla suoritettaessa (sekä luomisen että todennuksen aikana) vaaditaan paikallinen vahvistus käyttäjän fyysisestä läsnäolosta, esimerkiksi ehdotetaan koskettamalla tunnuksessa olevaa anturia, mikä vaikeuttaa suorittaa etähyökkäyksiä järjestelmiin yhdistetyllä tunnuksella. Toisena puolustuslinjana salasana voidaan määrittää myös ssh-keygenin käynnistysvaiheessa avaintiedostoon pääsyä varten.

OpenSSH:n uusi versio ilmoitti myös tulevasta SHA-1-hajautusalgoritmien käytöstä poistamisesta johtuen edistäminen törmäyshyökkäysten tehokkuus tietyllä etuliitteellä (törmäyksen valinnan hinta on arviolta noin 45 tuhatta dollaria). Yhdessä tulevassa julkaisussa he suunnittelevat poistavansa oletusarvoisesti käytöstä julkisen avaimen digitaalisen allekirjoitusalgoritmin ”ssh-rsa”, joka mainitaan alkuperäisessä RFC:ssä SSH-protokollalle ja on edelleen laajalle levinnyt käytännössä (käytön testaamiseksi). ssh-rsa:sta järjestelmissäsi, voit yrittää muodostaa yhteyden ssh:n kautta vaihtoehdolla "-oHostKeyAlgorithms=-ssh-rsa").

Uusiin OpenSSH-algoritmeihin siirtymisen helpottamiseksi tulevassa julkaisussa UpdateHostKeys-asetus otetaan oletusarvoisesti käyttöön, mikä siirtää asiakkaat automaattisesti luotettavampiin algoritmeihin. Suositeltuja siirtoalgoritmeja ovat rsa-sha2-256/512, joka perustuu RFC8332 RSA SHA-2:een (tuettu OpenSSH 7.2:sta lähtien ja käytössä oletuksena), ssh-ed25519 (tuettu OpenSSH 6.5:stä lähtien) ja ecdsa-sha2-nistp256/384-pohjainen521/5656/5.7. RFCXNUMX ECDSA:ssa (tuettu OpenSSH XNUMX:stä lähtien).

OpenSSH 8.2:ssa mahdollisuus muodostaa yhteys käyttämällä "ssh-rsa" on edelleen käytettävissä, mutta tämä algoritmi on poistettu CASignatureAlgorithms-luettelosta, joka määrittelee algoritmit, jotka sallitaan uusien varmenteiden digitaaliseen allekirjoittamiseen. Samoin diffie-hellman-group14-sha1-algoritmi on poistettu tuetuista oletusavaintenvaihtoalgoritmeista. On huomattava, että SHA-1:n käyttöön varmenteissa liittyy lisäriskejä, koska hyökkääjällä on rajattomasti aikaa etsiä törmäystä olemassa olevaan varmenteeseen, kun taas isäntäavaimiin kohdistuvaa hyökkäystä rajoittaa yhteyden aikakatkaisu (LoginGraceTime ).

Ssh-keygen-ajon oletusarvo on nyt rsa-sha2-512-algoritmi, jota tuetaan OpenSSH 7.2:sta lähtien, mikä voi aiheuttaa yhteensopivuusongelmia yritettäessä käsitellä OpenSSH 8.2:lla allekirjoitettuja varmenteita järjestelmissä, joissa on vanhempia OpenSSH-julkaisuja (ongelman kiertämiseksi, kun When When Luodessasi allekirjoitusta voit määrittää nimenomaisesti "ssh-keygen -t ssh-rsa" tai käyttää ecdsa-sha2-nistp256/384/521-algoritmeja, joita tuetaan OpenSSH 5.7:stä lähtien).

Muut muutokset:

  • Sisällytä-ohje on lisätty sshd_config-tiedostoon, jonka avulla voit sisällyttää muiden tiedostojen sisällön määritystiedoston nykyiseen sijaintiin (glob-maskeja voidaan käyttää määritettäessä tiedoston nimeä);
  • "No-touch-required" -vaihtoehto on lisätty ssh-keygeniin, mikä poistaa käytöstä tarpeen vahvistaa fyysisesti pääsy tunnukseen avainta luotaessa;
  • PubkeyAuthOptions-käsky on lisätty sshd_config-tiedostoon, joka yhdistää erilaisia ​​julkisen avaimen todentamiseen liittyviä vaihtoehtoja. Tällä hetkellä tuetaan vain "no-touch-required" -lippua, joka ohittaa tunnuksen todentamisen fyysisen läsnäolon tarkistukset. Analogisesti "no-touch-required" -vaihtoehto on lisätty Author_keys-tiedostoon;
  • Lisätty "-O write-attestation=/path" vaihtoehto ssh-keygeniin, jotta ylimääräisiä FIDO-todistusvarmenteita voidaan kirjoittaa avaimia luotaessa. OpenSSH ei vielä käytä näitä varmenteita, mutta niiden avulla voidaan myöhemmin varmistaa, että avain on sijoitettu luotettavaan laitekauppaan;
  • Ssh- ja sshd-asetuksissa on nyt mahdollista asettaa liikenteen priorisointitila IPQoS-direktiivin kautta LE DSCP (pienempi ponnistus hyppyä kohti);
  • Jos avain ei sisällä kommenttikenttää, se lisätään ssh-agentiin osoittaen avaimen polun kommenttina, kun ssh:ssa asetetaan arvoa "AddKeysToAgent=yes". SISÄÄN
    ssh-keygen ja ssh-agent käyttävät nyt myös PKCS#11-tunnisteita ja X.509-aiheen nimeä kirjastopolun sijaan kommentteina avaimessa;

  • Lisätty mahdollisuus viedä PEM DSA- ja ECDSA-avaimia varten ssh-keygeniin;
  • Lisätty uusi suoritettava ssh-sk-helper, jota käytetään eristämään FIDO/U2F-tunnuksen käyttöoikeuskirjasto;
  • Lisätty "--with-zlib" koontivaihtoehto ssh:lle ​​ja sshd:lle zlib-kirjastotuen avulla tapahtuvaa kääntämistä varten;
  • RFC4253:n vaatimuksen mukaisesti yhteyden aikana näytettävässä bannerissa on varoitus pääsynestosta MaxStartups-rajojen ylittämisen vuoksi. Diagnosoinnin yksinkertaistamiseksi sshd-prosessin otsikko, joka näkyy käytettäessä ps-apuohjelmaa, näyttää nyt todennettujen yhteyksien määrän ja MaxStartups-rajoituksen tilan.
  • Kun ssh- ja ssh-agent-ohjelmassa kutsutaan ohjelmaa näyttämään kutsun näytölle, määritettynä $SSH_ASKPASS:n kautta, lähetetään nyt lisäksi kutsun tyyppinen lippu: “confirm” - vahvistusikkuna (kyllä/ei), “ei mitään ” - tiedottava viesti, "tyhjä" - salasanapyyntö;
  • Lisätty uusi digitaalisten allekirjoitusten toiminto "find-principals" ssh-keygeniin etsimään sallittujen allekirjoittajien tiedostosta tiettyyn digitaaliseen allekirjoitukseen liittyvää käyttäjää;
  • Parannettu tuki sshd-prosessien eristämiselle Linuxissa seccomp-mekanismin avulla: IPC-järjestelmäkutsut poistetaan käytöstä, clock_gettime64(), clock_nanosleep_time64 ja clock_nanosleep() sallitaan.

Lähde: opennet.ru

Lisää kommentti