pirateape/Azure-Security
GitHub: pirateape/Azure-Security
Azure安全审计框架,全面覆盖Azure安全。
Stars: 0 | Forks: 0
# Azure 安全审计框架
[](LICENSE)
[](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, 人工智能安全, 合规性, 安全合规, 安全库, 安全警报, 开源, 服务器监控, 网络代理, 边缘安全