auditing-azure-active-directory-configuration

审计 Microsoft Entra ID(Azure Active Directory)配置,使用 AzureAD PowerShell、Microsoft Graph API 和 ScoutSuite 识别高风险身份验证策略、过度宽松的角色分配、过期账户、条件访问缺口和来宾用户风险。

9 stars

Best use case

auditing-azure-active-directory-configuration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

审计 Microsoft Entra ID(Azure Active Directory)配置,使用 AzureAD PowerShell、Microsoft Graph API 和 ScoutSuite 识别高风险身份验证策略、过度宽松的角色分配、过期账户、条件访问缺口和来宾用户风险。

Teams using auditing-azure-active-directory-configuration should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/auditing-azure-active-directory-configuration/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/auditing-azure-active-directory-configuration/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/auditing-azure-active-directory-configuration/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How auditing-azure-active-directory-configuration Compares

Feature / Agentauditing-azure-active-directory-configurationStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

审计 Microsoft Entra ID(Azure Active Directory)配置,使用 AzureAD PowerShell、Microsoft Graph API 和 ScoutSuite 识别高风险身份验证策略、过度宽松的角色分配、过期账户、条件访问缺口和来宾用户风险。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 审计 Azure Active Directory 配置

## 适用场景

- 对 Azure 租户的身份配置进行安全评估时
- 合规审计要求审查身份验证策略、MFA 强制执行和角色分配时
- 合并或收购后加入新 Azure 租户时
- 调查可疑登录活动或账户失陷时
- 验证条件访问策略是否能充分防护基于身份的攻击时

**不适用于**:本地 Active Directory 审计(使用 PingCastle 或 BloodHound AD)、无身份上下文的 Azure 资源级别 RBAC 审计,或实时威胁检测(使用 Microsoft Defender for Identity)。

## 前置条件

- 目标 Microsoft Entra ID 租户中的全局读取者(Global Reader)或安全读取者(Security Reader)角色
- 安装 Microsoft Graph PowerShell SDK(`Install-Module Microsoft.Graph`)
- Az CLI 已向目标租户认证(`az login --tenant TENANT_ID`)
- 配置了 Azure 提供商的 ScoutSuite,用于自动化评估
- 访问 Azure AD 审计日志和登录日志(需要 Azure AD Premium P1/P2)

## 工作流程

### 步骤 1:枚举租户配置和安全默认设置

评估租户的基线身份安全设置,包括安全默认设置和旧式身份验证状态。

```powershell
# 连接 Microsoft Graph
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"

# 获取租户详情
Get-MgOrganization | Select-Object DisplayName, Id, VerifiedDomains

# 检查安全默认设置是否启用
Get-MgPolicyIdentitySecurityDefaultEnforcementPolicy | Select-Object IsEnabled

# 列出身份验证方法策略
Get-MgPolicyAuthenticationMethodPolicy | ConvertTo-Json -Depth 5

# 通过条件访问检查旧式身份验证状态
Get-MgIdentityConditionalAccessPolicy | Where-Object {
    $_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or
    $_.Conditions.ClientAppTypes -contains "other"
} | Select-Object DisplayName, State
```

### 步骤 2:审计特权角色分配

审查目录角色分配,识别权限过高的用户、永久管理员账户和高风险角色配置。

```bash
# 列出所有全局管理员分配
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/directoryRoles/filterByIds" \
  --body '{"ids":["62e90394-69f5-4237-9190-012177145e10"]}' | \
  az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/directoryRoles?filter=displayName eq 'Global Administrator'" \
  --query "value[0].id" -o tsv

# 使用 Graph API 列出所有特权角色分配
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$expand=principal" \
  --query "value[*].{Role:roleDefinitionId, Principal:principal.displayName, PrincipalType:principal.@odata.type}" \
  -o table

# 检查拥有多个管理员角色的用户
az ad user list --query "[].{UPN:userPrincipalName, DisplayName:displayName}" -o table

# 列出具有管理员角色分配的服务主体
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$filter=principalOrganizationId eq 'TENANT_ID'" \
  -o json
```

### 步骤 3:审查条件访问策略

审计条件访问策略的覆盖缺口,尤其是 MFA 强制执行、设备合规性和基于位置的限制。

```powershell
# 列出所有条件访问策略
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State, @{
    N='GrantControls'; E={$_.GrantControls.BuiltInControls -join ', '}
} | Format-Table -AutoSize

# 识别仅报告模式(未强制执行)的策略
Get-MgIdentityConditionalAccessPolicy | Where-Object {$_.State -eq "enabledForReportingButNotEnforced"} |
    Select-Object DisplayName

# 检查 MFA 强制执行覆盖范围
Get-MgIdentityConditionalAccessPolicy | Where-Object {
    $_.GrantControls.BuiltInControls -contains "mfa"
} | Select-Object DisplayName, State, @{
    N='Users'; E={$_.Conditions.Users.IncludeUsers -join ', '}
}

# 查找排除了组的策略(潜在绕过)
Get-MgIdentityConditionalAccessPolicy | Where-Object {
    $_.Conditions.Users.ExcludeGroups.Count -gt 0
} | Select-Object DisplayName, @{
    N='ExcludedGroups'; E={$_.Conditions.Users.ExcludeGroups -join ', '}
}
```

