聚铭网络
- 关注
前言
在较大的企业、政企、高校等单位的网络信息化建设中,域环境常常是内部网络建设的重要一部分。而从现有网络安全建设来看,大部分单位的内部网络的安全性往往做的没有边界严格,因为网络防御的重点基本还是集中在网络边界上。
随着黑产团伙网络攻击事件的频频发生,在攻击者“穿过”单位网络的“边界防御”后,内部网络无疑是攻击者不会轻易放过的“香饽饽”。黑客经常会利用AD域(Active Directory Domain)作为首要攻击目标,特别是域控服务器,一旦其沦陷,基本上可以认为整个域已宣告失陷;以ATT&CK视角来看,整个过程黑客涉及了网络攻击生命周期中的权限提升、内部侦察和横向移动阶段。
图1 网络攻击生命周期
本章将以域内提权漏洞——CVE-2020-1472进行介绍分析,聚铭网络流量智能分析审计产品支持对该漏洞利用的检测。
漏洞简介
图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地址
图3 置空密码
Step2:获取HASH
切换到impacket/example目录利用secretsdump.py来获取相关的HASH
python secretsdump.py deeper.com/dc$@192.168.83.130 -no-pass
#deeper.com为域名称,dc为域控计算机名称,后面跟域控IP
图4 获取HASH
Step3:获取SHELL
在/impacket/example目录下利用psexec.py和上面获取的administrator的hash值获取shell
python psexec.py deeper.com/Administrator@192.168.83.130 -hashes :7c6cab7ad63589567f0f1692851e0875
图5 获取SHELL
漏洞原理
图6 zerologon
Netlogon协议使用的是自定义的对称加密协议来让客户端(加入域的计算机)和服务器(域控制器)向对方证明身份安全,此共享加密是客户端计算机账户密码的HASH值。Netlogon会话由客户端启动,因此客户端和服务器先交换随机的8个字节——challenge,客户端和服务器都先将密钥派生函数加密以获取会话密钥Session Key,然后客户端使用此会话密钥用于计算客户端凭据Client credential,服务器则重新计算相同的凭证。客户端必须知道计算机密码的HASH才能计算获得SessionKey,客户端知道会话密钥后才能做加密认证。
图7 netlogon认证协议
客户端和服务器都是用的加密原句在函数中实现生成凭据为ComputeLogOneCredential,称为协议规范。这个函数接受8字节的输入并通过加密会话对其进行转换产生相等长度输出的key,假设它不知道会话密钥将无法计算正确的输出及匹配的某个输入。
这个函数有两个版本,基于3DES以及AES,取决于客户端在身份验证期间设置的标志,基本上使用的都是AES。AES分组密码需要输入16个字节并将其置换为大小相等的输出,操作模式必须加密较大或较小的输入,为了被选中,ComputeLogEncredential利用模糊的CFB8(8位密码)模式只需转换8个字节,这个模式大约是普通模式的16倍。
AES-CFB8对明文的每个字节进行加密,方法是预先加上前缀一个16字节的初始化向量,然后将AES应用于IV+明文的前16个字节,取AES输出的第一个字节,并使用下一个明文字节。
图8 AES-CFB8操作模式的加密说明
为了能够加密会话,必须指定初始化向量(Initial Vector,即IV)引导加密过程,这个IV值必须是唯一的,并为每个单独的随机生成用同一密钥加密的密文。但是ComputeLogOnCreddential函数定义的IV是固定的,由16字节全零内容构成,而AES-CFB8要求IV是随机的,对256个密钥中的1个将AES-CFB8加密应用全零字节明文将导致都是零密文。
图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进行加密。
图10 CFB8加密模式
流量分析
客户端尝试发出challenge,将Client Challenge值置为8个字节全0
图11 客户端发出测试请求
尝试的过程通常会出现大量STATUS_ACCESS_DENIED数据包。
图12 尝试失败报文特征
目前,聚铭网络流量智能分析审计系统完全支持对该漏洞攻击的检测,发现攻击数据后立即产生告警,效果如下:
图13 安全告警事件
【参考文章】
https://www.jianshu.com/p/7bd3f242c09c
https://www.anquanke.com/post/id/219374
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)