BraydenMiller-Cloudsec/azure-sentinel-siem

GitHub: BraydenMiller-Cloudsec/azure-sentinel-siem

一个完整的 Microsoft Sentinel SIEM 部署模板,提供自定义检测规则、MITRE 映射与自动化事件响应的实验与生产参考。

Stars: 0 | Forks: 0

# Microsoft Sentinel SIEM — 云安全监控实验 ![Azure](https://img.shields.io/badge/Microsoft_Azure-0089D6?style=flat&logo=microsoft-azure&logoColor=white) ![Sentinel](https://img.shields.io/badge/Microsoft_Sentinel-0078D4?style=flat&logo=microsoft&logoColor=white) ![Status](https://img.shields.io/badge/Status-Complete-success) ## 概述 一个生产级的 Microsoft Sentinel SIEM 部署,展示了真实的云安全监控、自定义威胁检测、自动化事件响应和主动威胁狩猎。该实验连接多个数据源,实现了映射到 MITRE ATT&CK 框架的自定义 KQL 检测规则,模拟了真实攻击,并完成了完整的事件响应流程。 ## 使用的技术 - Microsoft Sentinel (SIEM) - Azure Log Analytics - KQL (Kusto 查询语言) - MITRE ATT&CK 框架 - Azure 活动日志 - Azure Key Vault - Microsoft Defender 套件 - Azure CLI - REST API ## 架构 ``` Microsoft Sentinel Deployment │ ├── Log Analytics Workspace (sentinel-workspace) │ └── Data Retention: 30 days │ ├── Data Connectors (9 connected) │ ├── Azure Activity — subscription level events │ ├── Azure Key Vault — secret access and vault operations │ ├── Microsoft Defender for Cloud Apps │ ├── Microsoft Defender for Endpoint │ ├── Microsoft Defender for Identity │ ├── Microsoft Defender for Office 365 │ ├── Microsoft Defender XDR │ ├── Microsoft Entra ID Protection │ └── Microsoft 365 Insider Risk Management │ ├── Custom Detection Rules (KQL) │ ├── Key Vault Secret Access Detected │ │ ├── Severity: Medium │ │ ├── Tactic: CredentialAccess (MITRE ATT&CK) │ │ └── Frequency: Every 5 minutes │ ├── SSH Brute Force Attack Detected │ │ ├── Severity: High │ │ ├── Tactic: InitialAccess (MITRE ATT&CK) │ │ └── Frequency: Every 5 minutes │ └── Azure Policy Modified or Deleted │ ├── Severity: High │ ├── Tactic: DefenseEvasion (MITRE ATT&CK) │ └── Frequency: Every 5 minutes │ ├── Built-in Rules │ └── Advanced Multistage Attack Detection (Fusion ML) │ ├── Watchlist │ └── Authorized Admins │ └── Automation Rules └── Auto Assign New Incidents — assigns and activates on creation ``` ## 实现细节 ### 步骤 1 — Sentinel 部署 使用 Azure REST API 在专用的 Log Analytics 工作区中部署 Microsoft Sentinel。注册了 Microsoft.SecurityInsights 资源提供程序,并通过 onboarding 端点启用 Sentinel。通过 Azure Monitor 诊断设置连接 Azure 活动日志,以捕获所有订阅级别的事件。 **关键决策:** 创建了专用的 Sentinel 工作区,而不是复用现有的项目 1 工作空间 — 关注点分离确保安全监控数据与常规基础设施日志隔离。 ### 步骤 2 — 数据连接器配置 连接了 9 个数据源到 Sentinel,提供跨身份、端点、云应用和基础设施的全面可见性。由于现有的订阅配置,Microsoft Defender 套件自动连接,为多个攻击面提供了即时覆盖,无需额外配置。 **关键决策:** 优先选择数据源的广度而非深度 — 连接多个连接器使 Sentinel 能够进行关联检测,以发现跨多个系统的多阶段攻击。 ### 步骤 3 — 自定义 KQL 检测规则 从头编写了三条自定义检测规则,每条映射到一个特定的 MITRE ATT&CK 战术: - **Key Vault Secret Access** — 查询 AzureDiagnostics 中的 SecretGet 操作,映射到 CredentialAccess。检测潜在的凭据窃取或未授权的密钥检索。 - **SSH Brute Force** — 查询 Syslog 认证日志中的失败密码尝试,按主机和 5 分钟窗口汇总,当计数超过 5 时触发。映射到 InitialAccess。 - **Azure Policy Modification** — 查询 AzureActivity 中的策略分配写入和删除操作。映射到 DefenseEvasion — 攻击者常在执行主要目标前移除安全控制。 **关键决策:** 编写自定义规则而非仅依赖内置模板 — 自定义规则展示了对特定威胁环境和数据源的理解。 ### 步骤 4 — 攻击模拟与事件响应 模拟了两次真实攻击以生成 Sentinel 事件: - **凭据访问模拟** — 从虚拟机内部使用托管身份检索 Key Vault 密钥,触发 Key Vault 检测规则 - **暴力破解模拟** — 使用 sshpass 对 localhost 生成 10 次失败的 SSH 登录尝试,触发 SSH 暴力破解规则 完成了完整的事件响应流程:检测 → 分类 → 调查 → 分类 → 关闭。将事件关闭为“良性阳性”,分类原因为 SuspiciousButExpected — 记录该活动为授权测试。 ### 步骤 5 — 威胁狩猎与自动化 创建了授权管理员账户的观察表,用于检测规则增强。使用自动化规则自动分配新事件并将状态设置为 Active — 缩短平均确认时间。执行了针对 Azure 活动日志的主动威胁狩猎查询,识别订阅中执行的操作并确认所有活动均为预期且可解释。 **关键决策:** 结合反应式检测规则与主动威胁狩猎 — 规则自动捕获已知模式,而狩猎发现尚未编写规则的异常。 ## KQL 检测规则 ### Key Vault Secret Access ``` AzureDiagnostics | where ResourceType == 'VAULTS' | where OperationName == 'SecretGet' ``` **MITRE ATT&CK:** CredentialAccess | **严重性:** 中等 | **频率:** 5 分钟 ### SSH 暴力破解攻击 ``` Syslog | where Facility == 'auth' | where SyslogMessage contains 'Failed password' | summarize FailedAttempts = count() by HostIP, bin(TimeGenerated, 5m) | where FailedAttempts > 5 ``` **MITRE ATT&CK:** InitialAccess | **严重性:** 高 | **频率:** 5 分钟 ### Azure 策略修改或删除 ``` AzureActivity | where OperationNameValue contains 'MICROSOFT.AUTHORIZATION/POLICYASSIGNMENTS' | where ActivityStatusValue == 'Success' | where OperationNameValue contains 'DELETE' or OperationNameValue contains 'WRITE' ``` **MITRE ATT&CK:** DefenseEvasion | **严重性:** 高 | **频率:** 5 分钟 ### 威胁狩猎 — 顶级操作 ``` AzureActivity | summarize count() by OperationNameValue | top 10 by count_ ``` **目的:** 主动狩猎以识别异常操作量或未预期的活动模式 ## CLI 命令参考 ### 创建 Log Analytics 工作区 ``` az monitor log-analytics workspace create --resource-group secure-infra-rg --workspace-name sentinel-workspace --location eastus ``` ### 启用 Microsoft Sentinel ``` az rest --method put --url "https://management.azure.com/subscriptions//resourceGroups/secure-infra-rg/providers/Microsoft.OperationalInsights/workspaces/sentinel-workspace/providers/Microsoft.SecurityInsights/onboardingStates/default?api-version=2023-02-01" --body '{"properties":{}}' ``` ### 连接 Key Vault 诊断 ``` az monitor diagnostic-settings create --name "sentinel-keyvault" --resource /subscriptions//resourceGroups/secure-infra-rg/providers/Microsoft.KeyVault/vaults/secure-kv-brayden --workspace /subscriptions//resourceGroups/secure-infra-rg/providers/Microsoft.OperationalInsights/workspaces/sentinel-workspace --logs '[{"category":"AuditEvent","enabled":true}]' --metrics '[{"category":"AllMetrics","enabled":true}]' ``` ### 创建检测规则 — Key Vault 密钥访问 ``` az rest --method put --url "https://management.azure.com/subscriptions//resourceGroups/secure-infra-rg/providers/Microsoft.OperationalInsights/workspaces/sentinel-workspace/providers/Microsoft.SecurityInsights/alertRules/keyvault-secret-access?api-version=2023-02-01" --body '{"kind":"Scheduled","properties":{"displayName":"Key Vault Secret Access Detected","description":"Detects when secrets are accessed from Key Vault","severity":"Medium","enabled":true,"query":"AzureDiagnostics | where ResourceType == \"VAULTS\" | where OperationName == \"SecretGet\"","queryFrequency":"PT5M","queryPeriod":"PT5M","triggerOperator":"GreaterThan","triggerThreshold":0,"suppressionEnabled":false,"suppressionDuration":"PT1H","tactics":["CredentialAccess"]}}' ``` ### 创建检测规则 — SSH 暴力破解 ``` az rest --method put --url "https://management.azure.com/subscriptions//resourceGroups/secure-infra-rg/providers/Microsoft.OperationalInsights/workspaces/sentinel-workspace/providers/Microsoft.SecurityInsights/alertRules/ssh-brute-force?api-version=2023-02-01" --body '{"kind":"Scheduled","properties":{"displayName":"SSH Brute Force Attack Detected","description":"Detects multiple failed SSH login attempts indicating a brute force attack","severity":"High","enabled":true,"query":"Syslog | where Facility == \"auth\" | where SyslogMessage contains \"Failed password\" | summarize FailedAttempts = count() by HostIP, bin(TimeGenerated, 5m) | where FailedAttempts > 5","queryFrequency":"PT5M","queryPeriod":"PT5M","triggerOperator":"GreaterThan","triggerThreshold":0,"suppressionEnabled":false,"suppressionDuration":"PT1H","tactics":["InitialAccess"]}}' ``` ### 创建检测规则 — Azure 策略修改 ``` az rest --method put --url "https://management.azure.com/subscriptions//resourceGroups/secure-infra-rg/providers/Microsoft.OperationalInsights/workspaces/sentinel-workspace/providers/Microsoft.SecurityInsights/alertRules/policy-modified?api-version=2023-02-01" --body '{"kind":"Scheduled","properties":{"displayName":"Azure Policy Modified or Deleted","description":"Detects when Azure Policy assignments are created, modified, or deleted","severity":"High","enabled":true,"query":"AzureActivity | where OperationNameValue contains \"MICROSOFT.AUTHORIZATION/POLICYASSIGNMENTS\" | where ActivityStatusValue == \"Success\" | where OperationNameValue contains \"DELETE\" or OperationNameValue contains \"WRITE\"","queryFrequency":"PT5M","queryPeriod":"PT5M","triggerOperator":"GreaterThan","triggerThreshold":0,"suppressionEnabled":false,"suppressionDuration":"PT1H","tactics":["DefenseEvasion"]}}' ``` ### 创建自动化规则 ``` az rest --method put --url "https://management.azure.com/subscriptions//resourceGroups/secure-infra-rg/providers/Microsoft.OperationalInsights/workspaces/sentinel-workspace/providers/Microsoft.SecurityInsights/automationRules/auto-assign-incidents?api-version=2023-02-01" --body '{"properties":{"displayName":"Auto Assign New Incidents","order":1,"triggeringLogic":{"isEnabled":true,"triggersOn":"Incidents","triggersWhen":"Created","conditions":[]},"actions":[{"order":1,"actionType":"ModifyProperties","actionConfiguration":{"status":"Active","owner":{"objectId":""}}}]}}' ``` ### 列出检测规则 ``` az sentinel alert-rule list --resource-group secure-infra-rg --workspace-name sentinel-workspace --output table ``` ### 列出事件 ``` az sentinel incident list --resource-group secure-infra-rg --workspace-name sentinel-workspace --output table ``` ### 威胁狩猎查询 ``` $body = '{"query":"AzureActivity | summarize count() by OperationNameValue | top 10 by count_"}' az rest --method post --url "https://api.loganalytics.io/v1/workspaces//query" --body $body ``` ## 安全决策 | 决策 | 使用内容 | 生产替代方案 | 未使用原因 | |---|---|---|---| | SIEM 部署 | Microsoft Sentinel 免费层 | 带数据摄入付费的 Sentinel | 实验数据量在免费层范围内 | | 数据连接器 | 诊断设置 + 内置连接器 | Sentinel 数据收集规则 | 连接器已满足实验范围 | | 检测规则 | 自定义 KQL 定时规则 | 内置规则模板 | 自定义规则展示更深入理解 | | 事件响应 | 基于 CLI 的工作流 | Defender 门户 | 个人账户许可限制 | | 威胁狩猎 | 手动 KQL 查询 | Sentinel 狩猎笔记本 | 笔记本需要 Defender 门户访问 | | 自动化 | 基本属性修改规则 | Logic App 工作流 | Logic Apps 增加成本和复杂性,超出实验范围 | ## 生产环境中将添加的内容 - **Logic App 工作流** — 自动响应操作,如阻止 IP、禁用账户或通过 Teams 或邮件通知团队 - **实体行为分析 (UEBA)** — 使用机器学习基线检测异常用户和实体行为 - **威胁情报订阅** — 连接威胁情报提供商以自动标记已知恶意 IP 和域名 - **狩猎笔记本** — 用于复杂多步骤威胁狩猎调查的 Jupyter 笔记本 - **工作簿** — 自定义仪表板,显示安全态势、事件趋势和检测覆盖随时间的变化 - **SOC 剧本** — 每个检测规则的已记录响应流程,确保分析师遵循一致的调查步骤 - **数据收集规则** — 更精确地控制收集哪些日志以优化成本 - **跨工作区查询** — 查询多个 Sentinel 工作区以实现企业级可见性 ## 事件响应流程 1. **检测** — 自定义 KQL 规则识别可疑活动并创建事件 2. **分类** — 自动化规则分配事件并设置状态为 Active 3. **调查** — 分析师审查事件时间线、受影响的实体和相关告警 4. **分类** — 事件分类为真阳性、良性阳性或假阳性 5. **关闭** — 事件关闭并记录分类原因 6. **经验总结** — 根据调查结果调整检测规则 ## 经验总结 - Microsoft Sentinel CLI 支持处于实验阶段 — 对复杂操作使用 REST API 更可靠 - PowerShell 管道字符与 KQL 查询冲突 — 将查询存储在变量中可解决此问题 - Spot VM 驱逐在 Azure 活动日志中可见 — 有助于区分预期的和非预期的 VM 关机 - MITRE ATT&CK 战术映射将检测规则从技术告警转变为威胁情报工件 - 威胁狩猎和检测规则服务于不同目的 — 规则捕获已知模式,狩猎发现未知模式 - 个人 Microsoft 账户租户存在许可限制,影响 Sentinel 门户访问 — 完整 Defender 门户功能需要组织账户 ## 作者 **Brayden Miller** [LinkedIn](https://www.linkedin.com/in/brayden-miller13/) | [GitHub](https://github.com/BraydenMiller-CloudSec) *作为动手实践的 Azure 云安全组合的一部分构建。查看 GitHub 上的其他项目。
标签:AMSI绕过, Azure, Azure Activity Logs, Azure CLI, Azure Key Vault, Cloudflare, DNS 反向解析, DNS 解析, FTP漏洞扫描, KQL, Kusto 查询语言, Log Analytics, Microsoft Defender for Cloud Apps, Microsoft Defender for Endpoint, Microsoft Defender for Identity, Microsoft Defender for Office 365, Microsoft Defender XDR, Microsoft Entra ID Protection, Microsoft Sentinel, MITRE ATT&CK, PE 加载器, REST API, SSH 暴力破解, StruQ, 云安全监控, 凭证访问, 威胁检测, 安全编排, 密钥访问检测, 网络安全审计, 自动化事件响应, 自定义规则, 静态分析