2. 身份基础设施盘点

身份攻击面发现的第一步不是扫描漏洞,而是把“谁在管身份、身份存在哪里、谁能改身份”这三件事摸清楚。身份基础设施盘点要回答的核心问题是:组织内有哪些身份系统、它们之间如何信任、哪些对象是高价值目标、哪些接口暴露在攻击路径上。盘点的产出不是一份资产清单,而是一张可追溯的身份信任拓扑图。

一、先划分身份系统的角色层次

身份基础设施通常分为四层:权威源(如 AD、HR 系统)、身份提供者(如 Entra ID、Okta)、依赖方(如 SaaS、自研应用)、特权通道(如 PAM、跳板机、SSH 证书)。盘点时必须先确定每个系统的角色,否则会把 IdP 和 SP 混为一谈,导致后续信任关系画错。

以典型混合架构为例:本地 AD 是员工账号的权威源,Entra ID Connect 将用户同步到 Entra ID,Entra ID 作为 IdP 为 Microsoft 365 和 SaaS 提供 SSO,Okta 可能作为另一条 IdP 链路服务特定业务,PAM 则托管 AD 域管和云平台高权限账号。这四条链路各自有独立的认证策略、MFA 覆盖率和日志源,盘点时要分别记录。

身份基础设施分层与信任链路盘点视图 权威源层 本地 AD / HR 系统 账号创建与属性主数据 身份提供者层 Entra ID / Okta 认证、令牌签发、条件访问 依赖方层 SaaS / 自研应用 SAML / OIDC / SCIM 接入 特权通道层 PAM / 跳板机 / SSH CA 特权账号托管与审批 同步/联邦 SSO 信任 特权提升路径 各层关键盘点对象与工具 AD • 域/OU/组策略 • 域管/服务账号 • 信任关系/委派 工具:PowerShell、BloodHound Entra ID / Okta • 应用注册/企业应用 • 条件访问策略 • MFA 注册状态 工具:Graph API、Okta API LDAP / SSO • 目录树/DN 结构 • 绑定账号权限 • SP 元数据/证书 工具:ldapsearch、SAML 元数据解析 PAM / MFA • 保险库账号清单 • 会话录制策略 • MFA 因子类型分布 工具:PAM API、认证日志

二、AD 盘点:从域结构到高价值对象

AD 盘点的第一层是域和 OU 结构。用 Get-ADDomain 和 Get-ADOrganizationalUnit -Filter * 可以导出域列表和 OU 树,重点关注是否存在多个域、林信任关系以及外部信任。第二层是账号对象:域管组、企业管理员组、受保护用户组、服务账号(尤其是 PasswordNeverExpires 且 SPN 非空的服务账号)。第三层是权限关系:ACL 委派、AdminSDHolder、GPO 链接范围。

实际盘点时,建议先跑一条组合命令导出关键对象:

# 导出域管成员与受保护账号
Get-ADGroupMember "Domain Admins" -Recursive |
  Select-Object SamAccountName, objectClass, distinguishedName |
  Export-Csv "domain_admins.csv" -Encoding UTF8

# 查找密码永不过期的服务账号
Get-ADUser -Filter {PasswordNeverExpires -eq $true -and ServicePrincipalName -like "*"} `
  -Properties ServicePrincipalName, PasswordLastSet |
  Select-Object SamAccountName, ServicePrincipalName, PasswordLastSet

导出后要人工判断:哪些服务账号仍在使用、哪些 SPN 对应已下线应用、哪些账号密码超过 365 天未轮换。这些是 Kerberoasting 和黄金票据攻击的典型入口。BloodHound 的 SharpHound 采集器可以进一步把 ACL 和会话关系可视化,但采集前必须获得授权并控制采集范围,避免触发安全告警。

三、Entra ID 与 Okta 盘点:应用、策略与 MFA 覆盖

Entra ID 盘点的核心对象是应用注册和企业应用。应用注册中的 client secret 和 certificate 是长期凭证,过期未轮换或权限过大(如 Mail.ReadWrite、Directory.ReadWrite.All)都是高风险点。用 Microsoft Graph 可以批量导出:

GET https://graph.microsoft.com/v1.0/applications
  ?$select=displayName,appId,passwordCredentials,requiredResourceAccess

GET https://graph.microsoft.com/v1.0/servicePrincipals
  ?$select=displayName,appId,servicePrincipalType,signInAudience

Okta 侧重点在 /api/v1/apps 和 /api/v1/policies。要清点每个应用的 SSO 模式(SAML、OIDC、SWA)、分配的用户组、以及是否强制 MFA。Okta 的 System Log API 可以拉取认证事件,用于统计 MFA 覆盖率。MFA 盘点不能只看“是否启用”,还要看因子类型:短信和语音因子存在 SIM 交换风险,应标记为弱因子;FIDO2 和 Windows Hello 属于强因子。

四、LDAP 与 SSO 盘点:目录绑定与信任证书

LDAP 盘点要关注三件事:目录树结构、绑定账号权限、以及哪些应用通过 LDAP 直连认证。用 ldapsearch 可以匿名或绑定查询根 DSE:

ldapsearch -x -H ldaps://dc01.example.com:636 \
  -D "cn=svc_ldap,ou=ServiceAccounts,dc=example,dc=com" \
  -W -b "dc=example,dc=com" "(objectClass=person)" cn mail

如果绑定账号拥有过大读权限,攻击者一旦拿到该账号即可批量导出用户信息用于钓鱼。SSO 盘点则要收集每个 SP 的 SAML 元数据,检查签名证书有效期、断言加密配置、以及是否存在 NameID 可预测问题。证书过期是 SSO 中断的常见原因,盘点时应把 90 天内到期的证书单独列出。

五、PAM 与 MFA 盘点:特权账号与因子分布

PAM 盘点要回答:哪些特权账号已纳入保险库、哪些仍散落在个人手中、会话录制是否覆盖所有特权操作。导出 PAM 中的账号清单后,与 AD 域管组、云平台管理员角色做交叉比对,差集就是“未托管特权账号”。MFA 盘点则按用户组统计注册率,重点关注管理员组是否 100% 覆盖强因子。

盘点结果建议落成一张“身份系统登记表”,字段包括:系统名称、角色层次、权威源、认证协议、MFA 策略、日志源、负责人、高价值对象数量、最近一次权限复核时间。这张表是后续攻击面建模和风险治理的基线。

六、盘点工具选型与数据合并

工具选择取决于环境规模。中小规模可以用 PowerShell + Graph API + Okta API 脚本化导出;大规模混合环境建议用 BloodHound(AD)、AzureHound(Entra ID)、Okta 的 Terraform Provider 或官方 SIEM 集成。关键不是工具本身,而是把各系统导出的对象按统一标识(如 UPN、objectGUID、appId)合并,形成跨系统的身份关联视图。

盘点完成后,应至少输出三份可交付物:身份系统拓扑图、高价值对象清单(域管、服务账号、高权限应用、未托管特权账号)、以及 MFA 与凭证有效期风险列表。这三份产出直接决定后续攻击面分析的起点是否准确。