24 septiembre 2010

Exportando claves privadas marcadas como no-exportables con Jailbreak

Que no os confunda el nombre de la herramienta de la que os vamos a hablar en este post. Aquí no encontrarás nada de iPhone, iPad o iPod, ni como cargar aplicaciones no oficiales ni demás. Os vamos a hablar de certificados digitales, y de como poder exportar la clave privada de los certificados cuando esta ha sido marcada como no exportable en el momento de su generación.

Si nos remontamos a nuestro primer post aquí en Security By Default, FNMT: Insecure by default, Yago nos presentó una herramienta programada por él mismo, CertDump, encargada de buscar en nuestro contenedor criptográfico certificados cuya clave privada fuese exportable y exportarla junto con su certificado en un fichero PKCS#12 sin contraseña (pudiendo así instalar el certificado en cualquier otro sistema).

Pues bien, la herramienta Jailbreak de iSEC Partners es capaz de realizar justamente la tarea complementaria: buscar en nuestro contenedor criptográfico certificados cuya clave privada fuese marcada como NO exportable y exportar seguidamente el certificado incluyendo su clave privada en un fichero PFX.

La técnica que utiliza consiste en el parcheo del Crypto Service Provider para deshabilitar la comprobación sobre los certificados sobre si son o no exportables. La clave privada se encuentra en el propio sistema de ficheros, y se podrá obtener siempre y cuando este no se encuentra cifrado o dicha clave se haya almacenado en cualquier solución "hardware" como por ejemplo una smartcard.

Dentro del fichero comprimido que descargamos nos encontraremos una .dll llamada jb_dll.dll, la cual se inyectará en el proceso del CSP. En el momento de la comprobación sobre si las claves privadas de nuestros certificados son exportables o no, la librería aplicará el parche, y durante ese proceso los certificados con claves privadas no exportables podrán exportarse satisfactoriamente.

Ahora bien, esta técnica no es para nada actual (actualmente la versión más actual de Jailbreak es la 3.4, pero incluso podemos comprobar como en el servidor de iSEC Partners tenemos la 2.0, del 2007). Es más, incluso fué aprovechada por varios creadores de malware para su difusión mediante bichos que eran capaces de exportar los certificados incluyendo sus claves privadas y enviarlos a servidores externos. La DLL por tanto pasó a considerarse como peligrosa por las firmas de Antivirus, de ahí que os pueda saltar el aviso de que se trate de una backdoor. En este enlace tenéis el informe de VirusTotal sobre jb_dll.dll.

Antes de comenzar, indicar unos pre-requisitos básicos que tienen que cumplirse para que esta herramienta realice su trabajo correctamente:
  • jailbreak.exe, jbstore.exe y jbcsp.exe funcionan bajo:
    • Windows XP SP2 x86
    • Window 2003 SP1 x86
    • Windows Vista RTM & SP1 x86
    • Windows 7 x86
  • En las versiones x64 de Windows Vista y Windows 7 únicamente funcionará la aplicación jbstore.exe
  • Como comentamos anteriormente, para poder exportar la clave privada, esta debe encontrarse en el sistema de ficheros de la máquina. Dicho sistema de ficheros no debe encontrarse cifrado y necesitamos contar con permisos de acceso sobre él.
Comprobación de que el certificado tiene marcada la clave privada como no exportable

Mediante la consola de gestión de Microsoft (Microsoft Management Console, mmc.exe) añadimos los complementos referentes a los certificados:





Hacemos clic dos veces en el certificado del cual queremos exportar su clave privada, comprobando que se dispone de ella en el sistema de ficheros:


Seguidamente, con el certificado seleccionado, hacemos clic con el botón derecho -> Todas las tareas -> Exportar...


y comprobamos como la casilla de "Exportar la clave privada" se encuentra deshabilitada en el siguiente paso del Asistente:


Entra en juego el Jailbreak.

Utilizando Jailbreak

Dentro del .zip descargado nos encontraremos los siguientes ficheros, que describiremos a continuación:


  1. README.txt: Información sobre la utilización de cada uno de los ejecutables de los que se compone la herramienta.

  2. jb_dll.dll: DLL que realizará el trabajo del parcheo del CSP para marcar como exportables las claves privadas de los certificados.

  3. jailbreak.exe y jailbreak.msc: Programa principal que requiere interacción por parte del usuario que lo ejecute.
  4. Tras la ejecución de jailbreak.exe y el correspondiente parcheo por parte de la DLL, se invocará una instancia de la consola de gestión de Microsoft (Microsoft Management Console, mmc.exe) con los complementos referentes a los certificados del sistema ya cargados (vista definida mediante el fichero jailbreak.msc incluido en el ZIP de la herramienta). Una vez ahí, podremos acceder a los certificados y realizar la tarea de exportación, en la que se comprueba como la casilla de "Exportar la clave privada" se encuentra esta vez habilitada.
    La marcamos, introducimos la contraseña que queramos y el nombre del fichero para exportar, y listo.
    Tendremos un fichero .pfx que contendrá el certificado y su clave privada, listo para distribuir y utilizar...como queramos.
  5. jbstore.exe: JBStore es una aplicación que se ejecuta por línea de comandos y que exporta todos los certificados del almacen "Personal" sin requerir la interactuación con la Microsoft Management Console como para el caso de la aplicación Jailbreak.
  6. Es posible seleccionar tanto el almacen “Personal” del usuario actual o del equipo local indicándolo como parámetro (/user o /computer respectivamente):
  7. jbcsp.exe: jbcsp es una aplicación que se ejecuta por línea de comandos y que exporta las claves que se encuentran dentro del CSP (Cryptographic Service Provider) pero que no están asociadas con un certificado.
