Come utilizzare i moduli PAM per l'autenticazione locale in Linux con le chiavi ГОСТ-2012 su Rutoken

Come utilizzare i moduli PAM per l'autenticazione locale in Linux con le chiavi ГОСТ-2012 su Rutoken

Le password semplici non proteggono, mentre quelle complesse sono impossibili da ricordare. Per questo motivo si trovano spesso attaccate sotto la tastiera o sul monitor. Affinché le password rimangano nella memoria degli utenti “dimenticati” e non si perda l'affidabilità della protezione, è disponibile l'autenticazione a due fattori (2FA).

Grazie alla combinazione di fattori di possesso del dispositivo e conoscenza del suo codice PIN, il PIN stesso può essere più semplice e facile da ricordare. Le carenze nella lunghezza o nella casualità del PIN sono compensate dalla richiesta di possesso fisico e dalle limitazioni sulla tentazione del PIN.

Inoltre, nei pubblici uffici a volte si desidera che tutto funzioni secondo le normative ГОСТ. Di questo tipo di 2FA per accedere a Linux discuteremo. Inizierò da lontano.

Moduli PAM

I moduli di autenticazione pluggable (Pluggable Authentication Modules, PAM) sono moduli con un'API standard e implementazioni di vari meccanismi di autenticazione nelle applicazioni.
Tutte le utility e le applicazioni che sanno lavorare con PAM li acquisiscono e possono usarli per l'autenticazione dell'utente.
Nella 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 «Aktiv» 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.

Consideriamo il principio del suo funzionamento:

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

Il processo di autenticazione avviene nel seguente modo:

  1. Su Rutoken viene cercato il certificato personale dell'utente.
  2. Viene richiesto il codice PIN del token.
  3. Si verifica la firma di dati casuali sulla chiave privata direttamente nel chip di Rutoken.
  4. La firma risultante viene verificata con la chiave pubblica del certificato dell'utente.
  5. Il modulo restituisce all'applicazione chiamante il risultato della verifica della firma.

È possibile autenticarsi utilizzando le chiavi ГОСТ Р 34.10-2012 (lunghezze 256 o 512 bit) o l'ormai obsoleto ГОСТ Р 34.10-2001.

Non c'è bisogno di preoccuparsi per la sicurezza delle chiavi: 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 con le chiavi ГОСТ-2012 su Rutoken

Il Rutoken ECP 2.0 è certificato dal FSB e dal FSTEK secondo la NDV 4, quindi può essere utilizzato in sistemi informatici che trattano informazioni riservate.

Utilizzo pratico

Praticamente qualsiasi Linux moderno andrà bene; per esempio, useremo xUbuntu 18.10.

1) Installiamo i pacchetti necessari

sudo apt-get install libccid pcscd opensc
Se desideri aggiungere un blocco del desktop con uno screensaver, installa anche il pacchetto libpam-pkcs11.

2) Aggiungiamo il modulo PAM con supporto per gli standard GOST

Carichiamo la libreria con https://download.rutoken.ru/Rutoken/PAM/
Copiamo 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

Scarichiamo e installiamo il pacchetto DEB o RPM dal link: https://www.rutoken.ru/support/download/pkcs/

4) Verifichiamo che il Rutoken ECP 2.0 funzioni nel sistema

Eseguiamo nel terminale
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Se vedi la riga Rutoken ECP – significa che va tutto bene.

5) Leggiamo il certificato

Verifica che ci sia un certificato sul dispositivo
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Se dopo la riga:
Using slot 0 with a present token (0x0)

  • viene visualizzata l'informazione sulle chiavi e sui certificati, è necessario leggere il certificato e salvarlo sul disco. Per fare ciò, esegui il seguente comando, sostituendo {id} con 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
    Nel caso in cui il file cert.crt venga creato, passiamo al punto 6).
  • non c'è niente, significa che il dispositivo è vuoto. Contatta l'amministratore o crea le chiavi e il certificato da solo, seguendo il prossimo punto.

5.1) Creiamo un certificato di test

Attenzione! I metodi descritti per la creazione di chiavi e certificati sono adatti per test e non sono destinati all'uso in situazioni di produzione. Per questo, è necessario utilizzare chiavi e certificati emessi da un'autorità di certificazione fidata della tua organizzazione o da un centro di certificazione accreditato.
Il modulo PAM è stato creato per proteggere i computer locali e prevede di lavorare in piccole organizzazioni. Poiché ci sono pochi utenti, l'amministratore può monitorare personalmente la revoca dei certificati e bloccare manualmente gli account, così come gestire la scadenza dei certificati. Attualmente, il modulo PAM non è in grado di verificare i certificati tramite CRL e di costruire catene di fiducia.

Percorso semplice (tramite browser)

