
CredSpy v1.1.0
공개 GetCredentialType API를 통한 Entra ID 사용자 열거 및 인증 방법 발견
CredSpy
공개 GetCredentialType API를 사용하여 이메일 주소에 대한 Microsoft Entra ID 인증 방법을 열거합니다. 이는 Microsoft 로그인 페이지에서 사용자 이름을 입력할 때 사용하는 것과 동일한 엔드포인트입니다. GetCredentialType 메서드를 사용하는 대부분의 도구와 달리 CredSpy는 기존 계정에서 지원되는 인증 방법도 표시합니다.
보안 평가에 유용합니다: 사용자 열거, 기본 설정 인증 방법 발견, 비밀번호, Remote NGC(예: Passwordless Push Notification), FIDO2/패스키 또는 인증서 인증이 있는 계정 식별.
목차
설치
Python 3.10+가 필요합니다.
pipx (권장):
# Install pipx (skip this if you already have it)
apt install pipx
pipx ensurepath
# From PyPI (recommended)
pipx install credspy
# Or from GitHub
pipx install git+https://github.com/RedByte1337/CredSpy.git
# From a local clone
git clone https://github.com/RedByte1337/CredSpy.git
cd CredSpy
pipx install .
pip:
pip install .
# or run without installing
pip install -r requirements.txt
python credspy.py ...
설치 후 어디서든 credspy를 실행하세요:
credspy -h
사용법
# Single email
credspy [email protected]
# File of emails (one per line, # for comments)
credspy emails.txt
# Through a proxy (SSL verification disabled for MITM tools)
credspy emails.txt --proxy http://127.0.0.1:8080
# Export results to CSV
credspy emails.txt --csv results.csv
# Save filtered email lists (combinable)
credspy emails.txt \
--save-existing existing.txt \
--save-ngc ngc.txt \
--save-password-preferred password-preferred.txt
옵션
| 플래그 | 설명 |
|---|---|
target | 이메일 주소 또는 텍스트 파일 경로 |
--proxy URL | 모든 트래픽을 프록시를 통해 라우팅하고 SSL 검증을 비활성화합니다(형식: http://127.0.0.1:8080) |
--no-color | 터미널 색상 출력 비활성화 |
--csv FILE | 결과를 CSV 파일로 작성 |
--save-existing FILE | 존재하는 이메일 저장 |
--save-ngc FILE | RemoteNGC(예: passwordless push-notification)가 지원되는 이메일 저장 |
--save-password-preferred FILE | 비밀번호를 기본 설정 방법으로 사용하는 기존 이메일 저장 |
--skip-ngc | RemoteNGC 검사 비활성화(RemoteNGC가 기본 설정 방법일 때 푸시 알림 방지, NGC 검색도 비활성화됨) |
[!IMPORTANT] 드물게 사용자가 RemoteNGC를 기본 방법으로 설정한 경우, 열거 중에 Microsoft가 Authenticator 앱으로 RemoteNGC 푸시 알림을 즉시 트리거합니다. 이를 피하는 유일한 방법은
GetCredentialType요청에서isRemoteNGCSupported를 false로 설정하는 것입니다. 이로 인해 응답에서 RemoteNGC 지원 여부가 더 이상 반환되지 않습니다. 자동 알림 전송을 피하고 RemoteNGC 검색이 필요하지 않다면--skip-ngc플래그를 사용하세요.
출력 파일이 이미 존재하면 덮어쓰기 확인(Y/n)을 묻는 메시지가 표시됩니다.
출력
각 이메일을 확인할 때 결과가 터미널로 스트리밍됩니다:
[email protected] | Preferred: Fido (7) | Supported: Password, RemoteNGC (PushNotification), Fido (Count: 3)
[email protected] | IfExistsResult: NotExist (1)
[email protected] | Preferred: Password (1) | Supported: Password, RemoteNGC (PushNotification)
[email protected] | Preferred: RemoteNGC (2) | Supported: Password, RemoteNGC (PushNotification)
[email protected] | Preferred: Fido (7) | Supported: Password, Fido (Count: 5), Certificate
이메일 계정이 존재하면 이메일 주소 뒤 첫 번째 열에 사용자의 기본 설정 인증 방법이 표시됩니다. 마지막 열에는 Password, RemoteNGC, Fido(=PassKeys), Certificate 인증과 같은 기타 지원되는 인증 방법이 나열됩니다.
이 모든 정보는 피싱 공격을 준비할 때 고려해야 할 매우 유용한 정보입니다.
Fido 인증의 경우 Microsoft가 반환하는 FidoParams의 AllowList에 있는 항목 수가 표시됩니다. 이는 사용자가 등록한 Fido 인증 방법의 수를 파악하는 지표로 사용할 수 있습니다. 다만, 더 이상 계정에 연결되지 않은 삭제된 Fido 키도 포함되는 것으로 보입니다.
마지막에 요약이 출력됩니다:
--- Summary ---
Exists: 6/7
Throttled: 0/7
Preferred: Fido 3/6, Password 2/6, ...
Supported: Password 6/6, RemoteNGC 1/6, Fido 3/6, Certificate 2/6
DomainType: Managed 6/6
--- Output files ---
CSV (results.csv): 7 entries
CSV 열
Email, Exists, PreferredType, HasPassword, RemoteNGC, HasFido, HasCertAuth, DomainType
- Exists — 열거형 이름 (
Exists,NotExist, …) - RemoteNGC — 알려진 경우
PushNotification/ListSessions, 그 외에는True/False
작동 방식
- Microsoft OAuth 인증 페이지에서 세션 컨텍스트(
sCtx)를 가져옵니다 - 각 사용자 이름을
login.microsoftonline.com/common/GetCredentialType에 POST합니다 - 자격 증명 플래그를 구문 분석하고 결과를 출력/내보냅니다
인증이 필요하지 않습니다. 로그인 UI와 동일한 비인증 흐름을 사용합니다.
면책 조항
이 도구는 승인된 보안 테스트 및 연구 목적으로만 사용해야 합니다. 소유하거나 명시적인 서면 테스트 허가를 받은 테넌트 및 계정에만 사용하세요. 작성자는 오용에 대해 책임을 지지 않습니다.