Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

Le password semplici non offrono protezione, mentre quelle complesse sono difficili da ricordare. Questo è il motivo per cui spesso si trovano annotate su un adesivo sotto la tastiera o sul monitor. Per fare in modo che le password rimangano nella memoria degli utenti "dimenticati" e che la sicurezza non venga compromessa, è utile l'autenticazione a due fattori (2FA).

Grazie alla combinazione di fattori che includono il possesso di un dispositivo e la conoscenza del suo codice PIN, il PIN stesso può essere più semplice e facile da ricordare. Le carenze in termini di lunghezza o casualità del PIN vengono compensate dalla necessità di possesso fisico e dai limiti sul tentativo di indovinare il PIN.

Inoltre, negli enti pubblici a volte si richiede che tutto funzioni secondo gli standard nazionali. Questo è il tipo di 2FA che verrà trattato per l'accesso a Linux. Inizierò da lontano.

Moduli PAM

I moduli di autenticazione collegabili (Pluggable Authentication Modules, PAM) sono moduli con un'API standard e implementazioni di vari meccanismi di autenticazione nelle applicazioni.
Tutti gli strumenti e le applicazioni in grado di lavorare con PAM li integrano e possono utilizzarli per l'autenticazione dell'utente.
In pratica, funziona più o meno così: il comando login si rivolge a PAM, che esegue tutti i controlli necessari utilizzando i moduli specificati nel file di configurazione e restituisce il risultato al comando login.

librtpam

Il modulo sviluppato dall'azienda 'Activ' aggiunge l'autenticazione a due fattori per gli utenti tramite smart card o token USB utilizzando chiavi asimmetriche secondo gli ultimi standard della crittografia nazionale.

Esaminiamo il principio di funzionamento:

  • sul token è memorizzato il certificato dell'utente e la sua chiave privata;
  • il certificato è salvato nella home directory dell'utente come fidato.

Il processo di autenticazione avviene come segue:

  1. Si cerca il certificato personale dell'utente sul Rutoken.
  2. Viene richiesto il codice PIN del token.
  3. Si esegue la firma di dati casuali sulla chiave privata direttamente nel chip del Rutoken.
  4. La firma ottenuta viene verificata utilizzando la chiave pubblica del certificato dell'utente.
  5. Il modulo restituisce l'esito della verifica della firma all'applicazione chiamante.

È possibile autenticarsi utilizzando chiavi GOST R 34.10-2012 (di lunghezza 256 o 512 bit) o l'obsoleta GOST R 34.10-2001.

Non c'è bisogno di preoccuparsi per la sicurezza delle chiavi: esse vengono generate direttamente nel Rutoken e non lasciano mai la sua memoria durante le operazioni crittografiche.

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

Rutoken ECP 2.0 è certificato da FSB e FSTEK secondo il NDV 4, quindi può essere utilizzato in sistemi informativi che trattano informazioni riservate.

Utilizzo pratico

Si adatta praticamente a qualsiasi moderno sistema Linux; per esempio, useremo xUbuntu 18.10.

1) Installiamo i pacchetti necessari

sudo apt-get install libccid pcscd opensc
Se desideri aggiungere il salvaschermo per bloccare il desktop, installa il pacchetto aggiuntivo libpam-pkcs11.

2) Aggiungiamo il modulo PAM con supporto per GOST

Carichiamo la libreria da https://download.rutoken.ru/Rutoken/PAM/
Copia il contenuto della cartella PAM librtpam.so.1.0.0 nella cartella di sistema
/usr/lib/ o /usr/lib/x86_64-linux-gnu/o /usr/lib64

3) Installiamo il pacchetto con librtpkcs11ecp.so

Scarica e installa il pacchetto DEB o RPM dal seguente link: https://www.rutoken.ru/support/download/pkcs/

4) Verifichiamo che Rutoken ECP 2.0 funzioni nel sistema

Esegui nel terminale
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Se vedi la riga Rutoken ECP — allora va tutto bene.

5) Leggiamo il certificato

