KQL-threat-hunting-queries终极教程:从基础语法到高级威胁狩猎

📅 2026/7/6 19:17:14 👁️ 阅读次数 📝 编程学习
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框架进行组织,涵盖以下战术:

  1. 初始访问(Initial Access)- 如钓鱼攻击检测
  2. 执行(Execution)- 如可疑进程执行
  3. 权限提升(Privilege Escalation)- 如OneNote滥用
  4. 防御规避(Defense Evasion)- 如证书滥用
  5. 发现(Discovery)- 如网络侦察
  6. 命令与控制(Command and Control)- 如DNS隧道

威胁狩猎循环

有效的威胁狩猎遵循以下循环:

  1. 假设形成- 基于威胁情报或异常行为
  2. 数据收集- 使用KQL查询相关日志
  3. 分析验证- 验证假设并识别模式
  4. 响应处置- 采取适当的响应措施
  5. 知识沉淀- 将发现转化为新的检测规则

🛠️ 高级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 ProcessName

4. 关联分析

跨表关联分析事件:

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:环境准备

  1. 确保你有Microsoft Sentinel或Microsoft Defender XDR的访问权限
  2. 了解基本的KQL语法和查询界面

步骤2:查询导入

  1. 浏览项目中的查询文件
  2. 根据你的需求选择合适的查询
  3. 复制KQL代码到查询编辑器

步骤3:环境适配

  1. 调整时间范围(ago()函数参数)
  2. 根据你的环境调整设备名、IP等过滤条件
  3. 测试查询的性能和准确性

步骤4:生产部署

  1. 创建检测规则或狩猎手册
  2. 设置适当的警报阈值
  3. 建立响应流程和自动化操作

💡 最佳实践建议

1. 查询优化技巧

  • 使用has代替contains提高性能
  • 尽早使用where过滤减少数据量
  • 合理使用project只选择需要的列

2. 误报处理

  • 建立白名单机制排除正常活动
  • 使用!has排除已知的正常模式
  • 结合多个条件减少误报

3. 性能考虑

  • 避免在大型数据集上使用join
  • 使用时间范围限制查询范围
  • 考虑使用物化视图或函数优化常用查询

4. 持续改进

  • 定期审查和更新查询
  • 根据新的威胁情报调整检测逻辑
  • 建立反馈循环优化检测效果

🔄 威胁狩猎工作流程

日常监控

  1. 运行基线查询建立正常行为模式
  2. 监控关键指标异常
  3. 定期审查高优先级警报

深度调查

  1. 使用项目中的专项查询进行深入分析
  2. 关联多个数据源进行上下文分析
  3. 使用时间线分析攻击链

知识管理

  1. 将有效查询添加到共享库
  2. 记录调查发现和处置措施
  3. 更新检测规则和狩猎手册

📈 性能监控和优化

查询性能分析

// 监控查询性能 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:网络安全实践平台

🔧 故障排除和调试

常见问题解决

  1. 查询返回空结果

    • 检查时间范围设置
    • 验证数据表名称和字段
    • 确认权限和访问控制
  2. 查询性能缓慢

    • 优化where条件顺序
    • 减少join操作
    • 使用更具体的过滤条件
  3. 字段解析错误

    • 使用todynamic()处理JSON字段
    • 使用tostring()toint()等类型转换函数
    • 检查字段名称大小写

调试技巧

// 使用take限制结果数量进行测试 DeviceProcessEvents | where Timestamp > ago(1h) | take 100 | project Timestamp, DeviceName, ProcessName

🚨 安全注意事项

查询安全

  • 避免在生产环境直接运行未测试的查询
  • 审查查询逻辑确保不会误删或修改数据
  • 遵循最小权限原则配置查询权限

数据保护

  • 注意查询中可能包含的敏感信息
  • 使用数据脱敏技术保护隐私
  • 遵守数据保留和合规要求

📊 效果评估和度量

关键指标

  • 检测覆盖率:覆盖的MITRE ATT&CK技术和战术比例
  • 检测准确率:真阳性与总警报的比例
  • 响应时间:从检测到响应的时间
  • 误报率:错误警报的比例

持续改进

  1. 定期评估查询效果
  2. 根据误报调整检测逻辑
  3. 集成新的威胁情报
  4. 优化查询性能

🌟 总结

KQL威胁狩猎查询项目为安全团队提供了强大的工具集,帮助他们在Microsoft安全生态系统中更有效地进行威胁检测和响应。通过掌握KQL基础语法、理解威胁狩猎方法论、并充分利用项目中的现成查询,你可以:

  1. 快速启动威胁检测:使用现成的查询立即开始监控
  2. 提高检测覆盖率:覆盖MITRE ATT&CK的多个战术和技术
  3. 优化安全运营:减少误报,提高响应效率
  4. 持续改进能力:基于社区贡献不断更新和优化

无论你是刚开始接触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),仅供参考