KQL-threat-hunting-queries终极教程:从基础语法到高级威胁狩猎
KQL-threat-hunting-queries终极教程:从基础语法到高级威胁狩猎
【免费下载链接】KQL-threat-hunting-queriesA repository of KQL queries focused on threat hunting and threat detecting for Microsoft Sentinel & Microsoft XDR (Former Microsoft 365 Defender).项目地址: https://gitcode.com/gh_mirrors/kq/KQL-threat-hunting-queries
欢迎来到KQL威胁狩猎查询的完整指南!🎯 如果你正在使用Microsoft Sentinel或Microsoft Defender XDR进行安全监控和威胁检测,那么KQL(Kusto Query Language)就是你不可或缺的强大工具。本文将为你提供从KQL基础语法到高级威胁狩猎实践的全面教程,帮助你快速掌握这一关键技能。
什么是KQL威胁狩猎查询?
KQL威胁狩猎查询是一个专门为安全分析师和威胁猎人设计的资源库,包含了针对Microsoft Sentinel和Microsoft Defender XDR(原Microsoft 365 Defender)的即用型检测和狩猎查询。这个项目由安全专家cyb3rmik3维护,旨在帮助安全团队更有效地利用KQL进行威胁检测和响应。
项目核心价值
- 即用型查询:提供大量经过测试的KQL查询,可直接用于生产环境
- MITRE ATT&CK映射:每个查询都映射到MITRE ATT&CK框架的具体技术和战术
- 持续更新:随着新威胁的出现,查询库不断更新和完善
- 社区驱动:汇集了全球安全专家的经验和智慧
📚 KQL基础语法快速入门
在深入威胁狩猎之前,让我们先了解一些基本的KQL语法:
1. 选择合适的数据表
KQL中的数据组织在表格中,类似于SQL。例如:
DeviceNetworkEvents:包含网络连接和相关事件信息DeviceProcessEvents:包含进程创建和执行事件DeviceFileEvents:包含文件创建、修改和删除事件
2. 基本查询操作符
where操作符- 过滤特定条件:
DeviceNetworkEvents | where LocalIP == "192.168.0.1"contains/has操作符- 字符串匹配:
DeviceNetworkEvents | where DeviceName has "ComputerName"ago函数- 时间范围过滤:
DeviceNetworkEvents | where Timestamp > ago(1d) // 过去24小时project操作符- 选择特定列:
DeviceNetworkEvents | where Timestamp > ago(1d) | project Timestamp, ActionType, RemoteIP, RemotePort🎯 实战威胁狩猎示例
示例1:检测PowerShell Base64编码命令
在01.ThreatHunting/powershell-base64-encoding.md中,你可以找到检测Base64编码PowerShell命令的查询:
DeviceProcessEvents | where Timestamp > ago(1d) | where FileName has_any (@"powershell.exe", @"pwsh.exe", @"powershell_ise.exe") | where ProcessCommandLine contains "base64" | summarize arg_max(Timestamp, *) by DeviceName这个查询映射到MITRE ATT&CK框架的T1059.001技术(PowerShell命令执行),是攻击者常用的逃避检测手段。
示例2:检测可疑DNS请求
在01.ThreatHunting/dns-requests-to-suspicious-tlds.md中,提供了检测可疑顶级域名(TLD)DNS请求的查询:
let SuspiciousTLD = externaldata(TLD: string)[@"https://raw.githubusercontent.com/cyb3rmik3/Hunting-Lists/main/netcraft-tlds.csv"] with (format="csv", ignoreFirstRecord=True); DeviceNetworkEvents | where ActionType == "DnsConnectionInspected" | extend AdditionalFields = todynamic(AdditionalFields) | extend DnsQuery = tostring(AdditionalFields.query) | extend TLDArray = split(DnsQuery,'.') | extend TLD = strcat(".",TLDArray[array_length(TLDArray)-1]) | where Direction == "Out" | project DeviceName, DnsQuery, TLD | join SuspiciousTLD on $left.TLD == $right.TLD这个查询使用了外部数据源(Netcraft的恶意TLD列表),映射到MITRE ATT&CK的T1071.004技术(DNS协议通信)。
🔍 威胁狩猎方法论
MITRE ATT&CK框架集成
项目中的所有查询都按照MITRE ATT&CK框架进行组织,涵盖以下战术:
- 初始访问(Initial Access)- 如钓鱼攻击检测
- 执行(Execution)- 如可疑进程执行
- 权限提升(Privilege Escalation)- 如OneNote滥用
- 防御规避(Defense Evasion)- 如证书滥用
- 发现(Discovery)- 如网络侦察
- 命令与控制(Command and Control)- 如DNS隧道
威胁狩猎循环
有效的威胁狩猎遵循以下循环:
- 假设形成- 基于威胁情报或异常行为
- 数据收集- 使用KQL查询相关日志
- 分析验证- 验证假设并识别模式
- 响应处置- 采取适当的响应措施
- 知识沉淀- 将发现转化为新的检测规则
🛠️ 高级KQL技巧
1. 使用外部数据源
KQL支持引用外部数据源,如威胁情报列表:
let SuspiciousIPs = externaldata(IP: string)[@"https://example.com/ti-list.csv"] with (format="csv"); DeviceNetworkEvents | where RemoteIP in (SuspiciousIPs)2. 动态字段处理
许多日志包含动态字段,需要使用todynamic()函数解析:
DeviceNetworkEvents | extend AdditionalFields = todynamic(AdditionalFields) | extend DnsQuery = tostring(AdditionalFields.query)3. 时间窗口分析
使用时间窗口函数进行行为分析:
DeviceProcessEvents | where Timestamp > ago(7d) | make-series count() on Timestamp step 1h by ProcessName4. 关联分析
跨表关联分析事件:
DeviceProcessEvents | where FileName == "cmd.exe" | join kind=inner DeviceNetworkEvents on DeviceId | where ProcessCommandLine contains "netstat"📁 项目结构详解
项目按照功能模块组织,便于查找和使用:
威胁狩猎模块 01.ThreatHunting/
- CVE相关检测:针对特定漏洞的狩猎查询
- 进程行为分析:可疑进程创建和执行检测
- 网络活动监控:异常网络连接和DNS请求
- 持久化技术检测:启动项、计划任务等持久化机制
威胁检测模块 02.ThreatDetection/
- 电子邮件安全:钓鱼邮件和恶意附件检测
- RMM工具检测:远程管理工具滥用检测
- 恶意软件特征:特定恶意软件家族检测
安全运营模块 03.SecOps/
- 资产发现:设备、用户和权限管理
- 合规监控:安全配置和策略检查
- 事件响应:隔离设备、风险评估等
云安全模块 Azure/ Sentinel/
- Azure监控:Log Analytics工作空间安全
- Sentinel管理:日志摄入、成本优化
- 配置审计:权限和角色分配检查
🚀 快速开始指南
步骤1:环境准备
- 确保你有Microsoft Sentinel或Microsoft Defender XDR的访问权限
- 了解基本的KQL语法和查询界面
步骤2:查询导入
- 浏览项目中的查询文件
- 根据你的需求选择合适的查询
- 复制KQL代码到查询编辑器
步骤3:环境适配
- 调整时间范围(
ago()函数参数) - 根据你的环境调整设备名、IP等过滤条件
- 测试查询的性能和准确性
步骤4:生产部署
- 创建检测规则或狩猎手册
- 设置适当的警报阈值
- 建立响应流程和自动化操作
💡 最佳实践建议
1. 查询优化技巧
- 使用
has代替contains提高性能 - 尽早使用
where过滤减少数据量 - 合理使用
project只选择需要的列
2. 误报处理
- 建立白名单机制排除正常活动
- 使用
!has排除已知的正常模式 - 结合多个条件减少误报
3. 性能考虑
- 避免在大型数据集上使用
join - 使用时间范围限制查询范围
- 考虑使用物化视图或函数优化常用查询
4. 持续改进
- 定期审查和更新查询
- 根据新的威胁情报调整检测逻辑
- 建立反馈循环优化检测效果
🔄 威胁狩猎工作流程
日常监控
- 运行基线查询建立正常行为模式
- 监控关键指标异常
- 定期审查高优先级警报
深度调查
- 使用项目中的专项查询进行深入分析
- 关联多个数据源进行上下文分析
- 使用时间线分析攻击链
知识管理
- 将有效查询添加到共享库
- 记录调查发现和处置措施
- 更新检测规则和狩猎手册
📈 性能监控和优化
查询性能分析
// 监控查询性能 union withsource=TableName * | where Timestamp > ago(1h) | summarize Count=count() by TableName | order by Count desc数据摄入监控
在Sentinel/average-daily-ingestion-per-table-and-plan.md中,你可以找到监控日志摄入的查询,帮助优化成本和性能。
成本优化
在Sentinel/estimate-potential-savings-by-moving-tables-to-data-lake.md中,提供了估算将表移动到数据湖的潜在节省的查询。
🎓 学习资源推荐
官方培训
- Microsoft SC-200认证:安全运营分析师认证课程
- KQL专项培训:Microsoft官方KQL学习路径
- 高级狩猎专家培训:Microsoft Defender XDR专家培训
社区资源
- KQL Search:社区查询聚合平台
- KQL Cafe:社区博客和资源
- MustLearnKQL系列:Rod Trent的KQL教育系列
实践平台
- Kusto侦探社:互动式KQL学习挑战
- KC7 Cyber:网络安全实践平台
🔧 故障排除和调试
常见问题解决
查询返回空结果
- 检查时间范围设置
- 验证数据表名称和字段
- 确认权限和访问控制
查询性能缓慢
- 优化
where条件顺序 - 减少
join操作 - 使用更具体的过滤条件
- 优化
字段解析错误
- 使用
todynamic()处理JSON字段 - 使用
tostring()、toint()等类型转换函数 - 检查字段名称大小写
- 使用
调试技巧
// 使用take限制结果数量进行测试 DeviceProcessEvents | where Timestamp > ago(1h) | take 100 | project Timestamp, DeviceName, ProcessName🚨 安全注意事项
查询安全
- 避免在生产环境直接运行未测试的查询
- 审查查询逻辑确保不会误删或修改数据
- 遵循最小权限原则配置查询权限
数据保护
- 注意查询中可能包含的敏感信息
- 使用数据脱敏技术保护隐私
- 遵守数据保留和合规要求
📊 效果评估和度量
关键指标
- 检测覆盖率:覆盖的MITRE ATT&CK技术和战术比例
- 检测准确率:真阳性与总警报的比例
- 响应时间:从检测到响应的时间
- 误报率:错误警报的比例
持续改进
- 定期评估查询效果
- 根据误报调整检测逻辑
- 集成新的威胁情报
- 优化查询性能
🌟 总结
KQL威胁狩猎查询项目为安全团队提供了强大的工具集,帮助他们在Microsoft安全生态系统中更有效地进行威胁检测和响应。通过掌握KQL基础语法、理解威胁狩猎方法论、并充分利用项目中的现成查询,你可以:
- 快速启动威胁检测:使用现成的查询立即开始监控
- 提高检测覆盖率:覆盖MITRE ATT&CK的多个战术和技术
- 优化安全运营:减少误报,提高响应效率
- 持续改进能力:基于社区贡献不断更新和优化
无论你是刚开始接触KQL的新手,还是经验丰富的安全分析师,这个项目都能为你提供有价值的资源和参考。记住,威胁狩猎是一个持续的过程,需要不断学习、实践和改进。🚀
开始你的KQL威胁狩猎之旅吧!从简单的查询开始,逐步深入,你会发现KQL在安全分析中的强大威力。祝你在威胁狩猎的道路上取得成功!🎉
提示:建议从01.ThreatHunting/目录开始,选择与你当前环境最相关的查询进行实践。
【免费下载链接】KQL-threat-hunting-queriesA repository of KQL queries focused on threat hunting and threat detecting for Microsoft Sentinel & Microsoft XDR (Former Microsoft 365 Defender).项目地址: https://gitcode.com/gh_mirrors/kq/KQL-threat-hunting-queries
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
