Quando a alguém lhe divulgam a palavra-passe, a pessoa imagina aquilo como um acidente pontual: um serviço teve um mau dia, saiu nos jornais, mudaste-a e acabou. Não acabou. O dia da fuga não é o fim de nada: é o primeiro dia de uma linha de montagem que vai durar anos, e na qual tu nunca aparecerás pelo teu nome. Vale a pena contá-la toda, porque quase ninguém a vê.
Passo um: alguém leva a base de dados
O início não tem nada de espectacular. Alguém encontra uma injecção de SQL, uma cópia de segurança aberta, um painel de administração com as credenciais que vinham de fábrica. E leva uma tabela.
Essa tabela, com sorte, contém o teu email e um hash da tua palavra-passe. Com menos sorte, contém o teu email e a tua palavra-passe. Em texto. Tal e qual como a escreveste.
2009 trinta e dois milhões de palavras-passe em texto simples
Em Dezembro de 2009, uma empresa de widgets para redes sociais chamada RockYou sofreu uma injecção de SQL. Levaram cerca de 32 milhões de palavras-passe, e não havia hash nenhum para partir: guardava-as em texto simples.
Foi um desastre para a RockYou e uma prenda para todos os outros. Pela primeira vez existia um corpus enorme de palavras-passe reais, escritas por gente que não sabia que alguém as ia ler. Não um estudo: a coisa em si.
O ficheiro tornou-se o rockyou.txt, que continua a ser o dicionário de
referência com que se testam ataques. O seu valor não está em conter a tua
palavra-passe: está em conter a maneira como as pessoas escrevem
palavras-passe. Um nome e um ano, a palavra e o 123, o ! no fim. A RockYou
não divulgou 32 milhões de segredos. Divulgou o padrão. E o padrão não caduca.
Passo dois: quebra-se o que se puder, sem pressa nenhuma
É aqui que a intuição falha. Quando alguém tenta adivinhar a tua palavra-passe no ecrã de entrada de um serviço, o serviço corta-lhe as vazas: três tentativas, um CAPTCHA, um bloqueio. Contra um servidor, adivinhar é lento e barulhento.
Contra um ficheiro de hashes que já está no disco dele não há servidor nenhum. Não há ninguém do outro lado a dizer que não. Testa-se localmente, com GPU, sem limite de tentativas e com todo o tempo do mundo. Se o serviço fez mal o hash — algoritmo rápido, sem sal —, a diferença para o texto simples é de conveniência, não de segurança.
E não se testa ao acaso: primeiro o rockyou.txt, e depois regras derivadas dele.
Troca o a pelo @. Acrescenta um ano no fim. Cada truque que a ti te pareceu
engenhoso está escrito há mais de uma década num ficheiro de configuração.
Daí sai uma parte do despejo convertida em palavras-passe legíveis. O resto — o comprido, o aleatório, aquilo que não está em dicionário nenhum — continua a ser ruído. É a linha que o verificador traça: não te ralha, diz-te de que lado é que cais.
Passo três: cruza-se, e é aí que vales dinheiro
Um despejo à solta vale pouco. O que tem valor é a agregação: pegar em dez
fugas de sítios diferentes, cruzá-las pelo email e ficar com os pares
email:palavra-passe já em claro. Ao resultado chama-se combolist, e já não é
a base de dados de ninguém. É uma lista de pessoas.
2013 o inventário vem a público
Em Dezembro de 2013, o Troy Hunt pôs a andar o Have I Been Pwned: uma base de dados pública de emails aparecidos em fugas, para que qualquer pessoa pudesse perguntar se estava lá dentro. A ideia de fundo é simples e incómoda: se os atacantes já têm o inventário, negá-lo às vítimas não protege ninguém. Anos depois chegou o Pwned Passwords, que faz o mesmo com as palavras-passe e permite consultá-las sem as enviar: manda-se um fragmento do hash e o servidor devolve um lote de candidatos, sem saber qual era o teu.
2017 o NIST deixa de pedir símbolos e começa a pedir listas
Quando o NIST publicou a SP 800-63B, deitou por terra quase toda a ortodoxia dos formulários e pôs no lugar dela um requisito que poucos esperavam: ao definir uma palavra-passe, o sistema deve compará-la com uma lista de valores comprometidos conhecidos e recusá-la se lá aparecer.
É uma mudança de teoria, não de pormenor. A pergunta já não é se a tua palavra-passe parece forte, mas sim se já está publicada. Por isso é que o gerador faz a única coisa razoável: ir buscá-la a um sítio onde ela nunca esteve.
2019 a fuga que já era um requentado de outras
Em Janeiro de 2019 circulou um pacote que ficou famoso como Collection #1. O Hunt analisou-o e contou o que lá havia dentro: cerca de 773 milhões de endereços de email únicos e cerca de 21 milhões de palavras-passe únicas em texto simples, agregadas a partir de milhares de fontes.
O importante não foi o tamanho. Foi de onde é que aquilo saía: em boa parte era o requentado de fugas anteriores, já quebradas e postas em formato cómodo — embora o Hunt tenha também encontrado material que até aí não tinha fichado. O produto não era a intrusão. Era o inventário. E um inventário assim só tem uma utilidade.
Credential stuffing: não é a ti que atacam
Ninguém te ataca a ti. É esta a parte que custa a interiorizar.
Ninguém se senta a pensar na tua conta. Alguém pega numa combolist de centenas de milhões de linhas, mete-a numa ferramenta que as testa contra o formulário de entrada de um banco ou de um email, reparte as tentativas por muitos endereços IP para não disparar os bloqueios, e espera. A esmagadora maioria falha. Tanto faz: não custam praticamente nada.
Isto é o credential stuffing, e não é adivinhar. É verificar. A palavra-passe já a têm; a única coisa que descobrem é onde mais é que a puseste.
A tua palavra-passe daquele fórum não era importante. O fórum também não. O que é importante é que a mesma cadeia de caracteres abre o teu email, e o teu email abre todo o resto via «esqueci-me da palavra-passe». O pecado original não é ter sido fraca: é ter sido a mesma. Uma palavra-passe de trinta caracteres, aleatória e perfeita, reutilizada em dois sítios, é tão boa como o pior dos dois. E tu não controlas a maneira como o pior dos dois faz o hash.
O que se deduz de tudo isto
- Mudar a palavra-passe divulgada não chega se a repetiste. O urgente não é o sítio que saiu nas notícias. São os outros.
- Uma palavra-passe por sítio, e que te seja indiferente esquecê-la. Se consegues lembrar-te de todas as tuas palavras-passe, ou tens muito poucas ou são muito más.
- O segundo factor parte a corrente. O credential stuffing testa
email:palavra-passe. Se isso não chegar para entrar, o inventário deixa de valer.
A tua palavra-passe divulgada não está nas mãos de um inimigo. Está numa linha de um ficheiro, no meio de outras centenas de milhões, à espera que a alguém lhe compense experimentá-la em mais um sítio. E a única coisa que decide se aquilo funciona decidiste-a tu há anos, quando escreveste a mesma palavra pela segunda vez.
Fontes: a fuga da RockYou (Dezembro de 2009) e o uso posterior do rockyou.txt
como dicionário de ataque · Have I Been Pwned e Pwned Passwords, de Troy Hunt ·
NIST SP 800-63B, sobre a verificação de palavras-passe contra listas de valores
comprometidos · a análise de Troy Hunt sobre a Collection #1 (Janeiro de 2019) e
os números que publicou · definição de credential stuffing da OWASP.