Comment utiliser les modules PAM pour l'authentification locale sous Linux en utilisant les clés GOST-2012 sur Rutoken



Les mots de passe simples ne protègent pas et les mots de passe complexes ne peuvent pas être mémorisés. Par conséquent, ils se trouvent si souvent sur un autocollant sous le clavier ou sur le moniteur. Pour que les mots de passe restent dans l'esprit des utilisateurs «oublieux» et que la fiabilité de la protection ne soit pas perdue, il existe une authentification à deux facteurs (2FA).

En raison de la combinaison de facteurs de propriété de l'appareil et de la connaissance de son code PIN, le code PIN lui-même peut être plus simple et plus facile à mémoriser. Les lacunes dans la longueur ou le caractère aléatoire du NIP sont compensées par l'exigence de propriété physique et les restrictions sur la recherche du NIP.

De plus, dans les institutions publiques, il arrive qu'ils souhaitent que tout fonctionne selon GOST. A propos de cette option 2FA pour entrer dans Linux et sera discutée. Je pars de loin.

Modules PAM


Les modules d'authentification enfichables (PAM) sont des modules avec une API standard et des implémentations de divers mécanismes d'authentification dans les applications.
Tous les utilitaires et applications qui peuvent fonctionner avec PAM les récupèrent et peuvent les utiliser pour authentifier l'utilisateur.
En pratique, cela fonctionne comme ceci: la commande de connexion se transforme en PAM, qui effectue toutes les vérifications nécessaires en utilisant les modules spécifiés dans le fichier de configuration et renvoie le résultat à la commande de connexion.

librtpam


Le module développé par la société Active ajoute une authentification à deux facteurs des utilisateurs à l'aide de cartes à puce ou de jetons USB à l'aide de clés asymétriques selon les dernières normes de la cryptographie domestique.

Considérez le principe de son travail:
  • le jeton stocke le certificat de l'utilisateur et sa clĂ© privĂ©e;
  • Le certificat est enregistrĂ© dans le rĂ©pertoire personnel de l'utilisateur comme approuvĂ©.


Le processus d'authentification est le suivant:
  1. Rutoken recherche le certificat personnel de l'utilisateur.
  2. Un code PIN symbolique est demandé.
  3. Les données aléatoires sont signées sur une clé privée directement dans la puce Rutoken.
  4. La signature reçue est vérifiée à l'aide de la clé publique du certificat utilisateur.
  5. Le module renvoie le résultat de la vérification de signature à l'application appelante.


Vous pouvez vous authentifier à l'aide des clés GOST R 34.10-2012 (longueur 256 ou 512 bits) ou GOST R 34.10-2001 obsolète.

Il n'est pas nécessaire de se soucier de la sécurité des clés - elles sont générées directement dans Rutoken et ne quittent jamais sa mémoire pendant les opérations cryptographiques.



Rutoken EDS 2.0 est certifié par le FSB et le FSTEC pour NDV 4, il peut donc être utilisé dans les systèmes d'information qui traitent des informations confidentielles.

Utilisation pratique


Presque n'importe quel Linux moderne convient, par exemple, nous utiliserons xUbuntu 18.10.

1) Installez les packages nécessaires


sudo apt-get install libccid pcscd opensc
Si vous souhaitez ajouter un verrou de bureau avec un économiseur d'écran, installez également le libpam-pkcs11 .

2) Ajouter un module PAM avec prise en charge de GOST


Téléchargez la bibliothèque depuis https://download.rutoken.ru/Rutoken/PAM/
Copiez le contenu du dossier PAM librtpam.so.1.0.0 dans le dossier système
/usr/lib/ ou /usr/lib/x86_64-linux-gnu/ ou /usr/lib64

3) Installez le package avec librtpkcs11ecp.so


Téléchargez et installez le package DEB ou RPM à partir du lien: https://www.rutoken.ru/support/download/pkcs/

4) Nous vérifions que Rutoken EDS 2.0 fonctionne dans le système


Dans le terminal, exécutez
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Si vous voyez la ligne Rutoken ECP <no label> - alors tout va bien.

5) Lisez le certificat


Vérifiez que l'appareil dispose d'un certificat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Si après la ligne:
Using slot 0 with a present token (0x0)
  • Si des informations sur les clĂ©s et les certificats s'affichent , vous devez lire le certificat et l'enregistrer sur le disque. Pour ce faire, exĂ©cutez la commande suivante, oĂą au lieu de {id} vous devez remplacer le certificat ID que vous avez vu dans la sortie de la commande prĂ©cĂ©dente:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Si le fichier cert.crt est créé, passez à l'étape 6).
  • il n'y a rien , alors l'appareil est vide. Contactez votre administrateur ou crĂ©ez vous-mĂŞme les clĂ©s et le certificat en suivant l'Ă©tape suivante.


5.1) Créer un certificat de test


Attention! Les méthodes décrites pour créer des clés et des certificats conviennent aux tests et ne sont pas destinées à être utilisées en mode combat. Pour ce faire, vous devez utiliser des clés et des certificats émis par une autorité de certification de confiance de votre organisation ou une autorité de certification accréditée.
Le module PAM est conçu pour protéger les ordinateurs locaux et implique de travailler dans de petites organisations. Puisqu'il y a peu d'utilisateurs, l'administrateur peut lui-même surveiller la révocation des certificats et bloquer manuellement les comptes, ainsi que la période de validité des certificats. Le module PAM n'est pas encore en mesure de vérifier les certificats par CRL et de créer des chaînes de confiance.


Moyen simple (via navigateur)


Pour obtenir un certificat de test, utilisez le service Web Rootoken Registration Center . Le processus ne prendra pas plus de 5 minutes.

