CompassSecurity/EntraFalcon

GitHub: CompassSecurity/EntraFalcon

一款基于 PowerShell 的 Microsoft Entra ID 安全态势评估工具,通过 80 余项自动化检查发现特权对象、风险分配和配置缺陷,并生成交互式 HTML 安全发现报告。

Stars: 414 | Forks: 39

# EntraFalcon ![alt text](/images/EntraFalcon_logo.png) EntraFalcon 是一个基于 PowerShell 的评估工具,供渗透测试人员、安全分析师和系统管理员用于评估 Microsoft Entra ID 环境的安全态势。 EntraFalcon 设计易于使用,可在 PowerShell 5.1 和 7 上运行,支持 Windows 和 Linux,并且不需要额外的 PowerShell 模块、额外安装或 Microsoft Graph API 同意。 该工具有助于发现经常被忽视的特权对象、潜在的有风险分配以及条件访问(Conditional Access)配置错误,例如: - 控制高特权组或应用程序的用户 - 具有过多权限的外部或内部企业应用程序(例如,Microsoft Graph API、Azure 角色) - 直接在资源上拥有 Azure IAM 角色分配的用户 - 从本地同步的特权帐户 - 非活动用户或没有 MFA 功能的用户 - 在敏感分配中使用的未受保护组(例如,条件访问排除项、订阅所有者,或特权组的合格成员) 发现结果以交互式 HTML 报告的形式呈现,以支持高效的探索和分析。 ## 🚀 功能 - 兼容 PowerShell 5.1 和 7 的简单 PowerShell 脚本。可在 Windows 和 Linux 上运行 - 内置支持多种方法的身份验证 - 使用具有预同意范围的第一方 Microsoft 应用程序来绕过 Graph API 同意提示 - 生成支持过滤、排序、数据导出等操作的可导航 HTML 报告 - 执行 >80 项自动检查,并将结果汇总在安全发现报告(Security Findings Report)中 - 包括对薄弱租户配置以及有风险的对象属性或权限的检查 - 提供严重性评级以及问题描述、潜在威胁和补救指南 - 列出受影响的对象,并直接链接到其详细报告以供进一步调查 - 执行基本的漏洞影响、可能性和风险评分,以突出保护薄弱的高特权对象并对数据进行排序。 - 显示有风险的配置和提升的权限的警告 - 枚举 Entra ID 对象,包括: - 用户(包括代理用户) - 组 - 企业应用程序 - 应用注册 - 托管标识 - 代理标识 (BETA) - 代理标识蓝图主体 (BETA) - 代理标识蓝图 (BETA) - PIM 分配: - 用于 Entra 角色的 PIM - 用于 Entra 组的 PIM - 用于 Azure 角色的 PIM - Entra 角色分配 - Azure 角色分配 - 条件访问策略 - 管理单元 - PIM 设置(用于 Entra 角色) ## ✅ 要求 |类型|权限|强制|缺失时的影响| |-|-|-|-| |Entra ID 角色|全局读取者|是|无法运行脚本| |Azure 角色|读取者:在每个管理组或订阅上|否|无法评估 Azure IAM 分配| 此外,您必须能够从运行该工具的设备向 Microsoft Graph API 以及可选的 Azure ARM API 进行身份验证。 请确保条件访问策略不会阻止您的身份验证。 ## ▶️ 使用方法 ### 下载 EntraFalcon 首先,克隆存储库并导航到项目目录: ``` git clone https://github.com/CompassSecurity/EntraFalcon cd EntraFalcon ``` 注意:您可能需要临时更改 PowerShell 执行策略才能运行该脚本。 请仅对受信任的脚本执行此操作! ``` Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process ``` ### 运行 EntraFalcon EntraFalcon 包含对 Entra ID 身份验证的内置支持。 提供了多种身份验证流程以支持不同的环境和限制。 根据所选的流程,这需要进行多次交互式身份验证。 使用 `-AuthFlow` 选择身份验证流程。 | 身份验证流程 | Windows | Linux/macOS | 交互式登录次数 | 便利性 | 参数 | 备注 | |-----------------------------|---------|-------|--------------------|-------------|--------------------------------------|-------| | BroCi | 是 | 否 | 1 | 高 | `-AuthFlow BroCi` *(默认)* | 避免依赖旧版客户端,例如 *Azure Active Directory PowerShell*。 | | 授权码流程 | 是 | 否 | 4 | 正常 | `-AuthFlow AuthCode` | 标准 non-BroCi 授权码流程。 | | 设备码流程 | 是 | 是 | 3 | 正常 | `-AuthFlow DeviceCode` | 身份验证可以在另一台设备上完成,但有两项安全发现检查以降低的深度运行。 | | 授权码 + 手动代码流程| 是 | 是 | 4 | 低-正常 | `-AuthFlow ManualCode` | 身份验证可以在不同的设备或浏览器会话中完成。 | | BroCi + 手动代码流程 | 是 | 是 | 1 | 低 | `-AuthFlow BroCiManualCode` | 必须从浏览器开发人员工具中手动提取授权码。 | | 带令牌的 BroCi | 是 | 是 | 0 | 低 | `-AuthFlow BroCiToken -BroCiToken ""` | 刷新令牌必须手动获取(例如,从浏览器开发工具或其他身份验证工具)。 | #### 使用 BroCi 流程(默认,Beta 版 / 仅限 Windows) BroCi 使用备用的第一方应用程序,并且只需要一次交互式登录。 此外,当 *Azure Active Directory PowerShell* 客户端需要分配并且必须被避免时,它非常有用。 ``` .\run_EntraFalcon.ps1 ``` 显式选择 BroCi: ``` .\run_EntraFalcon.ps1 -AuthFlow BroCi ``` #### 授权码流程(仅限 Windows) ``` .\run_EntraFalcon.ps1 -AuthFlow AuthCode ``` #### 设备码流程 在加固环境中,它通常受条件访问限制。 使用 `DeviceCode` 时,有两项安全发现检查以降低的深度运行(`CAP-004` 和 `CAP-005`)。 ``` .\run_EntraFalcon.ps1 -AuthFlow DeviceCode ``` #### 使用授权码 + 手动代码流程进行身份验证 ``` .\run_EntraFalcon.ps1 -AuthFlow ManualCode ``` 1. 脚本将身份验证 URL 复制到剪贴板。 2. 将 URL 粘贴到浏览器中(可选择在另一台设备上以支持 SSO)。 3. 完成身份验证。 4. 从浏览器地址栏复制最终的重定向 URL(包含授权码)到剪贴板。 5. 按 Enter 键继续;脚本从剪贴板读取代码并完成令牌获取。 #### BroCi + 手动代码流程 ``` .\run_EntraFalcon.ps1 -AuthFlow BroCiManualCode ``` 1. 脚本将身份验证 URL 复制到剪贴板。 2. 将 URL 粘贴到浏览器中(可选择在另一台设备上以支持 SSO)。 3. 打开浏览器开发人员工具,并在“网络”选项卡中启用 `Preserve log`。 4. 完成身份验证。 5. 在网络日志中搜索 `code=1.`,并将包含该代码的请求 URL 复制到剪贴板。 6. 按 Enter 键继续;脚本从剪贴板读取代码并完成令牌获取。 #### 带令牌的 BroCi 如果已有有效的 Azure 门户刷新令牌(客户端 c44b4083-3bb0-49c1-b47d-974e53cbdf3c),则可以直接使用它。 示例:从浏览器获取刷新令牌 1. 打开浏览器开发人员工具,并在“网络”选项卡中启用 Preserve log。 2. 在 https://entra.microsoft.com 进行身份验证。 3. 在网络日志中搜索 brk_client_id=c44b4083-3bb0-49c1-b47d-974e53cbdf3c 并从响应中提取刷新令牌。 ``` .\run_EntraFalcon.ps1 -AuthFlow BroCiToken -BroCiToken "1.XXXXXXXXXXX" ``` ### 其他参数 #### 包括 Microsoft 拥有的企业应用 默认情况下,官方的 Microsoft 企业应用程序被排除在评估之外,以减少干扰。要将它们包含在枚举和分析中,请使用 `-IncludeMsApps` 开关: ``` .\run_EntraFalcon.ps1 -IncludeMsApps ``` #### 跳过用于组的 PIM 评估 使用 `-SkipPimForGroups` 开关跳过对组的 PIM 分配的枚举。 这会跳过访问组的 PIM 数据所需的额外身份验证。 ``` .\run_EntraFalcon.ps1 -SkipPimForGroups ``` #### 其他可选参数 | 参数 | 描述 | 默认值 | |---------------------- |----------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------| | **UserAgent** | 用于向令牌端点和 API 调用发起请求的用户代理。 | `EntraFalcon` | | **DisableCAE** | 禁用请求连续访问评估 (CAE) 令牌。 | `false` | | **Tenant** | 指定要向其进行身份验证的租户(ID 或域)。在评估非帐户主租户的租户时很有用。| `帐户的主租户` | | **OutputFolder** | 存储报告的输出文件夹。 | `Results_%TenantName%_YYYYMMDD_HHMM` | | **LimitResults** | 限制报告中组和用户的数量(在按风险排序后)。对于大型租户很有用。 | - | | **LogLevel** | 控制运行时 cli 日志记录的详细程度。支持的值:`Off`(默认)、`Verbose`、`Debug`、`Trace`。 | `Off` | | **ApiTop** | 设置从 API 返回的最大对象数。较低的值可降低超时风险 (HTTP 504),但会增加请求计数。 | `999`(有效范围:5–999) | | **AuthFlow** | 首选的身份验证流程选择器。值:`BroCi`(默认)、`AuthCode`、`DeviceCode`、`ManualCode`、`BroCiManualCode`、`BroCiToken`。 | `BroCi` | | **BroCiToken** | 用于 `AuthFlow BroCiToken` 的 Azure 门户 **刷新令牌**。 | - | | **Csv** | 除 TXT/HTML 报告文件外,还启用写入 CSV 报告文件。 | `false` | | **ExportCapUncoveredUsers** | 对于每个启用了用户定位的条件访问策略,导出一个 CSV 文件,列出**未**被该策略覆盖的用户。文件将写入到输出目录中的 `ConditionalAccessPolicies_UncoveredUsers` 子文件夹。 | `false` | | **DebugObjectDump** | 将内存中的最终报告对象导出为 CLIXML 到 `Debug_ObjectDump`,用于故障排除和测试。 | `false` | ## 📊 一些示例报告 ### 安全发现报告 ![alt text](/images/security_findings_report.png) ![alt text](/images/security_findings_report2.png) ### 用户 ![alt text](/images/user.png) ### 用户(详细信息部分) ![alt text](/images/user_details.png) ### Entra ID 角色 ![alt text](/images/entra_roles.png) ### Azure 角色 ![alt text](/images/azure_roles.png) ### 企业应用程序(详细信息部分) ![alt text](/images/sp_details.png) ### 条件访问策略 ![alt text](/images/caps.png) ### 条件访问策略(详细信息部分) ![alt text](/images/caps_details.png) ### PIM 角色设置 ![alt text](/images/pim_settings.png) ### 枚举摘要 ![alt text](/images/enumeration_overview.png) ## 📑 HTML 报告 ### **常规** - 点击 ⚙️ **Columns** 按钮可显示或隐藏特定列。 - 点击 💾 **Export CSV** 可将当前可见数据下载为 CSV 文件。 - 点击 👁 **Share View** 可将过滤器、排序和列选择复制为可共享链接。 - 点击 🧰 **Preset Views** 可应用预配置的过滤器和列选择。 - 点击 🔄 **Reset View** 可将视图重置为默认设置。 - 点击对象名称以跳转到详细信息,即使是在其他报告中。 - 使用内部导航时,请按浏览器的后退按钮返回。 - 浏览器搜索甚至可以在折叠的*详细信息*(Details)部分中定位内容。 - 某些表格标题字段在鼠标悬停时会显示帮助文本。 - 通过点击表格标题对数据进行排序。 ### **过滤** - 如果未指定运算符,则过滤默认为*包含*(contains)。 - 使用 `=` 进行完全匹配。 - 使用 `^` 表示*以...开头*(例如,`^Mallory`)。 - 使用 `$` 表示*以...结尾*(例如,`$domain.ch`)。 - 支持比较运算符,如 `>`、`<`、`>=`、`<=`(仅限数值)。 - 过滤器可以通过以 `!` 开头来取反(数值比较除外)。示例:`!Mallory`、`!=Mallory`、`!^Mallory` 或 `!$domain.ch`。 - 使用 `=empty` 匹配空单元格,或使用 `!=empty` 匹配非空单元格。 - 使用 `||` 匹配同一列中的多个值中的任何一个(例如,`Admin || Guest`)。 - 使用 `&&` 要求在同一列中进行多个匹配(例如,`!adm && ! && !sql`)。 - 要跨列应用“或”逻辑,请直接在过滤字段中使用 `or_`、`group1_`、`group2_`... 示例:在第 1 列中:`or_>1`,在第 2 列中:`or_!Mallory` - *注意:***DisplayName** 列也包含对象 ID(不可见),因此也可以按 ID 进行过滤。 ### **使用 GET 参数进行控制** - *过滤*:使用字段名称作为 HTTP GET 参数应用过滤器,例如,`?EntraRoles=>1&Enabled=true`。 要跨列应用 OR 逻辑,请在(例如,`?or_EntraRoles=>0&or_GrpMem=>0`)中使用 `or_` 或 `group1_` 前缀。 - *列选择*:使用 `columns` 参数选择要显示的列。示例:`?columns=DisplayName,Owner`。 - *排序*:使用 `sort` 和 `sortDir` 参数对数据进行排序。示例:`?sort=Impact&sortDir=desc` 或 `?sort=OwnerCount&sortDir=asc`。 - *对象详细信息*:使用锚点(`#`)和对象 ID 直接跳转到报告中的特定对象,例如 `#%ObjectID%`。 ### **评级** - **影响**:表示对象拥有的权限数量或严重性。 - **可能性**:表示对象受影响的难易程度或其受保护的程度。 - **风险**:计算得出的分数:*影响 × 可能性 = 风险*。 - **重要**: - 此评分旨在作为基本评估,以帮助对表中的条目进行排序和优先级划分。 - 风险分数不能在不同对象类型或报告之间直接比较。 - 它并非旨在取代完整的风险评估。 ## 🔧幕后原理 ### 角色分类 Entra ID 和 Azure 角色大致分类为不同的层级级别。此分类会影响分配给这些角色的对象的影响分数。 目的是为拥有更强大角色(例如,全局管理员)的用户分配比拥有不那么关键角色(例如,全局读取者)的用户更高的影响分数,即使 Microsoft 将两者都视为特权角色。
Entra ID 角色 | 角色名称 | 层级 | GUID | |------------------------------------------------|------------|----------------------------------------| | 全局管理员 | 0 | 62e90394-69f5-4237-9190-012177145e10 | | 合作伙伴二级支持 | 0 | e00e864a-17c5-4a4b-9c06-f5b95a8d5bd8 | | 特权身份验证管理员 | 0 | 7be44c8a-adaf-4e2a-84d6-ab2649e08a13 | | 特权角色管理员 | 0 | e8611ab8-c189-46e8-94e1-60213ab1f814 | | 域名管理员 | 0 | 8329153b-31d0-4727-b945-745eb3bc5f31 | | 外部身份提供者管理员 | 0 | be2f45a1-457d-42af-a067-6ec1fa63bc45 | | 混合身份管理员 | 0 | 8ac3fc64-6eca-42ea-9e69-59f4c7b60eb2 | | 应用程序管理员 | 0 | 9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3 | | 云应用程序管理员 | 0 | 158c047a-c907-4556-b7ef-446551a6b5f7 | | 安全管理员 | 0 | 194ae4cb-b126-40b2-bd5b-6091b380977d | | 代理 ID 管理员 | 1 | db506228-d27e-4b7d-95e5-295956d6615f | | 条件访问管理员 | 1 | b1be1c3e-b65d-4f19-8427-f6fa0d97feb9 | | 身份验证管理员 | 1 | c4e39bd9-1100-46d3-8c65-fb160da0071f | | Azure DevOps 管理员 | 1 | e3973bdf-4987-49ae-837a-ba8e231c7286 | | 目录写入者 | 1 | 9360feb5-f418-4baa-8175-e2a00bac4301 | | Exchange 管理员 | 1 | 29232cdf-9323-42fd-ade2-1d097af3e4de | | 组管理员 | 1 | fdd7a751-b60b-444a-984c-02652fe8fa1c | | 服务台管理员 | 1 | 729827e3-9c14-49f7-bb1b-9608f156bbb8 | | 身份治理管理员 | 1 | 45d8d3c5-c802-45c6-b32a-1d70b5e1e86e | | Intune 管理员 | 1 | 3a2c62db-5318-420d-8d74-23affee5d9d5 | | 知识管理员 | 1 | b5a8dcf3-09d5-43a9-a639-8e29ef291470 | | 知识经理 | 1 | 744ec460-397e-42ad-a462-8b3f9747a02c | | 生命周期工作流管理员 | 1 | 59d46f88-662b-457b-bceb-5c3809e5908f | | 目录同步帐户 | 1 | d29b2b05-8046-44ba-8758-1e26182fcf32 | | 本地目录同步帐户 | 1 | a92aed5d-d78a-4d16-b381-09adb37eb3b0 | | 合作伙伴一级支持 | 1 | 4ba39ca4-527c-499a-b93d-d9b492c50246 | | 密码管理员 | 1 | 966707d0-3269-4727-9be2-8c3a10f19b9d | | SharePoint 管理员 | 1 | f28a1f50-f6e7-4571-818b-6a12f2af6b6c | | Teams 管理员 | 1 | 69091246-20e8-4a56-aa4d-066075b2a7a8 | | 用户管理员 | 1 | fe930be7-5e62-47db-91af-98c3a49a38b1 | | Windows 365 管理员 | 1 | 11451d60-acb2-45eb-a7d6-43d0f0125c13 | | Yammer 管理员 | 1 | 810a2642-a034-447f-a5e8-41beaa378541 | | 身份验证策略管理员 | 2 | 0526716b-113d-4c15-b2c8-68e3c22b9f80 | | Azure AD 加入的设备本地管理员 | 2 | 9f06204d-73c1-4d4c-880a-6edb90606fd8 | | 云设备管理员 | 2 | 7698a772-787b-4ac8-901f-60d6b08affd2 | | 全局读取者 | 2 | f2ef992c-3afb-46b9-b7cf-a126ee74c451 | | 来宾邀请者 | 2 | 95e79109-95c0-4d8e-aee3-d01accf2d47b |
Azure 角色 | 角色名称 | 层级 | GUID | |--------------------------------------------------------------------|------------|----------------------------------------| | 所有者 | 0 | 8e3af657-a8ff-443c-a75c-2fe8c4bcb635 | | 用户访问管理员 | 0 | 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9 | | 参与者 | 0 | b24988ac-6180-42a0-ab88-20f7382dd24c | | 基于角色的访问控制管理员 | 0 | f58310d9-a9f6-439a-9e8d-f62e7b41a168 | | 预订管理员 | 0 | a8889054-8d42-49c9-bc1c-52486c10e7cd | | 安全管理员 | 1 | fb1c8493-542b-48eb-b624-b4c8fea62acd | | 虚拟机参与者 | 1 | 9980e02c-c2be-4d73-94e8-173b1dc7cf3c | | 虚拟机数据访问管理员 | 1 | 66f75aeb-eabe-4b70-9f1e-c350c4c9ad04 | | 虚拟机管理员登录 | 1 | 1c0163c0-47e6-4577-8991-ea5c82e286e4 | | Windows 管理中心管理员登录 | 1 | a6333a3e-0164-44c3-b281-7a577aff287f | | 容器注册表参与者和数据访问配置管理员 | 1 | 3bc748fc-213d-45c1-8d91-9da5725539b9 | | Key Vault 管理员 | 1 | 00482a5a-887f-4fb3-b363-3b7fe8e74483 | | Key Vault 数据访问管理员 | 1 | 8b54135c-b56d-4d72-a534-26097cfdc8d8 | | Key Vault 机密负责人 | 1 | b86a8fe4-44ce-4948-aee5-eccb2c155cd7 | | Key Vault 机密用户 | 1 | 4633458b-17de-408a-b874-0445c86b69e6 | | Azure Kubernetes 服务 RBAC 管理员 | 1 | 3498e952-d568-435e-9b2c-8d77e338d7f7 | | Azure Kubernetes 服务 RBAC 群集管理员 | 1 | b1ff04bb-8a4e-4dc4-8eb5-8693973ce19b | | Azure Arc Kubernetes 管理员 | 1 | dffb1e0c-446f-4dde-a09f-99eb5cc68b96 | | Azure Arc Kubernetes 群集管理员 | 1 | 8393591c-06b9-48a2-a542-1bd6b377f6a2 | | Azure Arc VMware VM 参与者 | 1 | b748a06d-6150-4f8a-aaa9-ce3940cd96cb | | 存储帐户参与者 | 1 | 17d1049b-9a84-46fb-8f53-869881c3d3ab | | 读取者 | 2 | acdd72a7-3385-48efd42-f606fba81ae7 | | 安全读取者 | 2 | 39bc4728-0917-49c7-9d2c-d95423bc2eb4 | | 虚拟机用户登录 | 3 | fb879df8-f326-4884-b1cf-06f3ad86be52 | | 桌面虚拟化用户 | 3 | 1d18fff3-a72a-46b5-b4a9-0b38a3cd7e63 |
### API 权限分类 某些 API 权限允许应用程序直接将权限提升至全局管理员权限。因此,某些 API 权限被分类为不同的严重性级别。此分类会影响分配了这些权限(无论是作为应用程序权限还是用户的委派权限)的应用程序的影响分数。
应用程序权限 | 权限 | 严重性 | GUID | |-------------------------------------------------------------|------------|----------------------------------------| | RoleManagement.ReadWrite.Directory | 危险 | 9e3f62cf-ca93-4989-b6ce-bf83c28f9fe8 | | AppRoleAssignment.ReadWrite.All | 危险 | 06b708a9-e830-4db3-a914-8e69da51d44f | | Application.ReadWrite.All | 危险 | 1bfefb4e-e0b5-418b-a88f-73c46d2cc8e9 | | RoleAssignmentSchedule.ReadWrite.Directory | 危险 | dd199f4a-f148-40a4-a2ec-f0069cc799ec | | PrivilegedAssignmentSchedule.ReadWrite.AzureADGroup | 危险 | 41202f2c-f7ab-45be-b001-85c9728b9d69 | | PrivilegedAccess.ReadWrite.AzureADGroup | 危险 | 2f6817f8-7b12-4f0f-bc18-eeaf60705a9e | | RoleEligibilitySchedule.ReadWrite.Directory | 危险 | fee28b28-e1f3-4841-818e-2704dc62245f | | PrivilegedEligibilitySchedule.ReadWrite.AzureADGroup | 危险 | 618b6020-bca8-4de6-99f6-ef445fa4d857 | | Domain.ReadWrite.All | 危险 | 7e05723c-0bb0-42da-be95-ae9f08a6e53c | | Application.ReadUpdate.All | 危险 | fc023787-fd04-4e44-9bc7-d454f00c0f0a | | AgentIdentityBlueprint.ReadWrite.All | 高 | 7fddd33b-d884-4ec0-8696-72cff90ff825 | | AgentIdentityBlueprint.AddRemoveCreds.All | 高 | 0510736e-bdfb-4b37-9a1f-89b4a074763a | | ADSynchronization.ReadWrite.All | 高 | ab43b826-2c7a-4aff-9ecd-d0629d0ca6a9 | | EntitlementManagement.ReadWrite.All | 高 | 9acd699f-1e81-4958-b001-93b1d2506e19 | | Organization.ReadWrite.All | 高 | 292d869f-3427-49a8-9dab-8c70152b74e9 | | Policy.ReadWrite.PermissionGrant | 高 | a402ca1c-2696-4531-972d-6e5ee4aa11ea | | RoleManagementPolicy.ReadWrite.AzureADGroup | 高 | b38dcc4d-a239-4ed6-aa84-6c65b284f97c | | RoleManagementPolicy.ReadWrite.Directory | 高 | 31e08e0a-d3f7-4ca2-ac39-7343fb83e8ad | | Policy.ReadWrite.AuthenticationMethod | 高 | 29c18626-4985-4dcd-85c0-193eef327366 | | User.DeleteRestore.All | 高 | eccc023d-eccf-4e7b-9683-8813ab36cecc | | User.EnableDisableAccount.All | 高 | 3011c876-62b7-4ada-afa2-506cbbecc68c | | DelegatedPermissionGrant.ReadWrite.All | 高 | 8e8e4742-1d95-4f68-9d56-6ee75648c72a | | Policy.ReadWrite.ConditionalAccess | 高 | 01c0a623-fc9b-48e9-b794-0756f8e8f067 | | DeviceManagementConfiguration.ReadWrite.All | 高 | 9241abd9-d0e6-425a-bd4f-47ba86e767a4 | | DeviceManagementRBAC.ReadWrite.All | 高 | e330c4f0-4170-414e-a55a-2f022ec2b57b | | Directory.ReadWrite.All | 高 | 19dbc75e-c2e2-444c-a770-ec69d8559fc7 | | Group.ReadWrite.All | 高 | 62a82d76-70ea-41e2-9197-370581804d09 | | GroupMember.ReadWrite.All | 高 | dbaae8cf-10b5-4b86-a4a1-f871c94c6695 | | UserAuthenticationMethod.ReadWrite.All | 高 | 50483e42-d915-4231-9639-7fdb7fd190e5 | | User-PasswordProfile.ReadWrite.All | 高 | 56760768-b641-451f-8906-e1b8ab31bca7 | | Sites.FullControl.All | 高 | a82116e5-55eb-4c41-a434-62fe8a61c773 | | Sites.FullControl.All SharePointAPI | 高 | 678536fe-1083-478a-9c59-b99265e6b0d3 | | Sites.Manage.All SharePointAPI | 高 | 9bff6588-13f2-4c48-bbf2-ddab62256b36 | | Sites.Read.All SharePointAPI | 高 | d13f72ca-a275-4b96-b789-48ebcc4da984 | | Sites.ReadWrite.All SharePointAPI | 高 | fbcd29d2-fcca-4405-aded-518d457caae4 | | Sites.Manage.All | 高 | 0c0bf378-bf22-4481-8f81-9e89a9b4960a | | Sites.Read.All | 高 | 332a536c-c7ef-4017-ab91-336970924f0d | | Sites.ReadWrite.All | 高 | 9492366f-7969-46a4-8d15-ed1a20078fff | | Files.Read.All | 高 | 01d4889c-1287-42c6-ac1f-5d1e02578ef6 | | Files.ReadWrite.All | 高 | 75359482-378d-4052-8f01-80520e7db3cd | | DeviceLocalCredential.Read.All | 高 | db51be59-e728-414b-b800-e0f010df1a79 | | AdministrativeUnit.ReadWrite.All | 高 | 5eb59dd3-1da2-4329-8733-9dabdc435916 | | UserAuthMethod-HardwareOATH.ReadWrite.All | 高 | 7e9ebcc1-90aa-4471-8051-e68d6b4e9c89 | | UserAuthMethod-Phone.ReadWrite.All | 高 | 6e85d483-7092-4375-babe-0a94a8213a58 | | UserAuthMethod-QR.ReadWrite.All | 高 | 4869299f-18c3-40c8-98f2-222657e67db1 | | UserAuthMethod-TAP.ReadWrite.All | 高 | 627169a8-8c15-451c-861a-5b80e383de5c | | User.ReadWrite.All | 中等 | 741f803b-c850-494e-b5df-cde7c675a1ca | | Chat.Read.All | 中等 | 6b7d71aa-70aa-4810-a8d9-5d9fb2830017 | | Chat.ReadWrite.All | 中等 | 294ce7c9-31ba-490a-ad7d-97a7d075e4ed | | Calendars.Read | 中等 | 798ee544-9d2d-430c-a058-570e29e34338 | | Calendars.ReadWrite | 中等 | ef54d2bf-783f-4e0f-bca1-3210c0444d99 | | Mail.Read | 中等 | 810c84a8-4a9e-49e6-bf7d-12d183f40d01 | | Mail.ReadWrite | 中等 | e2a3a72e-5f79-4c64-b1b1-878b674786c9 | | Mail.Send | 中等 | b633e1c5-b582-4048-a93e-9f11b44c7e96 | | OnlineMeetings.ReadWrite.All | 中等 | b8bb2037-6e08-44ac-a4ea-4674e010e2a4 | | CustomSecAttributeAssignment.ReadWrite.All | 中等 | de89b5e4-5b8f-48eb-8925-29c2b33bd8bd | | ServicePrincipalEndpoint.ReadWrite.All | 中等 | 89c8469c-83ad-45f7-8ff2-6e3d4285709e | | AgentIdentity.CreateAsManager | 低 | 4c390976-b2b7-42e0-9187-c6be3bead001 |
委派权限 | 权限 | 严重性 | GUID | |------------------------------------------------------|----------|----------------------------------------| | RoleManagement.ReadWrite.Directory | 危险| d01b97e9-cbc0-49fe-810a-750afd5527a3 | | AppRoleAssignment.ReadWrite.All | 危险| 84bccea3-f856-4a8a-967b-dbe0a3d53a64 | | Application.ReadWrite.All | 危险| bdfbf15f-ee85-4955-8675-146e8e5296b5 | | RoleAssignmentSchedule.ReadWrite.Directory | 危险| 8c026be3-8e26-4774-9372-8d5d6f21daff | | PrivilegedAssignmentSchedule.ReadWrite.AzureADGroup | 危险| 06dbc45d-6708-4ef0-a797-f797ee68bf4b | | PrivilegedAccess.ReadWrite.AzureADGroup | 危险| 32531c59-1f32-461f-b8df-6f8a3b89f73b | | RoleEligibilitySchedule.ReadWrite.Directory | 危险| 62ade113-f8e0-4bf9-a6ba-5acb31db32fd | | PrivilegedEligibilitySchedule.ReadWrite.AzureADGroup | 危险|974594-d163-484e-ba39-c330d5897667 | | Domain.ReadWrite.All | 危险| 0b5d694c-a244-4bde-86e6-eb5cd07730fe | | Application.ReadUpdate.All | 危险| 0586a906-4d89-4de8-b3c8-1aacdcc0c679 | | AgentIdentityBlueprint.AddRemoveCreds.All | 高 | 75b5feb2-bfe7-423f-907d-cc505186f246 | | AgentIdentityBlueprint.ReadWrite.All | 高 | 4fd490fc-1467-48eb-8a4c-421597ab0402 | | EntitlementManagement.ReadWrite.All | 高 | ae7a573d-81d7-432b-ad44-4ed5c9d89038 | | Organization.ReadWrite.All | 高 | 46ca0847-7e6b-426e-9775-ea810a948356 | | Policy.ReadWrite.PermissionGrant | 高 | 2672f8bb-fd5e-42e0-85e1-ec764dd2614e | | RoleManagementPolicy.ReadWrite.AzureADGroup | 高 | 0da165c7-3f15-4236-b733-c0b0f6abe41d | | RoleManagementPolicy.ReadWrite.Directory | 高 | 1ff1be21-34eb-448c-9ac9-ce1f506b2a68 | | Policy.ReadWrite.AuthenticationMethod | 高 | 7e823077-d88e-468f-a337-e18f1f0e6c7c | | User.DeleteRestore.All | 高 | 4bb440cd-2cf2-4f90-8004-aa2acd2537c5 | | User.EnableDisableAccount.All | 高 | f92e74e7-2563-467f-9dd0-902688cb5863 | | DelegatedPermissionGrant.ReadWrite.All | 高 | 41ce6ca6-6826-4807-84f1-1c82854f7ee5 | | Policy.ReadWrite.ConditionalAccess | 高 | ad902697-1014-4ef5-81ef-2b4301988e8c | | DeviceManagementConfiguration.ReadWrite.All | 高 | 0883f392-0a7a-443d-8c76-16a6d39c7b63 | | DeviceManagementRBAC.ReadWrite.All | 高 | 0c5e8a55-87a6-4556-93ab-adc52c4d862d | | Directory.ReadWrite.All | 高 | c5366453-9fb0-48a5-a156-24f0c49a4b84 | | Group.ReadWrite.All | 高 | 4e46008b-f24c-477d-8fff-7bb4ec7aafe0 | | GroupMember.ReadWrite.All | 高 | f81125ac-d3b7-4573-a3b2-7099cc39df9e | | UserAuthenticationMethod.ReadWrite.All | 高 | b7887744-6746-4312-813d-72daeaee7e2d | | Sites.FullControl.All | 高 | 5a54b8b3-347c-476d-8f8e-42d5c7424d29 | | Sites.Manage.All | 高 | 65e50fdc-43b7-4915-933e-e8138f11f40a | | User-PasswordProfile.ReadWrite.All | 高 | 56760768-b641-451f-8906-e1b8ab31bca7 | | Sites.Read.All | 高 | 205e70e5-aba6-4c52-a976-6d2d46c48043 | | Sites.ReadWrite.All | 高 | 89fe6a52-be36-487e-b7d8-d061c450a026 | | Files.Read.All | 高 | df85f4d6-205c-4ac5-a5ea-6bf408dba283 | | Files.ReadWrite.All | 高 | 863451e7-0667-486c-a5d6-d135439485f0 | | DeviceLocalCredential.Read.All | 高 | 9917900e-410b-4d15-846e-42a357488545 | | AdministrativeUnit.ReadWrite.All | 高 | 7b8a2d34-6b3f-4542-a343-54651608ad81 | | Directory.AccessAsUser.All | 高 | 0e263e50-5827-48a4-b97c-d940288653c7 | | User.ReadWrite.All | 中等 | 204e0828-b5ca-4ad8-b9f3-f32a958e7cc4 | | Chat.ReadWrite.All | 中等 | 7e9a077b-3711-42b9-b7cb-5fa5f3f7fea7 | | Mail.Read | 中等 | 570282fd-fa5c-430d-a7fd-fc8dc98a9dca | | Mail.ReadWrite | 中等 | 024d486e-b451-40bb-833d-3e66d98c5c73 | | Mail.Send | 中等 | e383f46e-2787-4529-855e-0e479a3ffac0 | | CustomSecAttributeAssignment.ReadWrite.All | 中等 | ca46335e-8453-47cd-a001-8459884efeae | | ServicePrincipalEndpoint.ReadWrite.All | 中等 | 7297d82c-9546-4aed-91df-3d4f0a9b3ff0 | | BitlockerKey.Read.All | 中等 | b27a61ec-b99c-4d6a-b126-c4375d08ae30 | | AiEnterpriseInteraction.Read | 中等 | 859cceb9-2ec2-4e48-bcd7-b8490b5248a5 | | Calendars.Read | 中等 | 465a38f9-76ea-45b9-9f34-9e8b0d4b0b42 | | Calendars.Read.Shared | 中等 | 2b9c4092-424d-4249-948d-b43879977640 | | Calendars.ReadWrite | 中等 | 1ec239c2-d7c9-4623-a91a-a9775856bb36 | | Calendars.ReadWrite.Shared | 中等 | 12466101-c9b8-439a-8589-dd09ee67e8e9 | | ChannelMessage.Edit | 中等 | 2b61aa8a-6d36-4b2f-ac7b-f29867937c53 | | ChannelMessage.ReadWrite | 中等 | 5922d31f-46c8-4404-9eaf-2117e390a8a4 | | ChannelMessage.Send | 中等 | ebf0f66e-9fb1-49e4-a278-222f76911cf4 | | ChatMessage.Send | 中等 | 116b7235-7cc6-461e-b163-8e55691d839e | | Chat.ReadWrite | 中等 | 9ff7295e-131b-4d94-90e1-69fde507ac11 | | Contacts.ReadWrite | 中等 | d56682ec-c09e-4743-aaf4-1a3aac4caa21 | | Directory.AccessAsUser.All | 中等 | 0e263e50-5827-48a4-b97c-d940288653c7 | | Directory.Read.All | 中等 | 06da0dbc-49e2-44d2-8312-53f166ab848a | | EAS.AccessAsUser.All | 中等 | ff91d191-45a0-43fd-b837-bd682c4a0b0f | | EntitlementMgmt-SubjectAccess.ReadWrite | 中等 | e9fdcbbb-8807-410f-b9ec-8d5468c7c2ac | | EWS.AccessAsUser.All | 中等 | 9769c687-087d-48ac-9cb3-c37dde652038 | | Files.ReadWrite | 中等 | 5c28f0bf-8a70-41f1-8ab2-9032436ddb65 | | IMAP.AccessAsUser.All | 中等 | 652390e4-393a-48de-9484-05f9b1212954 | | MailboxItem.ImportExport | 中等 | df96e8a0-f4e1-4ecf-8d83-a429f822cbd6 | | MailboxFolder.Read | 中等 | 52dc2051-4958-4636-8f2a-281d39c6981c | | MailboxFolder.ReadWrite | 中等 | 077fde41-7e0b-4c5b-bcd1-e9d743a30c80 | | MailboxItem.Read | 中等 | 82305458-296d-4edd-8b0b-74dd74c34526 | | MailboxSettings.ReadWrite | 中等 | 818c620a-27a9-40bd-a6a5-d96f7d610b4b | | Notes.Read | 中等 | 371361e4-b9e2-4a3f-8315-2a301a3b0a3d | | Notes.Read.All | 中等 | dfabfca6-ee36-4db2-8208-7a28381419b3 | | Notes.ReadWrite | 中等 | 615e26af-c38a-4150-ae3e-c3b0d4cb1d6a | | Notes.ReadWrite.All | 中等 | 64ac0503-b4fa-45d9-b544-71a463f05da0 | | POP.AccessAsUser.All | 中等 | d7b7f2d9-0f45-4ea1-9d42-e50810c06991 | | offline_access | 低 | 7427e0e9-2fba-42fe-b0c0-848c9e6a8182 | | openid | 低 | 37f7f235-527c-4136-accd-4a02d197296e | | email | 低 | 64a6cdd6-aab1-4aaf-94b8-3cc8405e90d0 | | profile | 低 | 14dad69e-099b-42c9-810b-d002981feec1 | | User.Read | 低 | 14dad69e-099b-42c9-810b-d002981feec1 |
### Microsoft 第一方企业应用 默认情况下,Microsoft 应用程序会被过滤掉,以简化对企业应用程序的审查。使用 `-IncludeMsApps` 开关可包含它们。来自以下租户的应用程序被视为 Microsoft 拥有的: - f8cdef31-a31e-4b4a-93e4-f571e91255a - 72f988bf-86f1-41af-91ab-2d7cd011db47 - 33e01921-4d64-4f8c-a055-5bdaffd5e33d - cdc5aeea-15c5-4db6-b079-fcadd2505dc2 ### 执行的检查 下表粗略总结了执行的检查,以及它们对评分的影响和是否显示警告。
执行的检查 |区域|检查|影响评分|显示警告| |-|-|-|-| |组|是公共 M365 组|是|是| |组|是动态的 / 是动态且具有潜在危险的查询|是|是| |组|Entra 角色(活动和合格)|是|是| |组|Azure 角色(活动和合格)|是|是| |组|用于 AppRole|是|是| |组|内部/外部 SP 作为所有者|是|是| |组|在受限的 AU 中|是|是| |组|嵌套在特权组中|是|是| |组|在 CAP 中使用|是|是| |组|组类型|是|否| |组|启用安全性|是|否| |组|嵌套成员活动|是|否| |组|所有者|是|否| |组|嵌套所有者|是|否| |组|来宾作为所有者|是|是| |组|本地同步|是|否| |组|成员(可传递)|是|否| |组|可分配角色|是|否| |组|用于组的 PIM:已加入|否|否| |组|用于组的 PIM:特权组的合格成员|是|是| |组|用于组的 PIM:特权组的合格所有者|是|是| |组|用于组的 PIM:嵌套在受保护组中的未受保护组|否|是| |企业应用|Entra 角色|是|是| |企业应用|Azure 角色|是|是| |企业应用|外部|是|否| |企业应用|API 权限(应用程序)|是|是| |企业应用|API 权限(委派)|是|是| |企业应用|凭据|是|是| |企业应用|所有者|是|是| |企业应用|对应用注册的所有权|是|是| |企业应用|对其他服务主体的所有权|是|是| |企业应用|AppLock|(是)|否| |企业应用|应用拥有应用注册|是|是| |企业应用|组的成员/所有者|是|(是)| |企业应用|应用角色|是|否| |企业应用|应用角色要求|是|否| |企业应用|非活动|否|否| |企业应用|上次成功登录(天数)|否|否| |应用注册|凭据|是|是| |应用注册|带有凭据的 Entra Connect 应用|是|是| |应用注册|带有多个证书的 Entra Connect 应用|是|是| |应用注册|应用角色|是|否| |应用注册|应用重定向 URL|否|否| |应用注册|AppLock|是|否| |应用注册|所有者|是|是| |应用注册|(云) 应用管理员范围|否|否| |应用注册|相应 SP 的权限|是|否| |应用注册|登录受众|否|否| |托管标识|所有者|是|是| |托管标识|Entra 角色|是|是| |托管标识|Azure 角色|是|是| |托管标识|API (应用)|是|是| |托管标识|对应用注册的所有权|是|是| |托管标识|对其他服务主体的所有权|是|是| |托管标识|组的成员/所有者|是|(是)| |用户|Entra 角色(活动和合格)|是|是| |用户|Azure 角色(活动和合格)|是|是| |用户|特权组成员身份(活动和合格)|是|是| |用户|特权组所有权(活动和合格)|是|是| |用户|Entra Connect 同步用户|是|是| |用户|Entra Connect 云同步用户|是|是| |用户|应用注册所有权|是|是| |用户|企业应用程序所有权|是|是| |用户|未注册 MFA 因素|是|是| |用户|受保护|是|否| |用户|非活动|否|否| |用户|组的成员/所有者|是|(是)| |用户|从本地同步|是|否| |代理标识|关联的代理用户|是|否| |代理标识|外部蓝图主体来源|是|是| |代理标识|有效的 API 权限(应用程序)|是|是| |代理标识|有效的 API 权限(委派)|是|是| |代理标识|Entra 角色|是|是| |代理标识|Azure 角色|是|是| |代理标识|对应用注册的所有权|是|是| |代理标识|对其他服务主体的所有权|是|是| |代理标识|组的成员/所有者|是|(是)| |代理标识蓝图主体|关联的代理标识|是|否| |代理标识蓝图主体|关联的代理用户|是|否| |代理标识蓝图主体|已配置的 API 权限(应用程序)|否|否| |代理标识蓝图主体|已配置的 API 权限(委派)|否|否| |代理标识蓝图主体|外部父蓝图来源|是|否| |代理标识蓝图主体|Entra 角色|否|否| |代理标识蓝图主体|Azure 角色|否|否| |代理标识蓝图|蓝图主体|是|否| |代理标识蓝图|关联的代理标识|是|否| |代理标识蓝图|关联的代理用户|是|否| |代理标识蓝图|可继承的 API 权限|是|否| |代理标识蓝图|联合凭据|是|否| |代理标识蓝图|机密/证书|是|是| |代理标识蓝图|所有者/发起者|是|(是)| |CAP|针对旧版身份验证没有或配置错误的策略|-|是| |CAP|针对阻止设备代码流没有或配置错误的策略|-|是| |CAP|针对限制安全信息注册没有或配置错误的策略|-|是| |CAP|针对有风险登录没有或配置错误的策略|-|是| |CAP|针对用户风险没有或配置错误的策略|-|是| |CAP|强制执行 MFA 的没有或配置错误的策略|-|是| |CAP|没有强制执行身份验证强度的策略|-|是| |CAP|包含具有范围分配的角色|-|是| |PIM 设置|身份验证上下文|-|是| |PIM 设置|身份验证上下文链接的 CAP:登录频率|-|是| |PIM 设置|身份验证上下文链接的 CAP:MFA 或身份验证强度|-|是| |PIM 设置|身份验证上下文链接的 CAP:已启用|-|是| |PIM 设置|身份验证上下文链接的 CAP:包含/排除的用户/组/网络|-|是| |PIM 设置|身份验证上下文链接的 CAP:条件|-|是| |PIM 设置|激活 MFA|-|否| |PIM 设置|激活理由或工单|-|是| |PIM 设置|激活持续时间|-|是| |PIM 设置|激活审批|-|是| |PIM 设置|合格分配过期|-|否| |PIM 设置|活动分配过期|-|是| |PIM 设置|活动分配 MFA|-|否| |PIM 设置|通知角色激活|-|否| |PIM 设置|通知角色分配(活动)|-|否| |PIM 设置|通知角色分配(合格)|-|否|
## 🛡️ 检测 EntraFalcon 并非隐蔽的,在记录和监控 Microsoft Graph API 及 Azure 登录活动的环境中可以被检测到。 ### 使用的默认身份验证 当使用非 BroCi 流程执行完整枚举时,该工具通常会发起四次交互式登录和一次非交互式登录。根据流程和端点支持,可能会发生一次额外的交互式登录用于安全发现策略端点。 |应用程序 ID|类型|资源 ID|目的| |-|-|-|-| |1b730954-1685-4b74-9bfd-dac224a7b894|交互式|00000003-0000-0000-c000-000000000000|检索用于组的 PIM 数据| |04b07795-8ddb-461a-bbee-02f9e1bf7b46|交互式|00000003-0000-0000-c000-000000000000|检索常规租户对象数据| |51f81489-12ee-4a9e-aaae-a2591f45987d|交互式|00000003-0000-0000-c000-000000000000|检索用于 Entra / Azure 角色的 PIM| |80ccca67-54bd-44ab-8625-4b79c4dc7775|交互式|00000003-0000-0000-c000-000000000000|检索安全发现策略上下文| |04b07795-8ddb-461a-bbee-02f9e1bf7b46|非交互式|797f4846-ba00-4fd7-ba43-dac1f8f63013|检索 Azure IAM 角色分配数据| ### 使用的 BroCi 身份验证 当使用 BroCi 身份验证时,只会发生一次交互式登录。 |应用程序 ID|类型|资源 ID|目的| |-|-|-|-| |c44b4083-3bb0-49c1-b47d-974e53cbdf3c|交互式|00000003-0000-0000-c000-000000000000|初始身份验证,以使用 BroCi 的刷新令牌| |50aaa389-5a33-4f1a-91d7-2c45ecd8dac8|非交互式|00000003-0000-0000-c000-000000000000|检索用于组的 PIM 数据| |50aaa389-5a33-4f1a-91d7-2c45ecd8dac8|非交互式|01fc33a7-78ba-4d2f-a4b7-768e336e890e|检索用于组的 PIM 数据| |74658136-14ec-4630-ad9b-26e160ff0fc6|非交互式|00000003-0000-0000-c000-000000000000|检索常规租户对象数据| |74658136-14ec-4630-ad9b-26e160ff0fc6|非交互式|797f4846-ba00-4fd7-ba43-dac1f8f63013|检索 Azure IAM 角色分配数据| 当启用 BroCi 时,EntraFalcon 还会查询 `api.azrbac.mspim.azure.com` 以获取用于组的 PIM。 ### 详细信息 为了进行数据收集,该工具向 Microsoft Graph API 以及可选的 Azure ARM API 发送多个请求——每个对象一个或多个请求。在可能的情况下,它利用 Graph Batch 端点来减少单个请求的数量并提高效率。 交互式登录使用浏览器的 User-Agent。所有非交互式登录和 API 请求(Graph 和 ARM)均使用 EntraFalcon 作为 User-Agent,除非使用 -UserAgent 参数进行了更改。 为了检测 EntraFalcon 的使用,蓝队可以监控登录日志中列出的应用程序 ID,寻找异常数量的 Graph API 流量,或者分析令牌刷新和批量请求行为。 ## 🕳️ 已知限制 - **M365 RBAC**:未评估 - **Defender for Endpoint RBAC**:未评估 - **Intune RBAC**:未评估 - **条件访问用户覆盖范围**:有效的用户覆盖范围和 `-ExportCapUncoveredUsers` 是基于枚举的用户、组成员、角色分配和可解析的外部用户类别进行尽力而为的计算。外部用户选择器仅针对匹配 `b2bCollaborationGuest` 的租户来宾用户进行解析。其他外部用户类型或具有指定外部租户的外部用户可能会使覆盖范围值成为近似值。合格的 PIM 路径被报告为潜在覆盖范围,不计为当前已覆盖。CSV 导出仅限于已启用的策略和已启用的用户。 - **云环境**:云平台发展迅速。因此,某些评估或检测可能会随着时间的推移而过时或不准确。此外,租户正变得越来越复杂,特定的配置或设置组合可能会导致不准确的结果。虽然我们努力使 EntraFalcon 保持最新,但始终建议独立验证发现结果,并且不要仅依赖该工具进行关键决策。 - **HTML 报告**:生成的 HTML 报告实施针对跨站脚本 (XSS) 的保护机制。 ## 📦 集成的外部工具 以下子模块已被派生并集成到 EntraFalcon 中,以支持身份验证、Microsoft Graph 交互和报告图表: - [EntraTokenAid](https://github.com/zh54321/EntraTokenAid) - [GraphRequest](https://github.com/zh54321/GraphRequest) - [Send-ApiRequest](https://github.com/zh54321/Send-ApiRequest) - [GraphBatchRequest](https://github.com/zh54321/GraphBatchRequest) - [Chart.js](https://github.com/chartjs/Chart.js)
标签:AI合规, Azure AD, Graph API, HTML报告, IAM, IPv6, JSONLines, Libemu, MFA, Microsoft Entra ID, OpenCanary, PowerShell, URL发现, 企业应用, 反取证, 多因素认证, 多模态安全, 安全态势管理, 安全检测, 安全评估, 数据展示, 无线安全, 权限分配, 条件访问, 特权提升, 红队, 网络安全, 自动化部署, 足迹分析, 身份与访问管理, 隐私保护, 零信任