
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.
Un piano Proton a pagamento ti consente di allegare il tuo dominio. Se [email protected] si risolve su Proton (modulo 1 o 3), il target è su un piano Proton a pagamento. Il modulo 3 lo conferma dai record MX del dominio, che è il segnale più affidabile.
Proton limita sia il server delle chiavi (errore 2028) che l'API dell'account (HTTP 429). I limiti esatti non sono documentati e sembrano cambiare, quindi se vieni bloccato, aspetta un po' o esegui di nuovo da un IP diverso. Il metodo Selenium utilizza la tua normale sessione con accesso effettuato, quindi non è influenzato da questi limiti.
Sentiti libero di clonare il progetto. Per modifiche importanti, apri prima un issue per discuterne.
Il modulo Selenium legge l'app web di Proton, quindi se Proton modifica la sua pagina, i selettori in selenium_login() e selenium_check_emails() potrebbero aver bisogno di un piccolo aggiornamento. Questo è il primo posto da controllare se il controllo del browser smette di funzionare.