C贸mo usar m贸dulos PAM para autenticaci贸n local en Linux usando claves GOST-2012 en Rutoken



Las contrase帽as simples no protegen, y las contrase帽as complejas no se pueden recordar. Por lo tanto, a menudo se encuentran en una etiqueta debajo del teclado o en el monitor. Para que las contrase帽as permanezcan en la cabeza de los usuarios "olvidadizos" y no se pierda la confiabilidad de la protecci贸n, existe la autenticaci贸n de dos factores (2FA).

Debido a la combinaci贸n de factores de propiedad del dispositivo y el conocimiento de su c贸digo PIN, el c贸digo PIN en s铆 mismo puede ser m谩s simple y f谩cil de recordar. Las deficiencias en la longitud o aleatoriedad del PIN se compensan con el requisito de propiedad f铆sica y las restricciones en la b煤squeda del PIN.

Adem谩s, en las instituciones estatales sucede que quieren que todo funcione de acuerdo con GOST. Acerca de esta opci贸n 2FA para ingresar a Linux y se discutir谩. Comenzar茅 desde lejos.

M贸dulos PAM


Los m贸dulos de autenticaci贸n enchufables (PAM) son m贸dulos con una API est谩ndar e implementaciones de varios mecanismos de autenticaci贸n en las aplicaciones.
Todas las utilidades y aplicaciones que pueden trabajar con PAM los recogen y pueden usar para autenticar al usuario.
En la pr谩ctica, esto funciona de la siguiente manera: el comando de inicio de sesi贸n se convierte en PAM, que realiza todas las comprobaciones necesarias utilizando los m贸dulos especificados en el archivo de configuraci贸n y devuelve el resultado al comando de inicio de sesi贸n.

librtpam


El m贸dulo desarrollado por la compa帽铆a Active agrega autenticaci贸n de dos factores de usuarios que usan tarjetas inteligentes o tokens USB que usan claves asim茅tricas de acuerdo con los 煤ltimos est谩ndares de criptograf铆a dom茅stica.

Considere el principio de su trabajo:
  • el token almacena el certificado del usuario y su clave privada;
  • El certificado se guarda en el directorio de inicio del usuario como confiable.


El proceso de autenticaci贸n es el siguiente:
  1. Rutoken busca el certificado personal del usuario.
  2. Se solicita un PIN de token.
  3. Los datos aleatorios se firman en una clave privada directamente en el chip Rutoken.
  4. La firma recibida se verifica utilizando la clave p煤blica del certificado de usuario.
  5. El m贸dulo devuelve el resultado de la verificaci贸n de firma a la aplicaci贸n que realiza la llamada.


Puede autenticarse utilizando las claves GOST R 34.10-2012 (longitud 256 o 512 bits) o GOST R 34.10-2001 obsoleto.

No hay necesidad de preocuparse por la seguridad de las claves: se generan directamente en Rutoken y nunca dejan su memoria durante las operaciones criptogr谩ficas.



Rutoken EDS 2.0 est谩 certificado por FSB y FSTEC para NDV 4, por lo tanto, se puede utilizar en sistemas de informaci贸n que procesan informaci贸n confidencial.

Uso pr谩ctico


Casi cualquier Linux moderno es adecuado, por ejemplo, usaremos xUbuntu 18.10.

1) Instale los paquetes necesarios


sudo apt-get install libccid pcscd opensc
Si desea agregar un bloqueo de escritorio con un protector de pantalla, instale adicionalmente el libpam-pkcs11 .

2) Agregue un m贸dulo PAM con soporte para GOST


Descargue la biblioteca de https://download.rutoken.ru/Rutoken/PAM/
Copie el contenido de la carpeta PAM librtpam.so.1.0.0 a la carpeta del sistema
/usr/lib/ o /usr/lib/x86_64-linux-gnu/ o /usr/lib64

3) Instale el paquete con librtpkcs11ecp.so


