viernes, enero 15, 2016

Volcar credenciales del proceso KeePass con Meterpreter

Hace poco estuve analizando el gestor de contraseñas KeePass, en su versión para Windows para una situación de pentesting que podría darse en una auditoría interna. Imagina la situación en la que llegas a comprometer una máquina y tras buscar todas las passwords en el sistema, y dumpear todo lo posible con Mimikatz te das cuenta de que en la máquina hay un gestor de contraseñas que puede darte credenciales de sistemas remotos más que jugosas. Imaginando esa situación en la que un atacante compromete una máquina y tiene acceso a los procesos que se ejecutan en la máquina, podríamos esperar fácilmente a que el proceso KeePass se encuentre en ejecución.

Figura 1: Volcar credenciales del proceso de KeePass con Meterpreter

En este entorno es posible robarle las contraseñas de dos formas. La primera tan simple como robar los ficheros y esperar que se teclee en algún momento en esa máquina la master password, pero si el proceso ya está en ejecución cuando lleguemos podríamos rascar las passwords incluso de la memoria RAM.

En primer lugar realicé sin más un volcado del proceso simulando previamente una intrusión con una Meterpreter. Tras tomar el control de la máquina y ejecutando un “ps” se puede obtener un listado de los procesos que se ejecutan en el equipo. Llaman la atención varias, pero poniendo los ojos sobre el KeePass.exe se pueden hacer varias cosas. Lo primero es hablar del script process_memdump, con el que se puede conseguir un volcado del proceso y almacenarlo en un fichero. Metasploit almacena en el home del usuario la información obtenida. En este caso la ruta sería:
/root/.msf4/logs/scripts/process_memdump.
Desde el punto de vista del usuario de KeePass podemos utilizarlo de diferentes formas. La forma más segura es la utilización de los atajos que el gestor proporciona:
• CTRL+B nos permite copiar el usuario.
• CTRL+C nos permite copiar la contraseña.
• CTRL+V permite copiar y pegar el usuario y contraseña en el formulario siempre y cuando tengamos a este como segunda ventana activa después del propio KeePasss.
El gestor proporciona unos segundos en los que la información queda almacenada antes de ser eliminada del portapapeles. Podemos considerar esto como un uso seguro. Una de las cosas que los usuarios de KeePass suelen utilizar es el botón “de los puntos suspensivos”. Este botón permite visualizar la contraseña en plano, lo cual a priori puede suponer una acción sin más.

Figura 2: KeePass en Widnows

En la imagen anterior se puede visualizar como la contraseña se ve en texto plano. Esto es gracias a que se pulsa el botón “de los tres puntos suspensivos”. En ese preciso instante la contraseña se encuentra alojada en memoria, en texto plano y dentro del ámbito del proceso. Debido a esto, si realizamos un volcado de memoria del proceso en cuestión podremos tener acceso a la contraseña. Esto se puede hacer con Metasploit de forma sencilla, y es una buena práctica para todo pentester que llega a una máquina el buscar en todos los procesos posibles credenciales de esta forma, ya que para que los procesos se autentiquen en sistemas necesitan contar con los hashes de las credenciales, con las passwords o con identificadores de sesión válidos.

Figura 3: Volcado de memoria de un proceso con Meterpreter

Al realizar la siguiente búsqueda sobre el volcado del proceso empezamos a visualizar información de la entrada en el gestor. Podemos ver información como el nombre de usuario, la dirección URL dónde aplicar contraseña o el nombre de la entrada. La contraseña se encuentra oculta mediante “*”.

Figura 4: Credenciales en el volcado de memoria

Si el usuario no utiliza el botón “de los puntos suspensivos” no parece haber leak o desprotección temporal a simple vista, por lo que parece que la password no es recuperada hasta ese instante. En el caso de que el usuario pulse dicho botón, el valor en plano de la contraseña se aloja en la RAM. Es cierto que no se almacena junto al resto de información, pero está dentro del proceso, tal y como puede visualizarse en la siguiente imagen.

Figura 5: Extracción de credenciales del fichero de volcado de memoria de Keepass

Es cierto que la contraseña se muestra repetidas veces y que no hay una referencia por la que realizar la búsqueda, pero se encuentra. Si se lleva a cabo la prueba sin haber utilizado el botón de mostrar la contraseña, no se almacenaría la contraseña en plano. Ha sido una prueba curiosa. Ni mucho menos quiere decir que KeePass sea inseguro, es aconsejable utilizar un gestor de contraseñas como éste - además de poner segundos factores de autenticación a todas tus identidades -, pero en caso de que te encuentre en una auditoría controlando un equipo en el que está este proceso activo, hacer un volcado de la memoria RAM del mismo te puede dar información sensible.

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking" y “Pentesting con Powershell

12 comentarios:

  1. Buenas,
    Muchas gracias por la info Pablo!
    Saludos Chema! Que tengas un buen dia! ;-)

    ResponderEliminar
  2. Buenas,
    Muchas gracias por la info Pablo!
    Saludos Chema! Que tengas un buen dia! ;-)

    ResponderEliminar
  3. En cuanto a Keepass, también está por ahí Keefarce (https://github.com/denandz/KeeFarce) que en teoría recupera credenciales de la memoria mediante inyección de DLL's. No lo he probado aún, pero no hace mención al botón de mostrar la contraseña en claro, con lo que si es así se convierte en más peligroso.

    Sobre las contraseñas en claro al mostrarlas en el control listview de la herramienta, en favor de Keepass decir que lo menciona en su documentación (http://keepass.info/help/base/security.html#secmemprot)

    ResponderEliminar
  4. Esto es viejuno-viejuno... pero mira te ha dado para un post...

    ResponderEliminar
  5. Ya probaron keeferce? dumpea todo a un xml

    ResponderEliminar
  6. No termino de comprender que proceso mental lleva a alguien a publicar como Anónimo un comentario como ese.

    Si no te gusta el blog, no lo leas, es fácil. Estoy seguro que el artículo ha despertado la curiosidad de mucha gente que hoy estarán buscando información sobre meterpreter, gestores de contraseñas, dumps de RAM.....
    Si estás por encima de todo esto no pierdas el tiempo en leer, y mucho menos en comentar. Céntrate en tus habilidades y sácales provecho, y si tienes un blog puedes compartirlo con nosotros, seguramente estaremos dispuestos a leerlo y hacer crítica constructiva.

    Saludos.


    ResponderEliminar
  7. Muy bueno. Muchas Gracias. Y preguntar porque no habeis comentado nada sobre la muerte del fundador de Debian, Ian Murdock? Sois alergicos a Linux?. Un saludo

    ResponderEliminar
  8. Muy bueno!! y al que comento sobre Debia: Che compiate el blog antes que lo de de baja... (yo ya me quede con mi copia personal)

    ResponderEliminar
  9. Hola Padawan. A que te refieres?. Un saludo.

    ResponderEliminar
  10. Padawn, te refieres a http://ianmurdock.com/ ?

    ResponderEliminar
  11. Yo utilizo Keepass en modo portable. Lo que hice fue cambiar el nombre del ejecutable, con lo que en la lista de procesos en ejecución, aparece con ese otro nombre. ¿Es buena medida de seguridad para el caso expuesto o se puede saltar?
    Un saludo

    ResponderEliminar
  12. Una duda: si además de clave utilizamos un fichero, ¿sigue existiendo la posibilidad de obtener acceso a la bbdd?

    ResponderEliminar