Verifichiamo che ci sia un certificato sul dispositivo
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Se dopo la riga:
Utilizzando lo slot 0 con un token presente (0x0)

  • viene visualizzata l'informazione sui certificati e le chiavi, è necessario leggere il certificato e salvarlo su disco. Per fare ciò, eseguire il seguente comando, dove al posto di {id} bisogna inserire l'ID del certificato che hai visto nell'output del comando precedente:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Se il file cert.crt è stato creato, passiamo al punto 6).
  • non c'è niente, significa che il dispositivo è vuoto. Contattare l'amministratore o creare chiavi e un certificato autonomamente, seguendo il punto successivo.

5.1) Creiamo un certificato di prova

Attenzione! I metodi descritti per la creazione di chiavi e certificati sono adatti per test e non sono destinati a un utilizzo in produzione. Per questo è necessario utilizzare chiavi e certificati rilasciati da un'autorità di certificazione affidabile per la tua organizzazione o da un centro di certificazione accreditato.
Il modulo PAM è stato creato per proteggere i computer locali e si propone di operare in piccole organizzazioni. Poiché ci sono pochi utenti, l'Amministratore può controllare personalmente la revoca dei certificati e bloccare manualmente gli account, così come gestire la scadenza dei certificati. Il modulo PAM attualmente non è in grado di verificare i certificati tramite CRL e costruire catene di fiducia.

Un modo semplice (tramite browser)

Per ottenere un certificato di prova, utilizza il servizio web «Centro di registrazione RUTOKEN». Il processo richiederà non più di 5 minuti.

Il modo da geek (tramite console e, possibilmente, compilatore)

Controlla la versione di OpenSC
$ opensc-tool --version
Se la versione è inferiore a 0.20, aggiorna o compila il ramo pkcs11-tool con supporto per GOST-2012 dal nostro GitHub (al momento della pubblicazione di questo articolo, la versione 0.20 non era ancora stata rilasciata) o dal ramo master del progetto principale OpenSC non oltre il commit 8cf1e6f

Generiamo una coppia di chiavi con i seguenti parametri:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit con parametro A), GOSTR3410-2012-256:A (GOST-2012 256 bit con parametro A)

--id: identificatore dell'oggetto (CKA_ID) come numeri esadecimali a due cifre della tabella ASCII. Utilizzare solo i codici ASCII dei caratteri stampabili, poiché l'id dovrà essere passato a OpenSSL come stringa. Ad esempio, il codice ASCII '3132' corrisponde alla stringa "12". Per comodità, puoi utilizzare un servizio online di conversione da stringa a codici ASCII.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

Dopo procederemo alla creazione del certificato. Di seguito saranno descritti due metodi: il primo tramite CA (utilizzeremo CA di test), il secondo – autoadasignato. Per questo è necessario prima installare e configurare OpenSSL versione 1.1 o superiore per lavorare con RUTOKEN tramite il modulo speciale rtengine utilizzando la guida. Installazione e configurazione di OpenSSL.
Ad esempio: per ‘--id 3132’ in OpenSSL bisogna indicare "pkcs11:id=12«.

Puoi avvalerti dei servizi di una CA di test, che sono numerose, ad esempio, ecco, ecco e ecco, per questo creeremo una richiesta di certificato

Un'altra opzione è quella di lasciarsi andare e creare un certificato autoadasignato
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Carichiamo il certificato sul dispositivo
$ openssl req -utf8 -x509 -engine keyform -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Registriamo il certificato nel sistema

Assicurati che il tuo certificato appaia come un file base64:

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

Se il tuo certificato appare così:

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

è necessario convertire il certificato dal formato DER al formato PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Controlliamo di nuovo che ora sia tutto a posto.

Aggiungiamo il certificato all'elenco dei certificati attendibili
$ mkdir ~/\.eid
$ chmod 0755 ~/\.eid
$ cat cert.pem >> ~/\.eid/authorized_certificates
$ chmod 0644 ~/\.eid/authorized_certificates

L'ultima riga protegge l'elenco dei certificati attendibili da modifiche accidentali o intenzionali da parte di altri utenti. Ciò esclude la situazione in cui qualcuno può aggiungere il proprio certificato e accedere al sistema a tuo nome.

7) Configuriamo l'autenticazione

