ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何高效翻查统一审计日志?Mandiant Azure AD Investigator 的 UNC2452 查询与 5万条批量翻页技巧

如何高效翻查统一审计日志?Mandiant Azure AD Investigator 的 UNC2452 查询与 5万条批量翻页技巧 如何高效翻查统一审计日志Mandiant Azure AD Investigator 的 UNC2452 查询与 5万条批量翻页技巧【免费下载链接】Mandiant-Azure-AD-Investigator项目地址: https://gitcode.com/gh_mirrors/ma/Mandiant-Azure-AD-InvestigatorMandiant Azure AD Investigator 是一个专为排查 UNC2452SolarWinds 供应链攻击事件相关威胁组织活动的 PowerShell 安全审计工具其中对Microsoft 365 统一审计日志Unified Audit Log, UAL的自动翻页检索是它的核心能力单次查询自动收集最多 5 万条日志内置 13 条 UNC2452 高保真检测查询全程只读、不改动任何租户配置。本文面向安全新手带你搞懂三件事为什么手动搜索统一审计日志容易丢数据工具如何用5 万条批量翻页机制解决这个问题如何三步跑完 UNC2452 审计并读懂输出文件为什么手动翻查统一审计日志这么难在 M365 环境里统一审计日志是溯源攻击者的第一现场。但用原生命令Search-UnifiedAuditLog手动搜索时有几个坑官方 README 也特别提到搜索统一审计日志存在很多容易忽略的技术陷阱陷阱说明单次上限 5,000 条原生命令每次查询最多返回 5,000 条结果大租户一个操作类型轻松超限超出部分直接丢失会话管理复杂大量结果必须借助ReturnLargeSet会话反复翻页手动维护会话号极易出错静默返回空Exchange Online 偶尔返回0 条结果的假象不重试就会漏采时间窗口有限默认只能回溯 90 天即使开通 Cloud App Security 也仅 189 天换句话说查得越多越容易漏。这就是工具要解决的痛点。认识 Mandiant Azure AD Investigator这是一个只读的 PowerShell 模块Apache 2.0 许可由 Mandiant 团队开发模块清单 MandiantAzureADInvestigator.psd1 声明了它的定位辅助查找 UNC2452 相关信息的工具。项目结构非常精简核心就 4 个文件MandiantAzureADInvestigator.psd1 # 模块清单声明依赖与导出函数 MandiantAzureADInvestigator.psm1 # 核心模块全部审计逻辑都在这里 MandiantAzureADInvestigator.json # 配置风险权限清单 13条UNC2452预置查询 Initialization.ps1 # 加载模块时打印欢迎横幅仓库克隆地址https://gitcode.com/gh_mirrors/ma/Mandiant-Azure-AD-Investigator它的全部能力通过 12 个导出函数提供见 psd1 中的FunctionsToExport与日志翻查直接相关的有三个Get-MandiantBulkUAL—— 批量翻页引擎本文主角Get-MandiantUnc2452AuditLogs—— 一键跑完 13 条 UNC2452 预置查询Invoke-MandiantAllChecks—— 跑全部检查含域名、服务主体、CSP、邮箱权限等13 条 UNC2452 预置查询查什么、存到哪所有预置查询集中定义在配置文件 MandiantAzureADInvestigator.json 的DefaultAuditQueries.UNC2452节点中默认回溯90 天。每条查询对应一个独立输出文件#查询目标Operations / FreeText输出文件抓的是什么行为1Update applicationupdate_application应用注册表被修改2Set domain authenticationset_domain_auth域认证设置变更可能正在配置AAD 后门3Set federation settings on domainset_fed_setting_on_domain联合身份设置被改可能准备Golden SAML攻击4Update application - Certificates and secrets managementupdate_app_certs_and_secrets应用被添加证书/密钥植入凭据5MailboxLogin FreeText Powershellpowershell_logins通过 PowerShell 登录邮箱6Update service principalupdate_serviceprincipal服务主体被篡改7Add service principal credentialsadd_service_principal_credentials服务主体被添加凭据8Add app role assignmentadd_app_role_assignment新增应用角色分配9Add app role assignment grant to useradd_app_role_assignment_for_user应用角色被授予用户10FreeTextPowerShell 客户端 AppIDpowershell_authentication用户以 PowerShell 客户端认证11ModifyFolderPermissionsmodify_folder_permissions邮箱文件夹权限被修改12New-ManagementRoleAssignmentnew_managementrole_assignments新增管理角色分配识别 ApplicationImpersonation 授权 注意这些查询命中的既可能是攻击者也可能是正常管理员操作所谓dual-use痕迹工具只负责把可疑日志捞出来最终需要人来甄别。执行入口在 MandiantAzureADInvestigator.psm1 的Get-MandiantUnc2452AuditLogs函数约 853 行起它读取 JSON 配置逐条拼出Get-MandiantBulkUAL -Operations ... -DateOffset 90 -OutputFile 文件名命令并执行每条查询的结果自动落到对应文件。5 万条批量翻页是怎么实现的这是整个项目最见功力的部分。Get-MandiantBulkUALpsm1 约 231 行起把原生命令的三大坑全部自动化了1️⃣ 自动创建大结果会话并循环翻页每次查询自动附加一个带时间戳随机数的会话号-SessionID xxxxx_o365auditlog_xxxx配合ReturnLargeSet参数发起大结果集查询然后循环翻页直到已取回条数 总条数才停止。2️⃣ 单页 1,000 条的保守节奏-ResultSize默认设为1000而不是拉满作者在注释里解释这是基于对Search-UnifiedAuditLog实际可靠性的观察——单页越大越容易中途失败。进度条会实时显示xx% Complete。3️⃣ 三重容错处理假空结果如果返回ResultCount0且ResultIndex-1典型的服务端抽风信号自动换新会话号重试最多容忍 3 次索引越界若ResultIndex超过ResultCount数据漂移同样换新会话重跑真超 5 万条一旦ResultCount ≥ 50000工具立即报错停止明确提示数据正在丢失请缩小时间窗口重新采集——宁可告诉你失败了也不让你拿到残缺数据。4️⃣ 结果落地格式友好每条日志的AuditData字段逐行追加写入UAL_时间戳_文件名_auditlog.json追加模式方便反复查询合并同时把每次实际执行的查询记录到UALQuerySearch.txt方便取证时复现每一步。快速上手三步跑完日志审计第 1 步安装依赖模块管理员 PowerShell需要安装 4 个官方模块AzureAD、MSOnline、ExchangeOnlineManagement、Microsoft.Graph。逐个执行Install-Module 模块名并确认提示即可。第 2 步导入模块并连接租户cd C:\path\to\the\module Import-Module .\MandiantAzureADInvestigator.psd1 Connect-MandiantAzureEnvironment -UserPrincipalName youyourdomain.com看到连接成功输出即完成。若报执行策略错误先运行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned。第 3 步一键翻查统一审计日志# 只跑 UNC2452 日志查询推荐先跑这个 Get-MandiantUnc2452AuditLogs -OutputPath C:\InvestigationOutput # 或跑全部检查含域名/服务主体/CSP/邮箱权限审计 Invoke-MandiantAllChecks -OutputPath C:\InvestigationOutput账号需具备Global Reader角色或Global Administrator、Exchange 的View-Only Audit Logs权限以及User.Read.All、Directory.Read.All范围。注意新角色最长需要 1 小时才生效别刚授权完就跑。进阶技巧让翻查更快更稳超 5 万条切时间窗口。工具报超过 50,000 results时用-StartDate/-EndDate把 90 天拆成几个 30 天分段跑追加写入机制会自动合并结果。有 Cloud App Security 的租户把-DateOffset提到 189多翻将近一倍的历史日志。先 DryRun 再实跑。Get-MandiantBulkUAL支持-DryRun开关只打印将要执行的原始Search-UnifiedAuditLog命令适合先核对参数再执行。按线索缩小范围。支持-UserIds、-IPAddresses、-FreeText过滤例如只翻某个嫌疑账户的登录日志速度立竿见影。盯住高频操作类型。Set domain authentication和Set federation settings on domain在正常环境里应该极少出现——这两条查询一旦有命中基本就是最高优先级的人工核查对象。保留UALQuerySearch.txt。它记录了每条查询的真实命令与时间审计结束后是证明检索完整覆盖的关键证据。常见问题Q运行提示找不到配置文件工具通过.psd1路径推导同名.json请保持 4 个文件在同一目录不要单独拷走模块文件。Q查询中途长时间没输出批量翻页走的是远程 PowerShell 会话大租户下本来就需要耐心进度条显示百分比即为正常。若报三次失败说明要么无结果、要么服务端异常缩小时间窗口重试即可。Q这个工具会改动我的租户吗不会。README 明确标注read-only它只查询 Azure AD 与 Exchange 中的现有数据全部结果写入你指定的本地目录。小结统一审计日志是 M365 溯源调查的基石但手动翻查必漏数据几乎是行业共识。Mandiant Azure AD Investigator 用一套自动翻页 容错重试 5 万条上限熔断的机制Get-MandiantBulkUAL把原本繁琐易错的日志采集变成一条命令再配合 13 条按 UNC2452 手法设计的预置查询让新手也能在 10 分钟内完成一次覆盖 90 天、数万条日志的专业级翻查。记住工具负责不丢数据甄别攻击还是人的事——拿到 CSV 和 JSON 后请逐条结合管理员操作记录进行人工验证。【免费下载链接】Mandiant-Azure-AD-Investigator项目地址: https://gitcode.com/gh_mirrors/ma/Mandiant-Azure-AD-Investigator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进