🔐Senhas e Criptografia
Atualizado
Atualizado
Num cenário crítico como um vazamento de credenciais de um banco de dados, o tipo de Hash usado nas senhas muda completamente o que um atacante pode conseguir, e isso é um pequeno exemplo da grande importância do entendimento deste tópico.
Neste ano, ainda vejo grandes empresas usarem Hash MD5 para armazenamento de senhas, e houve um cenário em uma delas em que através de um ataque de SQL Injection consegui baixar todas as credenciais, e com um simples ataque de Bruteforce, consegui 90% das senhas.
Não é necessário um conhecimento profundo em criptografias para trabalhar como Pentester e/ou demais cargos de Infosec, somente entender o que significa cada tópico e no máximo ser capaz de criar um script que criptografa e descriptografa alguma informação. Somente se você seguir como especialista em criptografia que vai ser primordial você entender toda a matemática por trás dos algoritmos.
A seguir vou listar alguns tópicos deste assunto, importantes a serem estudados:
Funções Hash criptográfica: É de suma importância entender quais destas funções Hash são seguras e quais devemos evitar, como por exemplo utilizar bons algoritmos como bcrypt para armazenamento de senhas, e não SHA1, MD4, MD5, e outros.
Existe também um ataque bem conhecido neste ramo chamado Length Extension, que consiste em: Tendo uma mensagem original, uma chave secreta e um Hash dessas duas informações, é possível através desse ataque, alterar a mensagem tendo apenas o tamanho da chave. Hash Extender(https://github.com/iagox86/hash_extender) é uma ótima ferramenta para isso.
Encodes: Muitas pessoas erroneamente ainda pensam que codificações são criptografias, não são, pois não há nenhuma senha no processo de codificação. Encodes estão presentes em quase todos os sistemas, principalmente o base64, muitas vezes informações sensíveis estão encodadas nesse algoritmo, e é trivial saber identificar.
Senhas Linux: Antigamente as informações de senhas do Linux eram armazenadas em /etc/passwd
, hoje esse arquivo somente lista informações como usuários do sistema e atualmente as informações de senhas estão gravadas em /etc/shadow
(onde somente usuários administrativos têm acesso). Neste arquivo, as senhas seguem o seguinte formato:
Onde há o usuário, o tipo de Hash, o Hash da senha, e outras informações da senha, como data de expiração.
Senha Windows: As senhas Windows encontram-se no arquivo arquivo de banco de dados chamado Security Account Manager (SAM), e localizado em C:\Windows\System32\Config\SAM
, este arquivo armazena as senhas em formato Hash LM/NTLM.
Existe também um processo chamado Local Security Authority Server Service (LSASS), responsável pela política de segurança do sistema, onde também é possível obter as senhas através desse processo.
Conseguir senhas Windows é muito mais fácil do que as senhas Linux, inclusive este artigo do Hacktrickshttps://book.hacktricks.xyz/windows-hardening/stealing-credentials possui diversos métodos para isso, mostrando o uso de ferramentas como NetExec, Mimikatz e outras:
Existe também uma técnica chamada Pass The Hash onde é possível em determinados serviços do Windows server, como o SMB, conseguir uma autenticação somente usando o Hash, sem saber a senha.
Ferramentas de quebra de senha: Durante uma análise de segurança onde é possível obter um determinado Hash, é bastante interessante tentar quebrá-lo para obter a senha, com isso, o John e o Hashcat são as excelentes ferramentas nesse processo, elas nativamente já vem no Kali Linux e são bastante fáceis de serem usadas.
Também é possível arriscar quebrar um Hash(principalmente os mais fracos, como MD5) usando ferramentas online, tais como: https://hashkiller.io/, https://crackstation.net/ ou https://hashes.com/. Esses sites possuem databases que chegam de bilhões até trilhões de senhas, muitas vezes de vazamentos, por isso são muito úteis.
Criptografias Simétricas e Assimétricas: A Criptografia Assimétrica, baseada em chaves públicas e privadas, está presente nos principais protocolos de comunicação segura da Internet, como o Transport Layer Security (TLS), responsável por criptografar todas as requisições HTTPS.
Como dito anteriormente, não é preciso entender como funciona a matemática por trás desses algoritmos, apenas conhecê-las, saber lidar com ferramentas como o OpenSSL e quais delas são seguras. Vale a pena dar uma olhada numa implementação básica em Python de RSA, Curva Elíptica e Diffie-Hellman.
Já a Criptografia Simétrica, onde usa uma mesma chave para criptografar e descriptografar, pode ser encontrada em protocolos como o WPA/WPA2 usado em Wi-Fi 's, criptografia de arquivos em sistemas operacionais, em VPNs e outras situações. As mais comuns delas são a Advanced Encryption Standard (AES) e Triple Data Encryption Standard (3DES).