
ProtOSINT è uno script Python che ti aiuta a investigare account Proton Mail.
ProtOSINT è uno script Python che ti aiuta a investigare sugli account Proton Mail.
Questa è ProtOSINT v2. La prima versione è stata in circolazione per alcuni anni, ma l'API di Proton è cambiata e i vecchi controlli hanno smesso di funzionare, quindi questa è una riscrittura che riporta in vita lo strumento. Un grande grazie a NeutrOSINT per aver mantenuto viva questa linea di ricerca nel frattempo.
Questo strumento è pensato per lavoro di OSINT su Proton Mail (solo per uso didattico e autorizzato). Fornisci un indirizzo email, un nome utente o un dominio, e ti dice cosa riesce a trovare: se l'indirizzo esiste realmente, quando è stata creata la chiave di crittografia dell'account, quale algoritmo utilizza e se un dominio personalizzato è ospitato su Proton.
Ha quattro moduli:
Proton rende deliberatamente difficile l'enumerazione degli account, quindi un controllo ingenuo ti mentirà. ProtOSINT aggira il problema combinando tre fonti e fidandosi di quella giusta per il compito.
Il server delle chiavi mente riguardo agli indirizzi inesistenti. Il server pubblico delle chiavi di Proton (pks/lookup) restituisce una finta chiave "decoy" - con una data di creazione inventata - per qualsiasi indirizzo su un dominio Proton, che esista o meno. Quindi una "chiave valida + bella data" non è la prova che l'indirizzo esista. Il server delle chiavi è comunque utile, ma solo per leggere la data reale della chiave di un indirizzo che hai già confermato esistere.
L'API dell'account è migliore, ma non perfetta. L'API dell'account di Proton (/users/available) ti dice se un nome utente è libero. Ha ragione la maggior parte delle volte, ma controlla il nome utente, non l'indirizzo specifico, quindi può sbagliarsi in casi limite - [email protected] può sembrare "occupato" anche se quell'indirizzo .ch non è mai stato creato.
L'unico controllo completamente affidabile è la finestra di composizione di Proton stessa. Quando inserisci un indirizzo nel campo "A", Proton lo convalida e lo segna in rosso se la casella di posta non esiste. ProtOSINT può gestirlo con Selenium: effettua l'accesso al tuo account Proton, apre un nuovo messaggio, digita l'indirizzo e legge se Proton lo accetta o lo rifiuta. Questa è la risposta autorevole, ed è ciò che i moduli 1, 2 e 4 utilizzano quando Selenium è attivato (lo è per impostazione predefinita).
I domini personalizzati vengono controllati tramite DNS. Per un dominio come example.com, la vera domanda è dove viene instradata la sua posta. Se il record MX punta a Proton (mail.protonmail.ch / mailsec.protonmail.ch), il dominio è su Proton Mail. Il modulo 3 legge i record MX e li incrocia con il server delle chiavi.
requirements.txt (requests, selenium)Clona il repository e installa le dipendenze 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
Hai anche bisogno di un browser installato per il controllo Selenium. Selenium scarica da solo il driver corrispondente, quindi non devi installare un chromedriver/geckodriver separato.
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
# alternative: sudo apt install -y chromium (o: firefox-esr)
macOS (Homebrew):
brew install --cask google-chrome # o: brew install --cask firefox
Windows: installa Chrome o Firefox normalmente dal loro sito web.
Se esegui come root (comune su Kali)? Chrome ha bisogno del flag
--no-sandboxaltrimenti si blocca all'avvio. ProtOSINT lo imposta già per te, quindi non c'è niente da fare.
La prima volta che esegui lo script, crea un file config.json accanto ad esso:
{
"proton": {
"username": "",
"password": ""
},
"settings": {
"use_selenium": true,
"headless": true
}
}
use_selenium (true/false) utilizza il controllo di composizione Selenium per i moduli 1, 2 e 4 (il metodo affidabile). Imposta su false per ripiegare sulla più veloce API dell'account.headless (true/false) esegue il browser in background in modo che nessuna finestra si apra. Imposta su true solo su un account senza 2FA o CAPTCHA, poiché non puoi risolverli quando la finestra è nascosta. Imposta su false se hai bisogno di vedere il browser.username / password sono le tue credenziali di accesso Proton. Puoi inserirle o lasciarle vuote e lo script le chiederà all'avvio. Lasciare la password vuota è più sicuro - non viene mai scritta su disco. Se inserisci le credenziali nel file, non inviarlo (è già in .gitignore).Se chiudi il browser a metà sessione, il controllo successivo che ne ha bisogno lo riaprirà e effettuerà nuovamente l'accesso automaticamente.
python3 protosint.py
Scegli un modulo dal menu e segui le istruzioni. q esce (e chiude il browser se era aperto).
Il nome dell'account non fa distinzione tra maiuscole e minuscole, e Proton tratta ., _ e - come trasparenti. Anche tutto ciò che viene dopo un + viene ignorato. Quindi tutti questi sono lo stesso account di [email protected]:
Condividono tutti la stessa chiave e timestamp.
La data mostrata da ProtOSINT è quando è stata creata la chiave PGP primaria dell'account - che non è sempre uguale a quando è stato creato l'account.
Esempio 1 - il target non ha mai toccato le proprie chiavi. Qui la data della chiave è la data reale di creazione dell'account.
[email protected] viene creatoEsempio 2 - il target ha rigenerato la propria chiave. Ora la data riflette la chiave più recente, non l'account.
[email protected] viene creatoProtOSINT mostra quale tipo di chiave utilizza l'account. Ciò che il server delle chiavi segnala per la chiave primaria è uno tra:
Potresti anche vedere X25519, Ed25519 o RSA 3072 su alcune chiavi - sono tutte lette direttamente dall'ID algoritmo OpenPGP della chiave.