
EntraFalcon 是一款基于 PowerShell 的评估工具,供渗透测试人员、安全分析师和系统管理员评估 Microsoft Entra ID 环境的安全态势。
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 使用一次交互式登录。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 使用备用第一方应用程序,并且只需要一次交互式登录。
当 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 时,会以降低的深度运行两项安全发现检查(CAP-004 和 CAP-005)。```powershell
.\run_EntraFalcon.ps1 -AuthFlow DeviceCode
#### 回退方案:授权码 + 手动代码流程```powershell
.\run_EntraFalcon.ps1 -AuthFlow ManualCode