
CredSpy v1.1.0
Entra IDのユーザー列挙と認証方式の発見(公開されたGetCredentialType API経由)
CredSpy
公開されている GetCredentialType API を使用して、メールアドレスに対する Microsoft Entra ID の認証方法を列挙します。これは、Microsoft のログインページでユーザー名を入力した際に使用されるものと同じエンドポイントです。GetCredentialType メソッドを使用するほとんどのツールとは対照的に、CredSpy は既存アカウントでサポートされている認証方法も表示します。
セキュリティ評価に役立ちます: ユーザー列挙、優先認証方法の特定、パスワード、Remote NGC (例: パスワードレスプッシュ通知)、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
オプション
| Flag | Description |
|---|---|
target | メールアドレスまたはテキストファイルへのパス |
--proxy URL | すべてのトラフィックをプロキシ経由でルーティング; SSL 検証を無効化 (形式: http://127.0.0.1:8080) |
--no-color | 色付きターミナル出力を無効化 |
--csv FILE | 結果を CSV に書き込む |
--save-existing FILE | 存在するメールアドレスを保存 |
--save-ngc FILE | RemoteNGC (例: パスワードレスプッシュ通知) がサポートされているメールアドレスを保存 |
--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
CSV 列
Email, Exists, PreferredType, HasPassword, RemoteNGC, HasFido, HasCertAuth, DomainType
- Exists — enum 名 (
Exists,NotExist, …) - RemoteNGC — 判明している場合は
PushNotification/ListSessions、それ以外はTrue/False
仕組み
- Microsoft OAuth authorize ページからセッションコンテキスト (
sCtx) を取得 - 各ユーザー名を
login.microsoftonline.com/common/GetCredentialTypeに POST - 資格情報フラグを解析し、結果を表示 / エクスポート
認証は不要です。これはログイン UI と同じ未認証フローを使用します。
免責事項
このツールは 許可されたセキュリティテストおよび研究のみ を目的としています。所有している、またはテストに対する明示的な書面による許可を得ているテナントおよびアカウントに対してのみ使用してください。作者は不正使用に対して責任を負いません。