¿Cómo conocería un certificado / clave privada si lo extrajera de la RAM? O lo harías?

6

Relacionado con, por supuesto, la vulnerabilidad del corazón , he estado leyendo las noticias sobre el peor escenario para este ataque, que es la extracción. de la clave privada SSL, porque, por supuesto, esto permitiría al atacante descifrar todo el tráfico hacia y desde el servidor comprometido, incluyendo [probablemente, dependiendo de la confidencialidad directa] cualquier tráfico que haya sido capturado y almacenado en algún lugar.

Esto me hizo pensar, asumiendo el peor de los casos, que su servidor vulnerable Heartbleed se había hecho eco de la memoria que contenía su clave privada ... ¿cómo podría el atacante diferenciarlo de otros contenidos de la memoria, o memoria no inicializada, o qué? ¿Tienes? ¿Hay un encabezado / pie de página, o un patrón revelador en los datos clave en sí? Sé que algunos formularios de clave RSA (PEM / base64) tienen encabezados / pies de página en el archivo ( -----BEGIN FOO BAR KEY----- y -----END FOO BAR KEY----- ), aunque tengo problemas para imaginar esas cadenas cargadas en la memoria. ¿Se puede regalar por tener algo reconocible con un puntero?

No parece ser algo que se pueda hacer con fuerza bruta (al probar cada combinación de X bits de contenido de memoria contra 64 KB de memoria parece que generaría un gran número de permutaciones astronómicas).

Entonces, ¿cómo se hace? ¿Cómo se reconoce una clave criptográfica en la memoria como una clave criptográfica? Y en una pregunta relacionada, ¿es la respuesta diferente o la misma para una clave criptográfica simétrica? (como el que podría extraer con un ataque de arranque en frío contra un sistema que usa cifrado de disco completo, por ejemplo).

    
pregunta HopelessN00b 11.04.2014 - 03:39
fuente

3 respuestas

12

Sí. La mayoría de las claves privadas tienen un formato fácilmente identificable.

Si se dice que una clave privada RSA generada con openssl, tienen un formato específico, por ejemplo, siempre comenzará con los mismos tres bytes, dependiendo del tamaño de la clave:

30 82 01 (for 768 bit key or MIIB in base64)
30 82 02 (for 1024 bit key or MIIC in base64),
30 82 04 (for 2048 bit key or MIIE in base64),  
30 82 09 (for 4096 bit key or MIIJ in base64).

También hay otros tipos de formatos en los que se puede almacenar la clave privada.

Puede probar esto usted mismo con openssl usando los comandos: openssl genrsa 1024 (1024 significa una clave de 1024 bits para ver la clave en su representación de base64). )

Para obtener más documentación sobre el formato, consulte esta respuesta de StackOverflow: ¿Dónde puedo encontrar documentación sobre el formato de un público de RSA? ¿llave?

    
respondido por el dr jimbob 11.04.2014 - 03:43
fuente
2

Como un addendum a la respuesta del dr jimbob:
Hay utilidades que buscan estos patrones e intentan extraer claves de esa manera.

Descargo de responsabilidad: no he probado ninguna de estas utilidades. Esta publicación es solo una versión mejorada de los enlaces publicados por el usuario "void-star" en HN. (Ver abajo).

Lectura adicional

respondido por el StackzOfZtuff 22.06.2016 - 14:56
fuente
0

Como una adición (nother) a StackzOfZtuff y las respuestas del dr jimbob

el Adi Shamir et al. el papel que se esconde y esconde con las claves almacenadas tiene un enfoque muy diferente al de buscar encabezados

El enfoque de Shamir se basa en comparar bloques de datos en la cadena de memoria completa (es decir, volcar todo el contenido de la memoria / disco como una cadena) y ver si están relacionados matemáticamente con una clave pública conocida anteriormente.

Para buscar claves donde no haya una clave pública conocida anteriormente, se realizó una comprobación para verificar la entropía de los datos.

  

Ya que sabemos que los datos clave tienen más entropía que los datos no clave, de una manera   para localizar una clave es dividir los datos en pequeñas secciones, medir la entropía   de cada sección y muestra los lugares donde hay una entropía particularmente alta

Debido a que las claves son aleatoriamente intencionadas, estos datos se destacan en un contexto de datos que no son tan aleatorios. Este ataque tiene la ventaja de que debería ser posible localizar cualquier clave criptográfica.

  

Nuestras técnicas parecen ser aplicables a una amplia variedad de otras claves públicas   esquemas, además del esquema RSA.

Como señaló el Dr. Jimbob, Tobias Klein tomó la decisión de buscar los encabezados

  

A continuación se muestra la representación hexadecimal de esta sintaxis ASN.1:
  30 82 ?? ?? - SECUENCIA (30 82), longitud de la SECUENCIA (?? ??)
  30 82 ?? ?? - SECUENCIA (30 82), longitud de la SECUENCIA (???)

     

Como todos los certificados deben estar representados en esta sintaxis, tenemos un patrón que buscar.

Con el cifrado completo del disco, ya no podrá buscar datos aleatorios en el disco, porque todo sería aleatorio. Además, ya no podrá buscar encabezados porque estarán cifrados.

Sin embargo, una vez que se arranca la máquina, sería posible leer las claves directamente de la memoria mediante cualquiera de estas técnicas. Esto es aún más fácil para una VM (consulte mi respuesta aquí )

    
respondido por el Michael B 22.06.2016 - 15:22
fuente

Lea otras preguntas en las etiquetas