
ProtOSINT é um script Python que ajuda você a investigar contas do Proton Mail.
ProtOSINT é um script Python que ajuda você a investigar contas do Proton Mail.
Este é o ProtOSINT v2. A primeira versão existia há alguns anos, mas a API do Proton mudou e as verificações antigas pararam de funcionar, então esta é uma reescrita que traz a ferramenta de volta à vida. Muito obrigado ao NeutrOSINT por manter esse tipo de pesquisa ativa enquanto isso.
Esta ferramenta é destinada ao trabalho de OSINT no Proton Mail (apenas para uso educacional e autorizado). Você fornece um endereço de e-mail, um nome de usuário ou um domínio, e ela informa o que pode encontrar: se o endereço realmente existe, quando a chave de criptografia da conta foi criada, qual algoritmo ela usa e se um domínio personalizado está hospedado no Proton.
Ela possui quatro módulos:
O Proton torna a enumeração de contas deliberadamente difícil, então uma verificação ingênua mentirá para você. O ProtOSINT contorna isso combinando três fontes e confiando na correta para cada tarefa.
O servidor de chaves mente sobre endereços inexistentes. O servidor de chaves públicas do Proton (pks/lookup) retorna uma chave "falsa" (decoy) - com uma data de criação inventada - para qualquer endereço em um domínio Proton, existente ou não. Portanto, uma "chave válida + data bonita" não é prova de que o endereço existe. O servidor de chaves ainda é útil, mas apenas para ler a data real da chave de um endereço que você já confirmou que existe.
A API da conta é melhor, mas não é perfeita. A API de conta do Proton (/users/available) informa se um nome de usuário está disponível. Ela está correta na maioria das vezes, mas verifica o nome de usuário, não o endereço específico, então pode errar em casos extremos - [email protected] pode parecer "ocupado" mesmo que esse endereço .ch nunca tenha sido criado.
A única verificação totalmente confiável é a janela de composição do próprio Proton. Quando você digita um endereço no campo "Para", o Proton o valida e o marca em vermelho se a caixa de correio não existir. O ProtOSINT pode conduzir isso com Selenium: ele faz login na sua conta Proton, abre uma nova mensagem, digita o endereço e lê se o Proton aceita ou rejeita. Essa é a resposta autoritativa, e é o que os módulos 1, 2 e 4 usam quando o Selenium está ativado (que é o padrão).
Domínios personalizados são verificados por DNS. Para um domínio como example.com, a questão real é para onde seu e-mail é roteado. Se o registro MX aponta para o Proton (mail.protonmail.ch / mailsec.protonmail.ch), o domínio está no Proton Mail. O módulo 3 lê os registros MX e os verifica com o servidor de chaves.
requirements.txt (requests, selenium)Clone o repositório e instale as dependências Python:
git clone https://github.com/pixelbubble/ProtOSINT.git
cd ProtOSINT
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
Você também precisa de um navegador instalado para a verificação do Selenium. O Selenium baixa o driver correspondente por conta própria, então você não precisa instalar um chromedriver/geckodriver separado.
Debian / Ubuntu / Kali:
wget -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt update
sudo apt install -y /tmp/chrome.deb
# alternativas: sudo apt install -y chromium (ou: firefox-esr)
macOS (Homebrew):
brew install --cask google-chrome # ou: brew install --cask firefox
Windows: instale o Chrome ou Firefox normalmente a partir do site.
Executando como root (comum no Kali)? O Chrome precisa da flag
--no-sandboxou trava na inicialização. O ProtOSINT já a define para você, então não há nada a fazer.
Na primeira vez que você executar o script, ele cria um arquivo config.json ao lado:
{
"proton": {
"username": "",
"password": ""
},
"settings": {
"use_selenium": true,
"headless": true
}
}
use_selenium (true/false) usa a verificação de composição do Selenium para os módulos 1, 2 e 4 (o método confiável). Defina como false para voltar à API de conta mais rápida.headless (true/false) executa o navegador em segundo plano para que nenhuma janela apareça. Defina como true apenas em uma conta sem 2FA ou CAPTCHA, pois você não pode resolvê-los quando a janela está oculta. Defina como false se precisar ver o navegador.username / password são seu login do Proton. Você pode preenchê-los ou deixá-los vazios e o script perguntará quando iniciar. Deixar a senha vazia é mais seguro - ela nunca é gravada em disco. Se você colocar credenciais no arquivo, não as commite (já está no .gitignore).Se você fechar o navegador no meio da sessão, a próxima verificação que precisar dele o reabrirá e fará login novamente automaticamente.
python3 protosint.py
Escolha um módulo no menu e siga as instruções. q sai (e fecha o navegador se um estiver aberto).
O nome da conta não diferencia maiúsculas de minúsculas, e o Proton trata ., _ e - como transparentes. Qualquer coisa após um + também é ignorada. Portanto, todos estes são a mesma conta que [email protected]:
Todos compartilham a mesma chave e timestamp.
A data que o ProtOSINT mostra é quando a chave PGP primária da conta foi criada - o que nem sempre é o mesmo que quando a conta foi criada.
Exemplo 1 - o alvo nunca tocou nas chaves. Aqui a data da chave é a data real de criação da conta.
[email protected] é criada.Exemplo 2 - o alvo regenerou a chave. Agora a data reflete a chave mais nova, não a conta.
[email protected] é criada.O ProtOSINT mostra o tipo de chave que a conta usa. O que o servidor de chaves relata para a chave primária é um dos seguintes:
Você também pode ver X25519, Ed25519 ou RSA 3072 em algumas chaves - todas são lidas diretamente do ID do algoritmo OpenPGP da chave.
Um plano pago do Proton permite que você anexe seu próprio domínio. Se [email protected] resolve para o Proton (módulo 1 ou 3), o alvo está em um plano pago do Proton. O módulo 3 confirma isso através dos registros MX do domínio, que é o sinal mais confiável.
O Proton limita tanto o servidor de chaves (erro 2028) quanto a API de conta (HTTP 429). Os limites exatos não são documentados e parecem mudar, então se você for bloqueado, espere um pouco ou execute novamente de um IP diferente. O método do Selenium usa sua sessão normal logada, então não é afetado por esses limites.
Sinta-se à vontade para clonar o projeto. Para algo grande, abra uma issue primeiro para discutir.
O módulo Selenium lê o aplicativo web do Proton, então se o Proton alterar sua página, os seletores em selenium_login() e selenium_check_emails() podem precisar de uma pequena atualização. Esse é o primeiro lugar para verificar se a verificação do navegador parar de funcionar.