
如何自定义高危权限清单Mandiant Azure AD Investigator 的 JSON 配置解析与二次开发指南【免费下载链接】Mandiant-Azure-AD-Investigator项目地址: https://gitcode.com/gh_mirrors/ma/Mandiant-Azure-AD-InvestigatorMandiant Azure AD Investigator 是一款由 Mandiant 团队开源的只读型 Azure AD 取证调查工具专门用于排查 UNC2452 等威胁组织的入侵痕迹。它通过一份JSON 配置文件定义高危权限清单扫描 Azure AD 中的应用注册、服务主体和统一审计日志。对于安全工程师来说读懂并自定义这份清单是让工具适配自己租户的关键一步。本文将带你完整解析MandiantAzureADInvestigator.json的结构并给出二次开发的实操路径。为什么需要自定义高危权限清单该工具默认内置了三类检测逻辑全部由配置文件驱动 应用审计识别拥有高危 API 权限且额外附加了凭据的应用注册项服务主体审计识别持有高危权限 额外凭据的服务主体以及被加料的第一方服务主体统一审计日志检索按预设的日志操作类型批量拉取 UNC2452 相关事件默认清单覆盖了 Microsoft Graph、Azure AD、SharePoint Online 等常见资源。但每个企业租户使用的 SaaS 应用不同你需要判断自己环境里的哪些权限一旦出现在可疑应用上就该报警答案就是修改这份 JSON。MandiantAzureADInvestigator.json 结构解析配置文件与 PowerShell 模块位于仓库根目录核心文件为 [MandiantAzureADInvestigator.json]它与 [MandiantAzureADInvestigator.psm1]主模块、[MandiantAzureADInvestigator.psd1]模块清单、[Initialization.ps1]导入时执行脚本打包在一起在 .psd1 的FileList中统一声明。JSON 顶层包含3 个配置块配置块作用被谁消费Applications按资源 App IDGUID定义高危权限用于应用注册审计Invoke-MandiantAuditAzureADApplicationsServicePrincipals按资源显示名称定义高危权限用于服务主体审计Invoke-MandiantAuditAzureADServicePrincipalsDefaultAuditQueries定义批量审计日志查询操作类型、输出文件名、回溯天数Get-MandiantUnc2452AuditLogs一条高危权限长什么样以Applications块中的 Microsoft Graph 为例00000003-0000-0000-c000-000000000000: { name: Microsoft Graph, data theft: { 810c84a8-4a9e-49e6-bf7d-12d183f40d01: Mail.Read (Read mail in all mailboxes), 75359482-378d-4052-8f01-80520e7db3cd: Files.ReadWrite.All (Read write all SharePoint files) }, control: { 7e05723c-0bb0-42da-be95-ae9f08a6e53c: Domain.ReadWrite.All (Add, verify, and remove domains), 19dbc75e-c2e2-444c-a770-ec69d8559fc7: Directory.ReadWrite.All } }解读规则很简单第一层键是被访问资源的标识App ID 或显示名称即谁的资源第二层键是风险分类如data theft数据窃取、control权限控制——分类名可自定义第三层键是具体权限 ID值是备注说明不会参与匹配纯粹方便人阅读⚠️ 注意 SharePoint Online 的权限写法略有不同键值形如id9bff6588-13f2-4c48-bbf2-ddab62256b36: valueSites.Manage.All因为这类 API 的权限标识本身是id/value格式的字符串。审计日志查询块DefaultAuditQueriesDefaultAuditQueries.UNC2452是一个查询数组每条包含 4 个字段description查询描述运行时打印在控制台query一条完整的Get-MandiantBulkUAL命令outputfile结果 CSV 文件名dateoffset日志回溯天数默认 90 天例如其中一条会搜索 PowerShell 登录邮箱的MailboxLogin事件这是 UNC2452 批量导出邮件的典型特征。三步完成高危权限清单的自定义第一步获取工具源码将仓库克隆到本地工具要求 Windows PowerShell 环境 AzureAD、MSOnline、ExchangeOnlineManagement 模块git clone https://gitcode.com/gh_mirrors/ma/Mandiant-Azure-AD-Investigator第二步编辑 MandiantAzureADInvestigator.json新增一个可疑权限最常见的场景假设你的租户中某第三方应用一旦被授予Reports.Read.All权限就存在风险找到对应资源 App ID 的data theft或control分组加入一行reports-read-permission-guid: Reports.Read.All (读取组织报表)新增一个全新的资源直接复制一个现有资源块把第一层键换成目标应用的 App ID然后清空/重填权限列表即可。App ID 和权限 ID 都可以在 Azure AD 门户的应用注册→清单→企业应用程序权限页面找到。调整日志审计范围在DefaultAuditQueries中增删查询条目、修改dateoffset即可让Get-MandiantUnc2452AuditLogs按你的策略批量拉日志。第三步重新导入模块并验证Import-Module .\MandiantAzureADInvestigator.psd1 Connect-MandiantAzureEnvironment -UserPrincipalName 你的账户 Invoke-MandiantAllChecks -OutputPath 输出目录若命中清单控制台会以黄色高亮打印!!告警并列出Risky Permissions完整结果写入applications.csv、service principals.csv等文件。二次开发看懂配置加载机制想深入改造工具关键是理解模块如何消费这份 JSON。在 [MandiantAzureADInvestigator.psm1] 中定位配置$Configfile $ModulePath.Replace(.psd1, .json)—— 模块固定读取与 .psd1 同名的 .json 文件找不到会直接告警退出解析配置(Get-Content -Path $Configfile | ConvertFrom-Json).ServicePrincipals三个审计函数分别取.ServicePrincipals、.Applications、.DefaultAuditQueries三个顶层块匹配逻辑遍历每个应用/服务主体的凭据和权限将其权限 ID 与清单中对应资源的键做集合比对Compare-Object/-contains命中即记录 Object ID、App ID、显示名、凭据和Risky Permissions这意味着改 JSON 就能改变检测范围无需碰一行 PowerShell 代码而若想改变输出格式或告警逻辑则需在 .psm1 对应的函数内扩展。自定义注意事项清单✅ JSON不支持注释修改后务必用ConvertFrom-Json验证语法再运行否则模块会静默跳过审计✅ 权限 ID 必须精确GUID 或idxxx完整串建议从 Azure AD 门户复制不要手敲✅ 保持备份修改前先复制一份原文件便于回滚和对比可用版本管理工具跟踪变更✅ 工具是纯只读的不会修改任何 M365 环境配置可放心在租户上反复验证新清单⚠️ 清单是高置信度指示器而非结论命中结果需要管理员结合审计日志人工核实避免把合法集成误判为入侵小结Mandiant Azure AD Investigator 把检测逻辑与数据分离的设计非常实用MandiantAzureADInvestigator.json就是它的检测规则库。掌握Applications/ServicePrincipals/DefaultAuditQueries三大块的含义后你可以用不到十行的 JSON 修改把工具调教成贴合自己租户的 Azure AD 入侵调查利器 。【免费下载链接】Mandiant-Azure-AD-Investigator项目地址: https://gitcode.com/gh_mirrors/ma/Mandiant-Azure-AD-Investigator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考