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

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

Le password semplici non sono sicure e quelle complesse sono impossibili da ricordare. Ecco perché così spesso finiscono su un foglietto adesivo sotto la tastiera o sul monitor. Per garantire che le password rimangano nella mente degli utenti “smemori” e che l’affidabilità della protezione non venga persa, esiste l’autenticazione a due fattori (2FA).

Grazie alla combinazione tra il possesso di un dispositivo e la conoscenza del suo PIN, il PIN stesso può essere più semplice e facile da ricordare. Gli svantaggi nella lunghezza o nella casualità del PIN sono compensati dal requisito del possesso fisico e dalle restrizioni sulla forza bruta del PIN.

Inoltre, accade nelle agenzie governative che vogliono che tutto funzioni secondo GOST. Verrà discussa questa opzione 2FA per accedere a Linux. Inizierò da lontano.

Moduli PAM

I Pluggable Authentication Modules (PAM) sono moduli con un'API standard e implementazioni di vari meccanismi di autenticazione nelle applicazioni.
Tutte le utilità e le applicazioni che possono funzionare con PAM li rilevano e possono utilizzarli per l'autenticazione dell'utente.
In pratica funziona più o meno così: il comando login chiama 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 degli utenti tramite smart card o token USB utilizzando chiavi asimmetriche secondo i più recenti standard di crittografia domestica.

Diamo un'occhiata al principio del suo funzionamento:

  • Il token memorizza il certificato dell'utente e la sua chiave privata;
  • Il certificato viene salvato nella directory home dell'utente come attendibile.

Il processo di autenticazione avviene come segue:

  1. Rutoken cerca il certificato personale dell'utente.
  2. Viene richiesto il PIN del token.
  3. I dati casuali vengono firmati sulla chiave privata direttamente nel chip Rutoken.
  4. La firma risultante viene verificata utilizzando la chiave pubblica del certificato dell'utente.
  5. Il modulo restituisce il risultato della verifica della firma all'applicazione chiamante.

È possibile autenticarsi utilizzando le chiavi GOST R 34.10-2012 (lunghezza 256 o 512 bit) o ​​la versione obsoleta GOST R 34.10-2001.

Non devi preoccuparti della sicurezza delle chiavi: vengono generate direttamente in Rutoken e non lasciano mai la sua memoria durante le operazioni crittografiche.

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

Rutoken EDS 2.0 è certificato da FSB e FSTEC secondo NDV 4, pertanto può essere utilizzato in sistemi informativi che elaborano informazioni riservate.

Uso pratico

Quasi tutti i Linux moderni andranno bene, ad esempio useremo xUbuntu 18.10.

1) Installa 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) Aggiungi un modulo PAM con supporto GOST

Caricamento della 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) Installa il pacchetto con librtpkcs11ecp.so

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

4) Verifica che Rutoken EDS 2.0 funzioni nel sistema

Nel terminale eseguiamo
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Se vedi la linea Rutoken ECP <no label> - significa che è tutto ok.

5) Leggi il certificato

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

  • vengono visualizzate le informazioni per quanto riguarda chiavi e certificati, è necessario leggere il certificato e salvarlo su disco. Per fare ciò, esegui il comando seguente, dove al posto di {id} devi sostituire 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 è stato creato il file cert.crt, procedere al passaggio 6).
  • non c'è niente, il dispositivo è vuoto. Contatta l'amministratore o crea tu stesso le chiavi e la certificazione seguendo il passaggio successivo.

5.1) Creare un certificato di prova

Attenzione! I metodi descritti per creare chiavi e certificati sono adatti per i test e non sono destinati all'uso in modalità combattimento. A tale scopo, è necessario utilizzare chiavi e certificati emessi dall'autorità di certificazione attendibile della propria organizzazione o da un'autorità di certificazione accreditata.
Il modulo PAM è progettato per proteggere i computer locali ed è progettato per funzionare in piccole organizzazioni. Poiché gli utenti sono pochi, l'amministratore può monitorare la revoca dei certificati e bloccare manualmente gli account, nonché il periodo di validità dei certificati. Il modulo PAM non sa ancora come verificare i certificati utilizzando CRL e creare catene di fiducia.

Il modo più semplice (tramite browser)

Per ottenere un certificato di prova, utilizzare servizio web "Centro registrazione Rutoken". Il processo non richiederà più di 5 minuti.

Alla maniera dei geek (tramite la console e possibilmente il compilatore)

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