La configurazione del nostro modulo PAM è completamente standard e viene effettuata esattamente come le impostazioni di altri moduli. Creiamo nel file /usr/share/pam-configs/rutoken-gost-pam contenente il nome completo del modulo, se è abilitato di default, la priorità del modulo e le impostazioni di autenticazione.
Nelle impostazioni di autenticazione ci sono requisiti per il successo dell'operazione:

  • required (richiesto): moduli di questo tipo devono restituire una risposta positiva. Se il risultato della chiamata del modulo contiene una risposta negativa, ciò porterà a un errore di autenticazione. La richiesta sarà annullata, ma gli altri moduli saranno chiamati.
  • requisite (necessario): simile a required, ma porta immediatamente a un errore di autenticazione ignorando gli altri moduli.
  • sufficiente: se nessun modulo required o sufficient restituisce un risultato negativo, il modulo restituirà una risposta positiva. Gli altri moduli saranno ignorati.
  • opzionale: se non ci sono moduli required nello stack e nessun modulo sufficient ha restituito un risultato positivo, almeno uno dei moduli optional deve restituire una risposta positiva.

Contenuto completo del file /usr/share/pam-configs/rutoken-gost-pam:
Nome: Rutoken PAM GOST
Predefinito: sì
Priorità: 800
Tipo di autenticazione: Primario
Autenticazione: sufficiente /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

salviamo il file, dopodiché eseguiamo
$ sudo pam-auth-update
nella finestra che appare, mettiamo un segno di spunta accanto a Rutoken PAM GOST e clicchiamo su OK

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

8) Verifichiamo la configurazione

Per assicurarti che tutto sia configurato, ma senza perdere la possibilità di accesso al sistema, inserisci il comando
$ sudo login
Inserisci il nome utente. È tutto configurato correttamente se il sistema richiede il PIN del dispositivo.

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

9) Configuriamo il blocco del computer al momento dell'estrazione del token

Il pacchetto include libpam-pkcs11 l'utilità pkcs11_eventmgr, che consente di eseguire varie azioni al verificarsi di eventi PKCS#11.
Per la configurazione pkcs11_eventmgr serve il file di configurazione: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Per vari distribuzioni Linux, il comando che attiva il blocco dell'account durante l'estrazione delle smart card o del token sarà diverso. Sm. event card_remove.
Ecco un esempio di file di configurazione:

pkcs11_eventmgr
{
    # Esecuzione in background
    daemon = true;
     
    # Impostazione dei messaggi di debug
    debug = false;
 
    # Tempo di polling in secondi
    polling_time = 1;
 
    # Impostazione del timeout per la rimozione della carta
    # Predefinito 0
    expire_time = 0;
 
    # Selezione del modulo pkcs11 da utilizzare con Rutoken
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Azioni con la carta
    # Carta inserita:
    event card_insert {
        # Lasciamo i valori predefiniti (nessuna azione)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Carta rimossa
    event card_remove {
        on_error = ignore;
         
        # Chiamiamo la funzione di blocco dello schermo
        
        # Per GNOME
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Per XFCE
        # action = "xflock4";
        
        # Per Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Carta rimossa a lungo
    event expire_time {
        # Lasciamo i valori predefiniti (nessuna azione)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Dopo di ciò, aggiungi l'applicazione pkcs11_eventmgr nell'avvio automatico. Per fare ciò, modifica il file .bash_profile:
$ nano /home//.bash_profile
Aggiungi alla fine del file la riga pkcs11_eventmgr e riavviati.

I passaggi descritti per la configurazione del sistema operativo possono essere utilizzati come istruzioni in qualsiasi moderna distribuzione Linux, comprese quelle nazionali.

Come utilizzare i moduli PAM per l'autenticazione locale in Linux tramite le chiavi GOST-2012 su Runtoken

Conclusione

I PC con Linux stanno diventando sempre più popolari nelle strutture governative russe, ma configurare una robusta autenticazione a due fattori in questo sistema operativo non è sempre semplice. Siamo lieti di aiutarti con questa guida a risolvere il "problema delle password" e a proteggere in modo affidabile l'accesso ai PC, senza spendere troppo tempo.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster