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进行安全监控和威胁检测那么KQLKusto Query Language就是你不可或缺的强大工具。本文将为你提供从KQL基础语法到高级威胁狩猎实践的全面教程帮助你快速掌握这一关键技能。什么是KQL威胁狩猎查询KQL威胁狩猎查询是一个专门为安全分析师和威胁猎人设计的资源库包含了针对Microsoft Sentinel和Microsoft Defender XDR原Microsoft 365 Defender的即用型检测和狩猎查询。这个项目由安全专家cyb3rmik3维护旨在帮助安全团队更有效地利用KQL进行威胁检测和响应。项目核心价值即用型查询提供大量经过测试的KQL查询可直接用于生产环境MITRE ATTCK映射每个查询都映射到MITRE ATTCK框架的具体技术和战术持续更新随着新威胁的出现查询库不断更新和完善社区驱动汇集了全球安全专家的经验和智慧 KQL基础语法快速入门在深入威胁狩猎之前让我们先了解一些基本的KQL语法1. 选择合适的数据表KQL中的数据组织在表格中类似于SQL。例如DeviceNetworkEvents包含网络连接和相关事件信息DeviceProcessEvents包含进程创建和执行事件DeviceFileEvents包含文件创建、修改和删除事件2. 基本查询操作符where操作符- 过滤特定条件DeviceNetworkEvents | where LocalIP 192.168.0.1contains/has操作符- 字符串匹配DeviceNetworkEvents | where DeviceName has ComputerNameago函数- 时间范围过滤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 ATTCK框架的T1059.001技术PowerShell命令执行是攻击者常用的逃避检测手段。示例2检测可疑DNS请求在01.ThreatHunting/dns-requests-to-suspicious-tlds.md中提供了检测可疑顶级域名TLDDNS请求的查询let SuspiciousTLD externaldata(TLD: string)[https://raw.githubusercontent.com/cyb3rmik3/Hunting-Lists/main/netcraft-tlds.csv] with (formatcsv, ignoreFirstRecordTrue); 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 ATTCK的T1071.004技术DNS协议通信。 威胁狩猎方法论MITRE ATTCK框架集成项目中的所有查询都按照MITRE ATTCK框架进行组织涵盖以下战术初始访问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 (formatcsv); 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 kindinner 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 withsourceTableName * | where Timestamp ago(1h) | summarize Countcount() 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 ATTCK技术和战术比例检测准确率真阳性与总警报的比例响应时间从检测到响应的时间误报率错误警报的比例持续改进定期评估查询效果根据误报调整检测逻辑集成新的威胁情报优化查询性能 总结KQL威胁狩猎查询项目为安全团队提供了强大的工具集帮助他们在Microsoft安全生态系统中更有效地进行威胁检测和响应。通过掌握KQL基础语法、理解威胁狩猎方法论、并充分利用项目中的现成查询你可以快速启动威胁检测使用现成的查询立即开始监控提高检测覆盖率覆盖MITRE ATTCK的多个战术和技术优化安全运营减少误报提高响应效率持续改进能力基于社区贡献不断更新和优化无论你是刚开始接触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),仅供参考