
공개 GetCredentialType API를 통한 Entra ID 사용자 열거 및 인증 방법 발견
공개 GetCredentialType API를 사용하여 이메일 주소에 대한 Microsoft Entra ID 인증 방법을 열거합니다. 이는 Microsoft 로그인 페이지에서 사용자 이름을 입력할 때 사용하는 것과 동일한 엔드포인트입니다. GetCredentialType 메서드를 사용하는 대부분의 도구와 달리, CredSpy는 기존 계정에 대해 지원되는 인증 방법도 표시합니다.
보안 평가에 유용합니다: 사용자 열거, 선호 인증 방법 탐색, 그리고 비밀번호, Remote NGC(예: Passwordless Push Notification), FIDO2/passkeys 또는 인증서 인증을 사용하는 계정 식별.
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
| Flag | Description |
|---|---|
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 탐색도 비활성화됩니다) |
--delay <float> | 각 계정 사이에 지정된 초만큼 대기합니다. 스로틀링을 피하기 위해 많은 수의 계정을 확인할 때 사용하세요 |
[!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
Email, Exists, PreferredType, HasPassword, RemoteNGC, HasFido, HasCertAuth, DomainType
Exists, NotExist, …)PushNotification / ListSessions, 그렇지 않으면 True/FalsesCtx)를 가져옵니다login.microsoftonline.com/common/GetCredentialType에 POST합니다인증이 필요하지 않습니다. 로그인 UI와 동일한 비인증 흐름을 사용합니다.
이 도구는 승인된 보안 테스트 및 연구 전용입니다. 소유하고 있거나 테스트에 대한 명시적인 서면 허가를 받은 테넌트 및 계정에만 사용하세요. 저자는 오용에 대해 책임지지 않습니다.