SlideShare una empresa de Scribd logo
Password Cracking
correct horse battery staple
Hello!I am Javier Junquera
Investigador en ciberseguridad, y profesor
asociado en la Universidad de Alcalá
You can find me at javier.junquera@uah.es
@junquera
2
Cybersecurity Research
Group UAH
I am Kevin Van Liebergen
Becario de investigación en cátedra
ISDEFE
You can find me at @KevinLiebergen
3
Hello!
Contraseñas
Almacenamiento de contraseñas
➔ Codificar no es cifrar
◆ Reversible sin dificultad
➔ Cifrar no es hashear
◆ Reversible
➔ Hashear es hashear, pero no lo es todo
Codificaciones ¿Son seguras?
❖ Tipos
➢ Base64
➢ Base32
➢ ASCII
No existe clave,
únicamente es conversión
Codificaciones. Usos
● Parámetro HTTP en los formularios
● Datos binarios en URL
$ printf “ciberseg” | base64
Y2liZXJzZWc=
$ printf “Y2liZXJzZWc=” | base64 -d
ciberseg
Almacenamiento de contraseñas
➔ Las contraseñas se deben almacenar protegidas
◆ En claro: No están protegidas
◆ En base64: No están protegidas
◆ En base32: Tampoco
Es una función matemática que comprime la
información de forma rápida para que sea identificable.
Hashing: ¿Qué es un hash?
❖ Siempre del mismo tamaño
❖ No es reversible
❖ Los mismos datos dan siempre
el mismo hash
H(0000010111110010)
=
0110
Checksum
0000
0101
1111
+ 0010
10110
H(0000010111110010)
=
0110
Checksum
0000
0101
1111
+ 0010
10110
Es una función matemática que comprime la
información de forma rápida para que sea identificable.
Hashing: ¿Qué es un hash?
❖ Siempre del mismo tamaño
❖ No es reversible
❖ Los mismos datos dan siempre
el mismo hash
Es una función matemática que comprime la
información de forma rápida para que sea identificable.
¿Qué es un hash criptográfico?
❖ Siempre del mismo tamaño
❖ No es reversible
❖ Los mismos datos dan siempre
el mismo hash
❖ Dos datos distintos dan
siempre dos hashes
diferentes
Hash criptográfico
1. H(A) = H(A)
2. H(A) != H(B)
3. | H(A) - H(A + ϵ) | > δ
4. H-1
(H(A)) = ∅
Hashes criptográficos
❖ MD5
❖ SHA1
❖ SHA256
❖ SHA-3 (Keccak)
Hashes criptográficos
$ printf 'jajaja' | openssl dgst -md5
(stdin)= 655faa8ba799a3a1ae309c2b40d142fc
$ printf 'jajaja' | openssl dgst -sha1
(stdin)= 4598cfd1cfe70d29e5c9d77b51002f272790ba66
$ printf 'jajaja' | openssl dgst -sha256
(stdin)= 0a887c3cb3de97b3968be5c7fb81ed9e452928db71d66620b7766bf7c5413878
$ printf 'jajaja' | openssl dgst -sha3-512
(stdin)=
c88fbe79ca2e809915a6ab2e8fd8461c15180ac28cd7b4dab0fbca9f8812169089305890a6e468
bcde9f08e4cc3eaa00775ab9c9ec28c8cfb54d4de9493676fd
Hashes
➔ Las contraseñas se deben almacenar protegidas
➔ ¿Están protegidas con MD5, SHA1, SHA256… ?
◆ No lo suficiente
Hashes
Pongamos que tenemos la siguiente contraseña:
Passw0rd!
➔ a-z → 26 caracteres
➔ A-Z → 26 caracteres
➔ Caracteres especiales → 32 caracteres
➔ Total: 84 caracteres; Tamaño: 9;
➔ Coste medio: (849
)/2 ~ 104.107.874.265.464.832
Hashes
➔ Coste medio: (849
)/2 ~
104.107.874.265.464.832
➔ Si tenemos 240GH/s
◆ 240.000.000H/s
◆ 13 años en obtenerlo
¡PERO!
1. password → Mayus/Minus → 28
=256
2. Password → 1337 → 24
x 256 = 4096
3. Passw0rd → Append/Prepend →
2 x 32 x 4096 = 262144
4. Passw0rd!
262.144 / 240.000.000 ~ 0,001 segundos
Hashes
➔ Collection#1 → 21.000.000
➔ En GPU
◆ 21.000.000/240.000.000
● 0,0875 s
➔ En una CPU
◆ 21.000.000/200.000
● 87,5 s
➔ En cada entrada i del diccionario
MD5(diccionario[i]) ==
MD5(Passw0rd!)
➔ Hay diccionarios de hashes
(RainbowTables)
diccionario[i] ==
MD5(Passw0rd!)
Rainbow Tables
➔ Primer paso para protegerlas más:
◆ +SALT (no valen RainbowTables)
◆ Passw0rd! + Número del 1 al 1024 →
● MD5(Passw0rd! + Número del 1 al 1024) +
Número del 1 al 1024
➔ Coste con diccionario: Tamaño del diccionario
Hashes
Hashes
➔ Primer paso para protegerlas más:
◆ +PEPPER
◆ Passw0rd! + Número del 1 al 1024 →
● MD5(Passw0rd! + Número del 1 al 1024)
➔ Coste con diccionario: Tamaño del diccionario * 1024
Hashes
➔ Las contraseñas se deben almacenar protegidas
➔ ¿Están protegidas con MD5, SHA1, SHA256… ? + (
SALT | PEPPER )
◆ No lo suficiente → ¡Paralelizable!
Hashing
Mensaje original
Bloque 2Bloque 1 Bloque 3
Hash 2Hash 1 Hash 3
Hash
Mensaje original
Bloque 2Bloque 1 Bloque 3
Hash 2
Hash 1
Hash
Paralelizable Completamente paralelizable
Hashes
➔ Las contraseñas se deben almacenar protegidas
◆ Hashes seguros
● PBKDF2
● BCRYPT
● ARGON2
Hashes
➔ PBKDF2
◆ Sistema de generación de claves
◆ Incluye salt, y se indica factor de esfuerzo
Hashes
➔ PBKDF2
Protegemos Passw0rd! con SALT 0xdeadbeef, y
esfuerzo 1.000:
◆ K0
= HASH(“Passw0rd!xdexadxbexef”)
◆ K1
= HASH(K0
+ “xdexadxbexef”)
◆ …
◆ K1000
= HASH(K999
+ “xdexadxbexef”)
Hashes
➔ Argon2
◆ Especial contra GPUs
◆ Uso intensivo de memoria
◆ Aleatorización de pasos dependiente de la
password
➔ Modo i → Contra side-channels
➔ Modo d → Contra GPU
➔ Modo id → Mixto
PHC 2015
➔ Hay ciertos hashes
especialmente críticos
◆ NTLM
Hashes
Hashes
➔ Hay ciertos hashes
especialmente
críticos
◆ JWT
Hashes
➔ Hay ciertos hashes
especialmente críticos
◆ Handshake WPA2
● HMAC (código MIC)
● ~PBKDF2 (códigos
PTK y PMK)
Enfoque
1. Ataque por diccionario
2. Ataque por patrones
3. Ataque por heurística
4. Ataque por fuerza bruta
5. Rubber hose cryptanalysis
Puesta a punto
$ git clone
https://gitlab.com/ciberseg_uah/public
/password-cracking.git
$ cd password-cracking
$ git submodule init
$ git submodule update --recursive
Puesta a punto
$ sudo apt-get -y install 
git build-essential libssl-dev 
zlib1g-dev yasm pkg-config 
libgmp-dev libpcap-dev libbz2-dev 
ocl-icd-opencl-dev opencl-headers 
pocl-opencl-icd
Puesta a punto
$ cd JohnTheRipper/src/
$ ./configure
$ make -s clean && make -sj16
Diccionarios
➔ Públicos
◆ SecLists (rockyou, openwall)
➔ “Ocultos”
◆ Pwndb
➔ Reglas
◆ Best64, d3ad0ne, T0X1C, dive → Jumbo
➔ Rainbow Tables
Diccionarios
➔ Diccionario público (ejemplo 1)
$ tar xvfz 
SecLists/Passwords/Leaked-Databases/ 
rockyou.txt.tar.gz
$ JohnTheRipper/run/john 
--wordlist=rockyou.txt ARCHIVO
Diccionarios
➔ Diccionario público (ejemplo 1)
$ JohnTheRipper/run/john 
--show ARCHIVO
Diccionarios
➔ Diccionario + Reglas (ejemplo 2)
$ printf 'Passw0rd!' | md5sum | cut
-d' ' -f1 > password.txt
$ echo ‘password’ > dict1.txt
$ JohnTheRipper/run/john
--wordlist=dict1.txt --rules=best64
--stdout > dict2.txt
Diccionarios
➔ Diccionario + Reglas (ejemplo 2)
$ JohnTheRipper/run/john
--wordlist=dict2.txt --rules=best64
--stdout > dict3.txt
$ JohnTheRipper/run/john
--format=raw-md5 --wordlist=dict3.txt
--rules=jumbo password.txt
Estadísticas
➔ Media 7-9 caracteres
➔ Mayúscula suele ser la primera. Número al final
➔ Mujeres más nombres personales
➔ Hombres más hobbies
➔ $ ! #
➔ 1,2. Si son más de dos números suele ser progresión.
Patrones
➔ Ingeniería social
➔ Datos de evidencias forenses
➔ CUPP
➔ Combinaciones secuenciales (1234, qwerty)
comunes
Patrones
➔ Pwndb
◆ Visitar http://pwndb2am4tzkvold.onion/
◆ Buscar un usuario con patrón
➔ En el repo tenéis una API para pwndb
Patrones
➔ Diccionario de usuario
◆ Herramienta cupp:
https://github.com/Mebus/cupp
◆ También lo tenéis en el repo
Patrones
➔ Crear máscara + Diccionario (ejemplo 3)
$ JohnTheRipper/run/john
--wordlist=dict.txt --mask=’1234?w’
--stdout
$ JohnTheRipper/run/john
--wordlist=dict.txt
--mask=’?d?d?d?d?w’ --stdout
Heurísticas
➔ Modelos de Markov en John
$ printf 'jajaja' | sha256sum | cut
-d' ' -f1 > password.txt
$ JohnTheRipper/run/john
--format=raw-sha256 --markov
password.txt
Fuerza bruta
$ printf 'jajaja' | sha1sum | cut -d' ' -f1 > password.txt
$ JohnTheRipper/run/john --list=inc-modes
digits upper lower lowerspace uppernum
lowernum alpha alnum custom alnumspace
lanman lm_ascii ascii latin1 utf8
Fuerza bruta
$ JohnTheRipper/run/john --inc=alpha password.txt
$ JohnTheRipper/run/john --inc=alnum password.txt
$ JohnTheRipper/run/john --inc=utf8 password.txt
Aplicaciones
➔ *2john
◆ Además de todas las herramientas de generación
de diccionarios y ruptura de contraseñas, tenemos
las herramientas de tratamiento de archivos
Aplicaciones
➔ *2john
$ chmod +x JohnTheRipper/run/*2john*
$ JohnTheRipper/run/keepass2john
KEEPASS.database
database:$keepass$*2*60000*0*f8f8072b4
e5b2bb61498393294538d3ed33d7c1093c04cb
07540ece1eb3da4b8*fdcaa85383c...
Aplicaciones
1. Romper KeepassX
2. Romper ZIP
3. Romper PDF
Optimización por GPU
Optimización por GPU
JohnTheRipper/run/john 
--fork=8 --format=KeePass-opencl 
--wordlist=rockyou.txt 
keepass-hash.txt
Aplicaciones
1. Romper KeepassX
a. Rockyou
2. Romper ZIP
3. Romper PDF
1. Romper KeepassX
a. Rockyou
2. Romper ZIP
a. Rockyou + Patrón
3. Romper PDF
Aplicaciones
Aplicaciones
1. Romper KeepassX
a. Rockyou
2. Romper ZIP
a. Rockyou + Patrón
3. Romper PDF
a. alnum ([a-z][0-9]) < 10 caracteres
Soluciones en la nube
➔ Crackstation
➔ OnlineHashCrack
➔ AWS
Recomendaciones
➔ Longitud: Mínimo 10 caracteres
➔ ¡No repetirlas!
➔ Juego de caracteres
◆ ¿Necesitas recordarla?
● Mejor frase larga
◆ Si no, usa un gestor de contraseñas
➔ Segundo factor de autenticación
Recomendaciones
➔ Comprobar seguridad de
contraseña
◆ No está en un volcado o
diccionario
➔ Sobre el cambio periódico
de contraseñas… No :)
◆ Subscripción a servicios
de detección de leaks
▹ ProTego is focused in provide a toolkit for health care
organisations to better assess and reduce cybersecurity
risk
▸ https://protego-project.eu/
▸ @protego_project
Acknowledgment
Research and innovation programme under grant agreement No. 826284.
Bibliografía
➔ The Ultimate Guide to Passwords in 2019: Length, Complexity & More!
➔ iphelix/pack: PACK (Password Analysis and Cracking Kit)
➔ Mebus/cupp: Common User Passwords Profiler (CUPP)
➔ Password Hashing: Scrypt, Bcrypt and ARGON2 - Michele Preziuso
➔ Rubber-Hose Cryptanalysis
➔ how does NTLM authentication work | What is Active Directory? Microsoft
Active Directory Fundamentals with Video Tutorials
➔ I know your P4$$w0rd (and if i don´t, I will guess it) (J. Sánchez y P. Caro,
Telefónica)
63
Thanks!Any questions?
You can find us at
javier.junquera@uah.es
kevin.van@edu.uah.es

Más contenido relacionado

PPTX
Enhance ERD(Entity Relationship Diagram)
PPTX
SQL - DML and DDL Commands
PPTX
Actividad 1: Mysql.Data.MySqlClient
PPT
Normalization
PDF
Introduction to SQL
PPTX
Metodo burbuja
PDF
SQL Joins With Examples | Edureka
PDF
Query Optimization with MySQL 8.0 and MariaDB 10.3: The Basics
Enhance ERD(Entity Relationship Diagram)
SQL - DML and DDL Commands
Actividad 1: Mysql.Data.MySqlClient
Normalization
Introduction to SQL
Metodo burbuja
SQL Joins With Examples | Edureka
Query Optimization with MySQL 8.0 and MariaDB 10.3: The Basics

Similar a Password cracking (20)

PPTX
Mecanismos de autenticación-identificación. Vulneración y cracking de contras...
PPT
Autenticacion Doble Factor
PDF
Cripto p.pptx (2)
PPTX
Contraseña
PDF
Cripto p.pptx (1)
PDF
Cripto p.pptx
PPTX
Seguridad en contraseñas
ODT
Hackthissite
PPT
VCNM73-EQ#6-SENDMAIL-TEGISTRO DE EVENTOS
PDF
webminar ataques de fuerza bruta kali linux
DOCX
Como mejorar sus Contraseñas
PDF
Python Securidad and Criptografia
ODP
Introducción a la Criptografia
PDF
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
PDF
Pablo Caro & Jaime Sánchez - I know your P4$$w0rd (and if I don’t, I will gue...
PPTX
TRABAJO PRACTICO 3
PDF
Una guía para entender Advanced Encryption Standard (AES) con muñecos de palo
PDF
Alejandro Ramos - Know your ******: 4dv4nc3d P@55w0rd$ (r4c|&lt;1ng [RootedCO...
PDF
Advanced password cracking
PDF
Practicas un6
Mecanismos de autenticación-identificación. Vulneración y cracking de contras...
Autenticacion Doble Factor
Cripto p.pptx (2)
Contraseña
Cripto p.pptx (1)
Cripto p.pptx
Seguridad en contraseñas
Hackthissite
VCNM73-EQ#6-SENDMAIL-TEGISTRO DE EVENTOS
webminar ataques de fuerza bruta kali linux
Como mejorar sus Contraseñas
Python Securidad and Criptografia
Introducción a la Criptografia
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
Pablo Caro & Jaime Sánchez - I know your P4$$w0rd (and if I don’t, I will gue...
TRABAJO PRACTICO 3
Una guía para entender Advanced Encryption Standard (AES) con muñecos de palo
Alejandro Ramos - Know your ******: 4dv4nc3d P@55w0rd$ (r4c|&lt;1ng [RootedCO...
Advanced password cracking
Practicas un6
Publicidad

Más de Javier Junquera (9)

PDF
Rubberhose File system (ANON TRACK/RootedCON 2025)
PDF
GNSS spoofing via SDR (Criptored Talks 2024)
PDF
Don’t go breaking my heart: hacking medical devices (RootedCON 2023)
PDF
Al-Kindi convirtió tu dataset en mi keylogger (RootedCON Criptored 2023)
PDF
De PARCHE a Vysion: construyendo un ecosistema CTI sobre la Darknet (RootedC...
PDF
El caso Solorigate: la exposición de SolarWinds, de SUNBURST a Supernova
PDF
The day I ruled the world (RootedCON 2020)
PPTX
Conferencia Internet Society: El FBI El reabre el debate sobre backdoors y ci...
PDF
Tecnologías avanzadas de descubrimiento y análisis de la Dark Net
Rubberhose File system (ANON TRACK/RootedCON 2025)
GNSS spoofing via SDR (Criptored Talks 2024)
Don’t go breaking my heart: hacking medical devices (RootedCON 2023)
Al-Kindi convirtió tu dataset en mi keylogger (RootedCON Criptored 2023)
De PARCHE a Vysion: construyendo un ecosistema CTI sobre la Darknet (RootedC...
El caso Solorigate: la exposición de SolarWinds, de SUNBURST a Supernova
The day I ruled the world (RootedCON 2020)
Conferencia Internet Society: El FBI El reabre el debate sobre backdoors y ci...
Tecnologías avanzadas de descubrimiento y análisis de la Dark Net
Publicidad

Último (20)

PDF
manual-sostenibilidad-vivienda-yo-construyo (1).pdf
PPTX
clase MICROCONTROLADORES ago-dic 2019.pptx
PDF
TRABAJO DE ANÁLISIS DE RIESGOS EN PROYECTOS
PPTX
Electronica II, material basico de electronica II
PPTX
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
PPTX
ARQUITECTURA INTEGRAL EN OBRA, PRINCIPIOS BASICOS Y TERMINOS
DOCX
Cumplimiento normativo y realidad laboral
PDF
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
PDF
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
PPTX
leyes de los gases Ideales. combustible refinación
PPTX
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
PPTX
DEBL Presentación PG 23.pptx [Autoguardado].pptx
PPTX
TECNOLOGIA EN CONSTRUCCION PUBLICO Y PRIVADA
PDF
Prevención de estrés laboral y Calidad de sueño - LA PROTECTORA.pdf
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PPTX
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
PDF
MANTENIMIENTO AIRE ACOINDICIOANDO S1_ELEC_MANT.pptx.pdf
PDF
BROCHURE SERVICIOS CONSULTORIA ISOTEMPO 2025
PDF
FUNCION CUADRATICA FUNCIONES RAIZ CUADRADA
PDF
LIBRO UNIVERSITARIO INTELIGENCIA ALGORITMICA BN.pdf
manual-sostenibilidad-vivienda-yo-construyo (1).pdf
clase MICROCONTROLADORES ago-dic 2019.pptx
TRABAJO DE ANÁLISIS DE RIESGOS EN PROYECTOS
Electronica II, material basico de electronica II
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
ARQUITECTURA INTEGRAL EN OBRA, PRINCIPIOS BASICOS Y TERMINOS
Cumplimiento normativo y realidad laboral
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
leyes de los gases Ideales. combustible refinación
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
DEBL Presentación PG 23.pptx [Autoguardado].pptx
TECNOLOGIA EN CONSTRUCCION PUBLICO Y PRIVADA
Prevención de estrés laboral y Calidad de sueño - LA PROTECTORA.pdf
Manual ISO9001_2015_IATF_16949_2016.pptx
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
MANTENIMIENTO AIRE ACOINDICIOANDO S1_ELEC_MANT.pptx.pdf
BROCHURE SERVICIOS CONSULTORIA ISOTEMPO 2025
FUNCION CUADRATICA FUNCIONES RAIZ CUADRADA
LIBRO UNIVERSITARIO INTELIGENCIA ALGORITMICA BN.pdf

Password cracking

  • 2. Hello!I am Javier Junquera Investigador en ciberseguridad, y profesor asociado en la Universidad de Alcalá You can find me at javier.junquera@uah.es @junquera 2 Cybersecurity Research Group UAH
  • 3. I am Kevin Van Liebergen Becario de investigación en cátedra ISDEFE You can find me at @KevinLiebergen 3 Hello!
  • 5. Almacenamiento de contraseñas ➔ Codificar no es cifrar ◆ Reversible sin dificultad ➔ Cifrar no es hashear ◆ Reversible ➔ Hashear es hashear, pero no lo es todo
  • 6. Codificaciones ¿Son seguras? ❖ Tipos ➢ Base64 ➢ Base32 ➢ ASCII No existe clave, únicamente es conversión
  • 7. Codificaciones. Usos ● Parámetro HTTP en los formularios ● Datos binarios en URL $ printf “ciberseg” | base64 Y2liZXJzZWc= $ printf “Y2liZXJzZWc=” | base64 -d ciberseg
  • 8. Almacenamiento de contraseñas ➔ Las contraseñas se deben almacenar protegidas ◆ En claro: No están protegidas ◆ En base64: No están protegidas ◆ En base32: Tampoco
  • 9. Es una función matemática que comprime la información de forma rápida para que sea identificable. Hashing: ¿Qué es un hash? ❖ Siempre del mismo tamaño ❖ No es reversible ❖ Los mismos datos dan siempre el mismo hash
  • 12. Es una función matemática que comprime la información de forma rápida para que sea identificable. Hashing: ¿Qué es un hash? ❖ Siempre del mismo tamaño ❖ No es reversible ❖ Los mismos datos dan siempre el mismo hash
  • 13. Es una función matemática que comprime la información de forma rápida para que sea identificable. ¿Qué es un hash criptográfico? ❖ Siempre del mismo tamaño ❖ No es reversible ❖ Los mismos datos dan siempre el mismo hash ❖ Dos datos distintos dan siempre dos hashes diferentes
  • 14. Hash criptográfico 1. H(A) = H(A) 2. H(A) != H(B) 3. | H(A) - H(A + ϵ) | > δ 4. H-1 (H(A)) = ∅
  • 15. Hashes criptográficos ❖ MD5 ❖ SHA1 ❖ SHA256 ❖ SHA-3 (Keccak)
  • 16. Hashes criptográficos $ printf 'jajaja' | openssl dgst -md5 (stdin)= 655faa8ba799a3a1ae309c2b40d142fc $ printf 'jajaja' | openssl dgst -sha1 (stdin)= 4598cfd1cfe70d29e5c9d77b51002f272790ba66 $ printf 'jajaja' | openssl dgst -sha256 (stdin)= 0a887c3cb3de97b3968be5c7fb81ed9e452928db71d66620b7766bf7c5413878 $ printf 'jajaja' | openssl dgst -sha3-512 (stdin)= c88fbe79ca2e809915a6ab2e8fd8461c15180ac28cd7b4dab0fbca9f8812169089305890a6e468 bcde9f08e4cc3eaa00775ab9c9ec28c8cfb54d4de9493676fd
  • 17. Hashes ➔ Las contraseñas se deben almacenar protegidas ➔ ¿Están protegidas con MD5, SHA1, SHA256… ? ◆ No lo suficiente
  • 18. Hashes Pongamos que tenemos la siguiente contraseña: Passw0rd! ➔ a-z → 26 caracteres ➔ A-Z → 26 caracteres ➔ Caracteres especiales → 32 caracteres ➔ Total: 84 caracteres; Tamaño: 9; ➔ Coste medio: (849 )/2 ~ 104.107.874.265.464.832
  • 19. Hashes ➔ Coste medio: (849 )/2 ~ 104.107.874.265.464.832 ➔ Si tenemos 240GH/s ◆ 240.000.000H/s ◆ 13 años en obtenerlo ¡PERO! 1. password → Mayus/Minus → 28 =256 2. Password → 1337 → 24 x 256 = 4096 3. Passw0rd → Append/Prepend → 2 x 32 x 4096 = 262144 4. Passw0rd! 262.144 / 240.000.000 ~ 0,001 segundos
  • 20. Hashes ➔ Collection#1 → 21.000.000 ➔ En GPU ◆ 21.000.000/240.000.000 ● 0,0875 s ➔ En una CPU ◆ 21.000.000/200.000 ● 87,5 s ➔ En cada entrada i del diccionario MD5(diccionario[i]) == MD5(Passw0rd!) ➔ Hay diccionarios de hashes (RainbowTables) diccionario[i] == MD5(Passw0rd!)
  • 22. ➔ Primer paso para protegerlas más: ◆ +SALT (no valen RainbowTables) ◆ Passw0rd! + Número del 1 al 1024 → ● MD5(Passw0rd! + Número del 1 al 1024) + Número del 1 al 1024 ➔ Coste con diccionario: Tamaño del diccionario Hashes
  • 23. Hashes ➔ Primer paso para protegerlas más: ◆ +PEPPER ◆ Passw0rd! + Número del 1 al 1024 → ● MD5(Passw0rd! + Número del 1 al 1024) ➔ Coste con diccionario: Tamaño del diccionario * 1024
  • 24. Hashes ➔ Las contraseñas se deben almacenar protegidas ➔ ¿Están protegidas con MD5, SHA1, SHA256… ? + ( SALT | PEPPER ) ◆ No lo suficiente → ¡Paralelizable!
  • 25. Hashing Mensaje original Bloque 2Bloque 1 Bloque 3 Hash 2Hash 1 Hash 3 Hash Mensaje original Bloque 2Bloque 1 Bloque 3 Hash 2 Hash 1 Hash Paralelizable Completamente paralelizable
  • 26. Hashes ➔ Las contraseñas se deben almacenar protegidas ◆ Hashes seguros ● PBKDF2 ● BCRYPT ● ARGON2
  • 27. Hashes ➔ PBKDF2 ◆ Sistema de generación de claves ◆ Incluye salt, y se indica factor de esfuerzo
  • 28. Hashes ➔ PBKDF2 Protegemos Passw0rd! con SALT 0xdeadbeef, y esfuerzo 1.000: ◆ K0 = HASH(“Passw0rd!xdexadxbexef”) ◆ K1 = HASH(K0 + “xdexadxbexef”) ◆ … ◆ K1000 = HASH(K999 + “xdexadxbexef”)
  • 29. Hashes ➔ Argon2 ◆ Especial contra GPUs ◆ Uso intensivo de memoria ◆ Aleatorización de pasos dependiente de la password ➔ Modo i → Contra side-channels ➔ Modo d → Contra GPU ➔ Modo id → Mixto PHC 2015
  • 30. ➔ Hay ciertos hashes especialmente críticos ◆ NTLM Hashes
  • 31. Hashes ➔ Hay ciertos hashes especialmente críticos ◆ JWT
  • 32. Hashes ➔ Hay ciertos hashes especialmente críticos ◆ Handshake WPA2 ● HMAC (código MIC) ● ~PBKDF2 (códigos PTK y PMK)
  • 33. Enfoque 1. Ataque por diccionario 2. Ataque por patrones 3. Ataque por heurística 4. Ataque por fuerza bruta 5. Rubber hose cryptanalysis
  • 34. Puesta a punto $ git clone https://gitlab.com/ciberseg_uah/public /password-cracking.git $ cd password-cracking $ git submodule init $ git submodule update --recursive
  • 35. Puesta a punto $ sudo apt-get -y install git build-essential libssl-dev zlib1g-dev yasm pkg-config libgmp-dev libpcap-dev libbz2-dev ocl-icd-opencl-dev opencl-headers pocl-opencl-icd
  • 36. Puesta a punto $ cd JohnTheRipper/src/ $ ./configure $ make -s clean && make -sj16
  • 37. Diccionarios ➔ Públicos ◆ SecLists (rockyou, openwall) ➔ “Ocultos” ◆ Pwndb ➔ Reglas ◆ Best64, d3ad0ne, T0X1C, dive → Jumbo ➔ Rainbow Tables
  • 38. Diccionarios ➔ Diccionario público (ejemplo 1) $ tar xvfz SecLists/Passwords/Leaked-Databases/ rockyou.txt.tar.gz $ JohnTheRipper/run/john --wordlist=rockyou.txt ARCHIVO
  • 39. Diccionarios ➔ Diccionario público (ejemplo 1) $ JohnTheRipper/run/john --show ARCHIVO
  • 40. Diccionarios ➔ Diccionario + Reglas (ejemplo 2) $ printf 'Passw0rd!' | md5sum | cut -d' ' -f1 > password.txt $ echo ‘password’ > dict1.txt $ JohnTheRipper/run/john --wordlist=dict1.txt --rules=best64 --stdout > dict2.txt
  • 41. Diccionarios ➔ Diccionario + Reglas (ejemplo 2) $ JohnTheRipper/run/john --wordlist=dict2.txt --rules=best64 --stdout > dict3.txt $ JohnTheRipper/run/john --format=raw-md5 --wordlist=dict3.txt --rules=jumbo password.txt
  • 42. Estadísticas ➔ Media 7-9 caracteres ➔ Mayúscula suele ser la primera. Número al final ➔ Mujeres más nombres personales ➔ Hombres más hobbies ➔ $ ! # ➔ 1,2. Si son más de dos números suele ser progresión.
  • 43. Patrones ➔ Ingeniería social ➔ Datos de evidencias forenses ➔ CUPP ➔ Combinaciones secuenciales (1234, qwerty) comunes
  • 44. Patrones ➔ Pwndb ◆ Visitar http://pwndb2am4tzkvold.onion/ ◆ Buscar un usuario con patrón ➔ En el repo tenéis una API para pwndb
  • 45. Patrones ➔ Diccionario de usuario ◆ Herramienta cupp: https://github.com/Mebus/cupp ◆ También lo tenéis en el repo
  • 46. Patrones ➔ Crear máscara + Diccionario (ejemplo 3) $ JohnTheRipper/run/john --wordlist=dict.txt --mask=’1234?w’ --stdout $ JohnTheRipper/run/john --wordlist=dict.txt --mask=’?d?d?d?d?w’ --stdout
  • 47. Heurísticas ➔ Modelos de Markov en John $ printf 'jajaja' | sha256sum | cut -d' ' -f1 > password.txt $ JohnTheRipper/run/john --format=raw-sha256 --markov password.txt
  • 48. Fuerza bruta $ printf 'jajaja' | sha1sum | cut -d' ' -f1 > password.txt $ JohnTheRipper/run/john --list=inc-modes digits upper lower lowerspace uppernum lowernum alpha alnum custom alnumspace lanman lm_ascii ascii latin1 utf8
  • 49. Fuerza bruta $ JohnTheRipper/run/john --inc=alpha password.txt $ JohnTheRipper/run/john --inc=alnum password.txt $ JohnTheRipper/run/john --inc=utf8 password.txt
  • 50. Aplicaciones ➔ *2john ◆ Además de todas las herramientas de generación de diccionarios y ruptura de contraseñas, tenemos las herramientas de tratamiento de archivos
  • 51. Aplicaciones ➔ *2john $ chmod +x JohnTheRipper/run/*2john* $ JohnTheRipper/run/keepass2john KEEPASS.database database:$keepass$*2*60000*0*f8f8072b4 e5b2bb61498393294538d3ed33d7c1093c04cb 07540ece1eb3da4b8*fdcaa85383c...
  • 52. Aplicaciones 1. Romper KeepassX 2. Romper ZIP 3. Romper PDF
  • 54. Optimización por GPU JohnTheRipper/run/john --fork=8 --format=KeePass-opencl --wordlist=rockyou.txt keepass-hash.txt
  • 55. Aplicaciones 1. Romper KeepassX a. Rockyou 2. Romper ZIP 3. Romper PDF
  • 56. 1. Romper KeepassX a. Rockyou 2. Romper ZIP a. Rockyou + Patrón 3. Romper PDF Aplicaciones
  • 57. Aplicaciones 1. Romper KeepassX a. Rockyou 2. Romper ZIP a. Rockyou + Patrón 3. Romper PDF a. alnum ([a-z][0-9]) < 10 caracteres
  • 58. Soluciones en la nube ➔ Crackstation ➔ OnlineHashCrack ➔ AWS
  • 59. Recomendaciones ➔ Longitud: Mínimo 10 caracteres ➔ ¡No repetirlas! ➔ Juego de caracteres ◆ ¿Necesitas recordarla? ● Mejor frase larga ◆ Si no, usa un gestor de contraseñas ➔ Segundo factor de autenticación
  • 60. Recomendaciones ➔ Comprobar seguridad de contraseña ◆ No está en un volcado o diccionario ➔ Sobre el cambio periódico de contraseñas… No :) ◆ Subscripción a servicios de detección de leaks
  • 61. ▹ ProTego is focused in provide a toolkit for health care organisations to better assess and reduce cybersecurity risk ▸ https://protego-project.eu/ ▸ @protego_project Acknowledgment Research and innovation programme under grant agreement No. 826284.
  • 62. Bibliografía ➔ The Ultimate Guide to Passwords in 2019: Length, Complexity & More! ➔ iphelix/pack: PACK (Password Analysis and Cracking Kit) ➔ Mebus/cupp: Common User Passwords Profiler (CUPP) ➔ Password Hashing: Scrypt, Bcrypt and ARGON2 - Michele Preziuso ➔ Rubber-Hose Cryptanalysis ➔ how does NTLM authentication work | What is Active Directory? Microsoft Active Directory Fundamentals with Video Tutorials ➔ I know your P4$$w0rd (and if i don´t, I will guess it) (J. Sánchez y P. Caro, Telefónica)
  • 63. 63 Thanks!Any questions? You can find us at javier.junquera@uah.es kevin.van@edu.uah.es