Como veis, una tarea sencilla, limpia, ideal para procesos de backup o migraciones... Eso sí, esta aplicación debería formar parte de nuestra colección de "Herramientas que necesito subir a TU ordenador".

13 comments :

Miguel dijo...

He leído el otro artículo que escribisteis en el 2008 y me alucina al leer el artículo del 20 minutos como la gente entiende todo al revés.

Mi pregunta sobre esta herramienta, ¿exportaría claves privadas protegidas con una clave? Imagino que no, no? Cuales serían las recomendaciones para evitar estos problemas? Siempre proteger las claves privadas con clave, ¿verdad?

José A. Guasch dijo...

Buenas @Miguel, digamos que la recomendación estrella sería no conservar la clave privada en nuestro sistema de ficheros sin haber sido protegido previamente (con cualquier solución de cifrado) o recurrir a HSMs (Hardware Security Modules)

xuf dijo...

Hola
Curiosamente llevo un par de días peleándome con un key blob para hacer lo mismo pero de forma manual. En lugar de parchear el CSP, uso la directiva del sistema CryptUnprotectData para acceder a la clave privada.

Os cuento mis problemas a ver si me podéis dar una pista. De momento no soy capaz de hacer la pregunta correcta a Google!

Para empezar fácil, he creado una clave/certificado y que se almacena en el fichero correspondiente. En el mismo ordenador y con el mismo usuario ejecuto un script que extraer la clave privada del blob, que está encriptada, y la desencripta con la llamada del sistema anterior. Si la clave encriptada está corrupta o incompleta CryptUnprotectData da un error o pide el password, por lo que estoy seguro que está se ejecuta bien. Lo que me devuelve es en teoría un MS PRIVATEKEYBLOB pero aquí es donde empiezan los problemas. Si examino el resultado no tiene la estructura esperada (http://msdn.microsoft.com/en-us/library/aa387401%28VS.85%29.aspx)

En mi caso tengo un fichero que empieza:

x52 R x53 S x41 A x32 2
x88 ê x00 x00 x00
x00 x04 ♦ x00 x00
x7F ⌂ x00 x00 x00
x01 ☺ x00 x01 ☺ x00
xD1 Ð xF4 ¶ x55 U x1D

con lo que no es ni un blobheader ni rsapubkey (ya que el bitlen no puede ser x88x00)
Alguna idea de que puedo estar haciendo mal?
Saludos

Fae6161 dijo...

Hola José:
Te agradezco mucho la obtención de este programa, pues me a evitado muchos trastornos, es estupendo, fiable y comprobada su efectividad.
Muchas gracias
Frank

Ale dijo...

Me ha sido de gran utilidad, he conseguido exportar mi certificado sin ninguna dificultad siguiendo vuestras instrucciones. Gracias!

Eduardo Martinez dijo...

no funciona el enlace para descargar la herramienta donde puedo conserguirla

Eduardo Martinez dijo...

Gracias de antemano

Eduardo Martinez dijo...

este link funciona para descaragar la herramienta

https://www.isecpartners.com/tools/application-security/jailbreak.aspx

checovsky dijo...

hola buenas. oye tengo un problema. quiero configurar un correo corporativo y tengo entendido que necesito el certificado en pfx pero no me deja marcar esa opción. ya baje el programa que recomiendas pero tampoco se me pone como disponible. sabras alguna otra solución.

Kamps Tepes dijo...

que herramienta de este tipo me recomiendan para windows 8 de 64 bits

Eva dijo...

Pues a mí se me descarga el ZIP, pero no tengo dentro todos los ficheros que ponéis aquí. Sólo tengo readme.txt y el jailbreak.msc... y lo descargo de la página que has puesto. Jooooooooooo...........

Samuel Ezra Cohen dijo...

Esto NO FUNCIONA!!! He perdido toda la tarde intentandolo.

MaryVlad dijo...

Buenas. El problema que yo tengo es que marqué la casilla de "eliminar la clave privada si la exportación se realiza correctamente", por lo que ya no puedo firmar ningún documento. Intento recuperar la clave con el programa que mencionas pero no puedo seleccionar el formano .pfx , que es el que necesito. Me aparece deshabilitada esa casilla (Te adjunto una captura de pantalla). ¿Qué podría hacer para recuperar la clave?