
Uma ferramenta de teste de falsificação de e-mail que visa contornar SPF/DKIM/DMARC e forjar assinaturas DKIM.🍻
espoofer é uma ferramenta de teste de código aberto para contornar a autenticação SPF, DKIM e DMARC em sistemas de e-mail. Ela ajuda administradores de servidores de e-mail e testadores de penetração a verificar se o servidor de e-mail de destino e o cliente são vulneráveis a ataques de falsificação de e-mail ou podem ser abusados para enviar e-mails falsificados.
Figura 1. Um caso de nossos ataques de falsificação no Gmail (Corrigido, Vídeo de demonstração)
A falsificação de e-mail é uma grande ameaça tanto para indivíduos quanto para organizações (violação do Yahoo, John Podesta). Para resolver esse problema, serviços de e-mail e sites modernos empregam protocolos de autenticação -- SPF, DKIM e DMARC -- para prevenir a falsificação de e-mail.
Nossa pesquisa mais recente mostra que a implementação desses protocolos sofre de várias questões de segurança, que podem ser exploradas para contornar as proteções SPF/DKIM/DMARC. A Figura 1 demonstra um de nossos ataques de falsificação para contornar DKIM e DMARC no Gmail. Para mais detalhes técnicos, consulte nossa palestra no Black Hat USA 2020 (com vídeo da apresentação) ou artigo do USENIX Security 2020.
Neste repositório, resumimos todos os casos de teste que encontramos e os integramos nesta ferramenta para ajudar administradores e profissionais de segurança a identificar e localizar rapidamente tais problemas de segurança.
Versão em Latex:
@inproceedings{chen-email,
author = {Jianjun Chen and Vern Paxson and Jian Jiang},
title = {Composition Kills: A Case Study of Email Sender Authentication},
booktitle = {29th {USENIX} Security Symposium ({USENIX} Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {2183--2199},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/chen-jianjun},
publisher = {{USENIX} Association},
month = aug,
}
Versão em Word:
Jianjun Chen, Vern Paxson, and Jian Jiang. "Composition kills: A case study of email sender authentication." In 29th USENIX Security Symposium (USENIX Security 20), pp. 2183-2199. 2020.
git clone https://github.com/chenjj/espoofer
sudo pip3 install -r requirements.txt
Versão do Python: Python 3 (>=3.7).
O espoofer tem três modos de trabalho: servidor ('s', modo padrão), cliente ('c') e manual ('m'). No modo servidor, o espoofer funciona como um servidor de e-mail para testar a validação em serviços de recebimento. No modo cliente, o espoofer funciona como um cliente de e-mail para testar a validação em serviços de envio. O modo manual é usado para fins de depuração.

Figura 2. Três tipos de atacantes e seus modos de trabalho
Para executar o espoofer no modo servidor, você precisa ter: 1) um endereço IP (1.2.3.4), cuja porta de saída 25 não seja bloqueada pelo ISP, e 2) um domínio (attack.com).
attack.comselector._domainkey.attacker.com TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNjwdrmp/gcbKLaGQfRZk+LJ6XOWuQXkAOa/lI1En4t4sLuWiKiL6hACqMrsKQ8XfgqN76mmx4CHWn2VqVewFh7QTvshGLywWwrAJZdQ4KTlfR/2EwAlrItndijOfr2tpZRgP0nTY6saktkhQdwrk3U0SZmG7U8L9IPj7ZwPKGvQIDAQAB"
attack.comattack.com TXT "v=spf1 ip4:1.2.3.4 +all"
config ={
"attacker_site": b"attack.com", # attack.com
"legitimate_site_address": b"[email protected]", # legitimate.com
"victim_address": b"[email protected]", # [email protected]
"case_id": b"server_a1", # server_a1
}
Você pode listar os case_id de todos os casos de teste usando a opção -l:
python3 espoofer.py -l
python3 espoofer.py
Você pode alterar o case_id no config.py ou usar a opção -id na linha de comando para testar diferentes casos:
python3 espoofer.py -id server_a1
Para executar o espoofer no modo cliente, você precisa ter uma conta nos serviços de e-mail de destino. Este ataque explora a falha de alguns serviços de e-mail em realizar validação suficiente de e-mails recebidos de MUAs locais. Por exemplo, [email protected] tenta se passar por [email protected].
config ={
"legitimate_site_address": b"[email protected]",
"victim_address": b"[email protected]",
"case_id": b"client_a1",
"client_mode": {
"sending_server": ("smtp.gmail.com", 587), # IP e porta do servidor de envio SMTP
"username": b"[email protected]", # Nome de usuário e senha da sua conta
"password": b"your_passward_here",
},
}
Você pode listar os case_id de todos os casos de teste usando a opção -l:
python3 espoofer.py -l
Nota:
sending_serverdeve ser o endereço do servidor de envio SMTP, não o endereço do servidor de recebimento.
python3 espoofer.py -m c
Você pode alterar o case_id no config.py e executá-lo novamente, ou pode usar a opção -id na linha de comando:
python3 espoofer.py -m c -id client_a1
Aqui está um exemplo do modo manual:
python3 espoofer.py -m m -helo attack.com -mfrom <[email protected]> -rcptto <[email protected]> -data raw_msg_here -ip 127.0.0.1 -port 25
Sinta-se à vontade para enviar um pull request para adicionar seu relatório de bug aqui.
Você pode verificar no cabeçalho Authentication-results nos cabeçalhos brutos da mensagem. Se o cabeçalho mostrar dmarc=pass, significa que o e-mail passou na autenticação DMARC. Você pode conferir alguns vídeos de demonstração aqui.
Existem várias razões possíveis se você falhar ao enviar um e-mail: 1) seu ISP bloqueia e-mails de saída na porta 25 para prevenir spam. Nesse caso, você precisa pedir permissão ao ISP; 2) o endereço IP está na lista de spam dos serviços de e-mail de destino. Em muitos casos, você pode resolver o problema em https://www.spamhaus.org/lookup/; 3) alguns serviços de e-mail verificam se há um registro PTR para o IP de envio; talvez você também precise definir o registro PTR para contornar essa verificação; 4) o e-mail não consegue passar na validação de formato do serviço de e-mail de destino; talvez você queira tentar um caso de teste diferente.
Atualmente, o espoofer foca em contornar a autenticação SPF/DKIM/DMARC e não visa contornar filtros de spam. Mas você pode tentar usar um endereço IP de envio confiável, domínio e conteúdo de mensagem benigno para contornar o filtro de spam.
Em nossas experiências anteriores, alguns serviços de e-mail filtram e-mails suspeitos silenciosamente.
Você precisará configurar seu próprio servidor DNS autoritativo, em vez de usar serviços de hospedagem DNS de terceiros, pois alguns serviços de hospedagem DNS têm restrições para configurar caracteres especiais. Veja issue.
Sinta-se à vontade para adicionar mais casos de teste.