
ProtOSINT es un script de Python que te ayuda a investigar cuentas de Proton Mail.
# ProtOSINT ProtOSINT es un script de Python que te ayuda a investigar cuentas de Proton Mail. <img width="800" height="832" alt="protosint (1)" src="https://github.com/user-attachments/assets/4c08389a-0525-40e3-99d3-392561752425" /> ## Versión 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](https://github.com/Kr0wZ/NeutrOSINT) por mantener este tipo de investigación activa mientras tanto. ## Descripción 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: - **[1]** Verificar un correo de Proton: si existe, y cuál es la fecha y tipo de creación de la clave. - **[2]** Enumerar un nombre de usuario en todos los dominios de Proton (protonmail.com, protonmail.ch, pm.me, proton.me). - **[3]** Verificar si un dominio utiliza Proton Mail (a través de sus registros MX, cotejados con el servidor de claves). - **[4]** Verificar por lotes una lista de direcciones a través de una sesión real de Proton iniciada. ## Cómo funciona (y por qué) 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. ## Requisitos - [Python 3](https://www.python.org/downloads/) (3.7 o más reciente) - Los paquetes de Python en `requirements.txt` (`requests`, `selenium`) - Un navegador (Chrome/Chromium o Firefox) para la comprobación con Selenium ## Instalación Clona el repositorio e instala las dependencias de Python: ```bash 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: ```bash 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): ```bash 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-sandbox` o se bloquea al iniciar. ProtOSINT ya lo configura por ti, así que no tienes que hacer nada. ## Configuración La primera vez que ejecutas el script, crea un archivo `config.json` a su lado: ```json { "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. ## Uso ```bash python3 protosint.py ``` Elige un módulo del menú y sigue las indicaciones. `q` sale (y cierra el navegador si estaba abierto). ## Consejos para la investigación de Proton Mail ### Proton Mail no distingue mayúsculas de minúsculas 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]`: - `[email protected]` - `[email protected]` - `[email protected]` - `[email protected]` Todas comparten la misma clave y marca de tiempo. ### La marca de tiempo es la fecha de la clave, no siempre la fecha de la cuenta 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. - 2021-01-12: se crea la cuenta `[email protected]` - 2021-01-15: ProtOSINT informa 2021-01-12 **Ejemplo 2: el objetivo regeneró su clave.** Ahora la fecha refleja la clave más reciente, no la cuenta. - 2021-01-12: se crea la cuenta `[email protected]` - 2021-01-13: el objetivo genera una nueva clave en Configuración → Claves de cifrado - 2021-01-15: ProtOSINT informa 2021-01-13, no 2021-01-12 ### Claves de cifrado ProtOSINT muestra qué tipo de clave utiliza la cuenta. Lo que el servidor de claves informa para la clave principal es uno de: - Curve25519 - ECC moderno (una clave de firma Ed25519); esta es la opción predeterminada en las cuentas más nuevas y la más rápida y segura - RSA 2048 - la opción predeterminada antigua en cuentas creadas antes de 2021 - RSA 4096 - más fuerte pero más lenta, usualmente vista cuando alguien importó una clave para compatibilidad heredada También puedes ver X25519, Ed25519 o RSA 3072 en algunas claves; todas se leen directamente del ID del algoritmo OpenPGP de la clave. ### Dominios personalizados 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. ## Límites de velocidad 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. ## Contribuir 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. ## Licencia [MIT](https://choosealicense.com/licenses/mit/)