How I Cracked Millions of “pt_BR” Hashed Passwords
NullByte Security Conference 2015
Aviso
O conteúdo aqui apresentado representa minhas próprias conclusões e opiniões e não as de meus empregadores, clientes e etc
Senhas apresentadas nesta palestra foram inseridas como exemplo fictício e qualquer semelhança com a realidade é mera coincidência.
Algumas Definições
OSINT “Open source intelligence ou Inteligência de Fontes Abertas é o termo usado para descrever a inteligência no sentido de informações, (...) obtida através dados disponíveis para o público em geral, como jornais, revistas científicas, sql injection e emissões de TV. (...)” Wikipedia
SQL INJECTION “(...) WHAT'S THAT REALLY MEAN? People can possibly piggyback SQL commands into your statements. (...)" Puppy, Phrack 1998
PÚBLICO "público, pú.bli.co, adj (lat publicu) 1 Pertencente ou relativo a um povo ou ao povo. 2 Que serve para uso de todos. 3 A que todos têm o direito de assistir." http://michaelis.uol.com.br
Equipamento
2x AMD Radeon HD 7970 Double Dissipation925 Core Clock (MHz)2048 Stream Processors 384 Bit Memory 5500 Memory Clock (MHz)
Ferramentas
● Bash-fu (shellscripts)● oclHashcat● hashcat
De quantos hashes estamos falando?
6.103.439 hashes MD5 provenientes somente de fontes nacionais
4.520.589 hashes únicas
Objetivo
❏ Documentar processo e técnicas utilizadas
❏ Criar mecanismo para busca rápida (grep é muito lento!)
Fácil e rápido
● Alphanumeric + Symbol● Length < 6● < 10 min
oclHashcat64.bin -a 3 -m 0 --increment --remove --gpu-temp-retain 75 --outfile=elasticfriends.nouniq.md5.cracked elasticfriends.nouniq.md5 ?a?a?a?a?a?a
Recovered......: 489354/4520589 (0.00%) Digests, 0/1 (0.00%) Salts
bc06rfert42g
Demo...
● Alphanumeric + Symbol● Length < 6● < 10 min
Incluindo Charset pt_BR (ISO-8859-1)
● Alphanumeric + Symbol + ISO-8859-1 Charset● Length < 6● < 10 min
oclHashcat64.bin -a 3 -m 0 --increment --remove --gpu-temp-retain 75 --outfile=elasticfriends.nouniq.md5.cracked elasticfriends.nouniq.md5 -1 charsets/standard/Portuguese/pt_ISO-8859-1.hcchr -2 ?1?a ?2?2?2?2?2?2?2?2
Recovered......: 87/4031235 (0.00%) Digests, 0/1 (0.00%) Salts
Demo...
● Alphanumeric + Symbol + ISO-8859-1 Charset● Length < 6● < 10 min
tiçafênixbarça
CARTÃOchulé
Mengão
Máximo de números possíveis
● Numeric● Length > 6 < 13● < 10 min
oclHashcat64.bin -a 3 -m 0 --increment --remove --gpu-temp-retain 75 --outfile=elasticfriends.nouniq.md5.cracked elasticfriends.nouniq.md5 ?d?d?d?d?d?d?d?d?d?d?d?d?d
Recovered......: 248449/4031148 (0.00%) Digests, 0/1 (0.00%) Salts
24069656344300
3492565046
Minúsculas pt_BR
● ISO-8859-1 Lowercase● Length < 7● < 10 min
oclHashcat64.bin -a 3 -m 0 --increment --remove --gpu-temp-retain 75 --outfile=elasticfriends.nouniq.md5.cracked elasticfriends.nouniq.md5 -1 /c/tools/oclHashcat-1.37/charsets/standard/Portuguese/pt_ISO-8859-1.hcchr -2 ?1?l ?2?2?2?2?2?2?2
Recovered......: 71313/3782676 (0.00%) Digests, 0/1 (0.00%) Salts
Maiúsculas pt_BR
● ISO-8859-1 Uppercase● Length > 6 < 7● < 10 min
oclHashcat64.bin -a 3 -m 0 --increment --remove --gpu-temp-retain 75 --outfile=elasticfriends.nouniq.md5.cracked elasticfriends.nouniq.md5 -1 /c/tools/oclHashcat-1.37/charsets/standard/Portuguese/pt_ISO-8859-1.hcchr -2 ?1?u ?2?2?2?2?2?2?2
Recovered......: 2785/3711363 (0.00%) Digests, 0/1 (0.00%) Salts
Só símbolos
● Symbol● Length < 8● < 10 min
oclHashcat64.bin -a 3 -m 0 --increment --remove --gpu-temp-retain 75 --outfile=elasticfriends.nouniq.md5.cracked elasticfriends.nouniq.md5 ?s?s?s?s?s?s?s?s
Recovered......: 19/3707927 (0.00%) Digests, 0/1 (0.00%) Salts
Wordlists
oclHashcat64.bin -a 0 -m 0 --remove --gpu-temp-retain 75 --outfile=elasticfriends.nouniq.md5.cracked elasticfriends.nouniq.md5 all_words.dic
Recovered......: 980236/3707908 (0.00%) Digests, 0/1 (0.00%) Salts
dazzlepod.dicmovies_nospace_lower.txtproverbs_nopunct_nospace.txttomsawyer.dicartists_nopunct.txtactors-characters_nopunct_lower.txtmovies.txtproverbs_nopunct_nospace_lower.txtsubjects_nospace.txtactors_nopunct_lower.txt
gaming.diceNtr0pY_ALL_sort_uniq_clean.dicauthors_nospace.txtproverbs_nopunct_lower.txtworks_nopunct_nospace.txtlabels_nopunct_lower.txtmovies_nopunct_nospace_lower.txtactors-characters_nopunct_nospace_lower.txtbigpot.pot(...)
Onde estamos 3 horas depois?
● Recovered......: 489354/4520589 (0.00%) Digests, 0/1 (0.00%) Salts● Recovered......: 87/4031235 (0.00%) Digests, 0/1 (0.00%) Salts● Recovered......: 248449/4031148 (0.00%) Digests, 0/1 (0.00%) Salts● Recovered......: 71313/3782676 (0.00%) Digests, 0/1 (0.00%) Salts● Recovered......: 2785/3711363 (0.00%) Digests, 0/1 (0.00%) Salts● Recovered......: 19/3707927 (0.00%) Digests, 0/1 (0.00%) Salts● Recovered......: 980236/3707908 (0.00%) Digests, 0/1 (0.00%) Salts
1.792.243 out of 4.520.589 = 39.66%
Indo além, técnicas conhecidas
● Combinator● Fingerprint● Hybrid● Rule-based● Brute-Force (markov)
Combinator
● Você tem dois dicionários, um para cada "lado".● Cada palavra do dicionário da "direita" é anexada a cada palavra do lado
esquerdo.● Se seu dicionário do lado esquerdo tem 100 palavras e o dicionário do lado
direito tem 50, o número total de candidatos geradados é 100 * 50 = 5000
ricardosaudadeseternassoeuseiminhasenha2
MarceloRobertolarissalourençocoredevices23
TheOffspring1998AmericanaP@ssw0rd194543P@ssw0rd
Fingerprint
● Automático e Cíclico● Sem interação humana● Expander sobre a lista de hashes quebradas + Combinator
Ex: Palavra “nullbyte” expandida gera 66 candidatos que quando combinados podem encontrar senhas como as abaixo:
null123bytenull
123nullbyte
Hybrid
● Mácara + Dicionário● Dicionário + Máscara
mengo849578thiago828486mestre188416
13dejulho220391jurema
Rule-Based
● Rules são como pequenas linguagens de programação, tanto Hashcat como John The Ripper tem um interpretador próprio (porém compatíveis em sua grande maioria de regras)
● Por exemplo uma regra para inserir um caractere no começo da palavra, inverter uma palavra, remover caracteres, etc
● Tanto John como Hashcat vem com alguns arquivos de .rule prontos para utilizar
● Utilizando o modo debug é possível gerar rules para cada hash quebrada
Rule-Based
● Best69● Leetspeak + Toggles● cat rules/* > /tmp/all.rules
c1t3d0wn325476/esP@ssw0rdN@ty29o2
Markov Brute
● Usa a tool hcstatgen (hashcat-utils) para gerar arquivo hcstat● Otimiza por posição através de “ranking”
[s] [e] [n] [h] [a]
1a. s , b , t , r , p2a. a , e , i , k , h3a. r , t , e , w , s
Pipal, PACK, maskgen....(...)Character setsloweralphanum: 826625 (42.13%)numeric: 469265 (23.92%)loweralpha: 351744 (17.93%)upperalphanum: 202274 (10.31%)mixedalphanum: 36764 (1.87%)loweralphaspecialnum: 20968 (1.07%)upperalpha: 16518 (0.84%)mixedalpha: 11328 (0.58%)loweralphaspecial: 9131 (0.47%)specialnum: 4281 (0.22%)mixedalphaspecialnum: 4019 (0.2%)mixedalphaspecial: 1290 (0.07%)upperalphaspecialnum: 863 (0.04%)upperalphaspecial: 263 (0.01%)special: 69 (0.0%)
Mecanismo de busca rápida
Como?
Big Data Techniques FTW!
Elasticsearch + Kibana
Big Data Techniques FTW!
es_nullbyte_populate.py
Big Data Techniques FTW!
es_nullbyte_search.py
Obrigado
uss.thebug [a] gmail.com@usscastro
Top Related