N4ncys/sentinel

GitHub: N4ncys/sentinel

一个基于 Microsoft Sentinel 构建的云安全监控平台,采用 Terraform 实现完整的 SIEM 基础设施即代码部署,涵盖检测规则、自动化响应和攻击模拟。

Stars: 0 | Forks: 0

# 云安全监控与事件响应 ### Azure 安全工程作品集 — 项目 4 ## 概述 一个基于 Microsoft Sentinel 构建的集中式安全监控平台, 完全使用 Terraform 以代码形式进行配置。该项目展示了 端到端的安全运营能力——从日志摄取和 检测工程到自动化事件响应和攻击模拟。 ## 技术栈 | 类别 | 技术 | |---|---| | 云平台 | Microsoft Azure | | SIEM | Microsoft Sentinel | | 日志存储 | Azure Log Analytics | | 基础设施即代码 | Terraform | | 查询语言 | KQL (Kusto Query Language) | | 自动化响应 | Azure Logic Apps | | 网络安全 | Azure Bastion, Network Security Groups | | 身份与访问 | Azure Managed Identity, RBAC | | 操作系统 | Ubuntu 22.04 LTS | | 脚本 | Bash | ## 架构 ``` sentinel/ ├── modules/ │ ├── siem/ # Log Analytics Workspace + Microsoft Sentinel │ ├── target-env/ # Monitored resources (Key Vault, Storage, Activity Log) │ ├── attacker-vm/ # Red team VM accessed via Azure Bastion │ ├── detection-rules/ # KQL analytics rules deployed as code │ └── playbooks/ # Logic App automation rules ├── kql/ # Raw KQL detection queries └── scripts/ # Attack simulation scripts ``` 三个隔离的资源组反映了真实的企业安全边界。 安全团队拥有第一个资源组,具有严格的 RBAC——工作负载 团队无法触及它。攻击者资源组是完全隔离的,因此 如果虚拟机受损,爆炸半径也能被控制住。 | 资源组 | 用途 | |---|---| | `rg-soc-*-security` | Sentinel, Log Analytics, Logic Apps — 防御方 | | `rg-soc-*-target` | Key Vault, 存储账户 — 被监控的工作负载 | | `rg-soc-*-attacker` | 带有 Azure Bastion 的攻击者 VM — 红队侧 | 所有三个资源组均已部署并可在 Azure 门户中查看: ## 组件 ### SIEM — Microsoft Sentinel Log Analytics Workspace 充当存储引擎——流入的每一条日志 都会被写入这里的表中。Microsoft Sentinel 位于其之上, 增加了检测、调查和响应功能。可以把 LAW 想象成文件柜,而 Sentinel 是坐在它前面的分析师。 - 具有 90 天保留期的 Log Analytics Workspace - 在工作区上启用 Microsoft Sentinel - Microsoft Defender for Cloud 数据连接器 ### 目标环境 目标环境的存在纯粹是为了生成真实的安全信号。 Key Vault 审计日志通过诊断设置启用,这会将每一个 秘密访问事件直接传输到 Sentinel。Azure Activity Log 诊断 设置捕获所有控制平面操作——角色分配、资源 删除、策略更改——跨越整个订阅。 - 启用了审计日志的 Azure Key Vault - Azure 存储账户 - 将 Key Vault 审计日志路由到 Sentinel 的诊断设置 - 将控制平面事件路由到 Sentinel 的 Azure Activity Log 诊断设置 ### 攻击者 VM 攻击者 VM 没有公共 IP——它只能通过 Azure Bastion 访问,后者提供基于浏览器的安全 SSH,而无需向 互联网暴露任何端口。这反映了真实企业如何在 零信任网络模型下提供安全的 VM 访问。NSG 仅允许来自 Bastion 子网的入站流量。 - Ubuntu 22.04 LTS VM (`Standard_D2s_v3`) - 无公共 IP——仅通过 Azure Bastion 访问 - NSG 仅限制来自 Bastion 子网的入站流量 - 安装了 Azure Monitor 代理以进行日志收集 ### 检测规则 (KQL) 四条自定义分析规则通过 Terraform 以代码形式部署,每条映射 到特定的 MITRE ATT&CK 技术。将检测规则存储在版本 控制中意味着它们是可审计、可审查和可复制的——一个 不懂 Terraform 的 SOC 分析师仍然可以阅读和编辑 `kql/` 目录中的原始 KQL 文件。 | 规则 | MITRE 技术 | 严重性 | 数据源 | |---|---|---|---| | Key Vault 大规模秘密访问 | T1555 — Credentials from Password Stores | 高 | AzureDiagnostics | | 通过角色分配进行权限提升 | T1078 / T1098 — Valid Accounts / Account Manipulation | 高 | AzureActivity | | 针对 Azure 管理层面的暴力破解 | T1110 — Brute Force | 中 | AzureActivity | | 异常资源删除 | T1485 — Data Destruction | 高 | AzureActivity | 所有四条规则在 Sentinel 中均处于活动状态,MITRE 技术在 分析仪表板中可见: ### 自动化响应 — Logic App Playbook 当 Sentinel 引发事件时,自动化规则会触发 Logic App playbook,发送包含事件详细信息的电子邮件通知。 Logic App 使用具有作用域角色分配的托管身份—— 工作流中未存储任何秘密或凭据。 - 由 Sentinel 事件触发的 Logic App - 发送包含事件详细信息的电子邮件通知 - 自动化规则将 playbook 链接到所有事件 - 具有作用域角色分配的托管身份 ## 攻击模拟与检测结果 每次模拟均使用 Azure CLI 从本地机器运行,针对 `rg-soc-*-target` 资源组中的资源。脚本位于 `scripts/` 目录中,并记录了 MITRE ATT&CK 映射。 ### ✅ T1555 — Key Vault 大规模秘密访问 模拟在 27 秒内从 Key Vault 访问了 `dummy-secret` 10 次, 远高于 5 分钟内 5 次访问的检测阈值。 27 秒内 10 次访问无疑是自动化的凭据窃取, 而非人工手动检查秘密。 **阈值:** 5 分钟内 5 次或更多次秘密访问 **结果:** 在 Sentinel 中创建了 6 个事件,每 5 分钟在回溯窗口上触发一次 Key Vault 审计日志实时流入 Sentinel,确认 诊断设置工作正常: ### ✅ T1078 / T1098 — 通过角色分配进行权限提升 模拟在目标资源组上创建了 Reader 角色分配 并立即删除了它。任何角色分配写入操作都会触发 检测——在实际攻击中,对手会为自己分配一个 更高权限的角色,例如 Owner 或 Contributor。 **阈值:** 任何角色分配写入操作 **结果:** 在 Sentinel 中创建了 1 个事件 两个检测在 Sentinel 事件视图中均可见,连同其 严重性、MITRE 战术类别和时间戳: 深入查看 Key Vault 事件会显示警报详情、时间线和 SOC 分析师可用的调查选项: ### 📋 T1110 — 针对 Azure 管理层面的暴力破解 检测规则已部署,KQL 查询已针对实时 AzureActivity 日志进行了验证。实时模拟需要在 10 分钟窗口内持续的 API 失败——最好使用 专用攻击框架(如 Atomic Red Team)来演示。检测逻辑是合理的,并且会针对 针对 Azure 管理层面的真实暴力破解活动触发。 **阈值:** 10 分钟内 5 次或更多次管理失败 **状态:** 规则已部署并处于活动状态——模拟需要专用工具 ## 前置条件 - 具有 Owner 角色的 Azure 订阅 - Terraform >= 1.7.0 - 已通过身份验证的 Azure CLI (`az login`) ## 部署 ``` # Clone the repo git clone cd sentinel # Configure variables cp terraform.tfvars.example terraform.tfvars # Edit terraform.tfvars with your values # Deploy terraform init terraform apply ``` ## 部署后步骤 1. 在门户中的 Log Analytics Workspace 上启用 Microsoft Sentinel 2. 在 Sentinel → Data Connectors 下验证数据连接器是否处于活动状态 3. 在 Sentinel → Analytics 下确认分析规则是否已启用 4. 从 `scripts/` 目录运行攻击模拟以验证检测 ## 已知限制与设计决策 - **未使用 Entra ID 连接器** — 需要 Azure AD Premium P2 许可证。 已替换为 Azure Activity Log,它为 控制平面攻击检测提供了等效的信号。 - **未使用 MDE 连接器** — 需要 Microsoft Defender for Endpoint 许可证。 攻击者 VM 上的 Azure Monitor 代理转而提供端点遥测数据。 - **通过门户加入 Sentinel** — `SecurityInsights` 资源被 要求手动在门户中启用的管理组策略阻止。 - **暴力破解模拟** — Azure CLI 失败不会持续生成 Activity Log 条目。生产部署将使用 Atomic Red Team 进行 可靠模拟。 ## 演示的安全控制 | 控制 | 实现 | |---|---| | 零信任网络访问 | Azure Bastion — 攻击者 VM 上无公共 IP | | 最小权限 | 具有作用域角色分配的托管身份 | | 日志集中化 | 诊断设置将所有日志路由到单个 LAW | | 检测即代码 | 在 Terraform 中进行版本控制的 KQL 规则 | | 自动化响应 | 由 Sentinel 自动化规则触发的 Logic App playbook | | MITRE ATT&CK 对齐 | 所有检测均映射到特定技术 | ## 资源 - [Microsoft Sentinel 文档](https://docs.microsoft.com/azure/sentinel) - [KQL 参考](https://docs.microsoft.com/azure/data-explorer/kql-quick-reference) - [MITRE ATT&CK 云矩阵](https://attack.mitre.org/matrices/enterprise/cloud/) - [Terraform AzureRM Provider](https://registry.terraform.io/providers/hashicorp/azurerm/latest)
标签:AMSI绕过, Azure, Azure Bastion, Cloudflare, DevSecOps, ECS, KQL, Log Analytics, Logic Apps, Microsoft Sentinel, MITRE ATT&CK, RBAC, SOAR, StruQ, Terraform, 上游代理, 威胁检测, 安全工程, 应用安全, 攻击模拟, 数据展示, 检测规则, 红队, 网络安全, 网络资产发现, 自动化响应, 隐私保护, 驱动签名利用