
ProtOSINT est un script Python qui vous aide à enquêter sur les comptes Proton Mail.
# ProtOSINT ProtOSINT est un script Python qui vous aide à enquêter sur les comptes Proton Mail. <img width="800" height="832" alt="protosint (1)" src="https://github.com/user-attachments/assets/4c08389a-0525-40e3-99d3-392561752425" /> ## Version Il s'agit de **ProtOSINT v2**. La première version existait depuis quelques années, mais l'API de Proton a changé et les anciennes vérifications ont cessé de fonctionner, donc il s'agit d'une réécriture qui redonne vie à l'outil. Un grand merci à [NeutrOSINT](https://github.com/Kr0wZ/NeutrOSINT) d'avoir maintenu ce type de recherche entre-temps. ## Description Cet outil est conçu pour le travail d'OSINT sur Proton Mail (utilisation éducative et autorisée uniquement). Vous lui donnez une adresse e-mail, un nom d'utilisateur ou un domaine, et il vous indique ce qu'il peut trouver : si l'adresse existe vraiment, quand la clé de chiffrement du compte a été créée, quel algorithme elle utilise, et si un domaine personnalisé est hébergé sur Proton. Il comporte quatre modules : - **[1]** Vérifier un e-mail Proton : existe-t-il, et quelle est la date et le type de création de la clé. - **[2]** Énumérer un nom d'utilisateur sur tous les domaines Proton (protonmail.com, protonmail.ch, pm.me, proton.me). - **[3]** Vérifier si un domaine utilise Proton Mail (via ses enregistrements MX, recoupés avec le serveur de clés). - **[4]** Vérifier par lot une liste d'adresses via une session Proton réelle connectée. ## Comment ça marche (et pourquoi) Proton rend délibérément difficile l'énumération des comptes, donc une vérification naïve vous mentira. ProtOSINT contourne cela en combinant trois sources et en faisant confiance à la bonne pour le travail. **Le serveur de clés ment à propos des adresses inexistantes.** Le serveur de clés publiques de Proton (`pks/lookup`) renvoie une fausse clé « leurre » - avec une date de création inventée - pour *toute* adresse sur un domaine Proton, qu'elle existe ou non. Donc une « clé valide + belle date » n'est pas une preuve que l'adresse existe. Le serveur de clés reste utile, mais uniquement pour lire la *vraie* date de clé d'une adresse dont vous avez déjà confirmé l'existence. **L'API de compte est meilleure, mais pas parfaite.** L'API de compte de Proton (`/users/available`) vous indique si un nom d'utilisateur est libre. Elle a raison la plupart du temps, mais elle vérifie le *nom d'utilisateur*, pas l'adresse spécifique, donc elle peut se tromper dans des cas limites - `[email protected]` peut sembler « pris » même si cette adresse `.ch` n'a jamais été créée. **La seule vérification totalement fiable est la fenêtre de composition de Proton.** Lorsque vous tapez une adresse dans le champ « À », Proton la valide et la signale en rouge si la boîte aux lettres n'existe pas. ProtOSINT peut piloter cela avec Selenium : il se connecte à votre compte Proton, ouvre un nouveau message, tape l'adresse et lit si Proton l'accepte ou la rejette. C'est la réponse faisant autorité, et c'est ce que les modules 1, 2 et 4 utilisent lorsque Selenium est activé (ce qui est le cas par défaut). **Les domaines personnalisés sont vérifiés par DNS.** Pour un domaine comme `example.com`, la vraie question est de savoir où son courrier est routé. Si l'enregistrement MX pointe vers Proton (`mail.protonmail.ch` / `mailsec.protonmail.ch`), le domaine est sur Proton Mail. Le module 3 lit les enregistrements MX et les recoupe avec le serveur de clés. ## Prérequis - [Python 3](https://www.python.org/downloads/) (3.7 ou plus récent) - Les paquets Python dans `requirements.txt` (`requests`, `selenium`) - Un navigateur (Chrome/Chromium ou Firefox) pour la vérification Selenium ## Installation Clonez le dépôt et installez les dépendances 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 ``` Vous avez également besoin d'un navigateur installé pour la vérification Selenium. Selenium télécharge lui-même le pilote correspondant, vous n'avez donc pas besoin d'installer un chromedriver/geckodriver séparé. 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 # alternatives: sudo apt install -y chromium (ou : firefox-esr) ``` macOS (Homebrew) : ```bash brew install --cask google-chrome # ou : brew install --cask firefox ``` Windows : installez Chrome ou Firefox normalement depuis leur site web. > Vous exécutez en tant que root (courant sur Kali) ? Chrome a besoin du flag `--no-sandbox` sinon il plante au lancement. ProtOSINT le définit déjà pour vous, donc vous n'avez rien à faire. ## Configuration La première fois que vous exécutez le script, il crée un fichier `config.json` à côté : ```json { "proton": { "username": "", "password": "" }, "settings": { "use_selenium": true, "headless": true } } ``` - `use_selenium` (`true`/`false`) utilise la vérification de composition Selenium pour les modules 1, 2 et 4 (la méthode fiable). Mettez-le à `false` pour revenir à l'API de compte plus rapide. - `headless` (`true`/`false`) exécute le navigateur en arrière-plan afin qu'aucune fenêtre ne s'affiche. Ne le mettez à `true` que sur un compte **sans** 2FA ou CAPTCHA, car vous ne pouvez pas les résoudre lorsque la fenêtre est masquée. Mettez-le à `false` si vous avez besoin de voir le navigateur. - `username` / `password` sont vos identifiants Proton. Vous pouvez les remplir, ou les laisser vides et le script les demandera au démarrage. Laisser le mot de passe vide est plus sûr - il n'est jamais écrit sur le disque. Si vous mettez des identifiants dans le fichier, ne le committez pas (il est déjà dans `.gitignore`). Si vous fermez le navigateur en cours de session, la prochaine vérification qui en a besoin le rouvrira et se reconnectera automatiquement. ## Utilisation ```bash python3 protosint.py ``` Choisissez un module dans le menu et suivez les invites. `q` quitte (et ferme le navigateur s'il était ouvert). ## Conseils pour l'investigation Proton Mail ### Proton Mail est insensible à la casse Le nom du compte est insensible à la casse, et Proton traite `.`, `_` et `-` comme transparents. Tout ce qui suit un `+` est également ignoré. Ainsi, tous ces éléments sont le même compte que `[email protected]` : - `[email protected]` - `[email protected]` - `[email protected]` - `[email protected]` Ils partagent tous la même clé et le même horodatage. ### L'horodatage est la date de la clé, pas toujours la date du compte La date affichée par ProtOSINT est celle de la création de la *clé PGP primaire* du compte - ce qui n'est pas toujours la même que celle de la création du compte. **Exemple 1 - la cible n'a jamais touché à ses clés.** Ici, la date de la clé est la vraie date de création du compte. - 2021-01-12 : le compte `[email protected]` est créé - 2021-01-15 : ProtOSINT signale 2021-01-12 **Exemple 2 - la cible a regénéré sa clé.** Maintenant, la date reflète la clé la plus récente, pas le compte. - 2021-01-12 : le compte `[email protected]` est créé - 2021-01-13 : la cible génère une nouvelle clé dans Paramètres → Clés de chiffrement - 2021-01-15 : ProtOSINT signale 2021-01-13, pas 2021-01-12 ### Clés de chiffrement ProtOSINT montre quel type de clé le compte utilise. Ce que le serveur de clés rapporte pour la clé primaire est l'un des suivants : - Curve25519 - ECC moderne (une clé de signature Ed25519) ; c'est la valeur par défaut sur les comptes récents et la plus rapide et la plus sécurisée - RSA 2048 - l'ancienne valeur par défaut sur les comptes créés avant 2021 - RSA 4096 - plus forte mais plus lente, généralement vue lorsque quelqu'un a importé une clé pour la compatibilité héritée Vous pouvez également voir X25519, Ed25519 ou RSA 3072 sur certaines clés - ils sont tous lus directement depuis l'ID d'algorithme OpenPGP de la clé. ### Domaines personnalisés Un plan Proton payant vous permet d'attacher votre propre domaine. Si `[email protected]` résout vers Proton (module 1 ou 3), la cible est sur un plan Proton payant. Le module 3 le confirme à partir des enregistrements MX du domaine, ce qui est le signal le plus fiable. ## Limites de taux Proton limite le débit à la fois du serveur de clés (erreur 2028) et de l'API de compte (HTTP 429). Les limites exactes ne sont pas documentées et semblent varier, donc si vous êtes bloqué, attendez un moment ou relancez depuis une IP différente. La méthode Selenium utilise votre session normale connectée, elle n'est donc pas affectée par ces limites. ## Contribution N'hésitez pas à cloner le projet. Pour quelque chose d'important, ouvrez d'abord une issue pour en discuter. Le module Selenium lit l'application web de Proton, donc si Proton modifie sa page, les sélecteurs dans `selenium_login()` et `selenium_check_emails()` peuvent nécessiter une petite mise à jour. C'est le premier endroit à vérifier si la vérification du navigateur cesse de fonctionner. ## Licence [MIT](https://choosealicense.com/licenses/mit/)