Muy buenas a todos!
Esta semana os traigo una pequeña herramienta llamada LeakSearch, que nos permitirá buscar contraseñas expuestas en Internet a través de repositorios públicos. Además, nos facilitará la búsqueda y el filtrado de las mismas, tanto en estos repositorios, como en ficheros locales.
Durante los ejercicios de Red Team, existen diferentes formas de obtener acceso dentro de una organización. Las más comunes son las campañas de phishing, las vulnerabilidades en aplicaciones web/móvil expuestas a internet o incluso, a través de una intrusión física (colocando un implante malicioso, como una Raspberry Pi).
En cualquier caso, todo vale con tal de obtener acceso al dominio y poder ejecutar nuestro ejercicio con éxito. Ahora bien, si queremos ser todavía más sigilosos o más considerados a nivel de seguridad operacional (OPSEC), no debemos descartar los mecanismos legítimos de acceso de la compañía en cuestión.
Es decir, si todos los empleados entran utilizando una VPN, eso siempre será menos sospechoso que entrar a través de un Tomcat vulnerable expuesto a través del perímetro. Por eso mismo, otro punto de entrada muy utilizado en los ejercicios de Red Team, es el acceso a través de VPN utilizando credenciales comprometidas que han sido publicadas en Internet.
Ahora bien, cómo podemos acceder a una VPN en un ejercicio de Red Team? Pues es bastante más sencillo de lo que puede parecer. En primer lugar, necesitaremos credenciales (que previamente habremos obtenido a través de Internet). Actualmente, existen todo tipo de plataformas, foros y torrents donde encontrar estas credenciales.
Es importante mencionar que según las leyes de tu país, la custodia de credenciales comprometidas en tu disco duro (o incluso en la nube) puede considerarse un delito.
A partir de este punto, lo único que tendríamos que hacer es comprobar si existen credenciales expuestas de la organización que estamos auditando. Posteriormente, deberíamos comprobar si todavía son válidas, y en caso de no serlo, estudiar si existe algún patrón (como nombre-de-la-empresa-año) e intentar crear nuestras propias contraseñas utilizando el mismo.
Finalmente, si conseguimos unas credenciales válidas, solo faltará averiguar si la cuenta está configurada con un segundo factor de autenticación, o por el contrario, hemos conseguido entrar de la forma más legítima posible 😄
Hace ya un tiempo, publiqué una entrada hablando de una herramienta llamada Karma. Esta herramienta nos permitía buscar estas credenciales leakeadas a través de un servicio en la red TOR llamado «pwndb».
Desgraciadamente, este servicio dejó de funcionar y la herramienta ha quedado completamente inservible. Por ese mismo motivo, decidí crear mi propia herramienta, haciendo uso de ProxyNova, que es bastante parecido al anterior.
Esta base de datos llamada COMB (Combination Of Many Breaches), dispone de nada menos que 3.2 billones de credenciales para su consulta a través de su página web. Probablemente, sean menos que las que se encontraban en el otro servicio, pero nos tendremos que conformar con esto.
A continuación, os dejo el enlace del proyecto en GitHub: LeakSearch – Search & Parse Password Leaks
Ahora que ya conocemos la teoría, pasemos a la parte práctica 😋
En primer lugar, y como suele ser habitual, descargaremos el proyecto de GitHub utilizando el siguiente comando:
git clone https://github.com/JoelGMSec/LeakSearch cd LeakSearch pip3 install -r requirements.txt
Ahora que ya tenemos descargada la herramienta y hemos instalado sus dependencias, veamos que nos ofrece la ayuda:
python3 LeakSearch.py -h
Como podemos ver en la imagen anterior, el uso de la herramienta es bastante trivial. A continuación os explicaré que hace cada parámetro:
-h muestra la ayuda en pantalla
-d nos permitirá seleccionar la DB (por defecto, ProxyNova)
-k para buscar por palabra clave (usuario, dominio o contraseña)
-n nos mostrará el número de resultados que le indiquemos
-o nos permitirá guardar los resultados en JSON o TXT
-p para utilizar un proxy de tipo HTTP/S
Ahora que ya sabemos cómo funciona, vamos a ponerlo en práctica con el siguiente comando:
python3 LeakSearch.py -k passw0rd -n 10
Como podéis ver en la imagen anterior, lo que hemos hecho ha sido buscar por la palabra «passw0rd» (tanto como usuario, como dominio, como contraseña) a través de Internet, utilizando la base de datos de ProxyNova. En este caso, se han encontrado 1757 credenciales diferentes. La herramienta ha seleccionado las 10 primeras y las ha mostrado por consola.
Si quisiéramos guardar estos 10 resultados en un fichero de texto o JSON, solo deberíamos añadir al final el parámetro -o seguido del nombre del fichero con su extensión correspondiente.
Ahora bien, si disponemos de un fichero de credenciales en local (en TXT o JSON), también podemos hacer el mismo tipo de búsqueda que en el caso anterior. Para este ejemplo, utilizaré la herramienta FakeDataGen (de la que ya hablé en este post) para generar cuentas de correo aleatorias. Posteriormente, también añadiré una contraseña aleatoria, que generaré con este código en bash:
tr -dc 'A-Za-z0-9!@' < /dev/urandom | head -c 14 ; echo
Una vez creado el fichero, tendríamos algo parecido a esto:
Por último, solo nos quedaría realizar la búsqueda en local con el siguiente comando:
python3 LeakSearch.py -k com -n 10 -d creds.txt
De esta forma, podremos buscar y filtrar contraseñas en ficheros muy grandes de una forma cómoda, fácil y sencilla. Si necesitas aumentar la velocidad de búsqueda, te recomiendo que modifiques el blocksize por un tamaño más grande. Si utilizas uno demasiado grande, tendrás problemas al leer ficheros pequeños, así que ten cuidado con esto!
Antes de terminar con el post, es importante tener en cuenta que la aplicación está limitada al servicio de un tercero, por lo que podría suceder lo mismo que ya pasó con Karma. En cualquier caso, intentaré añadir nuevos motores de búsqueda en el futuro.
Como suele ser habitual, la herramienta se encuentra en fase «beta» y es probable que se produzcan fallos en algunos sistemas y configuraciones específicas. Si encuentras alguno, no dudes en hacérmelo saber 🙂
Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.
Nos vemos en la próxima!