Recuperando claves de cifrado a partir de volcados de memoria en Linux

 

 

Se trata de un interesante trabajo de Torbjörn Pettersson, que se presentará en el Chaos Communication Camp 2007, a celebrar esta misma semana en Finowfurt, localidad cercana a Berlín (Alemania).

ejemplo de obtencion de claves de cifrado

 

El trabajo propone algunos métodos para obtener las claves de cifrado utilizadas por dm-crypt y Cryptoloop, los dos principales sistemas nativos de cifrado en Linux. Estas claves residen en la memoria RAM mientras se utiliza el disco cifrado, y por tanto pueden ser accedidas por alguien con acceso local o acceso remoto con permiso root a partir /dev/mem, pero también a partir de otros métodos menos obvios. En cualquier caso, una vez obtenidas las claves el cifrado deja de ser efectivo.

Algunas situaciones especiales que se tratan en el documento pueden facilitar la obtención de estas claves, por ejemplo la suspensión de una máquina virtual o la hibernación en un PC o -sobre todo- un portátil, ya que en estos casos el contenido de la RAM se copia al propio disco. También el puerto Firewire permite el acceso a la memoria física...

En Cryptoloop (el sistema nativo de cifrado en Linux más antiguo) es sorprendentemente fácil descubrir las claves de cifrado a partir de un volcado de memoria. En dm-crypt (que reemplaza a Cryptoloop en los kernels más actuales y se considera criptográficamente superior) resulta algo más complejo, pero puede también lograrse. Lógicamente, una vez obtenida la clave resulta en ambos casos trivial acceder al material cifrado.

Las consecuencias inmediatas son obvias: no permitir a nadie el acceso físico a un portátil encendido y deshabilitar tanto firewire como la hibernación. También se recomienda no trabajar con información sensible en entornos virtualizados. El uso de contraseñas fuertes y salvapantallas con contraseña también dificulta -según el autor- el acceso al contenido de la memoria, incluso disponiendo de acceso físico.

El trabajo de Pettersson incluye en su apéndice el código fuente de un programa que busca en un volcado de memoria Linux las claves de cifrado utilizadas con dm-crypt.

 

 

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).
anónimo's picture

truecrypt es vulnerable al mismo ataque (al menos en Linux)


paso uno: crear el volumen y darle una clave de 16 dígitos
paso dos: montarlo
paso tres: hacerle una foto dd if=/dev/mem of=dump.img
paso cuatro: buscar la clave en el dump bexedit dump.img CTRL+T CTRL+S y pongo la mitad de la clave, 8 dígitos
paso cinco: observar como la otra mitad de la clave estaba en el dump
paso seis: profit!

