
ProtOSINT — Updated!
ProtOSINT ist ein Python-Skript, das Ihnen hilft, Proton Mail-Konten zu untersuchen.
ProtOSINT
ProtOSINT ist ein Python-Skript, das Ihnen hilft, Proton Mail-Konten zu untersuchen.
Version
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.
Beschreibung
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:
- [1] Überprüfen einer einzelnen Proton-E-Mail: existiert sie, und was sind Erstellungsdatum und Typ des Schlüssels.
- [2] Aufzählen eines Benutzernamens über alle Proton-Domains hinweg (protonmail.com, protonmail.ch, pm.me, proton.me).
- [3] Überprüfen, ob eine Domain Proton Mail verwendet (über ihre MX-Einträge, abgeglichen mit dem Schlüsselserver).
- [4] Batch-Überprüfung einer Liste von Adressen über eine echte, angemeldete Proton-Sitzung.
Funktionsweise (und warum)
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.
Voraussetzungen
- Python 3 (3.7 oder neuer)
- Die Python-Pakete in
requirements.txt(requests,selenium) - Ein Browser (Chrome/Chromium oder Firefox) für die Selenium-Prüfung
Installation
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.
Konfiguration
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 auffalse, 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 auftruebei einem Konto ohne 2FA oder CAPTCHA, da Sie diese nicht lösen können, wenn das Fenster versteckt ist. Setzen Sie es auffalse, wenn Sie den Browser sehen müssen.username/passwordsind 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.
Verwendung
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).
Tipps für die Proton Mail-Untersuchung
Proton Mail unterscheidet nicht zwischen Groß- und Kleinschreibung
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.
Der Zeitstempel ist das Schlüsseldatum, nicht immer das Kontodatum
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.
- 2021-01-12: Konto
[email protected]wird erstellt - 2021-01-15: ProtOSINT meldet 2021-01-12
Beispiel 2 – das Ziel hat seinen Schlüssel neu generiert. Nun spiegelt das Datum den neueren Schlüssel wider, nicht das Konto.
- 2021-01-12: Konto
[email protected]wird erstellt - 2021-01-13: Ziel generiert einen neuen Schlüssel unter Einstellungen → Verschlüsselungsschlüssel
- 2021-01-15: ProtOSINT meldet 2021-01-13, nicht 2021-01-12
Verschlüsselungsschlüssel
ProtOSINT zeigt an, welchen Schlüsseltyp das Konto verwendet. Was der Schlüsselserver für den primären Schlüssel meldet, ist einer der folgenden:
- Curve25519 – moderne ECC (ein Ed25519-Signierschlüssel); dies ist die Voreinstellung bei neueren Konten und der schnellste und sicherste
- RSA 2048 – die alte Voreinstellung bei Konten, die vor 2021 erstellt wurden
- RSA 4096 – stärker, aber langsamer, normalerweise zu sehen, wenn jemand einen Schlüssel für Legacy-Kompatibilität importiert hat
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.
Benutzerdefinierte Domains
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.
Ratenbegrenzungen
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.
Mitwirken
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.