返回更新列表
新发布Aug 26, 2026

EntraFalcon V20260824

一个轻量级 PowerShell 工具,用于评估 Microsoft Entra ID 环境的安全态势。它有助于识别特权对象、风险分配和潜在的错误配置。

分享

EntraFalcon

alt text

EntraFalcon 是一款基于 PowerShell 的评估工具,供渗透测试人员、安全分析师和系统管理员评估 Microsoft Entra ID 环境的安全态势。

EntraFalcon 以易用性为设计目标,可在 PowerShell 5.1 和 7 上运行,支持 Windows 和 Linux,无需额外的 PowerShell 模块、额外安装或 Microsoft Graph API 同意授权。

该工具有助于发现特权对象、潜在高风险分配以及常被忽视的条件访问配置错误,例如:

  • 对高权限组或应用程序拥有控制权的用户
  • 拥有过度权限(例如 Microsoft Graph API、Azure 角色)的外部或内部企业应用程序
  • 直接在资源上拥有 Azure IAM 角色分配的用户
  • 从本地同步的特权账户
  • 非活跃用户或不具备 MFA 能力的用户
  • 用于敏感分配(例如条件访问排除项、订阅所有者或特权组的合格成员)的未受保护组

发现结果以交互式 HTML 报告呈现,以支持高效探索和分析。

🚀 功能特性

  • 简单的 PowerShell 脚本,兼容 PowerShell 5.1 和 7。可在 Windows 和 Linux 上运行
  • 内置身份验证,支持多种方法
  • 使用具有预同意范围的 Microsoft 第一方应用程序,以绕过 Graph API 同意提示
  • 生成可导航的 HTML 报告,支持筛选、排序、数据导出等
  • 执行超过 90 项自动化检查,并在安全发现报告中汇总结果
    • 包括针对弱租户配置以及高风险对象属性或权限的检查
    • 提供严重性评级以及问题描述、潜在威胁和修复指导
    • 列出受影响对象,并直接链接到其详细报告以供进一步调查
  • 执行基本的影响、可能性和风险评分,以突出显示保护薄弱的高权限对象并对数据进行排序。
  • 针对高风险配置和提升的权限显示警告
  • 枚举 Entra 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自动化 / CIWindows、Linux、macOS完整

BroCi 使用一次交互式登录。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 报告。部分安全发现检查以降低的深度运行。
ManualCode必须通过单独的浏览器会话完成身份验证Windows、Linux、macOS部分覆盖。没有独立的 PIM for Groups、Access Packages 或 Catalogs 报告。

推荐:BroCi 流程(默认 / 仅限 Windows)

BroCi 使用备用第一方应用程序,并且只需要一次交互式登录。
当 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 时,会以降低的深度运行两项安全发现检查(CAP-004 和 CAP-005)。```powershell .\run_EntraFalcon.ps1 -AuthFlow DeviceCode

#### 回退方案:授权码 + 手动代码流程```powershell
.\run_EntraFalcon.ps1 -AuthFlow ManualCode
  1. 脚本将认证 URL 复制到剪贴板。
  2. 将 URL 粘贴到浏览器中(可选地在另一台设备上以支持 SSO)。
  3. 完成认证。
  4. 从浏览器地址栏复制最终重定向 URL(包含授权码)到剪贴板。
  5. 按 Enter 继续;脚本从剪贴板读取授权码并完成令牌获取。

其他参数

分类