Módulo 3
Autenticação
Última atualização em: 19 de dezembro de 2024
Editar esta página no GitHubMódulo 3
Última atualização em: 19 de dezembro de 2024
Editar esta página no GitHubEm qualquer site que tenha logins de usuários, é importante que o site proteja as contas de usuários contra acesso não autorizado e também que as próprias credenciais da conta sejam protegidas. Este subtópico descreve as áreas mais comuns de autenticação em que aparecem falhas nos aplicativos web.
Após concluir este subtópico, os profissionais deverão ser capazes de fazer o seguinte:
A autenticação é o processo pelo qual um usuário de um sistema prova que é quem diz ser. É a base sobre a qual o controle de acesso é construído. Normalmente, um usuário fornece uma informação que o identifica (nome de usuário, e-mail, telefone etc.) e uma informação secreta que valida essa identidade (geralmente uma senha ou frase secreta, embora métodos alternativos ou adicionais, como chaves de segurança, WebAuthn e Passkeys, estejam ganhando popularidade). Neste subtópico, serão abordadas algumas classes de vulnerabilidades que são comuns e de alto impacto em aplicativos web.
Se os usuários tiverem que fazer login em um site com um nome de usuário e uma senha, o site deverá ser capaz de validar se o usuário digitou a senha correta. Além disso, as senhas devem ser armazenadas de forma segura no banco de dados de autenticação do aplicativo, pois esse banco de dados pode ser comprometido por injeção de SQL, perda de backups ou até mesmo por membros mal-intencionados ou infiltrados da organização que administra o site. Há várias abordagens para o armazenamento de senhas:
Algoritmos especiais de armazenamento de senhas O problema com os hashes criptográficos é que eles foram projetados para serem rápidos e eficientes. A maior parte de seu uso é para verificar se os dados não foram adulterados. Esse problema já havia sido resolvido em 1976, com uma função de crypt do Unix que salgava e criptografava a senha várias vezes para diminuir a força bruta. Não é de surpreender que esse algoritmo não resista aos recursos modernos da computação, mas a ideia geral ainda é usada atualmente com algoritmos especiais projetados para armazenar derivados de senhas. Esses algoritmos são projetados para usar recursos ajustáveis de CPU e memória, para fazer uma boa compensação entre desempenho e resistência à força bruta. Os bons algoritmos de manipulação de senhas incluem (em ordem decrescente de preferência) scrypt, argon2, bcrypt e PBKDF2. Como medida de defesa em profundidade, é uma boa prática combinar a senha do usuário com um segredo que não esteja armazenado no próprio banco de dados. Por exemplo, o segredo pode ser codificado no próprio aplicativo. Isso provavelmente impedirá a recuperação da senha se apenas o banco de dados de senhas for perdido.
Faça login no seu DVWA e certifique-se de que o nível de segurança está configurado como baixo. Navegue até a seção de Injeção de SQL e digite o seguinte na caixa de texto:999' union all select user, password from users where '1'='1
Isso retornará o nome e o sobrenome de todos os usuários que têm um userid
de 999 (não há nenhum) e também o hash de nome de usuário e senha de todos os usuários. Use um site de pesquisa de hash na internet (por exemplo, https://www.whatsmyip.org/hash-lookup/) para pesquisar o hash da senha do usuário administrador. Que tipo de hash é usado para armazenar as senhas dos usuários do DVWA? Qual é a senha do usuário chamado “1337”?
Para obter mais informações sobre o manuseio de senhas, consulte a folha de dicas de armazenamento de senhas da OWASP.
Se o usuário de um site esquecer sua senha, a maioria dos sites oferece uma maneira automatizada de o usuário verificar sua identidade para definir uma nova senha. O ideal é que esses métodos sejam aproximadamente tão seguros quanto o processo padrão de verificação de senha, no qual o usuário digita uma senha secreta que conhece em uma página da web, mas são significativamente menos convenientes.
A maioria dos sites presumirá que a conta de e-mail do usuário é razoavelmente segura e enviará por e-mail ao usuário um link que permitirá a redefinição da senha. Essa suposição provavelmente está correta para a grande maioria das contas de usuário na grande maioria dos sites. Os links de redefinição de senha (e, adicionalmente, os links de “login mágico”) devem ter as seguintes propriedades para minimizar o risco do usuário:
Os links de redefinição também podem ser enviados por SMS. É menos provável que o SMS seja interceptado do que o e-mail por hackers normais, mas é vulnerável à interceptação pelos governos do país em que o usuário se encontra. Se um token mais curto (por exemplo, um PIN) for enviado por SMS, é importante ter uma proteção forte contra força bruta na página que aceita o PIN, por exemplo, um tempo de vida do PIN de 10 minutos e limitação de taxa. Observe também que há ataques DoS simples e lucrativos que envolvem fazer com que um servidor envie mensagens SMS para um número de telefone escolhido pelo invasor. Ao executar um grande número de redefinições de senha por SMS, um invasor pode incorrer em altos custos para o operador do site e, possivelmente, ganhar dinheiro no processo.
Um método alternativo de redefinição de senha envolve fazer perguntas ao usuário para as quais tanto o site quanto o usuário sabem as respostas, mas que um invasor talvez não saiba. Esses métodos tendem a ser extremamente fracos ou extremamente fortes para verificar a identidade do usuário. As “perguntas secretas” padrão, como perguntar onde o usuário nasceu, o nome de solteira da mãe, a marca do primeiro carro etc., são bastante fracas. Em primeiro lugar, um invasor pode encontrar facilmente a resposta para essas perguntas. Em segundo lugar, a maioria delas é impossível de ser alterada, portanto, caso um invasor descubra uma resposta (mesmo comprometendo outro site), ele poderá usá-la repetidamente. Por fim, a maioria dessas perguntas tem apenas algumas respostas comuns. Por exemplo, se você perguntar a um coreano o nome de solteira de sua mãe, uma proporção significativa das respostas será “Kim” ou “Lee”. O outro tipo de pergunta secreta, mais seguro, envolve comunicações offline entre o site e o usuário. Exemplos disso são contas de serviços públicos e extratos bancários. Para que o usuário redefina sua senha, ele deve inserir, por exemplo, os valores da 3ª e 5ª transações em seu extrato bancário. O usuário teria direito a apenas algumas tentativas e, em seguida, precisaria realizar um processo de redefinição ainda menos conveniente com o atendimento ao cliente. Esse processo de redefinição pode ser muito seguro, embora, na era das declarações online, provavelmente seja menos seguro do que enviar um token por e-mail.
Para saber um pouco mais sobre a redefinição segura de senhas, consulte a folha de dicas da OWASP sobre Esqueci minha senha. Para um estudo aprofundado das vulnerabilidades de autenticação e autorização, consulte a Trilha de Aprendizagem de Avaliação de Segurança de Aplicativos Web.
A maioria dos aplicativos web usa senhas para autenticação, embora técnicas como WebAuthentication usando chaves de segurança e sessões de autenticação extremamente longas combinadas com links de login por e-mail estejam ganhando popularidade. Se um site usa senhas, é importante que essas senhas sejam fortes. No entanto, a definição de uma senha “forte” mudou ao longo dos anos. Há três métodos principais que os invasores usam para atacar diretamente as senhas dos usuários:
Most web applications use passwords for authentication, though techniques like WebAuthentication using security keys and extremely long lived authentication sessions combined with login links via email are gaining popularity. If a website uses passwords, it’s important that those passwords be strong. However, the definition of a “strong” password has shifted over the years. There are three primary methods that attackers uses to directly attack user passwords:
Desses ataques, os ataques virtuais são muito mais comuns. Idealmente, os aplicativos não seriam vulneráveis a injeções de SQL, os membros internos não seriam comprometidos ou agiriam de forma maliciosa, e os backups de banco de dados nunca seriam perdidos. No entanto, seria irresponsável ignorar a possibilidade de um ataque offline. Com base nisso, as prioridades de um aplicativo web devem ser (em ordem):
w)*l3
não seja comum, ela ainda pode ser descoberta rapidamente em um ataque de força bruta. A definição de um tamanho mínimo de senha pode ajudar a reduzir os ataques de força bruta.Certamente, essas prioridades devem ser equilibradas com as necessidades do usuário, que pode precisar recorrer a um gerenciador de senhas ou, caso contrário, memorizar sua senha. Além disso, as senhas como método de autenticação apresentam várias limitações. A próxima seção aborda a autenticação multifatorial e alternativas às senhas.
Para mais informações sobre a força de senhas, consulte este resumo das diretrizes de autenticação do NIST do governo dos EUA.
Como você deve ter percebido na seção anterior, a segurança da senha é muito difícil. Isso piora quando você considera os ataques de engenharia social, como o phishing.
O phishing faz parte de uma classe de ataques de engenharia social que os invasores usam para atacar indivíduos. Embora o phishing possa ter muitos objetivos (como convencer os usuários a instalar malware em seus computadores ou transferir dinheiro para os invasores), o objetivo que nos interessa é roubar as senhas dos usuários. Embora o phishing geralmente se refira a ataques lançados por e-mail, técnicas semelhantes podem ser usadas em uma variedade de meios de comunicação, como SMS, WhatsApp, Signal e até mesmo QR Code.
Em uma campanha típica de phishing para roubo de credenciais, os invasores enviam e-mails às vítimas se passando por um site legítimo. O e-mail incluirá uma ação solicitada (como a solicitação de alteração de senha ou a confirmação de uma notificação), juntamente com um link para um site controlado pelo invasor, que apresenta uma página de login que parece legítima. Se a vítima clicar no link e, em seguida, inserir sua senha no site, a senha será enviada ao invasor. (Para mais informações sobre phishing, consulte a trilha de aprendizagem Investigando Infraestruturas Maliciosas.)
Os ataques de phishing são de custo extremamente baixo para os invasores e tendem a ser extremamente eficazes. Quando o invasor tiver a senha da vítima, ele poderá fazer login no site de destino como se fosse a vítima. Com a preparação, o invasor pode usar a automação para executar imediatamente ações na conta da vítima, incluindo a alteração do endereço de e-mail e da senha do usuário para bloquear a vítima em sua própria conta.
Considerando o perigo dos ataques de phishing e a total incapacidade da autenticação por senha de impedir o phishing, qualquer esquema de autenticação multifatorial deve ser avaliado em relação à sua resistência a phishing.
Tradicionalmente, há três tipos de elementos (chamados fatores) que podem ser usados para autenticação:
A MFA (autenticação multifatorial) combina dois ou mais desses fatores para fortalecer o sistema de autenticação. Há muitos exemplos de autenticação multifatorial na vida cotidiana. O uso de um caixa eletrônico requer algo que você tem (o cartão) e algo que você sabe (seu PIN). Muitos sistemas de controle de acesso a edifícios têm um crachá para abrir uma porta, mas esse crachá também mostra o rosto do portador do crachá em um visor que um guarda pode ver, combinando algo que você tem (o crachá) com algo que você é (seu rosto).
No restante desta subseção, discutiremos uma variedade de métodos comuns de MFA na web.
Embora isso tecnicamente não seja MFA (combina várias coisas que o usuário sabe), era muito popular no passado e ainda é usado em muitos contextos. O uso de perguntas secretas como parte da autenticação oferece algum grau de defesa contra a reutilização de senhas e ataques de adivinhação de senhas. Além disso, oferece muito pouca proteção. É quase inútil contra phishing. O site do invasor pode simplesmente tentar fazer login no site real e, em seguida, voltar atrás e fazer as perguntas secretas ao usuário. Além disso, conforme discutido na subseção Redefinição de Senha acima, as respostas da pergunta secreta são frequentemente adivinháveis. Por esses motivos, as perguntas secretas não são um método de MFA forte.
Um método real de MFA de uso comum é enviar um código por mensagem de texto ao usuário quando ele faz login e, em seguida, exigir esse código para concluir o processo de login. Isso combina algo que o usuário sabe (sua senha) com algo que ele tem (o telefone que recebe mensagens em um determinado número). Infelizmente, os códigos SMS são quase inúteis contra phishing. Quando o usuário fizer login no site falso controlado pelo invasor, o site falso fará login no site real. O site real enviará uma mensagem de texto ao usuário, e este, por sua vez, digitará o código no site falso. O site falso usa o código no site real e é então conectado como a vítima. Além disso, os ataques de troca de SIM podem permitir que os invasores assumam o controle do número de telefone da vítima, permitindo que o invasor receba mensagens SMS destinadas a ela. Por esses motivos, os códigos SMS não são um método de MFA forte para sites confidenciais ou importantes.
TOTP significa Time-based One-Time Password (senha de uso único baseada em tempo). Para iniciar o sistema, o servidor e um dispositivo controlado pelo usuário trocam um segredo criptográfico (a “semente”) e sincronizam seus relógios. Então, quando um usuário deseja se autenticar em um site, o dispositivo do usuário executa uma operação criptográfica na semente e na hora atual, gerando um código que só é válido por segundos ou minutos. O servidor executa a mesma operação e a utiliza para verificar o código do usuário. No passado, o sistema TOTP mais comum era o RSA SecureIDs, que era caro. Atualmente, a maioria dos sistemas TOTP é executada em smartphones. Alguns exemplos são o Google Authenticator e o Authy. Independentemente disso, o TOTP funciona como algo que você tem (a semente TOTP) para fins de autenticação.
Assim como os códigos SMS, o TOTP também é vulnerável a phishing. O site falso controlado pelo invasor pode simplesmente solicitar ao usuário o código TOTP e usá-lo para fazer login no site real. Por esse motivo, o TOTP não é um método MFA forte para sites sensíveis ou importantes. Observe também que, se um usuário perder ou apagar o telefone, é improvável que ele consiga se autenticar no site, pois perdeu a semente do TOTP.
As chaves de segurança (às vezes chamadas de U2F, FIDO, WebAuthentication, Yubikeys etc.) são dispositivos que implementam um protocolo de autenticação criptográfica. Quando você registra uma chave de segurança em um site, o site e a chave trocam a chave pública. Para autenticação subsequente, o servidor apresenta um desafio assinado ao dispositivo. O dispositivo verifica a assinatura do site e, em seguida, responde com uma resposta assinada. Por fim, o servidor verifica a assinatura do dispositivo. Isso prova para o servidor que você está de posse da chave que foi registrada inicialmente, tornando-a algo que você tem. Tradicionalmente, as chaves de segurança eram dispositivos autônomos que se comunicavam com um computador ou dispositivo móvel por USB ou NFC, embora o suporte ao uso de smartphones e computadores esteja disponível em algumas configurações.
Diferentemente das outras MFA discutidas aqui, as chaves de segurança são resistentes a phishing. A chave aqui é que o desafio assinado inclui a identidade do site que está solicitando a autenticação. Para um site válido, isso corresponderá a uma chave de site existente no dispositivo. Para um site semelhante, controlado por um invasor, o site não corresponderá a nenhuma chave de site existente e, portanto, não haverá MFA. Assim, o invasor pode ter a senha do usuário, mas não conseguirá concluir a autenticação no site de destino, pois não há como o invasor concluir o processo de MFA. Como ponto negativo, as chaves de segurança podem ser perdidas. Geralmente, os sites que usam chaves de segurança permitem que os usuários registrem várias chaves, de modo que, se uma delas for perdida ou danificada, uma cópia de segurança poderá ser usada.
As senhas pré-geradas de uso único às vezes são usadas como backup para outros métodos de MFA e eram usadas para aplicativos de alta segurança antes do uso generalizado de smartphones. Os sites modernos frequentemente se referem a elas como “códigos de backup”. O servidor gerará uma lista de códigos, os armazenará e os apresentará ao usuário. O usuário geralmente imprime e armazena o papel em um local seguro. Toda vez que um código é usado, ele é marcado como inválido pelo servidor. Eles estão sujeitos aos mesmos pontos fracos do TOTP, mas têm a vantagem perversa de serem muito inconvenientes. Por isso, eles são frequentemente usados como backup para outros métodos de MFA. A esperança é que seu uso seja raro o suficiente para que, se um usuário for solicitado a inserir um código de backup, ele pare e examine minuciosamente o site solicitante, tornando menos provável que um ataque de phishing seja bem-sucedido. Exemplos de sites que usam códigos de backup são o Gmail e o GitHub.
Para saber um pouco mais sobre autenticação, consulte a folha de dicas de autenticação da OWASP e a folha de dicas de MFA da OWASP. Para um estudo mais detalhado, consulte a Trilha de Aprendizagem de Avaliação de Segurança de Aplicativos Web.
A fixação de sessão é um conceito importante na segurança da web. Refere-se a um ataque em que um invasor define o identificador de sessão de um usuário (ID de sessão) com um valor conhecido pelo invasor. Isso pode ocorrer por vários meios, como ataques de phishing ou pela exploração de vulnerabilidades no aplicativo web. O ataque envolve adquirir um ID de sessão válido, persuadir um usuário a se autenticar com ele e, em seguida, assumir o controle da sessão aproveitando o ID de sessão conhecido. Isso exige que o invasor forneça um ID de sessão de aplicativo web genuína e manipule o navegador da pessoa-alvo para usá-la. Ele pode, então, sequestrar a sessão do usuário, obtendo acesso não autorizado à conta do usuário.
A fixação de sessão explora os pontos fracos na forma como um aplicativo web gerencia os IDs de sessão. Essencialmente, o aplicativo vulnerável não atribui um novo ID de sessão durante a autenticação do usuário, permitindo que o invasor utilize um ID de sessão existente. Diferentemente do Sequestro de Sessão, que ocorre após o login do usuário, a Fixação de Sessão estabelece o controle sobre uma sessão antes da autenticação do usuário.
Várias técnicas podem ser usadas para executar esse ataque, dependendo de como o aplicativo web lida com os tokens de sessão:
Muitas estruturas e bibliotecas da web oferecem recursos para ajudar os desenvolvedores a implementar o gerenciamento seguro de sessões, o que ajuda a atenuar as vulnerabilidades de fixação de sessão. Essas estruturas geralmente incluem mecanismos internos para gerar, armazenar e validar IDs de sessão. Elas podem permitir a configuração da expiração da sessão, a regeneração de IDs de sessão após a autenticação e a garantia da transmissão segura dos dados da sessão. No entanto, pode ser útil para os desenvolvedores implementar efetivamente essas práticas também no código de seus aplicativos, garantindo a configuração e o uso adequados para atenuar a fixação de sessão e outras vulnerabilidades. Atualizações regulares de bibliotecas e estruturas são fundamentais, pois elas podem conter correções ou melhorias relacionadas à segurança do gerenciamento de sessões.
Para a maioria dos administradores de servidores web, a melhor maneira de atenuar as vulnerabilidades de fixação de sessão é garantir que a pilha de software que você usa para autenticação contenha atenuações contra esses ataques e também esteja atualizada. Se você estiver usando uma biblioteca que tenha uma vulnerabilidade que permita a fixação de sessão, certifique-se de atualizá-la assim que possível.
Aplicativos web, bibliotecas e estruturas adotam várias medidas para atenuar os ataques de fixação de sessão. Isso inclui a geração de IDs de sessão aleatórios para cada sessão de usuário, a expiração de sessões após um período de inatividade e a implementação de medidas como a regeneração de ID de sessão após a autenticação. Seu aplicativo web deve sempre usar HTTPS para segurança e privacidade, além de oferecer uma camada adicional de proteção contra ataques de fixação de sessão: é muito mais difícil interceptar IDs de sessão em trânsito se a comunicação entre o cliente e o servidor for criptografada. Por fim, seu aplicativo web também deve rejeitar tokens de sessão impostos externamente, o que também ajudará a proteger contra esse tipo de ataque.
Se você for programar um aplicativo web com recursos de autenticação, recomendamos que leia este artigo e implemente as seguintes medidas recomendadas, que ajudam a proteger o aplicativo web contra ataques de fixação de sessão:
Acesse o site Try Hack Me, crie uma conta e vá até a sala chamada OWASP Broken Access Control e siga as instruções.
Observação: embora esse exercício ofereça uma ótima oportunidade de aprendizado sobre como os invasores podem decifrar senhas mal protegidas, ele exige bastante espaço livre em disco e usa uma ferramenta que só está disponível no Windows e no Linux. Como talvez nem todos os alunos consigam fazer esse exercício prático, nós o marcamos como opcional. Incentivamos os alunos que desejam saber mais sobre as tabelas arco-íris e o armazenamento seguro de senhas, tanto os que podem quanto os que não podem fazer o exercício abaixo, a consultar leituras adicionais em publicações como esta.
Ao autenticar usuários, precisamos de uma maneira de verificar se eles inseriram as credenciais corretas. A maneira mais fácil de fazer isso é armazenar a própria senha em um banco de dados. Isso é inseguro, pois qualquer pessoa com acesso a esse banco de dados poderia saber as senhas de texto simples dos usuários, e elas seriam reveladas em caso de vazamento ou vulnerabilidade do aplicativo. Uma proteção simples pode ser implementada armazenando um valor de hash da senha. Este exercício demonstrará como é fácil quebrar essa proteção e aprender senhas de texto simples a partir de valores com hash. O objetivo deste exercício não é fazer com que os alunos acreditem que todos os mecanismos de autenticação podem ser facilmente violados, mas sim demonstrar como é fácil violar senhas que foram apenas transformadas em hash sem nenhum mecanismo de segurança adicional, como o sal.
As tabelas arco-íris são uma maneira inteligente de reduzir o tempo de computação em troca de espaço em disco ao tentar aplicar força bruta a uma senha com hash. Elas consistem em cadeias pré-calculadas de hashes que podem ser usadas para descobrir um valor hash (a senha de texto simples).
Dado o valor de hash 168f3c743786fea2e04aeeee33e112da
, tente descobrir a senha usando tabelas arco-íris. Use o RainbowCrack. A maneira mais fácil de executar o RainbowCrack pode ser usar o Kali Linux em uma VM ou inicializado a partir de um LiveUSB (consulte os links na seção de Informações Básicas no início desta trilha de aprendizagem para obter mais informações). O algoritmo de hash é MD5 e o hash é sem sal.
Dica: a senha é alfanumérica em letras minúsculas, com no máximo 6 caracteres. Depois de instalar o RainbowCrack, você pode usar o seguinte comando para gerar a tabela necessária:
rtgen md5 loweralpha-numeric 1 6 0 3800 1000000 0
(Opcional) Tente usar a tabela gerada para quebrar outro hash: feadfd87d487818698d63aedf385c4e2
.
Dica: se isso não funcionar, você pode tentar gerar mais tabelas para aumentar a taxa de sucesso do seu conjunto de tabelas (cobertura). Basta alterar o quinto parâmetro do comando rtgen para diferentes valores (tente de 1 a 5).
Tente quebrar o seguinte hash salgado: 93e99d25dd6e8f524f23814908b6c039
A geração de uma tabela arco-íris requer a especificação de um algoritmo de hash a ser usado, o comprimento máximo dos valores de texto simples nos quais estamos interessados e seu conjunto de caracteres. Esses parâmetros influenciam apenas o tempo que leva para uma tabela ser gerada (quantidade de cálculos necessários).
As tabelas para senhas mais curtas com conjuntos de caracteres menores (por exemplo, somente letras minúsculas) levarão menos tempo para serem geradas do que as tabelas para senhas longas com números e caracteres especiais.
Além disso, você precisa escolher quantas cadeias gerar e de que comprimento. Esses parâmetros são mais complexos de explicar (consulte o artigo técnico de Philippe Oechslin para mais informações), mas têm efeitos na cobertura da tabela. Apenas um subconjunto de todos os valores possíveis de texto simples é incluído em cada tabela arco-íris.
Quanto maiores forem os valores desses parâmetros, maior e mais cara (em termos de tempo de CPU) será a tabela, mas também mais valores de texto simples poderão ser descobertos com ela.
Tabelas pré-calculadas para diferentes funções de hash, comprimentos de senha e conjuntos de caracteres podem ser baixados da internet (por exemplo) ou obtidas em conferências de segurança de TI e encontros de hackers (como em). Para os fins deste exercício, vamos gerar as nossas próprias!
Você pode instalar o rainbowcrack em seu sistema ou usar o Kali Linux Live. No Kali, abra uma janela de terminal e execute:
sudo apt update
sudo apt install rainbowcrack
Isso instalará o software. Você pode usar o comando rtgen
para gerar tabelas. De acordo com este manual, o comando usa vários parâmetros:
rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index
Usaremos o MD5 como nosso algoritmo de hash. Procuraremos senhas com tamanho de 1 a 6 caracteres. Usaremos o conjunto de caracteres loweralpha-numeric
, que inclui apenas letras minúsculas e números. Usaremos 3800 para o comprimento da corrente e 1000000 para o número de correntes.
Para gerar nossa primeira execução de tabela:
sudo rtgen md5 loweralpha-numeric 1 6 0 3800 1000000 0
Esse comando pode demorar um pouco para ser executado, dependendo da configuração de seu sistema.
Após a geração, é necessária mais uma etapa antes de podermos usar nossas novas tabelas:
sudo rtsort
Isso classificará os dados para tornar o uso da tabela mais rápido. O rtcrack
se recusará a trabalhar com tabelas não classificadas.
Vamos tentar fazer o nosso primeiro hash:
rcrack . -h 168f3c743786fea2e04aeeee33e112da
Isso deve levar apenas um momento e revelar nossa senha em texto simples:
1 rainbow tables found
memory available: 11361376665 bytes
memory for rainbow chain traverse: 60800 bytes per hash, 60800 bytes for 1 hashes
memory for rainbow table buffer: 2 x 16000016 bytes
disk: ./md5_loweralpha-numeric#1-6_0_3800x1000000_0.rt: 16000000 bytes read
disk: finished reading all files
plaintext of 168f3c743786fea2e04aeeee33e112da is 1nfus3
statistics
----------------------------------------------------------------
plaintext found: 1 of 1
total time: 0.33 s
time of chain traverse: 0.22 s
time of alarm check: 0.11 s
time of disk read: 0.00 s
hash & reduce calculation of chain traverse: 7216200
hash & reduce calculation of alarm check: 4133612
number of alarm: 3194
performance of chain traverse: 32.80 million/s
performance of alarm check: 36.91 million/s
result
----------------------------------------------------------------
168f3c743786fea2e04aeeee33e112da 1nfus3 hex:316e66757333
Sucesso! Agora, vamos tentar o nosso segundo hash:
rcrack . -h feadfd87d487818698d63aedf385c4e2
O resultado:
1 rainbow tables found
memory available: 11236982784 bytes
memory for rainbow chain traverse: 60800 bytes per hash, 60800 bytes for 1 hashes
memory for rainbow table buffer: 2 x 16000016 bytes
disk: ./md5_loweralpha-numeric#1-6_0_3800x1000000_0.rt: 16000000 bytes read
disk: finished reading all files
statistics
----------------------------------------------------------------
plaintext found: 0 of 1
total time: 0.31 s
time of chain traverse: 0.20 s
time of alarm check: 0.11 s
time of disk read: 0.00 s
hash & reduce calculation of chain traverse: 7216200
hash & reduce calculation of alarm check: 4238786
number of alarm: 3324
performance of chain traverse: 36.08 million/s
performance of alarm check: 37.18 million/s
result
----------------------------------------------------------------
feadfd87d487818698d63aedf385c4e2 <not found> hex:<not found>
Não encontramos nosso hash nessa tabela. Vamos gerar mais algumas tabelas com a esperança de aumentar nossa cobertura. Usaremos o mesmo comando rtgen
, alterando apenas o parâmetro table_index
:
sudo rtgen md5 loweralpha-numeric 1 6 1 3800 1000000 0
sudo rtgen md5 loweralpha-numeric 1 6 2 3800 1000000 0
sudo rtgen md5 loweralpha-numeric 1 6 3 3800 1000000 0
sudo rtgen md5 loweralpha-numeric 1 6 4 3800 1000000 0
sudo rtgen md5 loweralpha-numeric 1 6 5 3800 1000000 0
sudo rtsort .
Vamos tentar novamente:
rcrack . -h feadfd87d487818698d63aedf385c4e2
O resultado:
6 rainbow tables found
memory available: 10784174899 bytes
memory for rainbow chain traverse: 60800 bytes per hash, 60800 bytes for 1 hashes
memory for rainbow table buffer: 6 x 16000016 bytes
disk: ./md5_loweralpha-numeric#1-6_0_3800x1000000_0.rt: 16000000 bytes read
disk: ./md5_loweralpha-numeric#1-6_1_3800x1000000_0.rt: 16000000 bytes read
disk: ./md5_loweralpha-numeric#1-6_2_3800x1000000_0.rt: 16000000 bytes read
disk: ./md5_loweralpha-numeric#1-6_3_3800x1000000_0.rt: 16000000 bytes read
disk: ./md5_loweralpha-numeric#1-6_4_3800x1000000_0.rt: 16000000 bytes read
disk: ./md5_loweralpha-numeric#1-6_5_3800x1000000_0.rt: 16000000 bytes read
disk: finished reading all files
plaintext of feadfd87d487818698d63aedf385c4e2 is trolo0
statistics
----------------------------------------------------------------
plaintext found: 1 of 1
total time: 0.54 s
time of chain traverse: 0.41 s
time of alarm check: 0.13 s
time of disk read: 0.02 s
hash & reduce calculation of chain traverse: 14432400
hash & reduce calculation of alarm check: 4766264
number of alarm: 4606
performance of chain traverse: 35.46 million/s
performance of alarm check: 36.66 million/s
result
----------------------------------------------------------------
feadfd87d487818698d63aedf385c4e2 trolo0 hex:74726f6c6f30
Entendido! Tabelas adicionais aumentaram a cobertura e o hash foi descoberto.
Um aprimoramento do uso de hashing simples para proteção de senhas é chamado de “salgar” os hashes, ou seja, adicionar um segredo específico do aplicativo ao valor do texto simples. Isso aumenta o comprimento e o conjunto de caracteres do valor hash, tornando inviável uma abordagem de tabela arco-íris. Tentar o terceiro hash (com sal) dado neste exercício falhará com este método, pois exigiria tabelas arco-íris maiores do que as que podem ser geradas (e armazenadas) atualmente.
Conclua o exercício que descrevemos acima: execute uma injeção de SQL no DVWA e compare os hashes que você descobriu com os que encontrou em um site de pesquisa de hash.
A autenticação quebrada representa uma ameaça significativa à segurança dos aplicativos web, permitindo que os invasores comprometam as credenciais do usuário, sequestrem sessões e obtenham acesso não autorizado a informações confidenciais. Neste conjunto de perguntas de múltipla escolha, você pode explorar o conceito de autenticação interrompida e se aprofundar nos vários riscos associados a essa vulnerabilidade. Além disso, se você tiver um mentor ou um colega, poderá examinar os diferentes tipos de falhas que podem levar ao comprometimento dos mecanismos de autenticação e discutir estratégias específicas de atenuação adaptadas para lidar com cada uma dessas vulnerabilidades de forma eficaz.
Com estas perguntas, aprimore seu conhecimento sobre a segurança de aplicativos web e aprenda a atenuar os riscos apresentados por uma autenticação interrompida:
Questão 1. O que é autenticação interrompida no contexto da segurança de aplicativos web? \
A) Uma vulnerabilidade que permite que os invasores executem código arbitrário no servidor.
B) Uma exploração que concede acesso não autorizado a partes restritas de um aplicativo web.
C) Um ponto fraco no mecanismo de autenticação de um aplicativo web, que leva ao comprometimento das credenciais do usuário.
D) Uma falha de segurança que permite que os invasores interceptem a comunicação entre o cliente e o servidor.
Questão 2. Quais são os possíveis riscos associados às vulnerabilidades de autenticação quebrada? \
A) Acesso não autorizado a dados confidenciais e contas de usuários.
B) Exposição de tokens de sessão, levando a ataques de sequestro de sessão.
C) Comprometimento das credenciais do usuário, incluindo senhas e tokens de autenticação.
D) Todas as opções anteriores.
Questão 3. Qual das opções a seguir NÃO é um exemplo de mecanismo de atenuação para vulnerabilidades de autenticação interrompida? \
A) Implementar a autenticação multifatorial (MFA) para contas de usuários.
B) Aplicar políticas de senhas fortes, incluindo a troca regular de senhas. \
C) Desativar o HTTPS para evitar a interceptação de credenciais de autenticação.
D) Implementar mecanismos de bloqueio de contas para evitar ataques de força bruta.
Questão 4. Que tipo de falha pode levar a mecanismos de autenticação comprometidos, permitindo que invasores adivinhem ou quebrem senhas de usuários? \
A) Fixação de Sessão
B) Falsificação de Solicitação Entre Sites (CSRF)
C) Complexidade Insuficiente de Senha
D) Cross-Site Scripting (XSS)
Questão 5. Qual é um exemplo específico de uma estratégia de mitigação para resolver a falha de complexidade insuficiente de senha? \
A) Implementar desafios CAPTCHA durante o processo de login.
B) Aplicar requisitos de comprimento e complexidade de senha. \
C) Criptografar tokens de autenticação para evitar interceptação.
D) Colocar em lista branca endereços IP confiáveis para acessar a página de login.
Questão 6. Qual estratégia de mitigação visa impedir que invasores explorem vulnerabilidades de fixação de sessão? \
A) Implementar mecanismos de expiração de sessão.
B) Criptografar cookies de sessão usando HTTPS.
C) Regenerar identificadores de sessão após autenticação bem-sucedida.
D) Aplicar políticas de senhas fortes para as contas de usuário.
Questão 7. Que tipo de falha pode levar a mecanismos de autenticação comprometidos, permitindo que invasores sequestrem sessões ativas de usuários? \
A) Expiração de Sessão Insuficiente
B) Armazenamento de Token Inseguro
C) Cross-Site Scripting (XSS)
D) Falsificação de Solicitação entre Sites (CSRF)
Questão 8. Qual estratégia de mitigação resolve a falha de armazenamento inseguro de tokens ao gerenciar os tokens de autenticação de forma segura? \
A) Armazenar tokens em texto simples dentro de cookies no lado do cliente.
B) Criptografar tokens usando um algoritmo de criptografia simétrica.
C) Implementar algoritmos seguros de hash de senha.
D) Usar cabeçalhos HTTP para transmitir tokens de autenticação.
Questão 9. Qual é um exemplo específico de uma estratégia de mitigação para prevenir ataques de fixação de sessão? \
A) Rotacionar identificadores de sessão após um login bem-sucedido.
B) Implementar autenticação multifatorial (MFA).
C) Usar desafios CAPTCHA para verificar a autenticidade do usuário.
D) Aplicar validação rigorosa de entrada no formulário de login.
Questão 10. Que tipo de falha pode levar a mecanismos de autenticação comprometidos, permitindo que invasores forjem solicitações para o aplicativo web enquanto estão autenticados como outro usuário?
A) Expiração de Sessão Insuficiente
B) Proteção Insuficiente na Camada de Transporte
C) Cross-Site Scripting (XSS)
D) Falsificação de Solicitação entre Sites (CSRF)
Preenchimento de Credenciais
GrátisUma visão geral de um ataque no qual o invasor testa muitas combinações de login, por exemplo, aquelas provenientes de uma violação de dados
Função hash criptográfica
GrátisUma visão geral do que são funções hash criptográficas e por que elas são tão importantes para a segurança.
Tabelas arco-íris
GrátisUma lista de funções de hash pré-computadas que podem ser usadas na tentativa de forçar conteúdo criptografado por força bruta.
Sal
GrátisUm sal consiste em um dado adicionado a uma senha ou outra informação antes de ser criptografada. Usá-lo torna muito mais difícil para um invasor utilizar tabelas arco-íris.
Crypt tradicional
GrátisUm breve olhar sobre os primeiros algoritmos usados para criptografar senhas na década de 1970. Não é mais utilizado.
Respostas criptográficas corretas
GrátisUma lista das soluções criptográficas que seria prudente usar nos dias de hoje.
Pesquisa de hash
GrátisUma ferramenta que faz pesquisas reversas de hashes e pode ser útil para trabalhar com DVWA e ferramentas semelhantes.
Guia de Armazenamento de Senhas e Guia de Senha Esquecida, Recurso 1
GrátisUma série de práticas recomendadas sobre como armazenar senhas criptografadas e sobre como gerenciar a recuperação de senhas.
Guia de Armazenamento de Senhas e Guia de Senha Esquecida, Recurso 2
GrátisUma série de práticas recomendadas sobre como armazenar senhas criptografadas e sobre como gerenciar a recuperação de senhas.
Fraude de SMS internacional
GrátisUm exemplo de como as mensagens SMS podem ser usadas de forma abusiva por invasores e um bom estudo de caso sobre o motivo pelo qual não devemos responder com SMS para fins de autenticação.
Selenium
GrátisUma ferramenta para automatizar tarefas do navegador da web que pode ser usada para testes.
Teste de Enumeração de Conta e Conta de Usuário Adivinháve
GrátisOutro fluxo de trabalho para teste de segurança de aplicativos web, desta vez para verificar se é possível fazer com que o aplicativo enumere nomes de usuário.
Have I Been Pwned
Gratuito para pequenas quantidades de consultasUm serviço fantástico e de boa reputação para verificar se um determinado nome de usuário foi mencionado em alguma violação de dados.
Apresentando 306 milhões de pwned para download gratuito
GrátisUm post no blog de Troy Hunt, fundador do Have I Been Pwned, sobre como ele encontrou milhões de senhas vazadas e como essa base de dados poderia ser utilizada.
Credenciais comuns
GrátisListas de credenciais comumente usadas, como senhas.
Diretrizes de senha do NIST
GrátisUma postagem de blog que descreve algumas das diretrizes de senha do NIST e os motivos por trás delas.
Phishing
GrátisUma visão geral dos ataques de phishing, sua história e métodos frequentemente usados por invasores.
Golpe de troca de SIM
GrátisUm tipo de golpe no qual um invasor obtém o controle do cartão SIM de uma pessoa-alvo. Esse é um dos principais motivos para não confiar na autenticação via SMS.
Visão geral do U2F
GrátisUma análise mais detalhada de como funciona o U2F, um método de autenticação popular que se baseia em ferramentas como chaves de segurança físicas.
Códigos de backup de autenticação de dois fatores: Google
GrátisHá ocasiões em que o método principal de autenticação de dois fatores é perdido ou destruído. Nesses casos, o usuário precisará usar um método de backup. Esses artigos demonstram como o Google e o GitHub gerenciam esses backups.
Códigos de backup de autenticação de dois fatores: Github
GrátisHá ocasiões em que o método principal de autenticação de dois fatores é perdido ou destruído. Nesses casos, o usuário precisará usar um método de backup. Esses artigos demonstram como o Google e o GitHub gerenciam esses backups.
Dicas sobre autenticação multifatorial
GrátisUma visão geral do que é a autenticação multifatorial e quais práticas recomendadas devemos adotar ao implementá-la.
Parabéns por ter concluído o Módulo 3!
Clique na caixa de seleção para confirmar a conclusão do módulo e continuar para o próximo módulo.
Marca o módulo atual como concluído e salva o progresso do usuário.
Você completou todos os módulos desta trilha de aprendizagem.