Muy buenas a todos!

Esta semana vuelvo con el último proyecto del año. Por raro que pueda sonar, no se trata de ninguna herramienta ofensiva ni orientada al hacking. Esta pequeña tool bautizada como FakeDataGen, nos servirá para crear cuentas falsas totalmente legítimas, con el objetivo de comprobar la capacidad de los «DLP» instalados en un cliente.


Una de las cosas que más me gustan de las operaciones de Red Team, es la cantidad de palos que podemos llegar a tocar. Existen tantísimas tecnologías, que es imposible aburrirse con ellas.

Recientemente, me tocó luchar contra un enemigo nuevo: el Data Loss Prevention o «DLP» para los amigos. Esta tecnología prohíbe al usuario poder exfiltrar información al exterior, bien sea por correo electrónico, unidades USB, vía web (wetransfer, dropbox, one/google drive y un larguísimo etcétera.

Anteriormente, ya había conseguido deshabilitar este tipo de contramedidas con bastante facilidad en la mayoría de las ocasiones. Pero esta vez, el juego era diferente. En esta ocasión, mi objetivo era comprobar mediante «prueba y error» la información que podía pasar a través del DLP.

Hasta aquí, ningún problema (o eso pensaba yo), existen multitud de generadores de datos y cuentas aleatorios en internet. Es tan sencillo como buscar uno y ya, no?

Pues resulta ser que no es tan sencillo. La información que generan la mayoría de estos portales web, no encajaba con mis necesidades. Muchos de ellos, solo generan cuentas para los Estados Unidos o incluso, son simples datos pseudo-aleatorios sin ningún tipo de sentido.

Así que como en muchas otras ocasiones, no me quedó más remedio que cumplir con aquello de «si quieres algo bien hecho, hazlo tú mismo». Y de esta forma, nació la herramienta que os traigo hoy, FakeDataGen 😋

En primer lugar, os dejo por aquí el enlace del proyecto en GitHub: https://github.com/JoelGMSec/FakeDataGen

Ahora, vamos a ver en qué consiste todo esto. Primero os explicaré la parte teórica y por último pasaremos a la práctica. Ya que la segunda es bastante sencilla, por una vez, me centraré un poco más en la primera.

Antes de comenzar con la herramienta, pensé en los datos que necesitaría generar de forma aleatoria. Y se me ocurrieron los siguientes:

• Nombre
• Apellidos
• Correo electrónico
• Fecha de nacimiento
• DNI
• Teléfono fijo
• Teléfono móvil
• Ciudad
• Número de la Seguridad Social
• Tarjeta de crédito
• Fecha de caducidad
• CVV
• Número de cuenta (IBAN)

Evidentemente, podríamos generar muchos más, pero con eso debería bastar para hacer saltar las alarmas en cualquier sitio. Adicionalmente, podemos usar estos mismos datos para crear cuentas falsas, para qué sé yo, cualquier cuenta que podamos necesitar en nuestras auditorías.

Si has llegado hasta aquí, supongo que pensarás: Vale, pero qué diferencia hay entre esto y un generador online? Dónde está la trampa?

Básicamente, la diferencia entre esta herramienta y cualquier otro generador, está en que los datos generados son totalmente válidos. Qué quiere decir esto? Es bastante difícil (técnicamente hablando), sobre todo para alguien inexperto en el campo de las matemáticas como yo, pero intentaré explicarlo de la forma más sencilla posible.

La mayoría de los datos mencionados anteriormente, son sencillos de generar. Buscamos los 100 nombres más comunes de España (50 de hombres y 50 de mujeres), los 100 apellidos más comunes y con eso ya tenemos los dos primeros campos.

Para el correo electrónico, más de lo mismo. Sumamos el nombre al primer apellido seguido de un punto, buscamos 5 proveedores (gmail, hotmail, protonmail..) y otro campo más. En el caso de las ciudades, repetimos el primer escenario y listo también.

Los números de teléfono no tienen mucho misterio, los móviles empiezan por 6 (aunque algunos ya lo hacen por 7) y los fijos por 9N (donde N es el número de la provincia del 1 al 9). Con esto ya tendríamos dos campos más, además de la fecha de caducidad de la tarjeta o el CVV (que simplemente son números aleatorios).

Ahora bien, qué sucede con el DNI, la tarjeta de crédito, el número de la seguridad social o el IBAN? Pues que estos datos necesitan cumplir unas «leyes matemáticas» para ser válidos. Se trata de diferentes algoritmos, que calculan que el número generado es correcto de una forma u otra.

Entre otros, tenemos el dígito de control, el Mod97 o el algoritmo de Luhn por mencionar algunos de los cálculos que se utilizan en esta herramienta.

Estos controles suelen ser habituales en este tipo de datos por dos motivos: El primero es que nadie pueda equivocarse al escribir su número de cuenta o de tarjeta de crédito. El segundo, comprobar la «veracidad» de estos datos, para asegurarse de que no se tratan de elementos aleatorios.

Os imagináis la cantidad de números de cuenta que puede tratar una entidad bancaria o cualquier empresa que trabaje con estos datos en un día? Es totalmente imprescindible que no haya errores tipográficos al introducir los mismos en una base de datos, por poner un ejemplo.

Una vez resuelto el misterio de los algoritmos (no entraré en cada uno de ellos, ya que alargaría muchísimo este post), ya podemos ponernos manos a la obra 😄

En primer lugar, clonaremos la herramienta como de costumbre con el siguiente comando:

git clone https://github.com/JoelGMSec/FakeDataGen

Una vez clonada la herramienta, instalaremos las dependencias de la siguiente forma:

pip3 install -r requirements.txt

Con estos dos simples comandos, ya tendríamos todo listo para utilizar la herramienta. Como siempre suelo hacer, primero consultaremos la ayuda para ver los diferentes parámetros que soporta la tool en cuestión:

./FakeDataGen.py -h

Tal y como podemos ver en la imagen anterior, el uso de la misma es completamente trivial. En otros casos, me limitaría a explicar cada una de las opciones que tenemos, pero esta vez, lo haré con imágenes.

En primer lugar, siempre tendremos que indicar el número de registros que queremos generar, utilizando el parámetro number:

./FakeDataGen.py -n 10

Si todo ha salido bien, el programa nos mostrará en pantalla los registros que hayamos introducido, con los datos más básicos (nombre, apellidos, correo y fecha de nacimiento). En principio, con esto tendríamos suficiente para crear una cuenta o un perfil en cualquier proveedor o red social.

Si queremos ir un poco más allá, generando información un poco más sensible (DNI, teléfonos, ciudad y seguridad social), utilizaremos el parámetro extended:

./FakeDataGen.py -n 10 -e

Y si por si todo esto no fuese suficiente, o bien, necesitamos comprobar qué sucede al enviar datos bancarios por algún medio, disponemos del parámetro bankdata:

./FakeDataGen.py -n 10 -b

Ahora bien, supongamos que necesitamos toda esa información en un fichero y con todos los campos mostrados anteriormente. Pues simplemente, utilizaremos el parámetro file seguido del nombre del fichero en cuestión:

./FakeDataGen.py -n 10 -f data.csv

Esto nos generará un fichero en texto plano separado por comas (CSV), que posteriormente podremos importar en un Excel, por ejemplo:

Y por último, dos opciones más. La primera nos permitirá guardar esta información en un fichero zip, utilizando el parámetro zip:

La segunda, nos permitirá ponerle contraseña al fichero generado anteriormente. Para ello, utilizaremos el parámetro password seguido de la contraseña. Finalmente, obtendremos un fichero parecido al que podemos ver a continuación:

A partir de aquí, podéis combinar todas y cada una de las posibilidades que ofrece la herramienta para obtener los datos de la forma que más os convenga.

Como conclusión final, a pesar de ser una herramienta totalmente funcional, contiene algunos fallos lógicos y relacionales (el prefijo del teléfono fijo y de la seguridad social no coinciden con la ciudad de la persona, etc..) que por ahora no pretendo solucionar.

En cualquier caso, si os animáis a resolver estos fallos o incorporar cualquier tipo de mejora en el código, no dudéis en contactar conmigo 🙂

Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.

Nos vemos en la próxima!