Farias1982/azure-soc-lab

GitHub: Farias1982/azure-soc-lab

一个在 Azure 中使用 Microsoft Sentinel 和 KQL 查询检测 Windows 暴力破解登录的云安全运营中心实验项目。

Stars: 0 | Forks: 0

# Azure SOC 实验环境 – 暴力破解检测 ## 📌 概述 本项目演示了如何使用 Microsoft Sentinel 在 Azure 中构建基于云的安全运营中心 (SOC) 实验环境。该实验室专注于使用 Windows 安全事件日志和 KQL 查询来检测暴力破解登录尝试。 ## 🛠️ 使用的技术 - Microsoft Azure - Microsoft Sentinel (SIEM) - Log Analytics Workspace - Windows 虚拟机 - Kusto Query Language (KQL) ## 🚀 实验环境搭建与部署 按照以下步骤在您自己的 Azure 环境中复现此实验。 ### 前置条件 - 一个有效的 Azure 订阅(免费版即可) - Azure CLI 或对 Azure 门户的访问权限 - 对 Azure 资源组和虚拟机有基本的了解 ### 第 1 步 – 创建资源组 在 Azure 门户中,创建一个新的资源组以包含所有实验资源。 ``` Name: soc-lab-rg Region: East US (or your nearest region) ``` ### 第 2 步 – 部署 Windows 虚拟机 在 `soc-lab-rg` 中创建一台 Windows Server 虚拟机。这台机器将用于生成安全事件。 ``` OS: Windows Server 2022 Size: Standard_B2s (cost-effective for a lab) Username: labadmin RDP: Enable port 3389 (for simulating brute force attempts) ``` ### 第 3 步 – 创建 Log Analytics Workspace Microsoft Sentinel 需要一个 Log Analytics Workspace 来存储和查询日志数据。 ``` Name: soc-lab-workspace Region: Same as your resource group ``` ### 第 4 步 – 启用 Microsoft Sentinel 1. 在 Azure 门户中搜索 **Microsoft Sentinel** 2. 点击 **创建** 并将其附加到 `soc-lab-workspace` 3. Sentinel 现已激活,可以开始接收数据 ### 第 5 步 – 连接 Windows VM 数据连接器 1. 在 Sentinel 中,转到 **Content Hub** 并安装 **Windows Security Events** 2. 转到 **Data Connectors** → **Windows Security Events via AMA** 3. 创建一个 **Data Collection Rule (DCR)** 并将您的 Windows VM 设为目标 4. 选择 **All Security Events** 以捕获事件 ID 4625、4624 和 4740 ### 第 6 步 – 模拟暴力破解活动 要生成日志数据,您可以: - 等待互联网上的自动化扫描器攻击开放的 RDP 端口(通常在 15–30 分钟内),或者 - 通过 RDP 反复输入错误的凭据,手动触发登录失败 ### 第 7 步 – 运行 KQL 检测查询 一旦日志出现在 Sentinel 中(等待 5-15 分钟完成接收),打开 **Logs** 并运行来自 [`queries/`](queries/) 文件夹中的查询: | 查询 | 用途 | |---|---| | [`01_brute_force_detection.kql`](queries/01_brute_force_detection.kql) | 确认失败的登录量 | | [`02_brute_force_with_source_ip.kql`](queries/02_brute_force_with_source_ip.kql) | 识别攻击者 IP | | [`03_successful_login_after_failures.kql`](queries/03_successful_login_after_failures.kql) | 检测成功的系统入侵 | | [`04_account_lockout_detection.kql`](queries/04_account_lockout_detection.kql) | 显示被锁定的账户 | ### 第 8 步 – 创建分析规则(告警) 1. 在 Sentinel 中,转到 **Analytics** → **Create** → **Scheduled query rule** 2. 粘贴来自 `01_brute_force_detection.kql` 的查询 3. 将规则设置为每 **5 分钟** 运行一次,回溯过去 **5 分钟** 4. 设置告警阈值为结果 **大于 0** 时触发 5. 分配严重性:**Medium** 或 **High** 这将在检测到暴力破解活动时,在 Sentinel 中自动创建事件。 ## 🔍 检测用例 | # | 查询文件 | 事件 ID | 描述 | |---|---|---|---| | 1 | [`01_brute_force_detection.kql`](queries/01_brute_force_detection.kql) | 4625 | 检测 5 分钟时间窗口内重复的登录失败 | | 2 | [`02_brute_force_with_source_ip.kql`](queries/02_brute_force_with_source_ip.kql) | 4625 | 丰富失败的登录信息,包含来源 IP 和目标账户 | | 3 | [`03_successful_login_after_failures.kql`](queries/03_successful_login_after_failures.kql) | 4625 + 4624 | 识别在重复失败后成功的登录 — 高置信度的暴力破解指标 | | 4 | [`04_account_lockout_detection.kql`](queries/04_account_lockout_detection.kql) | 4740 | 显示被锁定的账户以及触发锁定的机器 | ## 🧪 核心 KQL 查询 ``` // Brute Force Detection – 5+ failures in a 5-minute window Event | where EventLog == "Security" | where EventID == 4625 | summarize FailedAttempts = count() by bin(TimeGenerated, 5m) | where FailedAttempts > 5 | order by FailedAttempts desc ``` ## 📸 实验环境截图 ### 日志数据 ![日志](https://raw.githubusercontent.com/Farias1982/azure-soc-lab/main/screenshots/soc-lab-1.png) ![查询](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d10815437a120415.png) ![图表](https://raw.githubusercontent.com/Farias1982/azure-soc-lab/main/screenshots/soc-lab-3.png) ![告警](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/55ab401b77120650.png) ## 🎯 成果与经验总结 ### 构建内容 - 一个功能齐全的 Azure 云 SOC 实验环境,具备真实的日志接收、基于 KQL 的威胁检测,以及通过 Microsoft Sentinel 实现的自动化告警 - 一个涵盖完整暴力破解攻击链的检测流水线:失败尝试 → 账户锁定 → 潜在的成功入侵 - 四个具有内联文档的生产级 KQL 查询,每个查询都针对攻击的不同阶段 ### 关键要点 - **日志接收延迟是客观存在的。** 虚拟机上发生的事件与其出现在 Log Analytics Workspace 中之间通常存在 5-15 分钟的延迟。调整告警回溯时间窗口以考虑到这一点,对于避免漏报至关重要。 - **RDP 经常成为攻击目标。** 在向互联网开放 3389 端口后几分钟内,自动化扫描器就会开始尝试登录。这使得生成真实的测试数据变得非常直接,同时也凸显了默认配置的暴露风险。 - **KQL 功能强大,但需要精确性。** 从原始 XML EventData 中提取源 IP 等字段需要谨慎使用 `parse_xml()`。字段索引中的微小错误会默默返回 null 值,这使得查询验证变得至关重要。 - **告警阈值调整非常重要。** 将失败阈值设置得太低会导致告警疲劳;设置得太高则会让真实攻击漏网。从每 5 分钟失败 5 次开始,并根据基线噪音进行调整是一种实用的方法。 ### 下一步计划 - 使用 Microsoft Sentinel 的 **TI Map** 集成威胁情报,以自动标记已知的恶意 IP - 建立一个包含已知安全管理员 IP 的 **watchlist**,以减少误报 - 使用 **Playbooks (Logic Apps)** 自动响应事件 —— 例如,在确认发生暴力破解时通过 NSG 规则阻止 IP - 扩展到 Linux 虚拟机,以涵盖基于 SSH 的暴力破解(事件日志:`/var/log/auth.log`)
标签:Azure, KQL, Microsoft Sentinel, 免杀技术, 安全运营中心, 暴力破解检测, 红队行动, 网络映射