
ProtOSINT는 Proton Mail 계정을 조사하는 데 도움을 주는 Python 스크립트입니다.
ProtOSINT는 Proton 메일 계정을 조사하는 데 도움이 되는 Python 스크립트입니다.
이것은 ProtOSINT v2입니다. 첫 번째 버전은 몇 년 동안 있었지만, Proton의 API가 변경되고 기존 검사가 작동하지 않게 되어 재작성을 통해 도구를 다시 살렸습니다. 그동안 이런 종류의 연구를 계속해준 NeutrOSINT에게 큰 감사를 드립니다.
이 도구는 Proton Mail에 대한 OSINT 작업(교육 및 승인된 용도로만 사용)을 위해 만들어졌습니다. 이메일 주소, 사용자 이름 또는 도메인을 입력하면 주소가 실제로 존재하는지, 계정의 암호화 키가 생성된 시점, 사용된 알고리즘, 사용자 정의 도메인이 Proton에 호스팅되어 있는지 등 찾을 수 있는 정보를 알려줍니다.
네 가지 모듈이 있습니다:
Proton은 계정 열거를 의도적으로 어렵게 만들어, 순진한 검사는 거짓말을 하게 됩니다. ProtOSINT는 세 가지 소스를 결합하고 작업에 적합한 것을 신뢰하여 이를 우회합니다.
키 서버는 존재하지 않는 주소에 대해 거짓말을 합니다. Proton의 공개 키 서버(pks/lookup)는 Proton 도메인의 모든 주소에 대해 가짜 "미끼" 키(가짜 생성 날짜 포함)를 반환합니다. 따라서 "유효한 키 + 좋은 날짜"는 주소가 존재한다는 증거가 아닙니다. 키 서버는 여전히 유용하지만, 이미 존재하는 것으로 확인된 주소의 실제 키 날짜를 읽는 용도로만 사용됩니다.
계정 API는 더 낫지만 완벽하지 않습니다. Proton의 계정 API(/users/available)는 사용자 이름이 사용 가능한지 알려줍니다. 대부분의 경우 정확하지만, 사용자 이름을 확인하고 특정 주소를 확인하지 않으므로 가장자리 경우에 오류가 발생할 수 있습니다. [email protected]는 해당 .ch 주소가 생성되지 않았더라도 "사용 중"으로 보일 수 있습니다.
완전히 신뢰할 수 있는 유일한 확인 방법은 Proton 자체의 작성 창입니다. "받는 사람" 필드에 주소를 입력하면 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를 공식 웹사이트에서 일반적으로 설치합니다.
루트로 실행 중이신가요? (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 방법은 일반 로그인 세션을 사용하므로 이러한 제한의 영향을 받지 않습니다.
프로젝트를 자유롭게 클론하세요. 주요 변경 사항이 있으면 먼저 이슈를 열어 논의하세요.
Selenium 모듈은 Proton의 웹 앱을 읽으므로, Proton이 페이지를 변경하면 selenium_login() 및 selenium_check_emails()의 선택자를 약간 업데이트해야 할 수 있습니다. 브라우저 확인이 작동을 멈춘 경우 가장 먼저 확인할 부분입니다.