A veces busco un tema sobre el que escribir y me doy cuenta de que hay uno que supongo que he cubierto, pero, al buscar, descubro que no. Uno de esos temas es el arranque medido y el arranque de confianza, a veces denominado engañosamente como "arranque seguro". Hay procedimientos específicos que usan estos términos con letras mayúsculas (por ejemplo, Arranque seguro), que intentaré evitar discutir en este artículo. Estoy más interesado en los procesos genéricos, y una caída potencial importante, que en tratar de entrar en los entresijos de los detalles. Lo que sigue es un extracto (muy editado) de mi próximo libro sobre la confianza en la computación y la nube para Wiley.
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
Para comprender qué pretenden lograr el arranque medido y el arranque confiable, mire la pila de virtualización de Linux:los componentes que ejecuta si desea usar máquinas virtuales (VM) en una máquina Linux. Podría decirse que esta descripción está demasiado simplificada, pero (como señalé anteriormente) no estoy interesado en los detalles, sino en lo que estoy tratando de lograr. Me concentraré en las cuatro capas inferiores (en un nivel de abstracción bastante simple):CPU/motor de administración; BIOS/EFI; firmware; e hipervisor, pero también consideraré una capa solo encima de la CPU/motor de gestión, que interpone un Módulo de plataforma segura (TPM) y algunas instrucciones sobre cómo realizar uno de los dos procesos (arranque medido y arranque de confianza ). Una vez que el sistema comienza a arrancar, el TPM se activa y comienza a funcionar. También se pueden usar raíces de confianza alternativas, como módulos de seguridad de hardware (HSM), pero en mi ejemplo usaré TPM, el ejemplo más común en este contexto.
En ambos casos (arranque confiable y arranque medido), el flujo básico comienza cuando el TPM realiza una medición de la capa BIOS/EFI. Esta medida consiste en comprobar las instrucciones binarias que debe realizar esta capa y crear un hash criptográfico de la imagen binaria. El hash que se produce se almacena en una de varias "ranuras" del Registro de configuración de plataforma (PCR) en el TPM. Estos se pueden considerar como partes de la memoria que se pueden leer más adelante, ya sea por el TPM para sus fines o por entidades externas al TPM, pero que no se pueden cambiar una vez que se han escrito. Estas piezas de memoria están protegidas en su integridad desde el momento en que se escribieron inicialmente. Esto proporciona garantías de que una vez que el TPM escribe un valor en un PCR, se puede considerar constante durante la vida útil del sistema hasta que se apague o se reinicie.
Después de medir la capa BIOS/EFI, se mide la siguiente capa (firmware). En este caso, el hash resultante se combina con el hash anterior (que se almacenó en la ranura PCR) y luego también se almacena en una ranura PCR. El proceso continúa hasta que se han medido todas las capas involucradas en el proceso y se han almacenado los resultados de los hash. Hay procesos (a veces bastante complejos) para configurar los valores TPM originales (me he saltado algunos de los pasos de nivel más bajo en el proceso para simplificar) y para permitir cambios (con suerte autorizados) en las capas para actualización o parches de seguridad. , por ejemplo. Este proceso de "arranque medido" permite que las entidades consulten el TPM después de que se haya completado el proceso y verifiquen si los valores en las ranuras de PCR corresponden a los valores esperados, calculados previamente con versiones "bien conocidas" de las diversas capas, es decir , versiones precomprobadas cuya procedencia e integridad ya han sido establecidas.
Existen varios protocolos para permitir que las partes externas al sistema para verificar los valores (por ejemplo, a través de una conexión de red) que el TPM certifica que son correctos:el proceso de recibir y verificar dichos valores desde un sistema externo se conoce como "certificación remota".
Este proceso, arranque medido, le permite averiguar si los cimientos de su sistema, las capas más bajas, son lo que cree que son. Pero, ¿y si no lo son? El arranque medido (como era de esperar, dado el nombre) mide pero no realiza ninguna otra acción.
La alternativa, el "arranque de confianza", va un paso más allá. Cuando se realiza un proceso de arranque confiable, el proceso no solo mide cada valor, sino que también realiza una verificación contra un buen valor conocido (¡y esperado!) al mismo tiempo. Si la verificación falla, el proceso se detendrá y el arranque del sistema fallará. Esto puede sonar como un enfoque bastante extremo para asumir un sistema, pero a veces es absolutamente el correcto. Cuando el sistema en cuestión se haya visto comprometido, que es una inferencia probable que se puede hacer a partir de la falla de un proceso de arranque confiable, es mejor que no esté disponible en absoluto que estar funcionando en base a expectativas defectuosas.
Todo esto está muy bien si soy el propietario del sistema que se está midiendo, he verificado todos los diversos componentes que se están midiendo (y las medidas) y estoy feliz de que lo que se está arrancando es lo que quiero. Pero, ¿qué pasa si estoy usando un sistema en la nube, por ejemplo, o cualquier sistema que sea propiedad y esté administrado por otra persona? En ese caso, confío en el proveedor de la nube (o propietario/administrador) con dos cosas:
- Hacer todas las mediciones correctamente y reportarme los resultados correctos
- Construyendo algo en lo que debería confiar en primer lugar
Este es el problema con la nomenclatura "arranque confiable" y, lo que es peor, "arranque seguro". Ambos implican que se ha establecido una propiedad absoluta y objetiva de un sistema (es "confiable" o "seguro") cuando claramente este no es el caso. Obviamente, sería injusto esperar que los diseñadores de dichos procesos los nombraran según los estados de falla ("arranque no confiable" o "arranque inseguro"), pero, a menos que pueda estar muy seguro de que confío en que el propietario del sistema realizará el paso dos completamente correctamente (y en mi mejor interés como usuario del sistema, en lugar del de ellos como propietario), entonces no puedo hacer afirmaciones más fuertes.
Existe una enorme tentación de tomar un sistema que ha pasado por un proceso de arranque confiable y etiquetarlo como "sistema confiable" cuando lo mejor La afirmación que puede hacer es que las capas particulares medidas en el proceso de arranque medido y/o confiable han sido afirmadas como aquellas que el proceso espera que estén presentes. Tal proceso no dice nada sobre la idoneidad de las capas para brindar garantías de comportamiento ni sobre la corrección (o la idoneidad para brindar garantías de comportamiento) de las capas posteriores que se suman a ellas.
Es importante tener en cuenta que los diseñadores de TPM tienen bastante claro lo que se afirma y que las afirmaciones sobre la confianza deben hacerse con cuidado y moderación. Sin embargo, desafortunadamente, las complejidades de los sistemas, el bajo nivel general de comprensión de la confianza y las complejidades del contexto y la confianza transitiva hacen que sea muy fácil para los diseñadores e implementadores de sistemas hacer algo incorrecto y asumir que cualquier sistema que haya realizado con éxito un El proceso de arranque confiable puede considerarse "de confianza". También es extremadamente importante recordar que los TPM, como raíces de confianza de hardware, ofrecen uno de los mejores mecanismos disponibles para establecer una cadena de confianza en los sistemas que puede estar diseñando o implementando, y planeo escribir un artículo sobre ellos pronto.
- Aunque esto resulta ser mucho más difícil de hacer de lo que cabría esperar!
Este artículo se publicó originalmente sobre Alice, Eve y Bob y se reproduce con el permiso del autor.