kalen1c/sentinel-kql-threat-research
GitHub: kalen1c/azure-zerotrust-secops-pipeline
一个基于 Microsoft Sentinel 的 Azure 蜜罐 SIEM 架构项目,用于记录和分析全球 MITRE T1110 暴力破解威胁遥测数据,并通过边缘处理大幅降低云日志摄取成本。
Stars: 0 | Forks: 0
# sentinel-kql-threat-research
Azure SIEM 架构,用于记录和分析全球 MITRE T1110 威胁遥测数据。采用 Microsoft Sentinel pipeline、查询 REST API 的自定义 PowerShell 脚本、现代化的 DCR 摄取、KQL 威胁狩猎以及 GitHub Pages 交互式事件地图构建。
# 架构与威胁情报简报:MITRE T1110 分析
## 1. 执行摘要
本项目设计了一个高弹性、成本优化的 Azure 蜜罐,旨在捕获并分析实时的 MITRE T1110 (Brute Force) 和 T1110.003 (Password Spraying) 攻击活动。通过利用自定义的 PowerShell 边缘处理、Azure Data Collection Rules (DCR) 以及 Microsoft Sentinel,该架构将 SIEM 摄取成本降低了 95% 以上。
该架构通过将海量的身份验证失败记录转化为结构化指标,弥补了原始 Windows 事件日志与业务风险之间的鸿沟,使安全团队能够基于实时威胁情报部署有针对性的身份和边界防御。
## 2. 架构与弹性控制
为了在严格控制易受攻击节点的爆炸半径的同时模拟生产环境,我们设计了以下安全与成本控制措施:
### 成本与 FinOps 控制
* **有状态日志聚合:** 为了防止在高速攻击期间出现云摄取计费激增,PowerShell pipeline 充当了边缘处理器。它利用内存中的哈希表对 IP 地址进行批处理并统计尝试频率,然后以 5 分钟为间隔将去重后的指标刷新到 Azure。这减少了 95% 以上的云摄取成本,同时保持了数据量的准确性。
* **自动化成本熔断机制:** 作为应对产生海量日志集的容量型 DDoS 攻击的故障保护机制,配置了 Azure Action Group。如果摄取支出超过了预定义的微预算,webhook 将自动切断 DCR pipeline 并释放 VM,以防止财务超支。
* **可突发计算策略 (B-Series):** 蜜罐运行在价格实惠的 Azure B-Series VM 上。由于暴力破解攻击通常是突然爆发的,而不是持续不断的流,因此这种设置通过在安静期间积攒 CPU 额度来节省资金,以便在攻击真正发生时处理繁重的处理负载。
* **Basic Logs 数据分层:** 默认情况下,Azure 对日志摄取收取高级费率。由于该项目会产生大量高容量、低复杂度的数据,目标表被明确路由到 Azure 更便宜的 "Basic Logs" 层。这显著降低了摄取成本,同时保持数据可供 Sentinel 仪表板使用。
### 安全与隔离 (SecOps)
* **零信任密钥管理 (PoLP):** API 身份验证完全绕过了本地磁盘存储。在最小权限原则 (PoLP) 下,VM 的系统分配托管身份被限制为仅能读取单个 Azure Key Vault 密钥。脚本查询实例元数据服务 (IMDS) 以获取 OAuth 2.0 token,并将 API 密钥动态直接检索到易失性内存 (RAM) 中。
* **出口过滤与 VNet 隔离:** 部署暴露蜜罐的一个主要隐患是,它在受损后可能会被用作跳板或 DDoS 中继。为了消除这种隐患,虚拟网络 (VNet) 实施了严格的网络安全组 (NSG) 出口规则,明确丢弃所有发往内部 RFC 1918 IP 范围和未经批准的外部 endpoint 的出站流量。
* **输入清理 (反日志投毒):** 为了防止 CSV 注入和 SIEM 数据库损坏,提取 pipeline 严格清理所有捕获的数据。在格式化之前,会从 Windows `TargetUserName` 字段中剔除逗号、特殊字符和 KQL 运算符,从而中和恶意的注入尝试。
* **主机级 IMDS 锁定:** 提取脚本需要与 Azure 的内部元数据服务 (IMDS) 通信以检索其安全 token。为了防止系统受损后的凭证窃取,Windows 防火墙规则阻止了除运行脚本的特定服务账户之外的所有 IMDS 访问。
### 可靠性与数据工程 (SRE)
* **API 优雅降级:** 该 pipeline 在设计上能够原生抵御第三方故障。如果外部地理位置 REST API 超时或限制请求,脚本将捕获异常,应用 `Geo_Unavailable` 占位符,并继续处理,从而确保 SIEM 永远不会丢失关键的身份验证警报。
* **进程弹性与日志轮转 (SRE 看门狗):** 一个辅助后台 daemon 监控主提取脚本,以确保连续生成遥测数据。如果主进程发生故障,它会启动自动重启,并强制执行本地日志轮转(如果文本文件超过 50MB 则进行归档),以防止本地磁盘耗尽。此外,边缘节点强制执行严格的 NTP 同步以防止时钟偏移,从而确保 SIEM 速度图表的绝对时间序列完整性。
* **摄取时数据转换:** 为了优化数据库查询性能并降低存储开销,在提交到 Log Analytics Workspace 之前,直接在 DCR 层使用 Kusto Query Language (KQL) 将原始的逗号分隔遥测数据解析为离散的 schema 列。
## 3. 架构拓扑与数据流
```
graph TD
subgraph Public_Internet [Public Internet]
A[External Threat Actors]
F[ipgeolocation.io REST API]
NTP[Stratum 1 NTP Time Server]
J[Interactive Geospatial Map]
end
subgraph Azure_VNet [Azure Virtual Network / Honeypot Isolation]
NSG[Network Security Group: Allow 3389 / Drop Egress]
B(Windows Server 2022 B-Series VM: TCP/3389 Open)
FW[Windows Host Firewall: IMDS Lockdown]
C{PowerShell Edge Processor}
D[(RAM Cache / Batching)]
LogFile[(Local Text File)]
K[SRE Watchdog Daemon]
G[Azure Monitor Agent]
NTP -->|Clock Sync| B
A -->|Automated Credential Stuffing| NSG
NSG -->|Inbound TCP/3389| B
B -.->|Blocked RFC 1918 & Unapproved Ext Outbound| NSG
B -->|Event ID 4625| C
K -.->|Process Health| C
K -.->|Rotates at 50MB| LogFile
C -->|Sanitise Inputs & Check State| D
C -->|HTTP GET Request| F
F -->|Geo & ASN Payload| C
C -.->|Timeout/Fail: Apply Geo_Unavailable Fallback| D
C -->|5-Minute Batch Flush| LogFile
LogFile -->|Read Custom Logs| G
end
subgraph Azure_PaaS [Azure Platform as a Service / Management Plane]
E[Azure Key Vault]
IMDS[Azure Instance Metadata Service]
Entra[Microsoft Entra ID / Managed Identity]
H[Data Collection Rule: Ingestion-Time KQL]
I[(Log Analytics Workspace: Basic Logs Tier)]
L[Microsoft Sentinel SIEM]
CB[Azure Cost Circuit Breaker / Action Group]
WH[Webhook / Automation Runbook]
C -->|Request Token| FW
FW -->|Allow Authorized Service Account| IMDS
IMDS -->|Request Auth| Entra
Entra -->|Mint OAuth 2.0 Token| IMDS
IMDS -->|Return Token| C
C -->|Fetch Secret via Token| E
E -->|Return API Key to RAM| C
G -->|Forward Telemetry| H
H -->|Transform & Route| I
I -->|KQL Analytics & Alerting| L
L -->|JSON Export| J
I -.->|Monitor Ingestion Volume| CB
CB -.->|Greater than $5 Threshold Trigger| WH
WH -.->|Sever Pipeline API Call| H
WH -.->|Deallocate VM API Call| B
end
```
## 4. 仓库导航 (即将推出)
* `/planning/`
* `/visualisations/`
* `/incident-response/`
* `/infrastructure/`
* `/scripts/`
* `/dashboards/`
**免责声明:** *本项目是在严格控制、隔离的云环境中进行的,出于教育和收集威胁情报的目的。基础设施经过了强化以防止横向移动,并明确拒绝出站流量,以防止其被用作跳板。所有捕获的数据(如攻击者 IP)均已进行匿名化或哈希处理(在适当情况下),以符合道德共享标准。*
项目方法论:为了将我的云安全技能提升到标准教程之外,我使用 AI 协助确立了初始项目参数并规划了目标架构。除了最初的蓝图之外,所有的编码、云基础设施配置、故障排除和学习都是我亲自动手完成的。以下提交记录记录了我从零开始积极构建这个复杂系统的旅程。
你可以查看我的技术障碍、bug 修复、规划和构建进度,位于
`/Troubleshooting & Planning Log/`
标签:AI合规, Azure Sentinel, IPv6, KQL, PowerShell, 威胁情报, 开发者工具, 蜜罐, 证书利用