Zerologon、PrintNightmare、sAMAccountName Spoofing(noPac)
Zerologon
Zerologon是发生在netlogon(在lsass.exe进程中的一个微软安全服务)上的漏洞。
前面学到过,在域环境下,ntlm认证过程中,有一步要访问的服务和域控之间的为了校验凭据是否有效的通信,而这个通信实际上就是由netlogon来完成的。
netlogon有自己的一套加密机制,而这个加密机制存在问题,攻击者可以将明文随机数挑战值给设置为0,会有,1/256的几率通过域控的验证。
一般的攻击流程是:
攻击者向域控发起netlogon,并且声明自己就是域控,通过数次尝试之后,域控认可攻击者是域控,然后攻击者调用netlogon的NetrServerPasswordSet2函数,来修改自己的密码为空,此时指向的也就是域控的密码为空,从而接管域控
[ 攻击者机 ] [ 域控制器 (DC) ]
| |
| 1. 连接并请求 MS-NRPC | (Netlogon 运行在
| (全 0 明文碰撞尝试,冒充是 DC$) | DC 的 lsass.exe 中)
| --------------------------------------------------> |
| |
| 2. 碰撞成功:DC 误认对端为 DC$ |
| <-------------------------------------------------- |
| |
| 3. 主动调用接口:NetrServerPasswordSet2 |
| (发令:"将我 DC$ 的密码改为空") |
| --------------------------------------------------> |
| | 4. DC 本地执行:
| | 修改内部数据库
| | ntds.dit 中的
| | DC$ 密码为空
| |
| 5. 回复:修改成功 |
| <-------------------------------------------------- |PrintNightmare
PrintNightmare 发生在print spooler的一个RPC可以调用一个危险函数上,这个函数允许非特权用户传入驱动路径并且对驱动文件没有进行严格的校验,攻击者可以开启一个smb服务,然后调用RPC的危险函数来执行放在上面的恶意DLL文件,从而直接获取目标主机的系统最高权限。
+----------------------------------------------------------------------------------------------------+
| PrintNightmare 漏洞执行流程图 |
+----------------------------------------------------------------------------------------------------+
【 攻击者客户端 】 【 目标域控制器 (DC) 】
(仅需普通域用户凭据) (Spooler 服务以 SYSTEM 运行)
| |
| 1. 准备阶段: |
| 在本地搭建恶意 SMB 共享, |
| 放置构造好的驱动文件 evil.dll |
| |
| 2. 发起 RPC 调用: |
| 调用 RpcAddPrinterDriverEx() |
| 参数指向 UNC 路径: \\攻击机IP\share\evil.dll |
| ------------------------------------------------------------> |
| |
| [ 3. 接口权限检查 ]
| - 缺陷点:未校验调用者是否为管理员
| - 结果:放行普通用户的安装请求
| |
| [ 4. 远程文件拉取 ]
| < - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
| 域控的 spoolsv.exe 主动发起 SMB 流量, |
| 将 evil.dll 拷贝至本地驱动目录 |
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > |
| |
| [ 5. 驱动加载与代码执行 ]
| - spoolsv.exe 调用 LoadLibrary
| - 恶意 DLL 在其进程中加载
| - 权限继承:获得 NT AUTHORITY\SYSTEM
| |
| [ 6. 最终影响 ]
| - 恶意代码以系统最高权限在域控执行
| - 实现对域控的完全控制
v vsAMAccountName Spoofing
这个漏洞是两个漏洞的组合CVE-2021-42278(改机器名字不用带$)、CVE-2021-42287(KDC发癫自动查库补$)
攻击者利用CVE-2021-42278给自己创建的机器账户名字改成了 DC,然后通过 AS 认证。AS 认证阶段 KDC 没有发癫觉得 DC 是 DC$,而是把他当作了一个叫做 DC 的普通用户。拿到 TGT 后,攻击者把机器名字改回原名让 DC 变成空号,防止后续出错。在随后的 TGS 认证阶段,KDC 查不到 DC 开始发癫,觉得 DC 不是 DC 而是 DC$,这就给了攻击者执行 S4U2self 的前提了。具体的操作是,攻击者在 TGS 阶段的请求,让这个机器去要一张 Administrator 去访问这个机器自己的 ST,KDC 以为 DC 是 DC$,于是直接给了攻击者一张以 Administrator 的身份去访问它自己(也就是 Administrator 访问 DC$)的 ST。