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

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

Las contraseñas simples no son seguras y las complejas son imposibles de recordar. Por eso a menudo terminan en una nota adhesiva debajo del teclado o en el monitor. Para garantizar que las contraseñas permanezcan en la mente de los usuarios "olvidables" y que no se pierda la confiabilidad de la protección, existe la autenticación de dos factores (2FA).

Debido a la combinación de poseer un dispositivo y conocer su PIN, el PIN en sí puede ser más simple y fácil de recordar. Las desventajas en cuanto a la longitud o la aleatoriedad del PIN se compensan con el requisito de posesión física y las restricciones a la fuerza bruta del PIN.

Además, sucede en las agencias gubernamentales que quieren que todo funcione según GOST. Se discutirá esta opción 2FA para iniciar sesión en Linux. Empezaré desde lejos.

módulos PAM

Los módulos de autenticación conectables (PAM) son módulos con una API estándar e implementaciones de varios mecanismos de autenticación en aplicaciones.
Todas las utilidades y aplicaciones que pueden funcionar con PAM las recogen y pueden utilizarlas para la autenticación de usuarios.
En la práctica, funciona de esta manera: el comando de inicio de sesión llama a 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.

libertpam

El módulo desarrollado por la empresa Aktiv añade autenticación de dos factores de usuarios mediante tarjetas inteligentes o tokens USB mediante claves asimétricas según los últimos estándares de criptografía nacional.

Veamos el principio de su funcionamiento:

  • 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 ocurre de la siguiente manera:

  1. Rutoken busca el certificado personal del usuario.
  2. Se solicita el PIN del token.
  3. Los datos aleatorios se firman en la clave privada directamente en el chip Rutoken.
  4. La firma resultante se verifica utilizando la clave pública del certificado del usuario.
  5. El módulo devuelve el resultado de la verificación de la firma a la aplicación que realiza la llamada.

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

No tiene que preocuparse por la seguridad de las claves: se generan directamente en Rutoken y nunca salen de su memoria durante las operaciones criptográficas.

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

Rutoken EDS 2.0 está certificado por FSB y FSTEC según NDV 4, por lo que puede utilizarse en sistemas de información que procesan información confidencial.

Uso practico

Casi cualquier Linux moderno servirá, por ejemplo usaremos xUbuntu 18.10.

1) Instalar los paquetes necesarios

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

2) Agregue un módulo PAM con soporte GOST

Cargando la biblioteca desde 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) Verifique que Rutoken EDS 2.0 funcione en el sistema

En la terminal ejecutamos
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Si ves la línea Rutoken ECP <no label> - significa que todo está bien.

5) Leer el certificado

Comprobando que el dispositivo tiene certificado
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Si después de la línea:
Using slot 0 with a present token (0x0)

  • se muestra la 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} debe sustituir el ID del certificado que vio en el resultado del comando anterior:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Si se ha creado el archivo cert.crt, continúe con el 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

¡Atención! Los métodos descritos para crear claves y certificados son adecuados para pruebas y no están destinados a usarse en modo de combate. Para hacer esto, debe utilizar claves y certificados emitidos por la autoridad de certificación confiable de su organización o una autoridad de certificación acreditada.
El módulo PAM está diseñado para proteger computadoras locales y está diseñado para funcionar en organizaciones pequeñas. Dado que hay pocos usuarios, el Administrador puede monitorear 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 sabe cómo verificar certificados utilizando CRL y construir cadenas de confianza.

La manera fácil (a través del navegador)

Para obtener un certificado de prueba, utilice servicio web "Centro de registro de Rutoken". El proceso no tardará más de 5 minutos.

A la manera del geek (a través de la consola y posiblemente el compilador)

Verifique la versión OpenSC
$ opensc-tool --version
Si la versión es inferior a 0.20, actualice o cree rama pkcs11-tool con soporte GOST-2012 desde nuestro GitHub (en el momento de la publicación de este artículo, la versión 0.20 aún no se ha publicado) o desde la rama maestra del proyecto principal OpenSC a más tardar cometer 8cf1e6f

