kyhomelab/kql-queries
GitHub: kyhomelab/kql-queries
面向 Microsoft Sentinel 和 M365 Defender 环境的生产级 KQL 查询集合,帮助 SOC 团队快速开展威胁检测、事件响应与合规审计。
Stars: 1 | Forks: 0
# Microsoft Sentinel 与 Defender 的 KQL 查询
[](https://opensource.org/licenses/MIT)
[](https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/)
[](https://azure.microsoft.com/en-us/services/azure-sentinel/)
专为 Microsoft Sentinel、Microsoft 365 Defender 和 Azure Log Analytics 环境中的安全运营、威胁狩猎和合规性监控而策划的、可用于生产环境的 Kusto Query Language (KQL) 查询集合。
## 目录
- [概述](#overview)
- [查询类别](#query-categories)
- [安全](#security)
- [审计](#audit)
- [身份](#identity)
- [性能](#performance)
- [入门指南](#getting-started)
- [查询清理工具](#query-sanitization-tool)
- [用例](#use-cases)
- [贡献](#contributing)
- [作者](#author)
- [许可证](#license)
## 概述
本代码库包含为真实 SOC 运营、事件响应和安全监控开发的 KQL 查询。每个查询都旨在解决特定的安全挑战,并包含:
- 清晰的文档和用例描述
- 性能优化的查询逻辑
- 可配置的定制化参数
- 解释查询行为的注释
这些查询可直接部署于:
- **Microsoft Sentinel** - 云原生 SIEM 平台
- **Microsoft 365 Defender** - 高级威胁防护
- **Azure Log Analytics** - 集中式日志管理
- **Azure Data Explorer** - 大数据分析
## 查询类别
### 安全
用于主动安全监控的高级威胁检测和漏洞管理查询。
| 查询 | 描述 | 用例 |
|-------|-------------|----------|
| **Shared_Device_Identification_V1.kql** | 识别具有多个唯一用户的设备(排除白名单账户和设备类型) | 检测未经授权的设备共享、内部威胁、违规行为 |
| **Shared_Device_Identification_V2.kql** | 直接从 DeviceLogonEvents 进行汇总的增强版本 | 提升大型环境下的性能 |
| **Critical_Software_Vulnerabilities_V1.kql** | 列出具有严重 CVE 的设备并统计每个设备的漏洞数量 | 确定补丁管理优先级,漏洞修复 |
| **Critical_Software_Vulnerabilities_V2.kql** | 具有额外过滤功能的增强型漏洞跟踪 | 高级漏洞管理工作流 |
| **Suspicious_PowerShell_Execution.kql** | 使用编码命令、Web 下载或混淆技术检测潜在的恶意 PowerShell 命令 | 识别无文件恶意软件、基于脚本的攻击和恶意自动化 |
| **Impossible_Travel_Detection.kql** | 使用 Haversine 距离计算,检测在短时间窗口内从地理上相距遥远的位置进行的登录 | 检测凭据窃取、账户被盗、会话劫持 |
| **MFA_Fatigue_Detection.kql** | 检测向单个用户发送的重复 MFA 推送通知,表明发生了推送轰炸攻击 | 检测 MFA 疲劳攻击、伴随 MFA 绕过尝试的凭据泄露 |
| **Suspicious_Mailbox_Rule_Creation.kql** | 检测创建转发、删除或隐藏电子邮件的邮箱规则,符合攻击者入侵后的行为模式 | 检测 BEC(商务电子邮件妥协)攻击、邮件数据窃取、通过收件箱规则操纵实现持久化 |
| **LOLBin_Remote_Payload_Execution.kql** | 猎杀执行远程或基于 URL 的负载(包括 Squiblydoo)的 rundll32/regsvr32/mshta/msiexec | 检测签名的二进制代理执行 (T1218)、防病毒绕过、初始访问负载 |
| **Defender_Tampering.kql** | 检测 Defender 实时保护被禁用以及添加可疑路径/进程/扩展名排除项的情况 | 检测勒索软件准备阶段、T1562.001 防御规避 |
| **DNS_Tunneling_Hunt.kql** | 提取具有异常长子域名或每个父域具有高唯一子域名计数的 DNS 查询 | 检测 DNS 隧道 C2、通过 DNS 进行的数据外泄 (T1071.004) |
| **Rare_Parent_Child_Process.kql** | 构建 14 天的父子进程对基线,并标记过去 24 小时内涉及常见解释器/LOLBin 的罕见执行链 | 捕获新颖的执行链(例如,winword.exe -> powershell.exe),基于异常的猎杀 |
### 审计
用于治理和监管要求的合规性监控和变更跟踪查询。
| 查询 | 描述 | 用例 |
|-------|-------------|----------|
| **Conditional_Access_Policy_Changes.kql** | 监控条件访问策略的创建、修改和删除 | 跟踪安全策略偏差、合规性审计、变更管理 |
| **Admin_Role_Assignment_Changes.kql** | 跟踪管理员角色分配和权限提升 | 检测未经授权的权限提升、内部威胁监控 |
| **OAuth_Application_Consent_Grants.kql** | 跟踪用户或管理员向 OAuth 应用程序授予权限的时间 | 检测非法的同意授予攻击、监控第三方应用访问 |
### 身份
用于检测账户被盗和访问异常的身份验证和身份安全查询。
| 查询 | 描述 | 用例 |
|-------|-------------|----------|
| **Failed_Signins_By_User.kql** | 识别在 24 小时内出现多次失败登录尝试的用户 | 检测暴力破解攻击、撞库攻击、用户身份验证问题 |
| **Account_Lockout_Monitoring.kql** | 跟踪 24 小时内的用户账户锁定情况,以识别攻击模式或支持问题 | 检测暴力破解攻击、撞库攻击,识别需要支持的用户 |
### 性能
用于识别性能瓶颈和优化用户体验的监控查询。
| 查询 | 描述 | 用例 |
|-------|-------------|----------|
| **Signin_Latency_By_Application.kql** | 按应用程序分析登录延迟模式 | 识别身份验证性能问题,优化用户体验 |
## 入门指南
### 前置条件
- 有权访问 Microsoft Sentinel、Microsoft 365 Defender 或 Azure Log Analytics 工作区
- 具有对日志数据运行查询的适当权限
- 基本了解 KQL 语法
### 使用方法
1. **克隆代码库**
git clone https://github.com/kyhomelab/kql-queries.git
cd kql-queries
2. **导航到相关类别**
cd Security # 或 Audit, Identity, Performance
3. **复制查询内容** 并将其粘贴到:
- Microsoft Sentinel > 日志
- Microsoft 365 Defender > 高级搜寻
- Azure Log Analytics > 日志
4. **自定义参数**(如果适用)
- 更新白名单账户
- 调整时间范围
- 修改设备名称过滤器
- 配置阈值
5. **运行查询** 并分析结果
### 示例:检测失败的登录
```
SigninLogs
| where TimeGenerated > ago(24h)
| where ResultType != 0 // Non-zero means failure
| summarize
FailedAttempts = count(),
FailureCodes = make_set(ResultType),
Locations = make_set(Location),
Applications = make_set(AppDisplayName)
by UserPrincipalName
| where FailedAttempts > 5
| order by FailedAttempts desc
```
## 查询清理工具
包含了一个 Python 脚本 (`sanitize_kql.py`),用于在共享查询之前帮助去除其中的敏感信息。
### 特性
- 移除 IP 地址
- 编辑电子邮件地址
- 清理 GUID 和敏感标识符
- 保留查询逻辑和结构
### 使用方法
**清理包含查询的目录:**
```
python3 sanitize_kql.py --input unsanitized/ --output sanitized/
```
**清理单个文件:**
```
python3 sanitize_kql.py --file my_query.kql
```
## 用例
### 适用于 SOC 分析师
- 调查安全事件
- 主动猎杀威胁
- 监控身份验证异常
- 跟踪违规行为
### 适用于安全工程师
- 构建检测规则和警报
- 优化 SIEM 性能
- 创建自定义仪表板
- 开发自动化响应工作流
### 适用于合规团队
- 审计管理变更
- 跟踪策略修改
- 监控特权访问
- 生成合规报告
## 贡献
欢迎贡献!如果您有想要添加的查询或改进建议:
1. Fork 本代码库
2. 创建一个功能分支 (`git checkout -b feature/new-query`)
3. 提交您的更改 (`git commit -m 'Add new threat hunting query'`)
4. 推送到该分支 (`git push origin feature/new-query`)
5. 发起一个 Pull Request
请确保查询包含:
- 描述性标题和类别注释
- 清晰的用例描述
- 性能注意事项
- 示例输出或预期结果
## 作者
**Kyle** - SOC 分析师 | 网络安全专家
- 作品集: [kyhomelab.github.io](https://kyhomelab.github.io)
- GitHub: [@kyhomelab](https://github.com/kyhomelab)
热衷于威胁检测、安全自动化以及构建高效的 SOC 工作流。这些查询代表了为企业安全运营开发的真实解决方案。
## 许可证
本项目采用 MIT 许可证授权 - 有关详细信息,请参见 [LICENSE](LICENSE) 文件。
**免责声明:** 这些查询按“原样”提供,用于教育和专业用途。请始终先在非生产环境中测试查询,并根据您的特定安全要求和组织策略对其进行自定义。
**关键词:** KQL, Kusto Query Language, Microsoft Sentinel, Azure Sentinel, Microsoft 365 Defender, Threat Hunting, SOC, SIEM, Security Operations, Incident Response, Threat Detection, Cybersecurity, Log Analytics
标签:Azure Data Explorer, Azure Log Analytics, GPT, IP 地址批量处理, KQL, Kusto查询语言, M365 Defender, Microsoft Sentinel, MIT合规, MIT许可, SecOps, Threat Hunting, 云安全架构, 动态调试, 大数据分析, 子域名变形, 安全脚本, 安全运营中心, 审计, 库, 应急响应, 提示词模板, 检测规则, 漏洞管理, 网络安全, 网络安全审计, 网络映射, 网络资产发现, 身份安全, 逆向工具, 隐私保护