Genera una coppia di chiavi con i seguenti parametri:
--key-type: GOSTR3410-2012-512:А (ГОСТ-2012 512 бит c парамсетом А), GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id: identificatore dell'oggetto (CKA_ID) come numeri di caratteri esadecimali a due cifre dalla tabella ASCII. Utilizzare solo codici ASCII per i caratteri stampabili, perché... l'id dovrà essere passato a OpenSSL come stringa. Ad esempio, il codice ASCII “3132” corrisponde alla stringa “12”. Per comodità, puoi usare servizio online per la conversione di stringhe in codici ASCII.

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

Successivamente creeremo un certificato. Di seguito verranno descritte due modalità: la prima avviene tramite una CA (useremo CA di test), la seconda è autofirmata. Per fare ciò, devi prima installare e configurare OpenSSL versione 1.1 o successiva per funzionare con Rutoken tramite uno speciale modulo rtengine utilizzando il manuale Installazione e configurazione di OpenSSL.
Ad esempio: per '--id 3132' in OpenSSL è necessario specificare "pkcs11:id=12«.

È possibile utilizzare i servizi di una CA di prova, di cui ce ne sono molti, ad esempio, qui, qui и qui, per questo creeremo una richiesta di certificato

Un'altra opzione è cedere alla pigrizia e creare un'autofirmata
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

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

6) Registrare il certificato nel sistema

Assicurati che il tuo certificato assomigli a un file base64:

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

Se il tuo certificato è simile a questo:

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

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

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Controlliamo nuovamente che ora sia tutto in ordine.

Aggiungi 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ò impedisce a qualcuno di aggiungere il proprio certificato qui e di poter accedere per tuo conto.

7) Configura l'autenticazione

La configurazione del nostro modulo PAM è completamente standard e viene eseguita esattamente allo stesso modo della configurazione di altri moduli. Crea su file /usr/share/pam-configs/rutoken-gost-pam contenente il nome completo del modulo, se è abilitato per impostazione predefinita, la priorità del modulo e i parametri di autenticazione.
I parametri di autenticazione contengono i requisiti per la buona riuscita dell'operazione:

  • obbligatorio: tali moduli devono restituire una risposta positiva. Se il risultato di una chiamata al modulo contiene una risposta negativa, ciò risulterà in un errore di autenticazione. La richiesta verrà eliminata, ma verranno richiamati i moduli rimanenti.
  • requisito: simile a obbligatorio, ma fallisce immediatamente l'autenticazione e ignora gli altri moduli.
  • sufficiente: se nessuno dei moduli richiesti o sufficienti prima di tale modulo ha restituito un risultato negativo, il modulo restituirà una risposta positiva. I moduli rimanenti verranno ignorati.
  • opzionale: se non ci sono moduli richiesti nello stack e nessuno dei moduli sufficienti restituisce un risultato positivo, almeno uno dei moduli opzionali deve restituire un risultato positivo.

Contenuto completo del file /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

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

salvare il file, quindi eseguire
$ sudo pam-auth-update
nella finestra che appare, metti un asterisco accanto Rutoken PAM GOST e spingere OK

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

8) Controlla le impostazioni

Per capire che tutto è configurato, ma allo stesso tempo non perdere la possibilità di accedere al sistema, inserisci il comando
$ sudo login
Inserisci il tuo nome utente. Tutto è configurato correttamente se il sistema richiede un codice PIN del dispositivo.

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

9) Configurare il computer da bloccare all'estrazione del token

Incluso nel pacchetto libpam-pkcs11 utilità inclusa pkcs11_eventmgr, che consente di eseguire varie azioni quando si verificano eventi PKCS#11.
Per le impostazioni pkcs11_eventmgr funge da file di configurazione: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Per le diverse distribuzioni Linux, il comando che provoca il blocco di un account quando viene rimossa una smart card o un token sarà diverso. Cm. event card_remove.
Di seguito è mostrato un file di configurazione di esempio:

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Successivamente aggiungi l'applicazione pkcs11_eventmgr all'avvio. Per fare ciò, modifica il file .bash_profile:
$ nano /home/<имя_пользователя>/.bash_profile
Aggiungi la riga pkcs11_eventmgr alla fine del file e riavvia.

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

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

conclusione

I PC Linux stanno diventando sempre più popolari nelle agenzie governative russe e impostare un'autenticazione affidabile a due fattori in questo sistema operativo non è sempre facile. Saremo felici di aiutarti a risolvere il "problema della password" con questa guida e a proteggere in modo affidabile l'accesso al tuo PC senza dedicarci molto tempo.

Fonte: habr.com

Aggiungi un commento