ellos ya lo saben (http://www.truecrypt.org/docs/memory-dump-files.php) y parece que les da igual, pero a mi me parece uno de los vectores principales de un ataque. Cualquier adversario que tenga acceso de administrador puede conseguir la clave de manera casi trivial.

anónimo's picture

Supongo que esas noticias


Supongo que esas noticias sobre los comandos de e t a siendo interceptados aun usando PGP vienen de tecnicas como estas, lo cual es mucho suponer dada la poca informacion fiable que hay del asunto.

En otro orden de materia ya crei hace tiempo que estas tecnicas de cifrado software son un peligro, cuando se cifra o sea hace bien o no se hace, y como bien dicen los expertos el algoritmo es solo una parte del proceso, aqui tenemos una demostracion y dificil de solucionar...¿cuanto tiempo ha de estar una clave en la memoria? ¿40ms? sobra timepo para que un virus o como queramos llamarle, vuelque el contenido (de keyloggers mejor no hablar)?
¿como solucionamos este problema?

es dificil, si, tal vez con hardware, donde los BLOCKS se pasen a traves del USB o tarjeta de algun tipo a un chip que devuelva cifrado pero ¿y la clave?

teclado mal

cualquier disco de claves mal

yo creo que la unica opcion es hardware pero eso en plan domestico es dificil, caro...por ejemplo si conseguimos que a traves del usb que es el mas conocido podamos acceder a un chip basado en fpgs, por ser lo mas asequible, que

a-tenga el algoritmo
b-cifre
c-descifre
d-tenga en una ram el banco de claves

lo malo es que necesitariamos depositar la confianza en el, si nos lo roban mal, si lo perdemos o se estropea mal...

el cifrado es un problema.

anónimo's picture

dm-crypt


justo hace una semana que pase mi partición cifrada de cryptoloop a dm-crypt.

No conocía esta vulnerabilidad, la cual es lógica, aún así siempre que trabajo con la partición cifrada, enchufo el hd, monto, utilizo, desmonto y apago directamente. Como mucho esta activa la clave 2 o 3 minutos y siempre conmigo delante.

No se por que mis paranoias me decían que era lo mas seguro.

anónimo's picture

A mano


Pues ya sabeis: papel, lápiz, y a cifrar a mano. Luego se quema el papel y se le da de comer a los gusanos.

Supongo que eso de tener que tener la clave en memoria es un problema común a cualquier criptosistema implementado por software.

En cualquier caso, si el ataque requiere de acceso físico al ordenador en el momento del cifrado, tampoco me parece la mayor de las preocupaciones: doy por supuesto que en cuanto un atacante tiene acceso físico al ordenador, tiene acceso a absolutamente todo lo relativo a ese ordenador. Es decir, que en escenarios donde no se puede asegurar que el atacante no tiene acceso físico, no se puede hablar de seguridad del sistema. Punto.

Así que lo suyo sería asegurarse que este tipo de ataques no se pueden hacer remotamente, y ahí es donde entran otro tipo de herramientas y técnicas, como la política de accesos remotos.

anónimo's picture

Entiendo tu razonamiento


"En cualquier caso, si el ataque requiere de acceso físico al ordenador en el momento del cifrado, tampoco me parece la mayor de las preocupaciones: doy por supuesto que en cuanto un atacante tiene acceso físico al ordenador, tiene acceso a absolutamente todo lo relativo a ese ordenador. Es decir, que en escenarios donde no se puede asegurar que el atacante no tiene acceso físico, no se puede hablar de seguridad del sistema."

Entiendo tu razonamiento... mejor dicho "lo entendia", ahora ya no, y es que si CIFRAS es para hacerlo bien, o sea que NADIE descifre, con acceso fisico, sin acceso fisico, bugs, exploits, etc, etc, etc

Supon que pones tu maximo esfuerzo en ocultar informacion, ¿de quien? podras preguntarte... ah! pues de TODOS, y si resulta que te secuestran el ordenador?

A mi me paso hace tiempo algo parecido y lo que crei seguro no lo estaba, por eso hoy confio mi seguridad en mis programas, y estoy mas seguro, por que no solo programo los algoritmos sino que imagino escenarios posibles de un atacante AL MARGEN del algoritmo... y ahi es donde esta el error, por ejemplo la clave en memoria es un error BASICO y no entiendo como lo pudieron cometer... pero incluso la informacion del algoritmo es fundamental, asi como el metodo de apertura-cierre de los ficheros ¿usan proyecciones en memoria? ¿hacen copias y las renombran? ¿ocultan datos como fecha de creacion y nombre del fichero? ¿tienen en cuenta los padding? ¿usan reitaraciones en las llamadas a las funciones repitiendo el mismo puntero una y otra vez? ¿apaga el ordenador despues de cifrar?

Estos son algunos de los problemas accesorios, pero tal vez el mas grande sea un keylogger o dumper, por eso creemos que el mejor metodo es hardware cerrado (concepto imposible por cierto) que evite dumpers.

Naturalmente si el programa se ejecuta en Windows ... que susto!

saludos

anónimo's picture

No me lo puedo creer…


No se, a lo mejor peco de ingenuidad... En mi opinión esto es una putada, si yo cifro un unidad de disco por que tengo información confidencial y resulta que se puede descifrar con mucha facilidad, la verdad para que me sirve el cifrado? Y entiendo que hay que poner políticas de acceso, vale, pero que pasa si se lo llevan? Y me refiero al disco, claro!! Para evitarlo tendré que hacer un agujero de 1 metro x 1 metro y llenarlo de hormigón armado? ¡Hombre! Esto es una cagada en toda regla que se debería evitar a toda costa.

Un cordial saludo.

anónimo's picture

Estoy con vosotros


Esto es lamentable. Si se cifra es para que aunque secuestren tu ordenador la info no sea accesible de ninguna manera. Y ahora nos enteramos de que hasta TrueCrypt cae en un error de principiantes.

¿Qué nos queda? ¿Hardware? ¿Y cómo me aseguro de que no tiene puertas traseras o fallos no publicados?

De pena, amigos, de pena...

anónimo's picture

¿como crees que hacemos nosotros?


¿Qué nos queda? ¿Hardware? ¿Y cómo me aseguro de que no tiene puertas traseras o fallos no publicados?

Buen pregunta sin respuesta.

Nosotros hace ya 3 años que realizamos nuestra propias implementaciones de algoritmos publicos "presuntamente" seguros, pero no somos criptoanalistas ¿quien nos asegura que no hay ataques viables?, pero por lo menos nos libramos de puertas traseras y sobre todo una mejor implementacion de la programacion, de hecho el problema del volcado RAM ya lo habiamos tenido en cuenta antes de que esta noticia saliera, no tanto por haberlo probado nosotros si no como un posible escenario, que ahora se confirma gracias a esta noticia de Kriptopolis; pero insisto que hay mas ataques factibles, incluso en caso de "emergencia" donde el apagado del ordenador es vital.

Sobre lo que mencionas del hardware tienes toda la razon, de hecho es el siguiente paso en el que estoy centrando mi entusiasmo pero aqui hablamos de inversion, ya que hacer dispositivos conectables al USB e independientes del teclado requiere dinero, ademas de conocimientos.

saludos.

anónimo's picture

¿Error de principiante?


No sé si lo dices por el hecho de que la clave se quede en memoria demasíado tiempo (que sí es un error evitable) o por el hecho de que, en el momento de cifrar, esté en memoria (que, al menos hasta donde yo sé, es necesario para poder realizar el cifrado).

Y por cierto, para el que preguntaba qué pasa si se llevan el disco, este ataque no permite a quien te haya robado el disco descifrar nada (a menos que te haya robado el ordenador encendido, en una sesión en la que has realizado el cifrado, y con el margen de tiempo suficientemente corto para que la clave aún esté en memoria).