26 votos

La recuperación de una clave RSA de una instancia en ejecución de Apache?

He creado un par de claves RSA para un certificado SSL y almacena la clave privada en /etc/ssl/private/server.key. Por desgracia, esta era la única copia de la clave privada que tenía.

Luego de que accidentalmente se sobrescribe el archivo en el disco (sí, lo sé).

Apache está todavía en funcionamiento y sigue sirviendo peticiones SSL, que me lleva a creer que hay esperanza en la recuperación de la clave privada. (Tal vez hay un enlace simbólico en algún lugar en /proc o algo?)

Este servidor se está ejecutando Ubuntu 12.04 LTS.

39voto

Nathan Osman Puntos 1673

El ÉXITO!

Yo era capaz de recuperar la clave privada. Pero no fue fácil. Aquí es lo que usted necesita hacer:

  1. Hacer seguro de que no se reinicie el servidor o Apache. El juego es en ese punto. Que también significa asegurarse de que no hay supervisión de los servicios de reiniciar Apache.
  2. Agarra este archivo - código fuente de una herramienta que se llama passe-partout.
  3. Extraer el código fuente y ajustar la línea 9 de Makefile.main a leer:

    $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
    

    (Observe que el $(OBJS) y $(LDFLAGS) se invierte en orden.)

  4. Ejecutar ./build.sh.
  5. Agarrar el PID de Apache usando:

    service apache2 status
    
  6. Ejecutar el passe-partout comando como root:

    sudo passe-partout [PID]
    

    ...donde [PID] es el valor obtenido en el paso #5.

  7. Si el programa tiene éxito, el directorio actual tendrá un montón de claves adicionales:

    you@server:~# ls
    id_rsa-0.key  id_rsa-1.key  id_rsa-2.key
    

Si todo ha ido bien (y espero que lo hizo), una de las claves es el que usted necesita. Sin embargo, si había más de un certificado/keyfile en uso, entonces usted necesita para averiguar cuál es. Aquí es cómo hacerlo:

Primero agarra una copia del certificado que coincida con la clave firmada. Suponiendo que el archivo se denomina server.crt, ejecute el siguiente comando:

openssl x509 -noout -modulus -in server.crt | openssl md5

Esta salida será de un valor que usted tendrá que coincidir en contra de cada una de las teclas. Para cada clave, ejecute el siguiente comando:

openssl rsa -noout -modulus -in id_rsa-0.key | openssl md5

Si uno de ellos de los partidos, de que usted haya encontrado la clave.


Crédito: este artículo me señaló passe-partout.

8voto

Falcon Momot Puntos 16915

Lo más probable es que es el almacenamiento de la clave en la memoria, lo que lo hace porque necesita mantener una copia después de que las gotas de privilegios y/o descifra la clave usando una frase de contraseña suministrado.

En teoría, se podría salir de la imagen de proceso si se adjunta un depurador, aunque si están siguiendo las mejores prácticas se cifrará en contra de algo en la memoria.

Dicho esto, si sucede que todavía tiene abierta, /proc/${PID}/fd/${SOMETHING} puede ser. Si usted sobrescribió, su clave de no estar ahí, porque la sobrescritura de datos será. Si ha copiado alguna otra cosa en su lugar (o eliminado o disociados, o de forma recursiva eliminado de su directorio padre), estará allí.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: