声明
本文章仅用于技术学习、安全研究。切勿用于非授权下渗透攻击行为,切记!
一、漏洞描述
Active Directory 域权限提升漏洞 (CVE-2022-26923)允许低权限用户在安装了 Active Directory 证书服务 (AD CS) 服务器角色的默认 Active Directory 环境中将权限提升到域管理员 。
二、影响范围
受影响的 Windows 版本:
Windows 8.1
Windows 10 Version 1607, 1809,1909, 2004, 20H2, 21H1, 21H2
Windows 11
Windows Server 2008,2012,2016,2019,2022
三、Windows Active Directory (AD)
AD是微软所提供的目录服务(查询,身份验证 ),活动目录的核心包含了活动目录数据库,在活动目录数据库中包含了域中所有的对象(用户、计算机、组….. ),活动目录(Active Directory)是面向Windows Standard Server、Windows Enterprise Server以及Windows Datacenter Server的目录服务。
AD不仅用于身份和访问管理,还提供大量服务来帮助您运行和管理您的组织。其中许多服务鲜为人知或使用较少,这意味着在执行安全强化时他们经常被忽视。其中一项服务是Active Directory证书服务 (AD CS)。
四、Active Directory 证书服务
AD CS 是 Microsoft的公钥基础结构(PKI)实施。由于AD在组织中提供了一定程度的信任,因此它可以用作CA来证明和委托信任。
AD CS用于多种用途,例如加密文件系统、创建和验证数字签名,甚至是用户身份验证,这也给攻击者提供了良好的攻击途径;因证书可以在凭证轮换中幸存下来,这意味着即使重置了受损帐号的密码,也不会使恶意生成的证书无效,从而提供长达10年的持续凭证盗窃!下图显示了证书请求和生成的流程。
五、环境配置
实验环境如下:
域控主机(AD):Windows Server 2016 IP:192.168.20.100 攻击机:KALI IP:192.168.20.102 域内主机:Windows Server 2008 IP:192.168.20.101
Windows Server 2016安装域服务
选择 Active Directory域服务,其他默认即可。 安装完成后,提升为域控制器,开始配置域控。
添加新林 adserver.cn,其他默认,随后下一步。 此时,域控制器已配置好。
Active Directory证书服务
AD CS
下面正式开始安装ADCS服务,只需要注意下面截图的内容,其他都是默认。
服务器管理器–>添加角色和功能向导–>勾选服务器角色–>Active Directory 证书服务 安装完成!
配置ADCS服务,只需要注意下面截图的内容,其他都是默认。 至此全部安装完成!!!
新建低权限AD用户
创建低权限AD用户:zhangsan/ZSpassword@123 配置完成!!!
六、漏洞复现
KALI配置DNS
修改kali的/etc/hosts 文件并添加以下条目:
格式为:域控地址 域控机器名.域名 证书名(通过certutil -config - -ping 查看)域名 域控机器名字 域内定位CA主机
在域内机器上执行-> certutil -config - -ping 测试证书生成
首先使用用户证书模板为我们的低权限AD用户 (Username=zhangsan 、Password=ZSpassword@123 ) 生成证书: 使用工具:Certipy 下载地址:https://github.com/ly4k/Certipy 验证此证书是否有效 可以看到显示了用户的Hash值。
创建机器账户到域
使用bloodyAD工具来创建机器账户。
查看ms-DS-MachineAccountQuota 属性
如果ms-DS-MachineAccountQuota>0 就可以创建机器帐户
这里我们使用这款工具:bloodyAD 下载链接:https://github.com/CravateRouge/bloodyAD 在LDAP中创建一个机器帐户 更新机器帐户的DNS Host Name
这里可以使用工具 ADexplorer 将机器帐户的 DNS Host Name 改为域控的 WIN-DI3Q16DMV8K.adserver.cn 查看属性,是否成功更改了DNS Host Name 伪造恶意证书
运行Certipy生成机器证书,可以看到 DNS Host Name 已经变成了 WIN-DI3Q16DMV8K.adserver.cn 再次验证证书是否有效,成功获取到哈希: 转储所有用户哈希
这里使用 impacket 的 secretsdump.py 来dump哈希 由于域控制器账户拥有所需特权,我们可以设置环境变量 KRB5CCNAME ,通过 impacket 套件中的 secretsdump.py 使用该票据,并执行 DCSync 来转储域用户哈希,如下图所示。 此外,我们可以通过 Kerberos 的 S4U2Self 扩展协议,使用已获取的域控 TGT 为域管理员用户申请针对域控上其他服务的的 ST 票据。这里我们借助 Dirk-jan Mollema(@dirkjanm)的 PKINITtools 工具来操作,请求的是域控制器的 CIFS 服务,如下图。 然后,我们可以通过设置环境变量 KRB5CCNAME 来使用获取到的 Administrator 用户的票据,并通过 smbexec.py 获取域控制器的最高权限,如下所示。
七、修复方案
1、补丁地址:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-26923
2、新证书中引入了新的对象 ID (OID),以进一步对用户进行指纹识别。这是通过在新的szOID_NTDS_CA_SECURITY_EXT OID 中嵌入用户的 objectSid 来完成的。
3、"验证写入DNS主机名"权限现在只允许您将 DNSHostname 设置为与 SAM 帐户名或计算机帐户匹配的属性,这意味着它不能用于欺骗其他主机的帐户名。
4、确保您的证书模板受到限制。仅在需要时才允许机器和用户自动注册。否则,通过安全配置,可以减少这些模板的权限。
5、如果没有允许用户将主机注册到 AD 的商业案例,请将所有不应注册新主机的帐户的 MS-DS-Machine-Account-Quota 属性更改为 0。然而,这并不能解决问题,因为攻击者只需获得对单个加入域的主机的管理访问权限,就可以执行证书请求。
八、参考链接
https://whoamianony.top/certifried-active-directory-domain-privilege-escalation/ https://mp.weixin.qq.com/s/AuPajld1K7N5alAkgMZNfA https://www.sohu.com/a/546699064_121332157
|