### 步骤 4:识别过期账户和来宾用户

查找长期未登录的账户、拥有活跃角色分配的已禁用账户,以及高风险的来宾用户配置。

```bash
# 查找 90 天以上未登录的用户
az ad user list --query "[?signInActivity.lastSignInDateTime < '2025-11-25T00:00:00Z'].{UPN:userPrincipalName, LastSignIn:signInActivity.lastSignInDateTime, Enabled:accountEnabled}" -o table

# 列出所有来宾用户
az ad user list --filter "userType eq 'Guest'" \
  --query "[].{UPN:userPrincipalName, DisplayName:displayName, CreatedDate:createdDateTime}" \
  -o table

# 查找具有特权角色的来宾用户
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?\$expand=principal" \
  --query "value[?principal.userType=='Guest'].{Role:roleDefinitionId,Guest:principal.userPrincipalName}" \
  -o table

# 检查未启用 MFA 的账户
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/reports/authenticationMethods/userRegistrationDetails" \
  --query "value[?!isMfaRegistered].{UPN:userPrincipalName,MfaRegistered:isMfaRegistered}" \
  -o table
```

### 步骤 5:分析登录日志中的高风险活动

审查登录日志,识别异常身份验证模式、MFA 质询失败和高风险登录检测。

```bash
# 获取过去 7 天的高风险登录
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=riskLevelDuringSignIn ne 'none' and createdDateTime ge 2026-02-16T00:00:00Z" \
  --query "value[*].{User:userPrincipalName,Risk:riskLevelDuringSignIn,IP:ipAddress,App:appDisplayName,Status:status.errorCode}" \
  -o table

# 获取来自陌生位置的登录
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=riskEventTypes_v2/any(r:r eq 'unfamiliarFeatures')" \
  --query "value[*].{User:userPrincipalName,Location:location.city,IP:ipAddress}" \
  -o table

# 检查旧式身份验证登录
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=clientAppUsed ne 'Browser' and clientAppUsed ne 'Mobile Apps and Desktop clients'" \
  --query "value[*].{User:userPrincipalName,ClientApp:clientAppUsed,Status:status.errorCode}" \
  -o table
```

### 步骤 6:运行 ScoutSuite 自动化评估

执行 ScoutSuite 对 Azure 租户配置进行全面自动化检查。

```bash
# 对 Azure 运行 ScoutSuite
python3 -m ScoutSuite azure --cli \
  --report-dir ./scoutsuite-azure-report \
  --all-subscriptions

# 查看生成的 HTML 报告
open ./scoutsuite-azure-report/azure-report.html
```

## 核心概念

| 术语 | 定义 |
|------|------------|
| Microsoft Entra ID | 微软的云身份和访问管理服务,原名 Azure Active Directory,提供身份验证和授权 |
| 条件访问(Conditional Access) | 策略引擎,评估信号(用户、设备、位置、风险),强制执行 MFA、设备合规或阻止访问等访问控制 |
| 安全默认设置(Security Defaults) | 微软的基线身份保护设置,强制执行 MFA 注册、阻止旧式身份验证并保护特权操作 |
| 特权身份管理(Privileged Identity Management) | Azure AD Premium P2 功能,通过审批工作流和时限角色激活实现即时特权访问 |
| 旧式身份验证(Legacy Authentication) | 不支持 MFA 的旧版身份验证协议(POP3、IMAP、SMTP、ActiveSync),常被用于凭据攻击 |
| 高风险登录(Risky Sign-In) | Microsoft Entra Identity Protection 检测到的登录异常,包括不可能的旅行、陌生位置和恶意软件关联 IP |

## 工具与系统

- **Microsoft Graph API**:查询 Entra ID 配置、策略、角色和审计日志的主要编程接口
- **Microsoft Graph PowerShell SDK**:用于 Entra ID 管理和安全审计任务的 PowerShell 模块
- **ScoutSuite**:多云审计工具,支持 Azure 提供商,涵盖 IAM、存储、网络和身份检查
- **AzureADRecon**:社区工具,用于全面的 Azure AD 侦察和安全评估报告
- **Microsoft Defender for Identity**:基于云的安全解决方案,用于检测基于身份的威胁和凭据失陷

## 常见场景

### 场景:收购后 Azure 租户安全评估

**场景背景**:收购公司后,安全团队需要在将其与企业 Entra ID 集成之前,评估被收购公司的 Azure 租户身份安全态势。

**方法**:
1. 枚举所有全局管理员,检查是否有个人账户担任管理员角色
2. 审查条件访问策略,验证 MFA 是否对所有用户(而非仅管理员)强制执行
3. 识别具有特权访问的来宾用户,这可能表明第三方供应商权限过高
4. 检查过期账户(90 天以上未登录),这些账户可能成为凭据攻击目标
5. 审查登录日志中旧式身份验证的使用情况(可绕过 MFA)
6. 验证安全默认设置或等效 CA 策略是否阻止旧式身份验证协议
7. 生成风险报告,并在租户集成前提供优先级排序的修复步骤