Descargue e instale el paquete DEB o RPM desde el enlace: https://www.rutoken.ru/support/download/pkcs/

4) Verificamos que Rutoken EDS 2.0 funciona en el sistema


En la terminal, ejecute
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Si ve la l铆nea Rutoken ECP <no label> , entonces todo est谩 bien.

5) Lea el certificado


Verifique que el dispositivo tenga un certificado
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Si despu茅s de la l铆nea:
Using slot 0 with a present token (0x0)
  • Si se muestra informaci贸n sobre claves y certificados, debe leer el certificado y guardarlo en el disco. Para hacer esto, ejecute el siguiente comando, donde en lugar de {id} necesita sustituir el certificado de ID que vio en la salida del comando anterior:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Si se crea el archivo cert.crt, vaya al paso 6).
  • no hay nada , entonces el dispositivo est谩 vac铆o. P贸ngase en contacto con su administrador o cree las claves y el certificado usted mismo siguiendo el siguiente paso.


5.1) Crear un certificado de prueba


Atencion Los m茅todos descritos para crear claves y certificados son adecuados para la prueba y no est谩n destinados para su uso en modo de combate. Para hacer esto, debe usar claves y certificados emitidos por una autoridad de certificaci贸n de confianza de su organizaci贸n o una autoridad de certificaci贸n acreditada.
El m贸dulo PAM est谩 dise帽ado para proteger las computadoras locales e implica trabajar en organizaciones peque帽as. Como hay pocos usuarios, el Administrador puede supervisar 茅l mismo la revocaci贸n de certificados y bloquear cuentas manualmente, as铆 como el per铆odo de validez de los certificados. El m贸dulo PAM a煤n no puede verificar los certificados por CRL y construir cadenas de confianza.


Manera f谩cil (a trav茅s del navegador)


Para obtener un certificado de prueba, use el servicio web del Centro de registro de Rootoken . El proceso no tomar谩 m谩s de 5 minutos.

Ruta geek (a trav茅s de la consola y posiblemente compilador)


Verifique la versi贸n de OpenSC
$ opensc-tool --version
Si la versi贸n es inferior a 0.20, actualice o recopile la rama pkcs11-tool con el soporte GOST 2012 de nuestro GitHub (en el momento de la publicaci贸n de este art铆culo, a煤n no se ha lanzado el 0.20) o de la rama maestra del proyecto principal de OpenSC a m谩s tardar con el compromiso 8cf1e6f

Generamos un par de claves con par谩metros:
--key-type: GOSTR3410-2012-512: (-2012 512 c ), GOSTR3410-2012-256:A (-2012 256 A)

--id: identificador de objeto (CKA_ID) como n煤meros de caracteres de dos d铆gitos en hexadecimal de la tabla ASCII. Utilice solo c贸digos ASCII para caracteres impresos, como id necesitar谩 pasar OpenSSL como una cadena. Por ejemplo, los c贸digos ASCII "3132" corresponden a la cadena "12". Para mayor comodidad, puede utilizar el servicio en l铆nea para convertir cadenas a c贸digos ASCII .

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

A continuaci贸n crearemos un certificado. A continuaci贸n se describir谩n dos formas: la primera a trav茅s de la CA (utilizaremos CA de prueba), la segunda, autofirmada. Para hacer esto, primero debe instalar y configurar OpenSSL versi贸n 1.1 o posterior para trabajar con Rutoken a trav茅s de un m贸dulo rtengine especial utilizando el manual de instalaci贸n y configuraci贸n de OpenSSL .
Por ejemplo: para '- -id 3132 ' en OpenSSL, debe especificar " pkcs11:id=12 ".

Puede usar los servicios de una CA de prueba, de los cuales hay muchos, por ejemplo, aqu铆 , aqu铆 y aqu铆 , para esto crearemos una solicitud de certificado

Otra opci贸n es sucumbir a la pereza y crear un autofirmado
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Descargar el certificado al dispositivo
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Registrar el certificado en el sistema


