PassGAN, como generar archivos de passwords con sample.py

  • por javier
  • 22 de Abril de 2023
None

La revolución de las redes neuronales ha dado lugar a numerosas innovaciones en el campo de la inteligencia artificial, y una de las más sorprendentes es la Generative Adversarial Network (GAN). Las GANs son un tipo de modelo generativo que consiste en dos redes neuronales enfrentadas, una generadora y otra discriminadora, que trabajan conjuntamente para producir resultados realistas y de alta calidad. En este contexto, un avance notable ha sido PassGAN, una aplicación específica de GANs diseñada para generar contraseñas.

PassGAN combina el poder de las GANs con la creciente necesidad de garantizar la seguridad en línea. Este enfoque innovador utiliza la capacidad de las GANs para aprender de grandes conjuntos de datos y generar nuevos ejemplos realistas. En el caso de PassGAN, el modelo se entrena con contraseñas reales filtradas para generar nuevas contraseñas que puedan utilizarse en ataques de fuerza bruta o para evaluar la robustez de los sistemas de seguridad.

He modificado el desarrollo original de brannondorsey por la sencilla razón de que ya estaba desactualizado y no funcionaba para versiones de CUDA y Tensorflow modernas.

Podeis descargarlo aquí: https://github.com/beta6/PassGAN

Uno de los problemas con los que me encontré al intentar entrenar diccionarios grandes fueron los requerimientos de memoria, que para más de 1.000.000.000 de passwords subían por encima de los 80GB. Después de modificar algo el código, conseguí reducirlos a la mitad. Así pues, me fué posible entrenar cerca de 4.000M de passwords del crackstation-human-only, con 10 caracteres de longitud máxima. Una vez filtrado el diccionario, mantuvo la ram durante el entrenamiento sobre los 40-50Gb.

Se puede mejorar más pero ya tocaría la parte de la implementación de la propia GAN, cosa que no quiero hacer de momento al menos.

Me pidieron que aclarara algo los parámetros a pasar para los programas de training y sample y eso voy a hacer. Empezamos por sample, que es la primera opción y que resulta más básica.

usage: sample.py [-h] --input-dir INPUT_DIR --checkpoint CHECKPOINT [--output OUTPUT] [--num-samples NUM_SAMPLES] [--batch-size BATCH_SIZE] [--seq-length SEQ_LENGTH] [--layer-dim LAYER_DIM]
sample.py: error: the following arguments are required: --input-dir/-i, --checkpoint/-c

nos encontramos con dos opciones obligatorias, --input-dir y –checkpoint, el resto quedarían con los valores por defecto. La primera, --input-dir es el directorio con los datos generados en el entrenamiento de PassGAN, vamos a poner como ejemplo el commonu11.

El checkpoint es una marca que almacena tensorflow si se lo pedimos en nuestro programa con los datos de entrenamiento, básicamente para continuar este. En este caso, nos pide el checkpoint para restaurar el último estado de PassGAN al entrenar nuestro modelo.

Le vamos a dar commonu11/checkpoints/checkpoint_195000.ckpt

sin incluir nada más. La implementación está hecha así y bueno, así la dejamos. Inicialmente busca el archivo commonu11/checkpoints/checkpoint_195000.ckpt.meta asi que nos notificará eso si escribimos mal esta parte, con un error no muy descriptivo. Siempre elegimos el checkpoint con la iteración más alta. En este caso 195000. Borré los checkpoint anteriores para liberar espacio.

Otro setting es –seq-length. Aquí no podemos dejar el valor por defecto ya que entrenamos 11 caracteres y por defecto pone 10 asi que lo ajustamos a 11.

--output es otro ajuste que podemos modificar y es el archivo de salida con las passwords.

--num-samples es el numero de passwords a generar. Ese número según necesidades.

Así pues nos queda el comando como :

python sample.py --input-dir commonu11 --checkpoint commonu11/checkpoints/checkpoint_195000.ckpt --seq-length 11 --output gpasswords.txt –num-samples 10000000

El resto de ajustes los dejamos tal cual ya que no hay modificaciones en el numero de capas ni en batch-size.

 

Una vez generado el gpasswords.txt con nuestras 10M de passwords, unimos este al diccionario original y deduplicamos este ultimo.

commonu.txt resulta de la unión de los diccionarios darkc0de+openwall+xato-net-10M que se pueden obtener de https://github.com/danielmiessler/SecLists

El comando para unir y deduplicar los diccionarios generados y el principal sería:

cat commonu.txt >> gpasswords.txt && cat gpasswords.txt | unique gpasswordsu.txt

la utilidad unique viene con john the ripper asi que tenemos que instalarlo en nuestra distro linux con

apt install john

Remarcar que la instala para root, en sbin.

Asi ya tenemos nuestro diccionario gpasswordsu.txt listo para usar directamente con john o hashcat.

Bueno, hasta aquí la primera parte de los dos artículos que pienso escribir sobre PassGAN.

En breve, os enseñaré como entrenar vuestros diccionarios con PassGAN/train.py

Espero que os haya gustado el artículo. En breve más.

Cualquier cosa, comentario. Saludos

NOTA: Con un batch-size alto (2048 p.ej.) la generación se acelera bastante sin perder precisión (con suficiente memoria)

NOTA: No es necesario entrenar un diccionario propio por regla general ya que se incluyen 3 o 4 entrenamientos ya realizados y totalmente válidos. Si queremos ampliarlos, podriamos hacerlo siguiendo este artículo

blog comments powered by Disqus

Entrena PassGAN con tu propio diccionario

  • por javier
  • 24 de Abril de 2023
None

NOTA: No es necesario entrenar un diccionario propio por regla general ya que se incluyen 3 o 4 entrenamientos ya realizados y totalmente válidos. Si queremos ampliarlos, podriamos hacerlo siguiendo este artículo. Dicho esto, continuamos...

PassGAN es un enfoque novedoso y eficiente para el entrenamiento de diccionarios de contraseñas utilizando técnicas de aprendizaje profundo y generación de adversarios. Este método combina las ventajas de las redes generativas adversarias (GANs) y los algoritmos de aprendizaje automático para crear diccionarios de contraseñas más sofisticados y difíciles de predecir.

En este artículo veremos como entrenar nuestro propio diccionario o dataset

usage: train.py [-h] [--training-data TRAINING_DATA] --output-dir OUTPUT_DIR
[--save-every SAVE_EVERY] [--iters ITERS] [--batch-size BATCH_SIZE]
[--seq-length SEQ_LENGTH] [--layer-dim LAYER_DIM]
[--critic-iters CRITIC_ITERS] [--lambda LAMB]

 

Update cookies preferences