**常见陷阱**:高风险登录检测和 PIM 需要 Azure AD Premium P2。如果被收购租户使用较低许可证层,许多身份保护功能将不可用。来自合作伙伴租户的来宾用户可能通过动态组具有隐式访问权限,这在标准角色分配查询中不可见。

## 输出格式

```
Azure Active Directory 安全审计报告
===============================================
租户: acme-acquired.onmicrosoft.com
租户 ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
审计日期: 2026-02-23
许可证: Azure AD Premium P2

身份配置:
  安全默认设置: 已禁用(使用条件访问)
  条件访问策略: 12 个(8 个已强制,3 个仅报告,1 个已禁用)
  旧式身份验证已阻止: 部分(仅管理员)

特权访问:
  全局管理员:              8 个(建议: <= 4 个)
  永久管理员分配:          6 个(无需 PIM 激活)
  拥有管理员权限的服务主体: 3 个
  具有特权角色的来宾用户:  2 个

账户卫生:
  用户总数:                1,247
  过期账户(90 天以上):   89
  来宾用户:                234
  未注册 MFA 的用户:       156

登录风险:
  高风险登录(过去 30 天): 34
  旧式身份验证登录(过去 7 天): 67
  不可能旅行检测:            5
  陌生位置登录:             12

严重发现:
  1. 8 个全局管理员具有永久分配(应使用 PIM)
  2. 非管理员用户未阻止旧式身份验证
  3. 156 个用户未注册 MFA
  4. 2 个来宾用户拥有特权角色管理员(Privileged Role Administrator)角色
```

Related Skills

testing-cors-misconfiguration

9
from killvxk/cybersecurity-skills-zh

在安全评估期间,识别和利用跨源资源共享(CORS)错误配置,这些配置允许未经授权的跨域数据访问和凭证窃取。

remediating-s3-bucket-misconfiguration

9
from killvxk/cybersecurity-skills-zh

本技能提供识别和修复 Amazon S3 存储桶错误配置(这些错误配置会将敏感数据暴露给未授权访问)的分步操作流程。涵盖在账户和存储桶级别启用 S3 阻止公开访问(Block Public Access)、审计存储桶策略和 ACL、强制加密、配置访问日志记录,以及使用 AWS Config 和 Lambda 部署自动化修复措施。

performing-ssl-tls-inspection-configuration

9
from killvxk/cybersecurity-skills-zh

在网络安全设备上配置 SSL/TLS 检查,对 HTTPS 流量进行解密、检查和重加密以用于威胁检测,同时管理证书、豁免项和隐私合规要求。

performing-directory-traversal-testing

9
from killvxk/cybersecurity-skills-zh

通过操控文件路径参数,测试 Web 应用程序中允许读取或写入服务器任意文件的路径遍历漏洞。

performing-active-directory-vulnerability-assessment

9
from killvxk/cybersecurity-skills-zh

使用 PingCastle、BloodHound 和 Purple Knight 评估 Active Directory 安全态势,识别错误配置、权限提升路径和攻击向量。

performing-active-directory-forest-trust-attack

9
from killvxk/cybersecurity-skills-zh

使用 impacket 枚举和审计 Active Directory 林信任关系,进行 SID 过滤分析、信任密钥提取、跨林 SID 历史滥用检测和跨域 Kerberos 票据评估。

performing-active-directory-compromise-investigation

9
from killvxk/cybersecurity-skills-zh

通过分析认证日志、复制元数据、组策略变更和 Kerberos 票据异常,调查 Active Directory 攻陷事件,识别攻击者持久化机制和横向移动路径。

performing-active-directory-bloodhound-analysis

9
from killvxk/cybersecurity-skills-zh

使用 BloodHound 和 SharpHound 枚举活动目录(Active Directory)关系,从已控制的用户识别到域管理员的攻击路径。

implementing-privileged-identity-management-with-azure

9
from killvxk/cybersecurity-skills-zh

使用 Microsoft Graph API 配置 Azure AD 特权身份管理(PIM),管理符合条件的角色分配、即时激活、访问审查,以及用于零信任特权访问的角色管理策略。

implementing-google-workspace-sso-configuration

9
from killvxk/cybersecurity-skills-zh

为 Google Workspace 配置基于 SAML 2.0 的单点登录(SSO),与第三方身份提供商集成,实现集中认证并强制执行全组织范围的访问策略。

implementing-conditional-access-policies-azure-ad

9
from killvxk/cybersecurity-skills-zh

为零信任访问控制配置 Microsoft Entra ID(Azure AD)条件访问策略,涵盖基于信号的策略设计、设备合规要求、基于风险的认证、命名位置、会话控制以及与 NIST SP 1800-35 零信任架构的集成。

implementing-azure-defender-for-cloud

9
from killvxk/cybersecurity-skills-zh

实施 Microsoft Defender for Cloud,为虚拟机、容器、数据库和存储启用云安全态势管理和工作负载保护,配置安全建议,并通过自动修复设置自适应安全控制。