
Microsoft Entra ID 環境のセキュリティ体制を評価するための軽量な PowerShell ツールです。特権オブジェクト、リスクの高い割り当て、潜在的な設定ミスの特定に役立ちます。

EntraFalconは、ペンテスター、セキュリティアナリスト、システム管理者がMicrosoft Entra ID環境のセキュリティ態勢を評価するためのPowerShellベースの評価ツールです。
使いやすさを重視して設計されたEntraFalconは、PowerShell 5.1および7で動作し、WindowsとLinuxの両方をサポートしており、追加のPowerShellモジュール、追加インストール、Microsoft Graph APIの同意は不要です。
このツールは、特権オブジェクト、潜在的にリスクの高い割り当て、および見落とされがちな条件付きアクセスの設定ミスの発見を支援します。例えば以下のようなものです:
検出結果はインタラクティブなHTMLレポートで提示され、効率的な調査と分析を支援します。
| 種類 | 権限 | 必須 | 欠如した場合の影響 |
|---|---|---|---|
| Entra IDロール | グローバル閲覧者 | はい | スクリプトを実行できない |
| Azureロール | 閲覧者:すべての管理グループまたはサブスクリプション上 | いいえ | Azure IAM割り当てを評価できない |
さらに、ツールを実行するデバイスからMicrosoft Graph API、およびオプションでAzure ARM APIに認証できる必要があります。 条件付きアクセスポリシーが認証をブロックしないことを確認してください。
開始するには、リポジトリをクローンし、プロジェクトディレクトリに移動します:```powershell git clone https://github.com/CompassSecurity/EntraFalcon cd EntraFalcon
注: スクリプトを実行するには、PowerShell の実行ポリシーを一時的に変更する必要がある場合があります。
信頼できるスクリプトに対してのみこれを行ってください!```
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
EntraFalcon には Entra ID 認証の組み込みサポートが含まれています。認証フローを選択するには -AuthFlow を使用します。
通常の評価では、フルカバレッジのフローのいずれかを使用します:
| 推奨フロー | 最適な用途 | プラットフォーム | カバレッジ |
|---|---|---|---|
BroCi (デフォルト) | 対話型 Windows 実行 | Windows | フル |
BroCiManualCode | 別のブラウザーでの認証 | Windows, Linux, macOS | フル |
BroCiToken | 既存の Azure Portal リフレッシュトークン | Windows, Linux, macOS | フル |
ServicePrincipal | 自動化 / CI | Windows, Linux, macOS | フル |
BroCi は対話型ログインを 1 回使用します。BroCiToken と ServicePrincipal は使用しません。フォールバックユーザーフローでは、個別のリソーストークンが要求されるため、複数回の対話型ログインが必要になる場合があります。
事前同意済みのファーストパーティアプリケーションが存在しないため、フォールバックフローでは完全な列挙 (PIM for Groups、Access Packages、Catalogs) を実行できません。したがって、これらは現在のところフォールバックオプションに留まります。
| フロー | 使用条件 | プラットフォーム | 制限事項 |
|---|---|---|---|
AuthCode | レガシー互換性が必要な場合 | Windows | 部分的なカバレッジ。スタンドアロンの PIM for Groups、Access Packages、Catalogs レポートはありません。 |
DeviceCode | ブラウザーベースの認証が不可能な場合 | Windows, Linux, macOS | 部分的なカバレッジ。スタンドアロンの PIM for Groups、Access Packages、Catalogs レポートはありません。一部の Security Findings チェックは深度を落として実行されます。 |
ManualCode | 別のブラウザーセッションを通じて認証を完了する必要がある場合 | Windows, Linux, macOS | 部分的なカバレッジ。スタンドアロンの PIM for Groups、Access Packages、Catalogs レポートはありません。 |
BroCi は代替のファーストパーティアプリケーションを使用し、対話型サインインを 1 回だけ必要とします。
これは、Azure Active Directory PowerShell クライアントに割り当てが必要で、回避しなければならない場合に役立ちます。```powershell
.\run_EntraFalcon.ps1
明示的なBroCi選択:```powershell
.\run_EntraFalcon.ps1 -AuthFlow BroCi
.\run_EntraFalcon.ps1 -AuthFlow BroCiManualCode
1. スクリプトは認証URLをクリップボードにコピーします。
2. URLをブラウザに貼り付けます(SSOサポートのために別のデバイスで行うことも可能です)。
3. ブラウザの開発者ツールを開き、Networkタブで `Preserve log` を有効にします。
4. 認証を完了します。
5. ネットワークログで `code=1.` を検索し、codeを含むリクエストURLをクリップボードにコピーします。
6. Enterを押して続行すると、スクリプトはクリップボードからcodeを読み取り、トークン取得を完了します。
#### 推奨: トークンを使用したBroCi
有効なAzure Portalリフレッシュトークンがすでに利用可能な場合(クライアント c44b4083-3bb0-49c1-b47d-974e53cbdf3c)、それを直接使用できます。
例: ブラウザからリフレッシュトークンを取得する
1. ブラウザの開発者ツールを開き、NetworkタブでPreserve logを有効にします。
2. https://entra.microsoft.com で認証します。
3. ネットワークログで `brk_client_id=c44b4083-3bb0-49c1-b47d-974e53cbdf3c` を検索し、レスポンスからリフレッシュトークンを抽出します。```powershell
.\run_EntraFalcon.ps1 -AuthFlow BroCiToken -BroCiToken "1.XXXXXXXXXXX"
OAuth2 クライアントクレデンシャルグラントを使用して登録済みアプリケーションとして認証します — ユーザーの操作は不要です。
繰り返しの自動実行に適しています。
Application タイプの Graph API アクセス許可を持つカスタム Entra アプリ登録が必要です(以下を参照)。
クライアントシークレットを使用する場合:```powershell .\run_EntraFalcon.ps1 -AuthFlow ServicePrincipal -Tenant "mysecuretenant.ch" -SPClientId "" -SPClientSecret ""
**PFX証明書を使用する場合:**```powershell
.\run_EntraFalcon.ps1 -AuthFlow ServicePrincipal -Tenant "mysecuretenant.ch" -SPClientId "<AppId>" -SPCertificatePath "C:\certs\app.pfx"
パスワード保護された PFX の場合は、-SPCertificatePassword (Read-Host -Prompt "Certificate password" -AsSecureString) を追加します。
PEM 証明書 + 秘密鍵を使用する場合(PowerShell 7+ のみ):```powershell .\run_EntraFalcon.ps1 -AuthFlow ServicePrincipal -Tenant "mysecuretenant.ch" -SPClientId "" -SPCertificatePemPath "C:\certs\cert.pem" -SPPrivateKeyPemPath "C:\certs\key.pem"
暗号化された秘密鍵の場合は、`-SPPrivateKeyPemPassword (Read-Host -Prompt "Private key password" -AsSecureString)` を追加します。
##### 必要なアプリ登録のアクセス許可
アプリ登録に対して以下の **Application** アクセス許可(Delegated ではない)を付与し、管理者の同意を行います:
| アクセス許可 | 種類 |
|---|---|
| `AdministrativeUnit.Read.All` | Application |
| `AgentIdentity.Read.All` | Application |
| `AgentIdentityBlueprint.Read.All` | Application |
| `AgentIdentityBlueprintPrincipal.Read.All` | Application |
| `Application.Read.All` | Application |
| `AuditLog.Read.All` | Application |
| `Device.Read.All` | Application |
| `EntitlementManagement.Read.All` | Application |
| `Group.Read.All` | Application |
| `Organization.Read.All` | Application |
| `Policy.Read.All` | Application |
| `PrivilegedAccess.Read.AzureADGroup` | Application |
| `RoleManagement.Read.Directory` | Application |
| `RoleManagementPolicy.Read.AzureADGroup` | Application |
| `User.Read.All` | Application |
| `DeviceManagementRBAC.Read.All` | Application |
さらに、ルート管理グループ(または該当するすべてのサブスクリプション)に対して **Azure Reader** ロールを割り当て、オプションで Entra ID のサービスプリンシパルに **Global Reader** ロールを割り当てます(ユーザーごとの MFA 状態を取得するために必要です)。
#### フォールバック: 認証コードフロー(Windows のみ)```powershell
.\run_EntraFalcon.ps1 -AuthFlow AuthCode
堅牢化された環境では、条件付きアクセスによって制限されることがよくあります。
DeviceCode では、2つのセキュリティ検出事項チェックが縮小された深度で実行されます(CAP-004 および CAP-005)。```powershell
.\run_EntraFalcon.ps1 -AuthFlow DeviceCode
#### フォールバック: 認証コード + 手動コードフロー```powershell
.\run_EntraFalcon.ps1 -AuthFlow ManualCode