Per ottenere un certificato di test utilizza il servizio web 'Centro Registrazione RuteToken'. Il processo richiederà non più di 5 minuti.

Percorso geek (tramite console e, forse, 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 è 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 parametri A), GOSTR3410-2012-256:A (GOST-2012 256 bit con parametri A)

--id: l'identificatore dell'oggetto (CKA_ID) in forma di numeri esadecimali a due cifre dalla tabella ASCII. Utilizza solo i codici ASCII dei caratteri stampabili, poiché l'id deve essere passato a OpenSSL come stringa. Ad esempio, al codice ASCII '3132' corrisponde la stringa '12'. Per comodità, puoi utilizzare un servizio online di conversione di stringhe in codici ASCII.

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

Successivamente, procederemo a creare il certificato. Di seguito verranno descritti due percorsi: il primo tramite CA (utilizzeremo CA di test), il secondo – autofirmato. Per questo è necessario prima installare e configurare OpenSSL versione 1.1 o superiore per lavorare con RuteToken tramite un modulo speciale rtengine seguendo il manuale Installazione e configurazione di OpenSSL.
Ad esempio: per '--id 3132' in OpenSSL devi specificare 'pkcs11:id=12«.

Puoi utilizzare i servizi di test di molte CA, ad esempio, ecco, ecco e ecco, per questo creeremo una richiesta di certificato

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

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

6) Registriamo il certificato nel sistema

Assicurati che il tuo certificato abbia l'aspetto di un file base64:

Come utilizzare i moduli PAM per l'autenticazione locale in Linux con le chiavi ГОСТ-2012 su Rutoken

Se il tuo certificato appare così:

Come utilizzare i moduli PAM per l'autenticazione locale in Linux con le chiavi ГОСТ-2012 su Rutoken

è 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 tutto sia a posto.

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

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

7) Configuriamo l'autenticazione

La configurazione del nostro modulo PAM è del tutto standard e viene eseguita esattamente come le configurazioni 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 i parametri di autenticazione.
Nei parametri di autenticazione ci sono requisiti per il successo dell'operazione:

  • required (richiesto): tali moduli devono restituire una risposta positiva. Se il risultato della chiamata al modulo contiene una risposta negativa, ciò porterà a un errore di autenticazione. La richiesta verrà annullata, ma gli altri moduli verranno chiamati.
  • requisite (necessario): simile a required, ma porta immediatamente al fallimento dell'autenticazione e ignora gli altri moduli.
  • sufficient (sufficiente): se prima di tale modulo nessuno dei moduli required o sufficient ha restituito un risultato negativo, allora il modulo restituirà una risposta positiva. I moduli rimanenti saranno ignorati.
  • optional (opzionale): se nello stack non ci sono moduli required e nessuno dei moduli 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 con le chiavi ГОСТ-2012 su Rutoken

salviamo il file, dopodiché eseguiamo
$ sudo pam-auth-update
nella finestra che appare, mettiamo l'asterisco accanto a Rutoken PAM GOST e facciamo clic su OK

Come utilizzare i moduli PAM per l'autenticazione locale in Linux con le chiavi ГОСТ-2012 su Rutoken

8) Controlliamo la configurazione

Per capire che tutto è 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 con le chiavi ГОСТ-2012 su Rutoken

9) Configuriamo il blocco del computer all'estrazione del token

Il pacchetto libpam-pkcs11 include l'utilità pkcs11_eventmgr, che consente di eseguire varie azioni in caso di eventi PKCS#11.
Per la configurazione pkcs11_eventmgr funge da file di configurazione: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Per diverse distribuzioni Linux, il comando che provoca il blocco dell'account all'estrazione di smart card o token sarà diverso. Vedi. event card_remove.
Un esempio di file di configurazione è riportato di seguito:

pkcs11_eventmgr
{
    # Avvio in background
    daemon = true;
     
    # Configurazione dei messaggi di debug
    debug = false;
 
    # Tempo di polling in secondi
    polling_time = 1;
 
    # Imposta il timeout per la rimozione della smart card
    # Di default 0
    expire_time = 0;
 
    # Selezione della libreria pkcs11 per lavorare con RuToken
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Azioni con la smart card
    # Smart card inserita:
    event card_insert {
        # Lasciamo i valori di default (non succede nulla)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Smart card 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";
    }
 
    # Smart card rimossa per lungo tempo
    event expire_time {
        # Lasciamo i valori di default (non succede nulla)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Dopo ciò, aggiungi l'applicazione pkcs11_eventmgr all'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 passi descritti per la configurazione del sistema operativo possono essere utilizzati come istruzioni in qualsiasi distribuzione Linux moderna, comprese quelle nazionali.

Come utilizzare i moduli PAM per l'autenticazione locale in Linux con le chiavi ГОСТ-2012 su Rutoken

Conclusione

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

Fonte: habr.com

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