Firma / suma de verificación del núcleo para evitar / detectar la manipulación
8
Todas mis particiones están encriptadas ( /y /home), pero la /bootpartición debe permanecer sin encriptar y está abierta a manipulación. Estaba pensando en trocear el kernel en el arranque y verificar el resultado con un valor almacenado (generado en la compilación, guardado en mi unidad encriptada) para ver si alguien, de alguna manera, manipuló el kernel desde el último arranque (tal vez incluso físicamente). ¿Hay algún problema con la escritura de tal script? ¿Hay programas que ya hacen esto?
Lo que está buscando: verificar que el sistema operativo que se ejecuta en la computadora es uno en el que confía, se denomina arranque de confianza . (Es una de varias cosas que a veces se llama arranque de confianza). Su método propuesto no logra este objetivo.
El cifrado no proporciona integridad o autenticidad de datos . En otras palabras, no impide que un atacante modifique el contenido de su disco y lo reemplace por un sistema operativo malicioso. Este sistema operativo malicioso podría programarse fácilmente para mostrar la suma de comprobación que espera para el núcleo cargado.
La ruta de ataque más fácil es un hombre en el medio donde el atacante ejecuta su sistema operativo normal bajo algún tipo de máquina virtual. La capa de máquina virtual transmite su entrada al sistema operativo deseado y transmite la salida. Pero también registra sus pulsaciones de teclas (mmmm, contraseñas) en el lateral, espía las claves privadas de la memoria del sistema operativo, etc.
Para evitar esta forma de ataque, debe tener una raíz de confianza : un componente del sistema en el que confíe por una razón que no sea porque algún otro componente del sistema lo diga. En otras palabras, tienes que comenzar en alguna parte. Comenzar con hardware en su poder es un buen comienzo; puede mantener su sistema operativo en una memoria USB que no se le pierda de vista y conectarlo solo en el hardware en el que tenga suficiente confianza (¡el hardware puede tener malware !). Tenga en cuenta que si está dispuesto a confiar en la computadora, también puede confiar en su disco duro.
Existe una solución técnica para cerrar la brecha entre confiar en un chip pequeño y confiar en una computadora de escritorio o portátil completa. Algunas PC tienen un TPM (módulo de plataforma confiable) que puede, entre otros, verificar que solo se pueda iniciar un sistema operativo conocido. Trusted Grub admite TPM, por lo que con un TPM plus Trusted Grub, puede estar seguro de que el kernel que está ejecutando es uno que ha aprobado.
Tenga en cuenta que la adopción del TPM puede funcionar a favor o en contra de usted. Todo depende de quién tiene las llaves. Si tiene la clave privada para su TPM, puede controlar exactamente lo que se ejecuta en su computadora. Si solo el fabricante tiene la clave privada, es una forma de convertir una plataforma de uso general en un dispositivo bloqueado.
+1 por la referencia a un gran peligro potencial de TPM (también conocido como Treacherous Computing)
Eli Heady
No ofrece soluciones reales , solo menciona frases populares relacionadas con la seguridad. Lo que usted dice sobre un ataque MITM es una amenaza que ignora la idea principal de la pregunta del OP: usar un script de verificación de suma de verificación que permita que el sistema arranque solo si se cumplen ciertas condiciones. En ese punto, no habría ningún problema en verificar que el hardware subyacente real sea lo que debería ser, no una VM.
rozcietrzewiacz
-1
El núcleo arrancado reside en la memoria. Puede hacer un script que lo ubique /dev/memy, conociendo el tamaño, calcule y verifique su suma de verificación.
También puede tener todo el HD encriptado, sin necesidad de /bootpartición y (casi) ninguna forma de modificar el núcleo. ¿Cómo? dos maneras en que puedo pensar:
Coloque su núcleo en un CD, desde el cual se iniciará su computadora. Esto no es tan difícil; Algunas personas informaron que usaban esa configuración hace varios años. Vea la segunda publicación en este hilo del foro .
Si su placa base es compatible con coreboot y tiene suficiente espacio para un núcleo mínimo, podría tener un núcleo con cifrado habilitado en su chip BIOS. (No he tenido la oportunidad de hacer la prueba, pero no veo ninguna razón por la cual esto podría no funcionar).
Editar: Tenga en cuenta que todos estos son solo pasos sencillos hacia el arranque "confiable" o "verificado" (que Gilles señaló correctamente). El mecanismo completo también debe tener en cuenta lo que sucede en la etapa del cargador de arranque y cómo se identifica el hardware subyacente. Eche un vistazo a cómo Google Chromium OS hace esto .
¿Funcionará? No estoy seguro; No sé de antemano si el núcleo modifica su código en la memoria después de que comienza. Sé que no puede verificar un módulo de esa manera, porque el módulo está vinculado al kernel (cambiando algunas direcciones aquí y allá) cuando está cargado. ¿Proporcionará las propiedades de seguridad deseadas? No, mira mi respuesta. ¡La integridad es complicada!
Gilles 'SO- deja de ser malvado'
Parece que no leíste toda mi respuesta. El primer párrafo, al que se refiere, es solo una respuesta directa a lo que realmente se le preguntó. El resto de mi respuesta presenta opciones similares al método que ha mencionado, pero mejor , porque son seguras contra la modificación del núcleo (a diferencia de un pendrive USB).
rozcietrzewiacz
@Gilles Se olvidó de '@' en el comentario anterior. Además, acabo de comprobar de qué no estaba seguro: hice un volcado de la imagen del kernel en memoria, luego agregué un montón de módulos, hice un segundo volcado de la región, en comparación, lo mismo. Usted puede utilizar esto.
El núcleo arrancado reside en la memoria. Puede hacer un script que lo ubique
/dev/mem
y, conociendo el tamaño, calcule y verifique su suma de verificación.También puede tener todo el HD encriptado, sin necesidad de
/boot
partición y (casi) ninguna forma de modificar el núcleo. ¿Cómo? dos maneras en que puedo pensar:Coloque su núcleo en un CD, desde el cual se iniciará su computadora. Esto no es tan difícil; Algunas personas informaron que usaban esa configuración hace varios años. Vea la segunda publicación en este hilo del foro .
Si su placa base es compatible con coreboot y tiene suficiente espacio para un núcleo mínimo, podría tener un núcleo con cifrado habilitado en su chip BIOS. (No he tenido la oportunidad de hacer la prueba, pero no veo ninguna razón por la cual esto podría no funcionar).
Editar: Tenga en cuenta que todos estos son solo pasos sencillos hacia el arranque "confiable" o "verificado" (que Gilles señaló correctamente). El mecanismo completo también debe tener en cuenta lo que sucede en la etapa del cargador de arranque y cómo se identifica el hardware subyacente. Eche un vistazo a cómo Google Chromium OS hace esto .
fuente