Alguns trabalhos (aqui e aqui) já foram publicados sobre o assunto de segurança de chaves de criptografia na DRAM (Dynamic Random Access Memory). Basicamente, precisamos encontrar algo que pareça uma chave (entrópico e comprimento específico) e, em seguida, confirmar sua natureza, analisando a estrutura de memória em torno dela (tipos de dados C). O CryKeX permite extrair chaves de criptografia de memória.
A ideia é realizar um dump live memory de um processo e usar essas técnicas para encontrar chaves prováveis, pois o mapeamento de memória não muda.
O script não é só capaz de injetar em processos que já estão em execução, mas também envolvendo novos processos, lançando-os separadamente e injetando um pouco depois. Isso o torna capaz de despejar chaves de quase qualquer processo/binário no sistema.
Claro, o acesso a uma memória é limitado pelo kernel, o que significa que você ainda precisará de privilégios para um processo.
Linux Unified Key Setup (LUKS) utiliza técnica anti-forense para mitigar esse problema, no entanto, a extração de chaves de uma memória inteira ainda é possível.
O navegador Firefox usa algum gerenciamento de memória semelhante, portanto, não parece afetado.
O mesmo vale para PGP/GPG.
Instalação
Instalando dependências:
sudo apt install gdb aeskeyfind rsakeyfind || echo 'have you heard about source compiling?'
.
Um exemplo interativo para chaves OpenSSL AES:
openssl aes-128-ecb -nosalt -out testAES.enc
.
Digite uma senha duas vezes, em seguida, algum texto e, antes de terminar:
CryKeX.sh openssl
.
Finalmente, pressione Ctrl + D
3 vezes e verifique o resultado.
Chaves OpenSSL RSA:
openssl genrsa -des3 -out testRSA.pem 2048
.
Quando solicitado a senha:
CryKeX.sh openssl
.
Verificar:
openssl rsa -noout -text -in testRSA.pem
.
Vamos extrair chaves do SSH:
echo 'Ciphers [email protected]' >> /etc/ssh/sshd_config
ssh user@server
CryKeX.sh ssh
.
Do OpenVPN:
echo 'cipher AES-256-CBC' >> /etc/openvpn/server.conf
openvpn yourConf.ovpn
sudo CryKeX.sh openvpn
.
TrueCrypt/VeraCrypt também é afetado: selecione o arquivo veracrypt
em VeraCrypt, monte com a senha pass
e:
sudo CryKeX.sh veracrypt
.
Navegadores baseados no Chromium (obrigado, Google):
CryKeX.sh chromium
CryKeX.sh google-chrome
.
Apesar do Firefox não ter sido explicitamente afetado, o Tor Browser Bundle ainda é passível de ser devido ao tunelamento:
CryKeX.sh tor
.
Como dito, você também pode envolver processos:
apt install libssl-dev
gcc -lcrypto cipher.c -o cipher
CryKeX.sh cipher
wrap
cipher
Download do script
Faça download da última versão diretamente no link do projeto no GitHub – Linux Memory Cryptographic Keys Extractor – CryKeX.
Propriedades
- Cross-platform
- Minimalismo
- Simplicidade
- Interatividade
- Compatibilidade e Portabilidade
- Aplicação Independente
- Process Wrapping
- Process Injection
Dependências
- Unix: deve funcionar em qualquer sistema operacional baseado em Unix
- BASH – todo o script
- Pivilégios de root (opcional)
Limitações
- Apenas chaves AES e RSA
- Falha na maior parte do tempo no navegador Firefox
- Não funcionará para criptografia de disco (LUKS) e PGP/GPG
- Precisa de privilégios de usuário adequados e autorizações de memória
.
.
Disclaimer: Todas as informações aqui contidas são para fins didáticos e não para causar danos e prejuízos para alguém, usem sempre o conhecimento aqui compartilhado com ética e responsabilidade. Não nos responsabilizamos pela utilização indevida do conteúdo aqui exposto. Leia mais no aviso legal em nosso site.
.
1 comentários SobreExtrair chaves de criptografia na memória em Linux
Pingback: OWASP Top 10 2017 dos Principais Riscos à Segurança de Aplicações Web - Tiago Souza ()