pirateape/Azure-Security

GitHub: pirateape/Azure-Security

Azure安全审计框架,全面覆盖Azure安全。

Stars: 0 | Forks: 0

# Azure 安全审计框架 [![MIT 许可证](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/403577699f030352.svg)](https://github.com/pirateape/Azure-Security/actions/workflows/ci.yml) **Azure 基础设施、Entra ID、M365 和边缘安全的一套全面安全库。** 51 个 KQL 查询 · 43 个 PowerShell 审计脚本 · 15 个 Azure 策略 · 6 个 Sentinel 工作簿 · 7 个警报规则 · 2 个 SOAR 案例剧本 · 8 个 Bicep 模块 此存储库将 KQL 威胁狩猎查询、PowerShell 审计脚本、Azure 策略定义、Bicep 模板、Sentinel 警报规则、Logic App 案例剧本和操作手册合并为单一可部署结构。所有内容均为 **MIT 许可** — 在您自己的环境中自由使用。 ## 📂 存储库结构 ``` / ├── src/ │ ├── KQL/ # Sentinel Threat Hunting Queries (51) │ │ ├── Identity/ # Password spray, brute force, token theft, PIM, stales (18) │ │ ├── M365/ # Exchange, Teams, SharePoint detections (6) │ │ ├── Data/ # KeyVault, Storage, Cosmos, SQL monitoring (5) │ │ ├── AdvancedHunting/ # Cross-domain hunts: RBAC, Tor/VPN, lateral, inbox rules (8) │ │ ├── Health/ # Ingestion checks, silent connectors, rule failures (5) │ │ ├── Edge/ # Firewall threats, WAF attacks, public IP detection (3) │ │ ├── Endpoint/ # Base64 PowerShell, LOLBins (3) │ │ └── LateralMovement/ # Cross-subnet, cross-subscription access (3) │ ├── PowerShell/ # Audit & Compliance Scripts (43) │ │ ├── Identity_Audit/ # CA logic, MFA, PIM, app registrations, B2B (14) │ │ ├── Azure/ # RBAC, backup/DR, KeyVault, SQL, VMs, policy compliance (12) │ │ ├── Automation/ # Master orchestrator, runbooks, NSG cleanup (5) │ │ ├── M365_Audit/ # Exchange, Teams, SharePoint, Purview (4) │ │ ├── Compliance_Audit/ # Prowler, ScubaGear integration (2) │ │ ├── SecurityOperations/ # Defender status, Identity Protection (2) │ │ ├── Data_Audit/ # Public KeyVault/Storage assessment (1) │ │ ├── EntraID/ # Risky user analysis (1) │ │ ├── Governance/ # Secure Score reporting (1) │ │ └── Network_Audit/ # NSG & public IP checks (1) │ ├── Policy/ # Azure Policy Definitions (15) │ │ ├── Deny/ # Public IP, open RDP/SSH, storage/KeyVault public access (7) │ │ ├── Modify/ # Auto-remediate TLS 1.2, HTTPS, NSG defaults, tags (5) │ │ └── DeployIfNotExists/ # NSG flow logs, diagnostic settings, monitoring agents (3) │ ├── Bicep/ # Infrastructure as Code (8) │ │ ├── Modules/ # VNet, KeyVault, Storage, Sentinel, Policy assignment (5) │ │ └── Templates/ # Deployment orchestrator + alternatives (2) │ ├── AlertRules/ # Defender/Sentinel scheduled alert rules (7) │ ├── Playbooks/ # Logic App ARM templates for SOAR (2) │ └── Workbooks/ # Sentinel dashboards for posture & operations (6) ├── docs/ │ ├── Architecture/ # STRIDE threat model, defense diagram │ ├── Hardening/ # Azure BP, Entra ID CA hardening, tooling guides │ └── Procedures/ # IR playbook, workbook deployment └── tests/simulation/ # Attack simulation scripts (2) ``` ## 🚀 快速入门 ### 主审计 — 运行所有内容 ``` # 全面安全审计覆盖所有区域 .\src\PowerShell\Automation\Run-MasterAudit.ps1 -RunAll -GenerateReport # 特定类别 .\src\PowerShell\Automation\Run-MasterAudit.ps1 -RunAllIdentity -GenerateReport .\src\PowerShell\Automation\Run-MasterAudit.ps1 -RunAllM365 -GenerateReport .\src\PowerShell\Automation\Run-MasterAudit.ps1 -RunAllAzure -GenerateReport ``` **输出:** - `MASTER_AUDIT_REPORT.html` — 执行仪表板 - `MASTER_AUDIT_REPORT.json` — 可机器读取的摘要 - 各个文件夹中的单个审计报告 ### SOAR 案例剧本 (`src/Playbooks`) 部署这些 Logic App ARM 模板以在 Sentinel 中自动化事件响应: | 案例剧本 | 功能 | |----------|----------| | `Block-EntraUser.json` | 从 Sentinel 事件中提取受损害的账户实体,在 Entra ID 中禁用账户,撤销所有活动会话,并发布评论 | | `Isolate-AzureVM.json` | 应用优先级最高的“拒绝所有” NSG 规则以隔离受损害的机器,同时保留本地取证访问 | ## 🔴 临界优先级审计(每周运行) ### 条件访问 | 脚本 | 目的 | |--------|---------| | `Audit-CA-Logic.ps1` | 10 点 CA 分析 — MFA 强制、旧版身份验证、管理员保护、玻璃破碎、风险策略、设备合规性、访客、命名位置、会话、应用保护 | | `Audit-CA-Conflicts.ps1` | 重复策略检测、允许与拒绝冲突、排除差距、缺少应用覆盖 | | `Audit-CA-Exclusions.ps1` | 带有用户/组名称解析的排除审计 | | `Config-SmartLockout-BP.ps1` | 智能锁定阈值和持续时间基准测试 | ### 身份保护与风险 | 脚本 | 目的 | |--------|---------| | `Audit-IdentityProtection.ps1` | 风险用户、匿名 IP、不可能的旅行、泄露的凭据、密码喷洒、与恶意软件相关的 IP | | `Audit-MFA-Registration.ps1` | 每个用户的 MFA 状态、仅 SMS 检测、管理员合规性 | | `Audit-PIM-Config.ps1` | PIM 角色分配、永久与有资格、风险分析 | | `Audit-RiskyUsers.ps1` | 带有风险等级评分的 Entra ID 风险用户概述 | ### 应用与服务主体安全 | 脚本 | 目的 | |--------|---------| | `Audit-AppRegistrations.ps1` | 过期凭据、高权限权限、多租户应用 | | `Audit-ServicePrincipals.ps1` | SPN 凭据、高权限应用角色、暴露的权限 | ### M365 安全 | 脚本 | 目的 | |--------|---------| | `Audit-ExchangeOnline.ps1` | 邮件转发、收件箱规则、委托人、DKIM、传输规则 | | `Audit-SharePoint.ps1` | 共享设置、匿名链接、外部访问、旧版身份验证 | | `Audit-Purview.ps1` | DLP 策略、敏感标签、保留、审计日志 | ### Azure 基础设施 | 脚本 | 目的 | |--------|---------| | `Audit-NetworkSecurity.ps1` | NSG 规则、公共 IP、流量日志、风险配置 | | `Audit-PublicResources.ps1` | 公共可访问的 KeyVault/Storage 与自动修复 | | `Audit-RBAC-Permissions.ps1` | 高权限分配、经典管理员、自定义角色、孤儿分配、资源锁定 | | `Audit-AppServiceConfig.ps1` | TLS 1.2+、仅 HTTPS、VNET 集成、托管标识 | | `Audit-ActivityLogs.ps1` | 活动日志异常、玻璃破碎操作、配置更改 | | `Audit-CostAnomalies.ps1` | 成本激增检测作为资源妥协的早期指标 | | `Audit-KeyVault-Security.ps1` | KeyVault 防火墙、软删除、清除保护、RBAC | | `Audit-SQLDatabase-Security.ps1` | 审计、TDE、威胁检测、防火墙规则、漏洞评估 | | `Audit-VirtualMachines.ps1` | 磁盘加密、引导诊断、RDP/SSH 访问审查 | | `Audit-Encryption-Compliance.ps1` | 跨资源加密合规性检查 | ### 安全运营 | 脚本 | 目的 | |--------|---------| | `Audit-DefenderStatus.ps1` | Defender for Cloud 状态、安全分数、建议、警报、即时访问 | | `Audit-PolicyCompliance.ps1` | 每个资源和计划的 Azure 策略合规状态 | ## 🟡 中等优先级审计(每月运行) ### 身份卫生 | 脚本 | 目的 | |--------|---------| | `Audit-PasswordPolicy.ps1` | 密码过期、禁止的密码、SSPR、MFA 方法 | | `Audit-DeviceCompliance.ps1` | 设备管理、合规策略、过时的设备 | | `Audit-B2B-Guests.ps1` | 访客生命周期、过时的访客、跨租户策略 | | `Audit-AccessReviews.ps1` | 访问审查配置和完成状态 | | `Audit-AzureADConnect.ps1` | 同步健康、混合加入、密码哈希同步 | ### M365 协作 | 脚本 | 目的 | |--------|---------| | `Audit-Teams.ps1` | 访客访问、外部共享、联合、会议策略 | ### Azure 配置 | 脚本 | 目的 | |--------|---------| | `Audit-BackupRecovery.ps1` | 备份保管库、软删除、未受保护的虚拟机、存储版本控制、站点恢复 | | `Audit-AppServices.ps1` | 应用服务计划安全、CORS、身份验证、TLS 配置 | | `Audit-CognitiveServices.ps1` | 网络 ACL、基于身份的访问、数据加密 | | `Enable-NSGFlowLogs.ps1` | 在所有订阅中批量启用 NSG 流日志 v2 | ## 🔧 Azure 策略(15) | 类别 | 数量 | 目的 | |----------|:-----:|---------| | **Deny** | 7 | 阻止创建公共 IP、开放 RDP/SSH、公共存储/KeyVault、未经批准的区域 | | **Modify** | 5 | 自动修复 TLS 1.2、仅 HTTPS、NSG 拒绝规则、资源标记 | | **DeployIfNotExists** | 3 | 部署 NSG 流日志、诊断设置、虚拟机监控代理 | ## 🏗️ Bicep 基础设施(8 个模板) | 模板 | 目的 | |----------|---------| | `Modules/vnet-secure.bicep` | 使用 NSG 和流量日志的安全 VNet | | `Modules/keyvault-secure.bicep` | 带有私有端点的 Key Vault、软删除、清除保护 | | `Modules/storage-secure.bicep` | 带有私有端点的存储帐户、强制 TLS | | `Modules/log-analytics-sentinel.bicep` | 日志分析工作区 + Sentinel 入门 | | `Modules/policy-assignment.bicep` | 带有托管标识的策略分配 | | `Templates/main.bicep` | AZ-Wall 安全基线 — 协调所有模块 | | `Templates/infrastructure-main.bicep` | 代替:部署日志分析 + Sentinel 独立 | | `Templates/main.parameters.json` | `main.bicep` 的参数文件 | ## 📊 KQL 威胁狩猎查询(51) ### 身份(18) | 查询 | 检测 | |-------|---------| | `Identity_PasswordSpray.kql` | 每个 IP 对多个账户进行高量失败登录 | | `Identity_BruteForceSuccess.kql` | 从同一 IP 进行密码喷洒后的成功登录 | | `Identity_SmartLockout_Events.kql` | 达到 Entra ID 智能锁定阈值的账户 | | `Identity_ImpossibleTravel.kql` | 在短时间内从地理上不可能的位置进行登录 | | `Identity_TokenTheft.kql` | 同一令牌、不同位置/IP 的令牌回放异常 | | `Identity_PIM_AfterHours.kql` | 在工作时间外激活特权角色 | | `Identity_StaleAccountLogin.kql` | 90 天以上休眠账户的重新认证 | | `Identity_SPN_CredentialAdded.kql` | 添加到服务主体的新凭据 | | `Identity_SuspiciousConsent.kql` | 向高风险或多租户应用授予 OAuth 授权 | | `Identity_AppRegistrationByUser.kql` | 非管理员用户注册应用程序 | | `Identity_CrossTenantSync.kql` | 跨租户同步尝试 | | `Identity_BreakGlassUsage.kql` | 紧急玻璃破碎账户活动模式 | | `Identity_GeoBlocking_Candidates.kql` | 条件访问地理封锁的候选用户国家配置文件 | | `Identity_PotentialDoS_Lockout.kql` | 触发重复锁定(潜在拒绝服务)的账户 | | `Identity_LegacyAuth_Usage.kql` | 应用程序使用的旧版身份验证协议 | | `Identity_NewAdminAccount.kql` | 最近创建的特权账户 | | `Identity_FederatedCredentialAdded.kql` | 在应用程序/SPN 上添加的新联合凭据 | | `Infra_PIM_Activation.kql` | PIM 激活详细信息以及批准状态 | ### M365(6) | 查询 | 检测 | |-------|---------| | `Exchange_SuspiciousForwarding.kql` | 将转发规则发送到外部域的邮箱 | | `Exchange_MassEmailDeletion.kql` | 单个用户大量删除电子邮件 | | `Teams_ExternalUserAdded.kql` | 将外部用户添加到 Teams/频道 | | `Teams_ExternalMassDownload.kql` | 外部用户从 Teams/SharePoint 大量下载 | | `SharePoint_AnonymousLinkCreated.kql` | 创建匿名共享链接 | | `SharePoint_ExternalBulkDownload.kql` | 来自外部 IP 的大量下载 | ## 🚨 Sentinel 警报规则(7) | 警报规则 | MITRE 映射 | 逻辑 | |------------|---------------|-------| | `Alert-PasswordSpray.json` | T1110.003 | 来自单个 IP 的多个账户的失败登录 | | `Alert-BruteForceSuccess.json` | T1110 | 在密码喷洒模式后成功登录 | | `Alert-ImpossibleTravel.json` | T1078 | 通过传输时间不可能的地理坐标 | | `Alert-TokenTheft.json` | T1528 | 来自地理上不同的位置的令牌回放 | | `Alert-KeyVaultMassRetrieval.json` | T1552.004 | 从 Key Vault 中枚举大量机密 | | `Alert-ExchangeForwarding.json` | T1114.003 | 将转发规则发送到外部域的邮箱 | | `Alert-SuspiciousConsent.json` | T1525 | 向多租户/高风险应用程序授予 OAuth 授权 | ## 📈 Sentinel 工作簿(6) | 工作簿 | 重点 | |----------|-------| | `IdentityPosture-Dashboard.json` | Entra ID 风险、MFA 合规性、风险登录、旧版身份验证 | | `M365Threats-Dashboard.json` | Exchange 转发、SharePoint 大量下载、Teams 异常 | | `ComplianceMaturity-Dashboard.json` | 将 CIS/NIST 法规合规性映射到 Defender 控制 | | `SOCOperations-Dashboard.json` | 警报分类、事件量、Sentinel 健康、规则有效性 | | `ThreatHunting-Dashboard.json` | 用于高级威胁调查的跨域狩猎表面 | | `Defense_Dashboard.json` | Azure 防御深度:智能锁定、防火墙、安全分数 | **部署:通过 Sentinel 工作簿选项卡导入或通过 Bicep 模板部署。** ## 🧪 攻击模拟 使用 `tests/simulation/` 测试您的检测: | 脚本 | 目标 | |--------|--------| | `Simulate-SmartLockout.ps1` | 通过重复失败的认证触发 Entra ID 智能锁定 | | `Simulate-KeyVault-MassRead.ps1` | 批量枚举 Key Vault 机密以触发检测 | ## 🤖 自动化与手册 | 脚本 | 目的 | |--------|---------| | `Run-MasterAudit.ps1` | 主协调器 — 运行所有审计类别并汇总报告 | | `Runbook-ScheduledRemediation.ps1` | 定期修复常见策略违规 | | `Runbook-NSGCleanup.ps1` | 定期删除或标记风险 NSG 规则 | | `Runbook-CredentialExpiryCheck.ps1` | 监控即将到期的应用程序和 SPN 凭据 | | `Enable-NSGFlowLogs.ps1` | 在订阅中的所有 NSG 上批量启用 NSG 流日志 v2 | ## 📋 要求 ### PowerShell 模块 ``` # Azure Install-Module Az -Scope CurrentUser # Microsoft Graph Install-Module Microsoft.Graph -Scope CurrentUser # M365 Install-Module ExchangeOnlineManagement -Scope CurrentUser Install-Module MicrosoftTeams -Scope CurrentUser Install-Module Microsoft.Online.SharePoint.PowerShell -Scope CurrentUser ``` ### 所需权限 | 范围 | 最小角色 | |-------|-------------| | **Azure** | 读取器(自动修复的参与者) | | **Microsoft Graph** |.Read.All、Policy.Read.All、Application.Read.All、IdentityRiskEvent.Read.All、IdentityRiskyUser.Read.All | | **Exchange Online** | Exchange 管理员或全局读取器 | | **SharePoint** | SharePoint 管理员 | | **Sentinel** | Sentinel 读取器 | ## 🎯 审计优先级
标签:AI合规, Azure Policy, Azure 基础设施, Bicep 模板, Entra ID, KQL 查询, Libemu, M365 安全, MIT 许可, PowerShell 脚本, Sentinel, SOAR, YAML, 人工智能安全, 合规性, 安全合规, 安全库, 安全警报, 开源, 服务器监控, 网络代理, 边缘安全