用途
该技能是进攻型 Entra ID 工具链的防御补集,用于在 Microsoft Sentinel 或 Log Analytics 中狩猎 Microsoft Graph 与旧版 Azure AD Graph 目录 API 流量中的攻击工具痕迹。其针对的核心行为是攻击者使用合法(常为钓鱼获得或窃取的令牌)云凭据,通过 Graph API 对租户进行枚举与操作,对应 MITRE ATT&CK T1078.004(Valid Accounts: Cloud Accounts)。
背景
旧版 Azure AD Graph API(graph.windows.net)长期是防御盲区:请求不会产生一等公民级活动日志,因此 ROADtools(roadrecon)与 AADInternals 等重度依赖 AAD Graph 的工具可以在几乎无痕迹的情况下枚举整个租户。Microsoft 推出 AADGraphActivityLogs(2026 年正式可用)后,与已有的 MicrosoftGraphActivityLogs(graph.microsoft.com)一起,为 SOC 提供请求级可见性:调用者身份、应用、源 IP、HTTP 方法、请求 URI 以及关键的 User-Agent。
主要能力
- 确认两张 Graph 活动表是否正常接入工作区,并查看将用于分析的字段。
- 通过 User-Agent 字符串特征检测 ROADtools(基于 Python aiohttp,未伪装时显示 python 与 aiohttp)、AADInternals(常留下 AADInternals 或库字符串)以及 AzureHound(Go HTTP 客户端与 BloodHound 工具特征)。
- 行为检测:即使 User-Agent 被伪造,roadrecon gather 会在很短时间内批量访问 users、tenantdetails、groups、applications、serviceprincipals、devices、directoryroles、roledefinitions、contacts、oauth2permissiongrants、authorizationpolicy 等目录资源,形成可识别特征。
- 高流量枚举异常检测:捕获在短时间内发起远超人类水平的目录读取。
- 将可疑 Graph 调用者关联回登录记录,获取设备、位置、MFA 与条件访问结果;注意 AADGraphActivityLogs 中的 SignInActivityId 可能相对 SigninLogs.UniqueTokenIdentifier 带有“==”填充。
- 将高保真查询提升为计划分析规则,映射 T1078.004 并配置实体映射,同时通过监视列表排除已知自动化/服务主体 App ID 与已批准扫描器 IP,以控制误报。
使用方式
前置条件:一个正在接入 MicrosoftGraphActivityLogs、AADGraphActivityLogs、SigninLogs 与 AADNonInteractiveUserSignInLogs 的 Microsoft Sentinel 工作区(或 Log Analytics);Microsoft Sentinel Reader/Responder(或 Log Analytics Reader)RBAC 权限以运行 KQL;熟悉 Kusto 查询语言。需先通过 Azure 门户(Microsoft Entra ID → 诊断设置)或 CLI 命令启用诊断设置,将两类 Graph 日志发送到工作区:
az monitor diagnostic-settings create
--name "entra-graph-logs"
--resource "/providers/microsoft.aadiam/diagnosticSettings"
--logs '[{"category":"MicrosoftGraphActivityLogs","enabled":true},{"category":"AADGraphActivityLogs","enabled":true}]'
--workspace "<log-analytics-workspace-id>"
工作流分七步:确认两表接入;狩猎 User-Agent 指纹(ROADtools/aiohttp);狩猎 AADInternals 与 AzureHound 代理特征;执行 roadrecon 端点扫描行为狩猎;检测高流量枚举异常;将 Graph 活动关联到发起登录;将最佳查询转为计划分析规则并配置实体映射与调优。
适用场景
- 为覆盖 Entra ID 的 Microsoft Sentinel / Log Analytics 构建或调优检测规则。
- 在怀疑凭据窃取、设备代码钓鱼或 OAuth 同意滥用后开展威胁狩猎。
- 紫队演练,验证 ROADtools / AADInternals / AzureHound 活动可被检测。
- 调查告警时,需要将 Graph API 调用关联回登录/会话。
- 启用 AADGraphActivityLogs 后关闭旧版 Azure AD Graph 的可见性缺口。
工具指纹参考
- ROADtools(roadrecon):python + aiohttp User-Agent;5 分钟内完成完整目录端点扫描;表为 AADGraphActivityLogs。
- AADInternals:User-Agent 中含 AADInternals / 工具包字符串;AAD Graph 读取;表为 AADGraphActivityLogs。
- AzureHound:Go HTTP 客户端 User-Agent;大范围 MS Graph 枚举;表为 MicrosoftGraphActivityLogs。
- 通用侦察:短窗口内对 users/groups/apps/SPs 的高 GET 流量;两张表均涉及。
验证标准
确认两表接入;执行 ROADtools/aiohttp User-Agent 指纹狩猎;执行 AADInternals/AzureHound 代理狩猎;执行并调优行为端点扫描狩猎;执行高流量枚举异常查询;至少有一条发现关联回登录/会话与源身份;将最佳查询提升为带 T1078.004 映射与实体映射的计划分析规则;通过监视列表排除已知良性的服务主体/IP 以控制误报。
限制与说明
该技能依赖 AADGraphActivityLogs 与 MicrosoftGraphActivityLogs 的数据接入,缺少相应诊断设置时无法使用;相关表正式可用时间、具体保留与计费信息暂未提供;实际检测效果受工具是否伪装 User-Agent 以及行为模式影响,需结合监视列表调优以降低误报。