Genere un par de claves con los siguientes 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 hexadecimales de dos dígitos de la tabla ASCII. Utilice sólo códigos ASCII para caracteres imprimibles, porque... La identificación deberá pasarse a OpenSSL como una cadena. Por ejemplo, el código ASCII "3132" corresponde a la cadena "12". Para mayor comodidad, puede utilizar 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 es a través de una CA (usaremos CA de prueba), la segunda es 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 usando el manual Instalación y configuración de OpenSSL.
Por ejemplo: para '--id 3132' en OpenSSL necesitas especificar "pkcs11:id=12«.

Puede utilizar los servicios de una CA de prueba, de las cuales hay muchas, por ejemplo, aquí, aquí и aquí, para esto crearemos una solicitud de certificado

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

Subir 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 parezca un archivo base64:

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

Si su certificado se ve así:

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

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

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Volvemos a comprobar que ya todo está en orden.

Agregue el 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 para que otros usuarios no la cambien accidental o intencionalmente. Esto evita que alguien agregue su certificado aquí y pueda iniciar sesión en su nombre.

7) Configurar la autenticación

La configuración de nuestro módulo PAM es completamente estándar y se realiza exactamente de la misma manera que la configuración de otros módulos. Crear para archivar /usr/share/pam-configs/rutoken-gost-pam que 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.
Los parámetros de autenticación contienen requisitos para el éxito de la operación:

  • requerido: Dichos módulos deben devolver una respuesta positiva. Si el resultado de una llamada a un módulo contiene una respuesta negativa, se producirá un error de autenticación. La solicitud se descartará, pero se llamarán los módulos restantes.
  • requisito: similar al requerido, pero inmediatamente falla la autenticación e ignora otros módulos.
  • suficiente: si ninguno de los módulos requeridos o suficientes antes de que dicho módulo arrojara un resultado negativo, entonces el módulo devolverá una respuesta positiva. Los módulos restantes serán ignorados.
  • Opcional: si no hay módulos requeridos en la pila y ninguno de los módulos suficientes arroja un resultado positivo, entonces al menos uno de los módulos opcionales debe arrojar un resultado positivo.

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

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

guarde el archivo, luego ejecute
$ sudo pam-auth-update
en la ventana que aparece, pon un asterisco al lado Rutoken PAM GOST y pulse OK

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

8) Verifique la configuración

Para comprender que todo está configurado, pero al mismo tiempo no perder la capacidad de iniciar sesión en el sistema, ingrese el comando
$ sudo login
Ingrese su nombre de usuario. Todo está configurado correctamente si el sistema requiere un código PIN del dispositivo.

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

9) Configure la computadora para que se bloquee cuando se extraiga el token

Incluido en el paquete libpam-pkcs11 utilidad incluida pkcs11_eventmgr, lo que le permite realizar varias acciones cuando ocurren eventos PKCS#11.
Para configuraciones pkcs11_eventmgr sirve como archivo de configuración: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Para diferentes distribuciones de Linux, el comando que hace que una cuenta se bloquee cuando se elimina una tarjeta inteligente o un token será diferente. Cm. event card_remove.
A continuación se muestra un archivo de configuración de ejemplo:

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 comenzar. 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 utilizar como instrucciones en cualquier distribución moderna de Linux, incluidas las domésticas.

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

Conclusión

Las PC con Linux son cada vez más populares en las agencias gubernamentales rusas y configurar una autenticación de dos factores confiable en este sistema operativo no siempre es fácil. Estaremos encantados de ayudarle a resolver el "problema de la contraseña" con esta guía y proteger de forma fiable el acceso a su PC sin dedicarle mucho tiempo.

Fuente: habr.com

Añadir un comentario