Aseg煤rese de que su certificado se vea como un archivo base64:



Si su certificado se ve as铆:



entonces necesita convertir el certificado del formato DER al formato PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Nuevamente comprobamos que ahora todo est谩 en orden.

Agregar un certificado a la lista de certificados confiables
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

La 煤ltima l铆nea protege la lista de certificados confiables de cambios accidentales o intencionales de otros usuarios. Esto elimina la situaci贸n cuando alguien agrega su certificado aqu铆 y puede iniciar sesi贸n en su nombre.

7) Configurar autenticaci贸n


La configuraci贸n de nuestro m贸dulo PAM es completamente est谩ndar y se realiza igual que la configuraci贸n de otros m贸dulos. Creamos en el archivo /usr/share/pam-configs/rutoken-gost-pam contiene el nombre completo del m贸dulo, si est谩 habilitado de forma predeterminada, la prioridad del m贸dulo y los par谩metros de autenticaci贸n.
En los par谩metros de autenticaci贸n hay requisitos para el 茅xito de la operaci贸n:
  • requerido: tales m贸dulos deben devolver una respuesta positiva. Si el resultado de la llamada del m贸dulo contiene una respuesta negativa, esto conducir谩 a un error de autenticaci贸n. La solicitud se restablecer谩, pero se llamar谩 al resto de los m贸dulos.
  • requisito (requerido): similar al requerido, pero inmediatamente conduce a una falla de autenticaci贸n e ignora el resto de los m贸dulos.
  • suficiente: si frente a dicho m贸dulo ninguno de los m贸dulos necesarios o suficientes devuelve un resultado negativo, el m贸dulo devolver谩 una respuesta positiva. Los m贸dulos restantes ser谩n ignorados.
  • opcional (opcional): si no hay m贸dulos necesarios en la pila y ninguno de los m贸dulos suficientes arroj贸 un resultado positivo, entonces al menos uno de los m贸dulos opcionales deber铆a devolver una respuesta positiva.

El contenido completo del archivo /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




guarde el archivo, luego ejecute
$ sudo pam-auth-update
en la ventana que aparece, coloque un asterisco cerca de Rutoken PAM GOST y haga clic en Aceptar



8) Verifique la configuraci贸n


Para comprender que todo est谩 configurado, pero no perder la capacidad de iniciar sesi贸n, ingrese el comando
$ sudo login
Ingrese su nombre de usuario. Todo est谩 configurado correctamente si el sistema requiere un PIN del dispositivo.



9) Configure el bloqueo de la computadora al extraer el token


El libpam-pkcs11 incluye la utilidad pkcs11_eventmgr, que le permite realizar diversas acciones cuando se producen eventos PKCS # 11.
Para configurar pkcs11_eventmgr use el archivo de configuraci贸n: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Para varias distribuciones de Linux, el comando que hace que la cuenta se bloquee al eliminar tarjetas inteligentes o tokens ser谩 diferente. Ver event card_remove .
A continuaci贸n se presenta un ejemplo de archivo de configuraci贸n:

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


Despu茅s de eso, agregue la aplicaci贸n pkcs11_eventmgr a la carga autom谩tica. Para hacer esto, edite el archivo .bash_profile:
$ nano /home/<_>/.bash_profile
Agregue la l铆nea pkcs11_eventmgr al final del archivo y reinicie.

Los pasos descritos para configurar el sistema operativo se pueden usar como instrucciones en cualquier distribuci贸n moderna de Linux, incluidas las dom茅sticas.



Conclusi贸n


Las PC con Linux se est谩n volviendo cada vez m谩s populares en las agencias gubernamentales rusas, y configurar una autenticaci贸n confiable de dos factores en este sistema operativo no siempre es f谩cil. Estaremos encantados con esta gu铆a para ayudarlo a resolver el "problema de contrase帽a" y proteger de manera confiable el acceso a su PC sin perder mucho tiempo.

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


All Articles