
ProtOSINT es un script de Python que te ayuda a investigar cuentas de Proton Mail.
ProtOSINT es un script de Python que te ayuda a investigar cuentas de Proton Mail.
Esta es la versión 2 de ProtOSINT. La primera versión ha estado disponible durante unos años, pero la API de Proton cambió y las comprobaciones antiguas dejaron de funcionar, por lo que esta es una reescritura que devuelve la herramienta a la vida. Muchas gracias a NeutrOSINT por mantener este tipo de investigación activa mientras tanto.
Esta herramienta está diseñada para trabajo de OSINT en Proton Mail (solo uso educativo y autorizado). Le proporcionas una dirección de correo electrónico, un nombre de usuario o un dominio, y te indica lo que puede encontrar: si la dirección realmente existe, cuándo se creó la clave de cifrado de la cuenta, qué algoritmo utiliza y si un dominio personalizado está alojado en Proton.
Tiene cuatro módulos:
Proton dificulta deliberadamente la enumeración de cuentas, por lo que una comprobación ingenua te mentirá. ProtOSINT lo resuelve combinando tres fuentes y confiando en la adecuada para cada caso.
El servidor de claves miente sobre direcciones inexistentes. El servidor de claves públicas de Proton (pks/lookup) devuelve una clave falsa "señuelo", con una fecha de creación inventada, para cualquier dirección en un dominio de Proton, exista o no. Por lo tanto, una "clave válida + fecha bonita" no es prueba de que la dirección exista. El servidor de claves sigue siendo útil, pero solo para leer la fecha real de la clave de una dirección que ya has confirmado que existe.
La API de cuentas es mejor, pero no perfecta. La API de cuentas de Proton (/users/available) te indica si un nombre de usuario está libre. Acierta la mayoría de las veces, pero comprueba el nombre de usuario, no la dirección específica, por lo que puede fallar en casos límite: [email protected] puede parecer "ocupado" aunque esa dirección .ch nunca se haya creado.
La única comprobación completamente fiable es la ventana de redacción de Proton. Cuando escribes una dirección en el campo "Para", Proton la valida y la marca en rojo si el buzón no existe. ProtOSINT puede automatizar eso con Selenium: inicia sesión en tu cuenta de Proton, abre un nuevo mensaje, escribe la dirección y lee si Proton la acepta o la rechaza. Esa es la respuesta autorizada, y es lo que los módulos 1, 2 y 4 usan cuando Selenium está activado (que lo está por defecto).
Los dominios personalizados se verifican mediante DNS. Para un dominio como example.com, la verdadera pregunta es hacia dónde se enruta su correo. Si el registro MX apunta a Proton (mail.protonmail.ch / mailsec.protonmail.ch), el dominio está en Proton Mail. El módulo 3 lee los registros MX y los coteja con el servidor de claves.
requirements.txt (requests, selenium)Clona el repositorio e instala las dependencias de 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
También necesitas un navegador instalado para la comprobación con Selenium. Selenium descarga el controlador correspondiente por sí mismo, por lo que no necesitas instalar un chromedriver/geckodriver por 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 (o: firefox-esr)
macOS (Homebrew):
brew install --cask google-chrome # o: brew install --cask firefox
Windows: instala Chrome o Firefox normalmente desde su sitio web.
¿Ejecutando como root (común en Kali)? Chrome necesita el flag
--no-sandboxo se bloquea al iniciar. ProtOSINT ya lo configura por ti, así que no tienes que hacer nada.
La primera vez que ejecutas el script, crea un archivo config.json a su lado:
{
"proton": {
"username": "",
"password": ""
},
"settings": {
"use_selenium": true,
"headless": true
}
}
use_selenium (true/false) utiliza la comprobación de redacción de Selenium para los módulos 1, 2 y 4 (el método fiable). Configúralo en false para recurrir a la API de cuentas más rápida.headless (true/false) ejecuta el navegador en segundo plano para que no aparezca ninguna ventana. Solo configúralo en true en una cuenta sin 2FA o CAPTCHA, ya que no puedes resolverlos cuando la ventana está oculta. Configúralo en false si necesitas ver el navegador.username / password son tus credenciales de Proton. Puedes rellenarlos o dejarlos vacíos y el script te los pedirá al iniciar. Dejar la contraseña vacía es más seguro: nunca se escribe en disco. Si pones credenciales en el archivo, no lo confirmes (ya está en .gitignore).Si cierras el navegador a mitad de sesión, la siguiente comprobación que lo necesite lo reabrirá e iniciará sesión automáticamente.
python3 protosint.py
Elige un módulo del menú y sigue las indicaciones. q sale (y cierra el navegador si estaba abierto).
El nombre de la cuenta no distingue mayúsculas de minúsculas, y Proton trata ., _ y - como transparentes. Cualquier cosa después de un + también se ignora. Por lo tanto, todas estas son la misma cuenta que [email protected]:
Todas comparten la misma clave y marca de tiempo.
La fecha que muestra ProtOSINT es cuando se creó la clave PGP principal de la cuenta, que no siempre es la misma que cuando se creó la cuenta.
Ejemplo 1: el objetivo nunca tocó sus claves. Aquí la fecha de la clave es la fecha real de creación de la cuenta.
[email protected]Ejemplo 2: el objetivo regeneró su clave. Ahora la fecha refleja la clave más reciente, no la cuenta.
[email protected]ProtOSINT muestra qué tipo de clave utiliza la cuenta. Lo que el servidor de claves informa para la clave principal es uno de:
También puedes ver X25519, Ed25519 o RSA 3072 en algunas claves; todas se leen directamente del ID del algoritmo OpenPGP de la clave.
Un plan de pago de Proton te permite adjuntar tu propio dominio. Si [email protected] se resuelve a Proton (módulo 1 o 3), el objetivo está en un plan de pago de Proton. El módulo 3 lo confirma a partir de los registros MX del dominio, que es la señal más fiable.
Proton limita la velocidad tanto del servidor de claves (error 2028) como de la API de cuentas (HTTP 429). Los límites exactos no están documentados y parecen moverse, así que si te bloquean, espera un rato o ejecuta de nuevo desde una IP diferente. El método Selenium utiliza tu sesión normal iniciada, por lo que no se ve afectado por estos límites.
Siéntete libre de clonar el proyecto. Para algo importante, abre primero un issue para discutirlo.
El módulo Selenium lee la aplicación web de Proton, por lo que si Proton cambia su página, los selectores en selenium_login() y selenium_check_emails() pueden necesitar una pequeña actualización. Ese es el primer lugar donde mirar si la comprobación del navegador deja de funcionar.