
ProtOSINTは、Proton Mailアカウントの調査を支援するPythonスクリプトです。
ProtOSINT は、Proton Mail アカウントの調査を支援する Python スクリプトです。
これは ProtOSINT v2 です。初版は数年前からありましたが、Proton の API が変更され、古いチェックが機能しなくなったため、ツールを復活させるための書き直しです。その間もこの種の調査を続けてくれた NeutrOSINT に感謝します。
このツールは、Proton Mail の OSINT 作業(教育目的および許可された目的のみ)を対象としています。メールアドレス、ユーザー名、ドメインを指定すると、そのアドレスが実際に存在するか、アカウントの暗号鍵が作成された日時、使用されているアルゴリズム、カスタムドメインが Proton でホストされているかなど、見つけられる情報を教えてくれます。
4 つのモジュールがあります。
Proton はアカウントの列挙を意図的に困難にしており、単純なチェックでは偽の情報を返します。ProtOSINT は、3 つの情報源を組み合わせ、適切なものを信頼することでこの問題に対処しています。
鍵サーバーは存在しないアドレスについて嘘をつきます。 Proton の公開鍵サーバー(pks/lookup)は、Proton ドメイン上のあらゆるアドレスに対して、存在するかどうかにかかわらず、偽の「デコイ」鍵(架空の作成日を含む)を返します。したがって、「有効な鍵+適切な日付」はアドレスが存在する証拠にはなりません。鍵サーバーは依然として有用ですが、存在が確認済みのアドレスの実際の鍵の日付を読み取る場合に限ります。
アカウント API は改善されていますが、完璧ではありません。 Proton のアカウント API(/users/available)は、ユーザー名が利用可能かどうかを教えてくれます。ほとんどの場合正しいですが、ユーザー名をチェックするのであって特定のアドレスではありません。そのため、境界ケースでは誤る可能性があります。[email protected] は、その .ch アドレスが作成されていないにもかかわらず、「使用中」と見えることがあります。
唯一完全に信頼できるチェックは、Proton 自身の作成ウィンドウです。 「To」フィールドにアドレスを入力すると、Proton はそれを検証し、メールボックスが存在しない場合は赤でフラグを立てます。ProtOSINT は Selenium を使用してそれを駆動できます。Proton アカウントにログインし、新しいメッセージを開き、アドレスを入力して、Proton が受け入れるか拒否するかを読み取ります。これが信頼できる答えであり、Selenium がオンになっている場合(デフォルトでオン)にモジュール 1、2、4 が使用する方法です。
カスタムドメインは DNS でチェックされます。 example.com のようなドメインの場合、実際の問題はメールがどこにルーティングされるかです。MX レコードが Proton(mail.protonmail.ch / mailsec.protonmail.ch)を指している場合、そのドメインは Proton Mail 上にあります。モジュール 3 は MX レコードを読み取り、鍵サーバーと相互確認します。
requirements.txt 内の Python パッケージ(requests、selenium)リポジトリをクローンし、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
Selenium チェック用にブラウザもインストールする必要があります。Selenium は対応するドライバを自動でダウンロードするため、別途 chromedriver/geckodriver をインストールする必要はありません。
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
# 代替: sudo apt install -y chromium (または: firefox-esr)
macOS(Homebrew):
brew install --cask google-chrome # または: brew install --cask firefox
Windows: Chrome または Firefox を公式サイトから通常通りインストールします。
root で実行している場合(Kali では一般的)?Chrome では起動時に
--no-sandboxフラグが必要です。ProtOSINT は既に設定しているので、何もする必要はありません。
スクリプトを初めて実行すると、その横に config.json ファイルが作成されます。
{
"proton": {
"username": "",
"password": ""
},
"settings": {
"use_selenium": true,
"headless": true
}
}
use_selenium(true/false)は、モジュール 1、2、4 で Selenium の作成チェック(信頼性の高い方法)を使用します。false に設定すると、より高速なアカウント API にフォールバックします。headless(true/false)は、ブラウザをバックグラウンドで実行し、ウィンドウがポップアップしないようにします。2FA や CAPTCHA がないアカウントでのみ true に設定してください。ウィンドウが非表示の状態ではこれらを解決できないためです。ブラウザを表示する必要がある場合は false に設定します。username / password は Proton のログイン情報です。記入することも、空のままにしてスクリプトの起動時に入力を求めることもできます。パスワードを空のままにしておくと、ディスクに書き込まれることがなく安全です。ファイルに認証情報を記入する場合は、コミットしないでください(既に .gitignore に含まれています)。セッション中にブラウザを閉じた場合、次にブラウザが必要なチェックが行われたときに、自動的に再開してログインし直します。
python3 protosint.py
メニューからモジュールを選択し、指示に従います。q で終了します(ブラウザが開いていた場合は閉じます)。
アカウント名は大文字小文字を区別せず、Proton は .、_、- を透過的に扱います。+ 以降のものも無視されます。したがって、以下はすべて [email protected] と同じアカウントです。
これらはすべて同じ鍵とタイムスタンプを共有します。
ProtOSINT が表示する日付は、アカウントのプライマリ PGP 鍵が作成された日時です。これは必ずしもアカウントが作成された日時と同じではありません。
例 1 - 対象が鍵に全く触れていない場合。 この場合、鍵の日付は実際のアカウント作成日です。
[email protected] が作成される例 2 - 対象が鍵を再生成した場合。 この場合、日付はアカウントではなく新しい鍵を反映します。
[email protected] が作成されるProtOSINT はアカウントが使用する鍵の種類を表示します。鍵サーバーがプライマリ鍵について報告するものは次のいずれかです。
一部の鍵では X25519、Ed25519、または RSA 3072 が表示されることもあります。これらはすべて鍵の OpenPGP アルゴリズム ID から直接読み取られます。
有料の Proton プランでは、独自のドメインを追加できます。[email protected] が Proton に解決される場合(モジュール 1 または 3)、対象は有料の Proton プランを使用しています。モジュール 3 はドメインの MX レコードからこれを確認します。これは最も信頼性の高いシグナルです。
Proton は鍵サーバー(エラー 2028)とアカウント API(HTTP 429)の両方にレート制限を課しています。正確な制限は文書化されておらず、変動するようです。ブロックされた場合は、しばらく待つか、別の IP から再実行してください。Selenium 方式は通常のログイン済みセッションを使用するため、これらの制限の影響を受けません。
プロジェクトを自由にフォークしてください。大きな変更については、最初に issue を開いて話し合ってください。
Selenium モジュールは Proton のウェブアプリを読み取るため、Proton がページを変更した場合、selenium_login() および selenium_check_emails() のセレクタを少し更新する必要があるかもしれません。ブラウザチェックが機能しなくなった場合、最初に確認すべき場所です。