一种深度隐蔽的后门方式

这是关于域中深度隐蔽后门系列的第二篇,第一篇为利用文件目录ACL深度隐藏后门。 本篇主要介绍利用域中主机账号的口令散列值制作白银票据,结合文章《利用域委派获取域管理权限》中的委派方式,在域中埋伏隐蔽后门,以长期隐蔽有效地高权限控制域。 前提条件:已经控制了域,并获取了域中主机账号的口令散列值。

0x01 白银票据基本原理

网络上有众多关于kerberos协议、黄金票据、白银票据的资料,本篇通过下图言简意赅地介绍白银票据的基本原理。

Kerberos协议认证过程,可粗略地分为6步(或者7步)。下图是域内一台主机的jack用户,想访问域内服务器A中的服务B(假设为文件共享),则认证过程如下:

1、jack向域服务器发起认证请求,告诉域服务器我是jack,认证内容为jack用户口令散列值(NTLM)加密的一个时间值;

2、域服务器使用存储在AD数据库中的jack用户的口令散列值(NTLM),对认证内容进行解密校验,成功则返回TGT票据,使用krbtgt的NTLM对TGT进行加密;

3、jack使用TGT向域服务器申请访问服务器A的服务B;

4、域服务器使用krbtgt的NTLM值解密TGT,成功则返回访问服务器A中服务B的TGS,TGS被服务B的服务账号ServiceAccount的口令散列值加密;

5、jack收到TGS后,将TGS发送给服务器A。A使用ServiceAccount账号的口令散列值解密收到的TGS,解密成功则允许访问;

6、服务器A告诉jack,校验成功,允许访问;

7、TGS中包含PAC的校验和,服务器A收到TGS并解密校验成功后,将PAC的校验和发送给域服务器,以判断PAC是否被篡改。这一步为可选步骤,一般不用关注。

在上面的第3步中,如果我们拥有krbtgt账号的口令散列值,则可以伪造TGT,宣称自己是域内任何账号,包括域管或者不存在的用户,这是黄金票据的原理。所以制作黄金票据的前提是获取krbtgt账号的口令散列值。

在上面的第5步中,如果我们拥有ServiceAccount账号的口令散列值,则可以伪造TGS,并宣称自己是域内的任何账号,例如域管理员,这是白银票据的原理。所以制作白银票据的前提是获取服务账号的口令散列值。

在windows系统中,许多服务以主机账号运行,即许多ServiceAccount账号为本机的主机账号,格式为ComputerName$。下表是常见的以主机账号运行的服务。右边一栏中有些有多个服务,例如WMI服务包括HOST、RPCSS这2个服务,表示访问WMI服务同时需要2个TGS票据。

服务名称

同时需要的服务

WMI

HOST、RPCSS

PowerShell Remoting

HOST、HTTP

WinRM

HOST、HTTP

Scheduled Tasks

HOST

Windows File Share

CIFS

LDAP

LDAP

Windows Remote Server

RPCSS、LDAP、CIFS

0x02 利用主机账号制作白银票据

演示样例:已知域服务器主机账号的口令散列值,使用Mimikatz的白银票据功能,伪造访问HOST服务的TGS,以域管理员权限运行域服务器的SCHTASKS命令,远程创建、查看、删除系统任务。

上图为伪造白银票据前内存中的票据,登录用户为域内普通用户eviluser,登录到域服务器TESTLABDC02。

上图为伪造白银票据后内存中的票据,伪造指令为:

kerberos::golden /admin:administrator@testlab.com /domain:testlab.com /sid:S-1-5-21-2390976136-1701108887-179272945 /target:TESTLABDC02.testlab.com /rc4:36788836f262b9409f102baa22b7a6f3 /service:cifs /ptt

其中rc4的参数为服务器TESTLABDC02的主机账号口令散列值。伪造白银票据并ptt进入当前会话后,内存中的TGS票据为administrator。

上图为使用schtasks命令远程在TESTLABDC02服务器上创建、查看、删除名为“SCOM Agent check”的系统任务,必须具备TESTLABDC02的管理员权限才能查看,这里是域管理员权限。通过这个演示样例,可知基于主机账号口令散列值,制作隐蔽后门作用非常之大。

0x03 修改主机账号的口令策略制作后门

默认情况下,主机账号的口令每30天变更一次。因此,要想长期使已获取的主机账号的口令散列值长期有效,必须对口令更改策略进行修改。有3种修改方式:

1. 在主机的注册表中修改策略,具体位置为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters,键值为DisablePasswordChange,设置为1,即表示禁止修改账号口令;

2. 在组策略中修改默认的30天,修改位置为“Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\Domain member: Maximum machine account password age”,设置为0时,表示无限长;

3. 直接禁止修改主机账号口令,用来支持VDI (virtual desktops)等类型的使用,具体位置为“Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\Domain member: Disable machine account password changes”。

