
Entra IDのユーザー列挙と認証方式の発見(公開されたGetCredentialType API経由)
パブリックな GetCredentialType API を使用して、メールアドレスに対する Microsoft Entra ID の認証方式を列挙します。これは、Microsoft のログインページでユーザー名を入力する際に使用されるものと同じエンドポイントです。GetCredentialType メソッドを用いるほとんどのツールとは異なり、CredSpy は既存アカウントでサポートされている認証方式も表示します。
セキュリティ評価に役立ちます: ユーザー列挙、優先認証方式の発見、パスワード、Remote NGC (例: パスワードレスプッシュ通知)、FIDO2/パスキー、または証明書認証を利用するアカウントの識別。
Python 3.10+ が必要です。
pipx (推奨):
# pipx のインストール(すでにインストール済みの場合は省略)
apt install pipx
pipx ensurepath
# PyPI から(推奨)
pipx install credspy
# または GitHub から
pipx install git+https://github.com/RedByte1337/CredSpy.git
# ローカルクローンから
git clone https://github.com/RedByte1337/CredSpy.git
cd CredSpy
pipx install .
pip:
pip install .
# またはインストールせずに実行
pip install -r requirements.txt
python credspy.py ...
インストール後、どこからでも credspy を実行できます:
credspy -h
# 単一のメールアドレス
credspy [email protected]
# メールアドレスのファイル(1行1アドレス、# でコメント)
credspy emails.txt
# プロキシ経由(MITM ツール用に SSL 検証を無効化)
credspy emails.txt --proxy http://127.0.0.1:8080
# 結果を CSV にエクスポート
credspy emails.txt --csv results.csv
# フィルタリングしたメールアドレスリストを保存(組み合わせ可能)
credspy emails.txt \
--save-existing existing.txt \
--save-ngc ngc.txt \
--save-password-preferred password-preferred.txt
[!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と同じ未認証フローを使用しています。
このツールは許可されたセキュリティテストおよび研究目的のみを対象としています。あなたが所有している、または明示的な書面によるテスト許可を得ているテナントとアカウントに対してのみ使用してください。作成者は誤用について責任を負いません。
| フラグ | 説明 |
|---|
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 の発見も無効になります) |