Chemin geek (via console et éventuellement compilateur)


Vérifier la version d'OpenSC
$ opensc-tool --version
Si la version est inférieure à 0,20, mettez à niveau ou collectez la branche pkcs11-tool avec le support GOST-2012 depuis notre GitHub (au moment de cet article, la version 0.20 n'a pas encore été publiée) ou depuis la branche principale du projet OpenSC principal au plus tard commit 8cf1e6f

Nous générons une paire de clés avec des paramètres:
--key-type: GOSTR3410-2012-512: (-2012 512 c ), GOSTR3410-2012-256:A (-2012 256 A)

--id: identifiant d'objet (CKA_ID) sous forme de nombres à deux chiffres en hexadécimal de la table ASCII. Utilisez uniquement des codes ASCII pour les caractères imprimés, comme id devra passer OpenSSL sous forme de chaîne. Par exemple, les codes ASCII "3132" correspondent à la chaîne "12". Pour plus de commodité, vous pouvez utiliser le service en ligne pour convertir des chaînes en codes ASCII .

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

Ensuite, nous allons créer un certificat. Deux manières seront décrites ci-dessous: la première via l'AC (nous utiliserons les AC de test), la seconde - auto-signée. Pour ce faire, vous devez d'abord installer et configurer OpenSSL version 1.1 ou ultérieure pour travailler avec Rutoken via un module rtengine spécial à l' aide du manuel d' installation et de configuration d'OpenSSL .
Par exemple: pour '- -id 3132 ' dans OpenSSL, vous devez spécifier " pkcs11:id=12 ".

Vous pouvez utiliser les services d'une CA de test, dont il existe de nombreux, par exemple ici , ici et ici , pour cela nous allons créer une demande de certificat

Une autre option est de succomber à la paresse et de créer un auto-signé
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Téléchargez le certificat sur l'appareil
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Enregistrez le certificat dans le système


Assurez-vous que votre certificat ressemble Ă  un fichier base64:



Si votre certificat ressemble Ă  ceci:



alors vous devez convertir le certificat du format DER au format PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Encore une fois, nous vérifions que tout est en ordre.

Ajouter un certificat à la liste des certificats approuvés
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

La dernière ligne protège la liste des certificats approuvés contre les modifications accidentelles ou intentionnelles par d'autres utilisateurs. Cela élimine la situation lorsque quelqu'un ajoute son certificat ici et peut se connecter en votre nom.

7) Configurer l'authentification


La configuration de notre module PAM est complètement standard et se fait comme les paramètres des autres modules. Nous créons dans le fichier /usr/share/pam-configs/rutoken-gost-pam contenant le nom complet du module, qu'il soit activé par défaut, la priorité du module et les paramètres d'authentification.
Dans les paramètres d'authentification, il y a des exigences pour le succès de l'opération:
  • requis: ces modules doivent renvoyer une rĂ©ponse positive. Si le rĂ©sultat de l'appel du module contient une rĂ©ponse nĂ©gative, cela entraĂ®nera une erreur d'authentification. La demande sera rĂ©initialisĂ©e, mais les autres modules seront appelĂ©s.
  • requis (requis): similaire Ă  requis, mais conduit immĂ©diatement Ă  un Ă©chec d'authentification et ignore le reste des modules.
  • suffisant: si devant un tel module aucun des modules requis ou suffisants n'a retournĂ© un rĂ©sultat nĂ©gatif, le module retournera une rĂ©ponse positive. Les modules restants seront ignorĂ©s.
  • facultatif (facultatif): s'il n'y a pas de modules requis dans la pile et qu'aucun des modules suffisants n'a renvoyĂ© un rĂ©sultat positif, alors au moins un des modules facultatifs doit retourner une rĂ©ponse positive.

Le contenu complet du fichier /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




enregistrez le fichier, puis exécutez
$ sudo pam-auth-update
dans la fenêtre qui apparaît, mettez un astérisque près de Rutoken PAM GOST et cliquez sur OK



8) Vérifiez le réglage


Pour comprendre que tout est configuré, mais pour ne pas perdre la possibilité de se connecter, entrez la commande
$ sudo login
Saisissez votre nom d'utilisateur. Tout est correctement configuré si le système nécessite un code PIN d'appareil.



9) Configurer le verrouillage de l'ordinateur lors de l'extraction du jeton


Le libpam-pkcs11 comprend l'utilitaire pkcs11_eventmgr, qui vous permet d'effectuer diverses actions lorsque des événements PKCS # 11 se produisent.
Pour configurer pkcs11_eventmgr utilisez le fichier de configuration: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Pour diverses distributions Linux, la commande qui provoque le verrouillage du compte lors de la suppression des cartes à puce ou des jetons sera différente. Voir l' event card_remove .
Un exemple de fichier de configuration est présenté ci-dessous:

 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"; } } 


Après cela, ajoutez l'application pkcs11_eventmgr au chargement automatique. Pour ce faire, modifiez le fichier .bash_profile:
$ nano /home/<_>/.bash_profile
Ajoutez la ligne pkcs11_eventmgr à la fin du fichier et redémarrez.

Les étapes décrites pour configurer le système d'exploitation peuvent être utilisées comme instructions dans n'importe quelle distribution Linux moderne, y compris domestique.



Conclusion


Les PC Linux deviennent de plus en plus populaires dans les agences gouvernementales russes, et la configuration d'une authentification fiable à deux facteurs dans ce système d'exploitation n'est pas toujours facile. Nous serons heureux de ce guide pour vous aider à résoudre le "problème de mot de passe" et protéger de manière fiable l'accès à votre PC sans y consacrer beaucoup de temps.

Source: https://habr.com/ru/post/fr461199/


All Articles