2025最强Sentinel-Queries实战指南:从KQL入门到威胁狩猎全流程
痛点直击:你还在为这些问题困扰吗?
• 面对成百上千条KQL查询不知如何高效利用?
• 安全告警响应迟缓,错失威胁处置黄金时间?
• 缺乏系统化的查询编写方法论,反复踩坑?
本文将通过3大核心模块+12个实战场景+20+代码示例,帮你彻底掌握Sentinel-Queries项目的使用精髓,实现从"被动响应"到"主动狩猎"的安全运营升级。
读完你将获得
- 快速定位项目中200+预置查询的精准路径
- 掌握KQL高级操作符组合技巧(summarize+bin+render实战)
- 构建自定义威胁检测规则的完整方法论
- 学会5类典型攻击场景的查询改写与优化
一、项目架构与核心价值解析
1.1 项目定位与优势
Sentinel-Queries是面向Microsoft Sentinel(哨兵)的Kusto Query Language(KQL,库斯托查询语言)查询集合,包含200+经过实战验证的安全分析规则,覆盖Azure AD、Office 365、Defender for Endpoint等12个核心数据源。
1.2 目录结构解密
项目采用数据源+场景的二维分类体系,关键目录功能如下:
| 目录路径 | 核心功能 | 代表查询 |
|---|---|---|
| Azure Active Directory | Azure AD身份安全监控 | Audit-AdminActionsfromRiskyUsers.kql |
| Defender for Endpoint | 终端威胁狩猎 | Device-DetectLocalUserCreated.kql |
| Office 365 | 办公应用异常行为 | OfficeActivity-GuestAddedtoMultipleTeams.kql |
| Functions | 可复用查询模块 | Function-UserLookup.kql |
| Security Alert | 告警关联分析 | SecurityAlert-VisualizeAlertsbyMITRE.kql |
⚠️ 特别提示:Azure Active Directory目录下的Audit-*系列查询(如Audit-AdminActionsfromRiskyUsers.kql)是身份安全检测的核心,建议优先掌握。
二、KQL核心操作实战指南
2.1 时间范围优化:从"全量扫描"到"精准定位"
KQL查询性能优化的黄金法则:始终将时间过滤放在查询起始位置。
对比以下两种写法的执行效率:
❌ 低效写法(扫描全表后过滤时间)
SigninLogs
| where UserPrincipalName == "admin@contoso.com"
| where TimeGenerated > ago(14d) // 错误位置:应放在表名后
✅ 高效写法(先限定时间范围)
SigninLogs
| where TimeGenerated between (ago(7d) .. ago(1d)) // 最优位置:紧跟表名
| where ResultType == "0" // 0表示登录成功
常用时间函数速查表:
| 函数 | 作用 | 应用场景 |
|---|---|---|
| ago(1d) | 过去1天 | 日常巡检 |
| ago(30d) | 过去30天 | 月度报告 |
| between(ago(14d)..ago(7d)) | 14天前到7天前 | 历史数据回溯 |
2.2 数据聚合:从"原始日志"到"情报摘要"
使用summarize+bin组合实现时间维度聚合,这是威胁狩猎的核心技巧:
// 示例:特权用户登录行为基线分析
SigninLogs
| where TimeGenerated > ago(30d)
| where UserPrincipalName has_any ("admin", "svc", "priv")
| summarize LoginCount=count() by bin(TimeGenerated, 1d), UserPrincipalName
| render columnchart with (title="特权用户日登录次数", xtitle="日期", ytitle="次数")
上述查询将生成如下可视化结果:
2.3 高级关联:从"单点告警"到"攻击链还原"
通过多表关联(join)实现复杂攻击场景检测,以管理员异常行为检测为例:
// 关键查询片段:高风险特权用户操作检测
let PrivilegedUsers = AuditLogs
| where TimeGenerated > ago(60d)
| where ActivityDisplayName == 'Add member to role completed (PIM activation)'
| distinct tostring(InitiatedBy.user.userPrincipalName);
SigninLogs
| where UserPrincipalName in (PrivilegedUsers)
| where RiskLevelDuringSignIn == "high"
| project TimeGenerated, UserPrincipalName, IPAddress, RiskDetail
三、五大实战场景深度剖析
3.1 特权账号异常行为检测
核心查询:Azure Active Directory/Audit-AdminActionsfromRiskyUsers.kql
该查询通过三步实现检测逻辑:
- 角色定义:通过
pack_array定义高权限角色列表 - 用户识别:筛选近60天内激活PIM角色的用户
- 风险关联:关联高风险登录与特权操作
优化建议:添加地理位置异常检测
// 追加地理位置异常检测逻辑
| extend Location = strcat(LocationDetails.city, ", ", LocationDetails.countryOrRegion)
| summarize Locations=make_set(Location) by UserPrincipalName
| where array_length(Locations) > 3 // 标记3个以上地区登录的用户
3.2 外部来宾账号滥用监控
核心查询:Office 365/OfficeActivity-GuestAddedtoMultipleTeams.kql
关键检测点:
- 单个来宾24小时内加入>5个团队
- 异常时间段(如凌晨1-5点)的来宾添加行为
- 来自高风险域的来宾账号
可视化增强:
| summarize TeamCount=count() by GuestUPN, bin(TimeGenerated, 1h)
| render timechart with (title="来宾账号每小时加入团队数")
3.3 终端横向移动追踪
核心查询:Defender for Endpoint/Device-DetectLocaltoPublicRDP.kql
检测逻辑:
DeviceNetworkEvents
| where ActionType == "ConnectionSuccess"
| where RemotePort == 3389
| where RemoteIPType == "Public"
| where LocalIPType == "Private"
| project TimeGenerated, DeviceName, LocalIP, RemoteIP, RemoteCountry
扩展场景:结合账号登录日志
| join kind=inner (SigninLogs) on $left.DeviceName==$right.DeviceName
| where UserPrincipalName !contains "admin" // 非管理员使用RDP
3.4 云凭证窃取防范
核心查询:OAuth-DetectingFirstTimeCredentialAddition.kql
关键指标:
- 首次添加凭证的应用
- 短时间内多次添加凭证
- 凭证添加后立即发生权限提升
3.5 安全告警优先级排序
核心查询:Security Alert/SecurityAlert-VisualizeAlertsbyMITRE.kql
通过MITRE ATT&CK框架分类告警:
SecurityAlert
| extend Tactics=split(Tactics, ",")
| mv-expand Tactics
| summarize AlertCount=count() by Tactics
| sort by AlertCount desc
| render piechart with (title="告警按战术分布")
四、项目最佳实践与扩展技巧
4.1 查询效率优化 checklist
- 始终在查询开头使用TimeGenerated过滤
- 优先使用has/has_any替代contains(性能提升30%+)
- 对大表使用materialize缓存中间结果
- 避免使用
*通配符搜索所有字段
4.2 自定义查询开发流程
4.3 定期维护建议
- 每季度审核查询有效性(移除过时表和字段)
- 根据新威胁情报更新检测规则
- 建立查询性能基准,监控劣化情况
- 定期合并重复功能的查询
五、资源获取与部署指南
5.1 项目获取
git clone https://gitcode.com/gh_mirrors/se/Sentinel-Queries
5.2 导入Sentinel方法
- 登录Azure门户→Sentinel→工作区
- 选择"分析"→"导入"→"从文件上传"
- 批量选择对应目录下的.kql文件
- 调整查询计划和告警阈值
5.3 版本控制建议
建立分支管理策略:
- main:稳定版查询
- dev:开发中的新规则
- hotfix:紧急修复
六、总结与进阶路线
Sentinel-Queries项目不仅是查询集合,更是安全分析思维的具体实践。掌握它的三个阶段:
- 应用阶段:熟练使用现有查询解决日常问题
- 定制阶段:根据企业环境修改优化查询
- 创造阶段:开发全新检测规则和分析模型
进阶资源:
- KQL官方文档:https://learn.microsoft.com/zh-cn/azure/data-explorer/kusto/query/
- Sentinel社区库:https://github.com/Azure/Azure-Sentinel
- MITRE ATT&CK框架:https://attack.mitre.org/
立即行动:从Azure Active Directory目录开始,优先部署特权账号相关查询,构建基础安全检测能力!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



