如何基于MCAS告警关联SigninLogs排查特定User-Agent登录行为?
解决MCAS告警关联SigninLogs查询特定User-Agent的问题
你原查询失效的原因
用union合并SecurityAlert和SigninLogs是错误的思路——这两张表的字段结构差异极大,CompromisedEntity仅存在于MCAS告警数据中,UserPrincipalName仅存在于登录日志里。合并后大部分数据行里要么user(你从CompromisedEntity转换的字段)为null,要么UserPrincipalName为null,where user == UserPrincipalName自然过滤不到任何有效结果。
正确的嵌套/关联查询实现
可以通过join关联两张表,或者先提取MCAS告警涉及的用户再过滤登录日志,以下是两种可行写法:
写法1:用Join关联(最直观)
SecurityAlert | where ProviderName contains "MCAS" | extend UserPrincipalName = CompromisedEntity // 统一用户字段名称,方便关联 | join kind=inner ( SigninLogs | where UserAgent contains "你要检测的特定User-Agent" // 替换为实际目标UA字符串 ) on UserPrincipalName | project 用户=UserPrincipalName, 告警名称=AlertName, 登录时间=CreatedDateTime, 登录UA=UserAgent
写法2:先提取用户再过滤登录日志
// 先提取MCAS告警涉及的所有用户 let mcas_affected_users = SecurityAlert | where ProviderName contains "MCAS" | distinct CompromisedEntity; // 用提取到的用户筛选登录日志,再关联回告警信息 SigninLogs | where UserPrincipalName in (mcas_affected_users) | where UserAgent contains "你要检测的特定User-Agent" | join kind=inner ( SecurityAlert | where ProviderName contains "MCAS" ) on $left.UserPrincipalName == $right.CompromisedEntity | project 用户=UserPrincipalName, 告警名称=AlertName, 登录时间=CreatedDateTime, 登录UA=UserAgent
检测规则创建步骤
把上述任意一段查询复制到Microsoft Sentinel的自定义检测规则配置页面,填写规则名称、描述、严重级别等基础信息即可。注意替换查询中的"你要检测的特定User-Agent"为实际需要监控的UA内容(比如某款恶意工具的专属UA字符串)。
内容的提问来源于stack exchange,提问作者bernardo15sousa
相关产品推荐
相关产品推荐

