Logotipo de Zephyrnet

Protección de claves SSH con TPM 2.0, ahora disponible en Debian | Libro mayor

Fecha:

En este protocolo, los usuarios deben estar autenticados. Pueden hacer esto con contraseñas, archivos que contienen claves RSA privadas, dispositivos de hardware como Ledger Nano S y Ledger Nano X, etc.

Algunos medios de autenticación son más seguros que otros: usar un dispositivo de hardware diseñado para almacenar una clave privada sin que sea posible extraerla nunca es más seguro que almacenar la clave privada en un archivo. Desafortunadamente, los más seguros también son más dolorosos de usar. Los usuarios que tienen sus claves en un dispositivo deben llevar consigo el dispositivo, deben escribir su código PIN cada vez que inician una sesión SSH, etc. la seguridad del acceso no es la prioridad.

Entonces, la pregunta es: ¿es posible almacenar el material de autenticación de manera más segura que en un archivo (que puede ser robado por algún malware), sin cambiar la experiencia del usuario?

Y la respuesta es: ¡sí, usando un TPM!

Un poco de historia

Durante bastante tiempo, las computadoras han podido incorporar directamente un chip de seguridad. Este chip, denominado Trusted Platform Module (TPM), proporciona muchas funciones, incluida la capacidad de proteger las claves privadas utilizadas en la criptografía de claves públicas.

Como está integrado en las computadoras, no es necesario enchufar un dispositivo en la computadora para poder usarlo. Por lo tanto, se considera menos seguro que un dispositivo de hardware que se puede almacenar en un lugar diferente al de la computadora (esto permite hacer cumplir el principio de que mientras el dispositivo no esté conectado a la computadora, ningún malware puede usar los secretos almacenados en él).

Por lo tanto, TPM no es la "mejor seguridad", pero sigue siendo mucho más seguro que usar archivos como $HOME/.ssh/id_rsa para almacenar claves privadas.

¿Cómo se puede usar TPM con OpenSSH en Linux? Con un proyecto llamado tpm2-pkcs11, siguiendo las instrucciones disponibles en muchos sitios web durante muchos años, incluso en el documentación oficial de su repositorio de código.

Ahora, ¿cuál es la noticia? ¡Este software ahora finalmente está empaquetado en Ubuntu y Debian, lo que lo hace finalmente disponible para la mayoría de los usuarios de Linux!

Más precisamente aquí hay una línea de tiempo:

  • En 2014 se publicaron las principales especificaciones del TPM 2.0. Para interactuar con un TPM del software, hubo un esfuerzo de estandarización y se crearon dos pilas de software incompatibles: la del Trusted Computing Group (TCG), llamada Pila de software TPM (TSS), y el de IBM, también llamado Pila de software TPM.
  • En 2018, el proyecto tpm2-pkcs11 fue creado para proporcionar una interfaz PKCS#11 a un TPM 2.0, usando el TSS de TCG. PKCS # 11 es un estándar que define una interfaz de programación de aplicaciones (API) denominada Criptoki para usar tokens que almacenan claves criptográficas. Dado que OpenSSH admitía el uso de una interfaz PKCS#11 para realizar la autenticación de usuario, esto permitió usar TPM para almacenar las claves utilizadas para la autenticación SSH.
  • En febrero de 2019, tpm2-pkcs11 fue agregado a Fedora 29.
  • En septiembre de 2019, se lanzó CentOS 8 con este paquete.
  • En abril 2020, tpm2-pkcs11 fue agregado a Sid de Debian. Desafortunadamente no contenía el programa. tpm2_ptool que es necesario para crear claves fácilmente. Este problema fue informado en Error de Debian # 968310.
  • En enero de 2021, el paquete de Debian fue fijas (¡y el mantenedor reconoció mi ayuda!).
  • En abril de 2021, Ubuntu 21.04 hipopótamo hirsuto fue lanzado con el paquete fijo.
  • En agosto de 2021, Debian 11 Bullseye fue lanzado con el paquete fijo

Ahora tpm2-pkcs11 está disponible en Debian, Ubuntu y varias otras distribuciones de Linux enumeradas en Repología.

Usando tpm2-pkcs11

En Debian 11, estos son los pasos para generar y usar una nueva clave SSH almacenada de forma segura por el TPM:

  1. Instalar comando tpm2_ptool y biblioteca libtpm2_pkcs11.so.1, que son proporcionados por dos paquetes:

2. Compruebe que el sistema puede utilizar un TPM 2.0. Si una de las siguientes comprobaciones falla, podría significar que el sistema no tiene un TPM, tiene un TPM 1.2 o tiene un TPM 2.0 que está deshabilitado en la configuración del BIOS:

3. Agregue el usuario actual al grupo que puede acceder al dispositivo TPM /dev/tpmrm0. En Debian y Ubuntu, los usuarios deben pertenecer a un grupo llamado tss (gracias a la configuración proporcionada por tpm-udev paquete). El siguiente comando agrega el usuario actual a este grupo:

Inicialice un almacén de usuarios, protegido por una contraseña y un SOPÍN y cree una clave, por ejemplo, una clave de curva elíptica en la curva denominada "NIST P-256" (también conocida como "secp256r1"):

4. El acrónimo SOPÍN significa Número de identificación personal del oficial de seguridad y es un concepto de la especificación de PKCS#11. En casos de uso simples, puede verse como una "contraseña de recuperación" que permite modificar la contraseña cuando, por ejemplo, se ha perdido.

5. Muestre la clave pública de esta nueva clave:

6. Configure la nueva clave pública en un servidor, por ejemplo escribiéndola en $HOME/.ssh/authorized_keys o en la configuración de la cuenta de GitHub o en cualquier otra ubicación donde se utilicen claves públicas SSH.

7. Configure el cliente SSH para usar tpm2-pkcs11 para conectarse al servidor, por ejemplo, escribiendo esto en $HOME/.ssh/config (lado del cliente):

Conéctese al servidor (NOTA: el paso anterior se puede omitir:

Trabajo futuro

La sección anterior presentó cómo crear una nueva clave en el TPM. Si bien esto permite usar un TPM para proteger la autenticación SSH, hay dos funciones necesarias para que sea una alternativa real al uso de archivos para almacenar claves privadas:

  • Característica n.º 1: importar claves SSH existentes a un TPM en lugar de crear otras nuevas (lo que permite una transición fluida al almacenamiento de TPM, hacer una copia de seguridad de las claves, en caso de que la computadora se rompa o se pierda, etc.).
  • Característica n.º 2: uso de claves SSH sin contraseña, como archivos de claves privadas sin protección (esta función es más segura que los archivos de claves, ya que la clave protegida no se puede extraer del TPM).

Implementé ambas características en tpm2-pkcs11 y los envió en Pull Requests #681 y #695. La característica #1 también se presentó en mayo durante la llamada semanal en línea de comunidad tpm.dev y la grabación está disponible en https://developers.tpm.dev/posts/14389750.

Por lo tanto, es probable que ambas funciones estén disponibles en una versión futura de tpm2-pkcs11.

Por cierto, para los lectores curiosos que quieran entender el interior de tpm2-pkcs11, publiqué un artículo sobre ellos en la conferencia SSTIC 2021, llamado Protección de la autenticación SSH con TPM 2.0 (artículo en inglés, presentación en francés). Además, a los lectores que quieran probar cosas sin tocar un TPM real les puede interesar la sección “Emular un TPM 2.0” de este artículo.

(Ilustración: Rainer Knäpper, Licencia de Arte Libre)

punto_img

Información más reciente

punto_img