Como suas senhas são quebradas? Como melhorar a segurança das senhas?
Neste artigo, apresentamos vários métodos clássicos para quebra de senhas, juntamente com os princípios subjacentes a essas abordagens. Abordando esses conceitos, fornecemos práticas tanto do ponto de vista dos responsáveis pelas senhas quanto dos proprietários de contas sobre como melhorar a segurança das senhas.
Frequentemente vemos notícias de que senhas de usuários de alguns aplicativos conhecidos com uma grande base de usuários são vazadas. Você pode pensar que, como não usa esse aplicativo em particular, tais incidentes não têm nada a ver com você, mas isso não é o caso na realidade.
Recentemente, também houve notícias no Twitter de que métodos de IA podem acelerar muito a velocidade de quebra de senhas. Então, queríamos entender as complexidades por trás disso e ver como podemos melhorar a segurança de nossas senhas.
Como as senhas são quebradas?
Em geral, as senhas de contas são normalmente processadas usando vários algoritmos de hash e, em seguida, armazenadas em bancos de dados. Você pode consultar nosso blog anterior para obter uma melhor compreensão de hashing de senhas. Infelizmente, alguns provedores de serviços, sem bom senso, armazenam senhas em texto plano dentro de seus bancos de dados. Esta prática pode resultar em danos ainda mais significativos se os dados forem vazados.
Ao salvar senhas com hash, nem mesmo os administradores de banco de dados podem acessar sua senha original, aumentando significativamente a segurança. Ao verificar a correção de uma senha inserida, o mesmo algoritmo de hash é usado para processar a senha inserida. O hash resultante é então comparado com o valor armazenado no banco de dados. Se os dois valores de hash coincidirem, a senha inserida é considerada correta.
Em termos simples, a quebra de senha envolve gerar cadeias de caracteres que aderem às regras de senha permitidas. Envolve então verificar continuamente essas cadeias usando o método mencionado anteriormente para eventualmente descobrir a senha em texto plano correta.
Métodos comuns para quebra de senhas
Nesta seção, vamos introduzir brevemente três maneiras comuns de quebrar senhas.
Ataque de força bruta
Os ataques de força bruta geralmente enumeram todas as possibilidades dentro das regras de senha permitidas e as tentam uma por uma.
Por exemplo, os telefones móveis podem definir uma senha numérica de 4 dígitos. Ataques de força bruta tentarão todas as possibilidades uma por uma desde 0000
, 0001
, 0002
, …, até 9999
.
Os ataques de força bruta são muito demorados, porque há muitas tentativas. Supondo que o comprimento da senha seja $L$, e o número de caracteres possíveis por dígito de senha seja $n$, então o número de possibilidades que ataques de força bruta precisam tentar é $n^L$, que é um número muito grande.
A razão pela qual muitas senhas exigem uma combinação de números, letras maiúsculas e minúsculas, e caracteres especiais é aumentar $n$, o que aumenta muito o número de possibilidades, aumentando assim a dificuldade de quebrar a senha.
Ataque de dicionário
Os ataques de dicionário utilizam palavras de dicionários, muitas vezes combinadas com espaços, números, símbolos especiais e outros elementos, para formar várias combinações de senhas. Essas combinações são então usadas para tentar correspondências de senha.
Muitas pessoas optam por usar frases com significados claros como senhas para facilitar a lembrança. Os ataques de dicionário provam ser um método eficaz para quebrar senhas com tais características.
Ataque de tabela arco-íris
Uma tabela arco-íris é um mapeamento pré-computado de senhas em texto plano para seus valores hash correspondentes. Comparando diretamente os valores hash armazenados no banco de dados com aqueles na tabela arco-íris, quaisquer correspondências encontradas podem ser usadas para procurar e recuperar diretamente a senha em texto plano correspondente.
As tabelas arco-íris oferecem a vantagem de fornecer acesso imediato a senhas em texto plano se o valor hash tiver sido pré-calculado (e registrado na tabela arco-íris). No entanto, é importante notar que, se o valor hash não tiver sido pré-computado (e, portanto, não estiver presente na tabela), uma tabela arco-íris não pode ser utilizada.
Além dos métodos descritos acima, existem inúmeras outras técnicas não abordadas aqui. Geralmente, uma combinação desses métodos é empregada para abranger todas as senhas possíveis e acelerar o processo de quebra.
Como acelerar a quebra de senhas?
Na seção anterior, introduzimos brevemente alguns métodos clássicos de quebra de senhas. Podemos resumir algumas ideias para melhorar a velocidade ou taxa de sucesso de quebra de senhas a partir deles.
Para quebrar uma senha, geralmente envolve dois passos:
- Determinar o espaço de busca para a senha (gerar senhas possíveis)
- Usar o algoritmo de hash para gerar hashes para as senhas possíveis obtidas na etapa anterior, e compará-las com o hash da senha a ser quebrada
O ataque de dicionário e ataque de tabela arco-íris mencionados acima otimizam essas duas etapas respectivamente:
- O ataque de dicionário reduz o espaço de busca das senhas. Partindo da suposição de que "usuários tendem a criar senhas usando combinações de palavras com significados reais", palavras como
zzzz
não estão incluídas no dicionário, o que significa que não serão tentadas como possíveis senhas. Esta prática é semelhante a descartar preventivamente respostas incorretas. Análogo a enfrentar perguntas de múltipla escolha, embora você possa não ter certeza sobre a opção correta, pode identificar quais escolhas são definitivamente erradas. Ao eliminar essas opções obviamente incorretas, suas chances de adivinhar corretamente entre as escolhas restantes são aumentadas. - O ataque de tabela arco-íris acelera o tempo de execução do algoritmo de hash. Para indivíduos bem versados em estruturas de dados, a busca é uma operação de complexidade $O(1)$, e nenhuma operação pode ser mais simples do que $O(1)$ em termos de complexidade de tempo. Em contraste, a complexidade de tempo de algoritmos de hash comumente usados, como MD5 e SHA, é $O(n)$, que é marcadamente mais lenta do que $O(1)$.
Na prática, otimizar o processo de quebra de senhas também começa dos dois pontos de vista acima. Vale mencionar que, devido ao espaço relativamente pequeno para otimizar a complexidade de tempo $O(n)$ para algoritmos de hashing de strings, mais considerações são feitas na melhoria de hardware ou métodos de computação, que não serão detalhados aqui.
Então, como a IA ajuda a quebrar senhas?
Em todo o esforço de quebra de senhas, o papel da IA se estende a aprender certos padrões e métodos de construção de senhas de textos expostos. Subsequentemente, a IA pode simular esses padrões de construção de senhas para gerar uma série de senhas potenciais. Em seguida, a IA pode empregar algoritmos de hashing ou até mesmo hardware especializado para realizar a quebra de senhas.
Na verdade, comparado a outras ferramentas de quebra de senhas, a vantagem arrasadora do PassGAN é que ele pode "adivinhar as senhas mais prováveis o mais rápido possível", que é a ideia de "reduzir o espaço de busca de senhas possíveis" mencionada acima.
Como tornar a senha mais segura?
Explicaremos como proteger senhas de duas perspectivas. Aqui vamos começar simplesmente pela própria senha, sem discutir outros meios de garantir a segurança da conta, como autenticação multifatorial (MFA) e assim por diante.
Do lado dos provedores de serviços de identidade
Como provedores de serviços de identidade, eles hospedam as senhas de todos os usuários, o que concede a eles a responsabilidade de salvaguardar a segurança dessas senhas. Aqui estão vários esquemas que podem ser implementados para melhorar a segurança das senhas dos usuários:
-
Evite armazenar senhas em texto plano: Embora isso possa parecer senso comum, alguns provedores de serviços ainda armazenam senhas em texto plano dentro de seus bancos de dados. Usar valores de hash para armazenar senhas adiciona uma camada de segurança; mesmo que o banco de dados seja comprometido, os hackers precisariam de considerável esforço para quebrar as senhas com hash.
-
Aplicar limites de taxa na interface de API para verificação de senha: Vamos revisitar o processo de quebra de senhas mencionado anteriormente. Uma parte integrante deste processo envolve "verificar" se uma senha está correta. Como as senhas são confiadas aos provedores de serviços de identidade, eles são as únicas entidades equipadas para oferecer uma API para verificação de senhas. Ao limitar a frequência de acesso a esta API, podemos impedir que hackers tentam rapidamente várias senhas, mesmo que possuam palpites de senha altamente prováveis.
-
Impor composições de senha mais complexas: Por exemplo, como mencionado anteriormente, uma maior variedade de caracteres dentro de senhas de um determinado comprimento contribui para uma complexidade aumentada. Além disso, empregar técnicas de IA semelhantes às discutidas anteriormente permite a avaliação de segurança de senhas antes da submissão. Se uma senha for considerada fraca, os usuários podem ser solicitados a escolher uma alternativa mais robusta.
Na perspectiva dos usuários
Como proprietários de contas e ativos digitais associados, os usuários precisam prestar a máxima atenção para garantir a segurança de suas senhas de contas.
-
Evite usar a mesma senha em sites diferentes: Após obter senhas de certos sites, muitos hackers tentam utilizar essas credenciais de conta para acessar outros sites. Se várias contas para diferentes serviços compartilharem a mesma senha, pode haver um risco de perda de contas e vazamento de informações no cenário mencionado.
-
Opte por senhas puramente aleatórias sempre que possível: Esta abordagem ajuda a prevenir o uso repetido de padrões de senha comuns que a maioria das pessoas emprega (como mencionado anteriormente, usando frases em inglês), complicando assim os esforços dos hackers para "reduzir o espaço de busca das senhas" e aumentando o nível de complexidade das senhas.
Como o provedor de infraestrutura para serviços de identidade, o Logto implementou muitas das melhores práticas mencionadas para proteger a segurança das contas dos usuários. Isso permite que os usuários se envolvam com vários aplicativos sem a preocupação de perda de conta, enquanto também permite que os provedores de serviços online garantam a segurança dos dados dos usuários com mínimo esforço, permitindo assim que eles se concentrem em suas atividades de negócios principais.