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

EntraFalconは、ペンテスター、セキュリティアナリスト、システム管理者がMicrosoft Entra ID環境のセキュリティ態勢を評価するためのPowerShellベースの評価ツールです。
使いやすさを重視して設計されたEntraFalconは、PowerShell 5.1および7で動作し、WindowsとLinuxの両方をサポートしており、追加のPowerShellモジュール、追加インストール、Microsoft Graph APIの同意は不要です。
このツールは、特権オブジェクト、潜在的にリスクの高い割り当て、および見落とされがちな条件付きアクセスの設定ミスの発見を支援します。例えば以下のようなものです:
- 高権限グループまたはアプリケーションを制御するユーザー
- 過剰な権限を持つ外部または内部のエンタープライズアプリケーション(例:Microsoft Graph API、Azureロール)
- リソースに直接Azure IAMロールが割り当てられているユーザー
- オンプレミスから同期された特権アカウント
- 非アクティブなユーザー、またはMFA機能を持たないユーザー
- 機密性の高い割り当てに使用されている保護されていないグループ(例:条件付きアクセスの除外、サブスクリプション所有者、特権グループの対象メンバー)
検出結果はインタラクティブなHTMLレポートで提示され、効率的な調査と分析を支援します。
🚀 機能
- PowerShell 5.1および7と互換性のあるシンプルなPowerShellスクリプト。WindowsとLinuxで動作
- 複数の認証方法をサポートする組み込み認証
- Graph APIの同意プロンプトを回避するため、事前同意済みスコープを持つファーストパーティのMicrosoftアプリケーションを使用
- フィルタリング、ソート、データエクスポートなどをサポートするナビゲート可能なHTMLレポートを生成
- 90以上の自動チェックを実行し、結果をセキュリティ検出事項レポートにまとめる
- 脆弱なテナント設定やリスクの高いオブジェクトプロパティまたは権限のチェックを含む
- 重大度評価、および問題の説明、潜在的な脅威、修復ガイダンスを提供
- 影響を受けるオブジェクトを一覧表示し、さらなる調査のために詳細レポートへ直接リンク
- 基本的な影響度、可能性、リスクスコアリングを実行し、保護が弱い高権限オブジェクトを強調してデータを並べ替え
- リスクの高い設定と昇格された特権に関する警告を表示
- 以下を含むEntra IDオブジェクトを列挙:
- ユーザー(エージェントユーザーを含む)
- グループ
- エンタープライズアプリケーション
- アプリ登録
- マネージドID
- エージェントID
- エージェントIDブループリントプリンシパル
- エージェントIDブループリント
- PIM割り当て:
- Entraロール用PIM
- グループ用PIM
- Azureロール用PIM
- Entraロール割り当て
- Azureロール割り当て
- Intune RBAC割り当て
- アクセスパッケージ
- エンタイトルメント管理カタログ
- カタログRBAC
- 条件付きアクセスポリシー
- 管理単位
- PIM設定:
- Entraロール用PIM
- グループ用PIM(BroCi認証のみ)
✅ 要件
| 種類 | 権限 | 必須 | 欠如した場合の影響 |
|---|---|---|---|
| Entra IDロール | グローバル閲覧者 | はい | スクリプトを実行できない |
| Azureロール | 閲覧者:すべての管理グループまたはサブスクリプション上 | いいえ | Azure IAM割り当てを評価できない |
さらに、ツールを実行するデバイスからMicrosoft Graph API、およびオプションでAzure ARM APIに認証できる必要があります。 条件付きアクセスポリシーが認証をブロックしないことを確認してください。
▶️ 使用方法
EntraFalconのダウンロード
開始するには、リポジトリをクローンし、プロジェクトディレクトリに移動します:```powershell git clone https://github.com/CompassSecurity/EntraFalcon cd EntraFalcon
注: スクリプトを実行するには、PowerShell の実行ポリシーを一時的に変更する必要がある場合があります。
信頼できるスクリプトに対してのみこれを行ってください!```
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
EntraFalcon の実行
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 フロー (デフォルト / Windows のみ)
BroCi は代替のファーストパーティアプリケーションを使用し、対話型サインインを 1 回だけ必要とします。
これは、Azure Active Directory PowerShell クライアントに割り当てが必要で、回避しなければならない場合に役立ちます。```powershell
.\run_EntraFalcon.ps1
明示的なBroCi選択:```powershell
.\run_EntraFalcon.ps1 -AuthFlow BroCi
推奨: BroCi + 手動コードフロー```powershell
.\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
- スクリプトは認証 URL をクリップボードにコピーします。
- URL をブラウザに貼り付けます(SSO サポートのために別のデバイスで行うことも可能です)。
- 認証を完了します。
- ブラウザのアドレスバーから最終リダイレクト URL(認可コードを含む)をクリップボードにコピーします。
- Enter キーを押して続行します。スクリプトはクリップボードからコードを読み取り、トークン取得を完了します。