0x04 修改主机账号的委派设置权限制作后门

在我的另外一篇文章《利用域委派获取域管理权限》中,“样例4:一个主机账号被设置了约束性委派”,演示了使用主机账号的口令散列值和约束性委派获取域管理员权限的过程。前提条件为:主机账号的口令散列值和委派(约束性和非约束性均可)。

如果我们在域内有多个稳定的控制点,且获取了当前系统的SYSTEM权限,则随时可获取当前主机的主机账号(演示中的账号为win7x86cn$)口令散列值,满足了第1个条件;如果将该win7x86cn$账号的SeEnableDelegationPrivilege权限赋予本机的低权限登录域用户(eviluser),则通过eviluser用户随时可更改win7x86cn$账号的委派设置,从而可满足第2个条件。

首先演示SeEnableDelegationPrivilege权限赋予过程及委派设置过程。

SeEnableDelegationPrivilege权限很特殊,设置方法为修改GPO策略文件,位置为域服务器中C:\Windows\SYSVOL\sysvol\testlab.com\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf文件。这里有关于SeEnableDelegationPrivilege更详细的介绍。

上图中添加eviluser具备SeEnableDelegationPrivilege权限,则eviluser可修改域内所有用户的委派设置。下图是测试在eviluser的登录会话中修改win7x86cn$账号的委派设置。

上图首先查看了win7x86cn这个账号的委派设置情况,标红的useraccountcontrol表示没有设置委派,中间使用Set-DomainObject进行委派设置,16777216表示设置TRUSTED_TO_AUTH_FOR_DELEGATION,通过Get-DomainObject查询设置后的结果,有了msds-allowedtodelegatedto选项,且useraccountcontrol发生了变更。

下面演示使用设置委派后的win7x86cn、口令散列值进行“样例4”中的测试。

上图为使用win7x86cn的NTLM,向域服务器请求win7x86cn账号的TGT票据。

上图为使用win7x86cn的TGT,在委派被设置的基础上,向服务器申请访问WIN-Q1C8HBI6G87服务器CIFS服务的TGS票据,访问权限为administrator@testlab.com。

上图为使用mimikatz将获取的TGS票据注入当前会话,并查看内存中的票据信息。

直接查看WIN-Q1C8HBI6G87服务器的C盘目录,能成功访问,则表示获取了administrator@testlab.com权限。

0x05 安全应对此类后门的策略

  1. 通过域的组策略强制设置主机账号的最长有效期为30天;
  2. 保护{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf文件、即关键组策略的完整性;
  3. 高权限的用户,设置不能被委派,如图所示。

5. 主机账号需设置委派时,只能设置为约束性委派。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

HTTP Basic Authentication验证WCF Data Service

WCF Data Service是OData协议,也是RESTFul Service的一种,上篇文章已经介绍了HTTP Basic Authentication...

21980
来自专栏数据库新发现

Oracle诊断案例-SGA与Swap之二

案例描述: 这是一个大型生产系统 问题出现时系统累计大量用户进程 用户请求得不到及时响应,新的进程不断尝试建立连接 连接数很快被用完 数据库版本:9.2.0...

11020
来自专栏FreeBuf

远程RPC溢出EXP编写实战之MS06-040

0x01 前言 MS06-040算是个比较老的洞了,在当年影响十分之广,基本上Microsoft大部分操作系统都受到了影响,威力不亚于17年爆出的”永恒之蓝”漏...

355100
来自专栏Kubernetes

原 深入分析Kubernetes Sche

22540
来自专栏Golang语言社区

阅读源代码的姿势:以 go-restful 为例

一般初学者确定一个方向,比如web 后端、前端等,会选择一门编程语言深入下去,比如后端java、python、go等。通过项目不断练习编程语言和编程思维,知道如...

20130
来自专栏安恒网络空间安全讲武堂

赛前福利①最新2018HITB国际赛writeup

FIRST 距离“西湖论剑杯”全国大学生网络空间安全技能大赛只有10天啦! 要拿大奖、赢offer,那必须得来点赛前练习定定心啊~这不,讲武堂就拿到了2018H...

49250
来自专栏草根专栏

从头编写 asp.net core 2.0 web api 基础框架 (3)

Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-...

52670
来自专栏Kubernetes

cluster-proportional-autoscaler源码分析及如何解决KubeDNS性能瓶颈

Author: xidianwangtao@gmail.com 工作机制 cluster-proportional-autoscaler是kubernetes的...

620100
来自专栏大内老A

Windows安全认证是如何进行的?[Kerberos篇]

最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证、非对称加密、数字证书、数字签名、TLS/SSL、WS-Security等。如果时...

25270
来自专栏Kubernetes

深度剖析Kubernetes动态准入控制之Initializers

Author: xidianwangtao@gmail.com Admission Controll的最佳配置 配置过kube-apiserver的同学一...

558110

扫码关注云+社区

领取腾讯云代金券