
ProtOSINT ist ein Python-Skript, das Ihnen hilft, Proton Mail-Konten zu untersuchen.
ProtOSINT ist ein Python-Skript, das Ihnen hilft, Proton Mail-Konten zu untersuchen.
Dies ist ProtOSINT v2. Die erste Version existiert seit einigen Jahren, aber die API von Proton hat sich geändert und die alten Prüfungen funktionierten nicht mehr, daher handelt es sich hier um eine Neufassung, die das Werkzeug wiederbelebt. Großer Dank an NeutrOSINT, dass diese Art von Forschung in der Zwischenzeit fortgesetzt wurde.
Dieses Werkzeug ist für OSINT-Arbeiten an Proton Mail bestimmt (nur zu Bildungszwecken und mit Autorisierung). Sie geben eine E-Mail-Adresse, einen Benutzernamen oder eine Domain an, und es teilt Ihnen mit, was es finden kann: ob die Adresse wirklich existiert, wann der Verschlüsselungsschlüssel des Kontos erstellt wurde, welchen Algorithmus er verwendet und ob eine benutzerdefinierte Domain auf Proton gehostet wird.
Es gibt vier Module:
Proton macht die Aufzählung von Konten absichtlich schwierig, daher wird eine naive Prüfung Sie belügen. ProtOSINT umgeht dies, indem es drei Quellen kombiniert und für die jeweilige Aufgabe die richtige vertraut.
Der Schlüsselserver lügt über nicht existierende Adressen. Der öffentliche Schlüsselserver von Proton (pks/lookup) gibt einen gefälschten „Decoy“-Schlüssel – mit einem erfundenen Erstellungsdatum – für jede Adresse auf einer Proton-Domain zurück, unabhängig davon, ob sie existiert oder nicht. Ein „gültiger Schlüssel + schönes Datum“ ist also kein Beweis dafür, dass die Adresse existiert. Der Schlüsselserver ist dennoch nützlich, aber nur zum Auslesen des echten Schlüsseldatums einer Adresse, von der Sie bereits bestätigt haben, dass sie existiert.
Die Konto-API ist besser, aber nicht perfekt. Die Konto-API von Proton (/users/available) teilt Ihnen mit, ob ein Benutzername frei ist. Sie liegt meistens richtig, prüft jedoch den Benutzernamen, nicht die spezifische Adresse, daher kann sie in Randfällen falsch liegen – [email protected] kann als „belegt“ erscheinen, obwohl diese .ch-Adresse nie erstellt wurde.
Die einzig vollständig zuverlässige Prüfung ist das eigene Verfassen-Fenster von Proton. Wenn Sie eine Adresse in das „An“-Feld eingeben, validiert Proton sie und markiert sie rot, wenn das Postfach nicht existiert. ProtOSINT kann dies mit Selenium steuern: Es meldet sich in Ihrem Proton-Konto an, öffnet eine neue Nachricht, gibt die Adresse ein und liest aus, ob Proton sie akzeptiert oder ablehnt. Das ist die autoritative Antwort, und es wird von den Modulen 1, 2 und 4 verwendet, wenn Selenium aktiviert ist (standardmäßig der Fall).
Benutzerdefinierte Domains werden per DNS überprüft. Für eine Domain wie example.com ist die eigentliche Frage, wohin ihre E-Mails geleitet werden. Wenn der MX-Eintrag auf Proton verweist (mail.protonmail.ch / mailsec.protonmail.ch), befindet sich die Domain auf Proton Mail. Modul 3 liest die MX-Einträge und gleicht sie mit dem Schlüsselserver ab.
requirements.txt (requests, selenium)Klonen Sie das Repository und installieren Sie die Python-Abhängigkeiten:
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
Sie benötigen außerdem einen installierten Browser für die Selenium-Prüfung. Selenium lädt den passenden Treiber selbst herunter, daher müssen Sie keinen separaten Chromedriver/Geckodriver installieren.
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
# Alternativen: sudo apt install -y chromium (oder: firefox-esr)
macOS (Homebrew):
brew install --cask google-chrome # oder: brew install --cask firefox
Windows: Installieren Sie Chrome oder Firefox normal von deren Website.
Ausführung als root (üblich auf Kali)? Chrome benötigt das Flag
--no-sandbox, sonst stürzt es beim Start ab. ProtOSINT setzt dies bereits für Sie, daher müssen Sie nichts tun.
Beim ersten Ausführen des Skripts wird eine config.json-Datei neben dem Skript erstellt:
{
"proton": {
"username": "",
"password": ""
},
"settings": {
"use_selenium": true,
"headless": true
}
}
use_selenium (true/false) verwendet die Selenium-Verfassen-Prüfung für die Module 1, 2 und 4 (die zuverlässige Methode). Setzen Sie es auf false, um auf die schnellere Konto-API zurückzugreifen.headless (true/false) führt den Browser im Hintergrund aus, sodass kein Fenster erscheint. Setzen Sie es nur auf true bei einem Konto ohne 2FA oder CAPTCHA, da Sie diese nicht lösen können, wenn das Fenster versteckt ist. Setzen Sie es auf false, wenn Sie den Browser sehen müssen.username / password sind Ihr Proton-Login. Sie können sie ausfüllen oder leer lassen – das Skript fragt beim Start danach. Das Passwort leer zu lassen ist sicherer – es wird nie auf die Festplatte geschrieben. Wenn Sie Anmeldedaten in die Datei eingeben, committen Sie sie nicht (sie ist bereits in .gitignore).Wenn Sie den Browser während der Sitzung schließen, wird die nächste Prüfung, die ihn benötigt, ihn automatisch wieder öffnen und sich erneut anmelden.
python3 protosint.py
Wählen Sie ein Modul aus dem Menü und folgen Sie den Eingabeaufforderungen. q beendet das Programm (und schließt den Browser, falls einer geöffnet war).
Der Kontoname ist case-insensitive, und Proton behandelt ., _ und - als transparent. Alles nach einem + wird ebenfalls ignoriert. Daher sind alle folgenden Adressen dasselbe Konto wie [email protected]:
Sie teilen sich alle denselben Schlüssel und Zeitstempel.
Das Datum, das ProtOSINT anzeigt, ist das Erstellungsdatum des primären PGP-Schlüssels des Kontos – dies ist nicht immer dasselbe wie das Erstellungsdatum des Kontos.
Beispiel 1 – das Ziel hat seine Schlüssel nie angefasst. Hier ist das Schlüsseldatum das tatsächliche Kontodatum.
[email protected] wird erstelltBeispiel 2 – das Ziel hat seinen Schlüssel neu generiert. Nun spiegelt das Datum den neueren Schlüssel wider, nicht das Konto.
[email protected] wird erstelltProtOSINT zeigt an, welchen Schlüsseltyp das Konto verwendet. Was der Schlüsselserver für den primären Schlüssel meldet, ist einer der folgenden:
Sie können bei einigen Schlüsseln auch X25519, Ed25519 oder RSA 3072 sehen – sie werden alle direkt aus der OpenPGP-Algorithmus-ID des Schlüssels ausgelesen.
Ein kostenpflichtiger Proton-Plan ermöglicht es Ihnen, Ihre eigene Domain anzuhängen. Wenn [email protected] zu Proton aufgelöst wird (Modul 1 oder 3), befindet sich das Ziel auf einem kostenpflichtigen Proton-Plan. Modul 3 bestätigt dies anhand der MX-Einträge der Domain, was das zuverlässigste Signal ist.
Proton drosselt sowohl den Schlüsselserver (Fehler 2028) als auch die Konto-API (HTTP 429). Die genauen Grenzen sind nicht dokumentiert und scheinen sich zu verschieben. Wenn Sie blockiert werden, warten Sie eine Weile oder führen Sie das Skript von einer anderen IP aus erneut aus. Die Selenium-Methode verwendet Ihre normale angemeldete Sitzung, daher wird sie von diesen Grenzen nicht beeinflusst.
Sie können das Projekt gerne klonen. Für größere Änderungen eröffnen Sie bitte zuerst ein Issue, um es zu besprechen.
Das Selenium-Modul liest die Web-App von Proton aus. Wenn Proton seine Seite ändert, müssen die Selektoren in selenium_login() und selenium_check_emails() möglicherweise leicht aktualisiert werden. Das ist die erste Stelle, an der Sie nachsehen sollten, wenn die Browser-Prüfung nicht mehr funktioniert.