域渗透之DCShadow攻击

目录

DCShadow 攻击刨析

DCShadow 攻击流程

 0x01 注册伪造的DC

0x02 注册的DC被其他DC认可,能够参与域复制 

0x03 注入恶意对象 

0x04 整体过程

DCShadow攻击与利用 

利用方式一(修改数据):

利用方式二(添加域管):

利用方式三(添加sidhistory 后门):

 防御方法


DCShadow 攻击刨析

2018年1月24日,Benjamin Delpy(神器 Mimikatz 的作者)和 Vincent Le Toux 在 BlueHat IL 会议期间公布了针对域活动目录的一种新型攻击技术 DCShadow。

在具备域管理员权限条件下,攻击者可以创建伪造的域控制器,将预先设定的对象或对象属性复制到正在运行域服务器中。

DCSync 从域服务器复制出东西,DCShadow 是将数据复制至域服务器。

Luc Delsalle 对这种技术进行了验证和详细的描述,并就红蓝对抗中蓝队对抗此种攻击技术的缺陷和补救方法。

从 DCShadow 目前展示的功能来看,主要只能用于红蓝对抗的隐蔽后门。但是 DCShadow 第一次澄清和实现了伪造一个 DC 的最小需求合集,这个贡献非常大。以 前很多攻击方法都卡在不能伪造域服务器,例如 MS15-011 和 MS15-014 等,有了 DCShadow 的基础,相信将来会有很多新的攻击方法。

DCShadow 攻击流程

根据 Luc Delsalle 的描述,DCShadow 的攻击过程包括 3 个主要个步骤:

1、在目标域的 AD 活动目录注册一个伪造的 DC 中;

2、使伪造的 DC 被其他的 DC 认可,能够参与域复制 ;

3、强制触发域复制,将指定的新对象或修改后的对象属性同步复制到其他 DC 中;

 0x01 注册伪造的DC

一台机器要想注册成为域中的一台DC服务器,需要在域的活动目录中注册一个NTDS-DSA(nTDSDSA)类对象。注册的位置为CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=adsec,DC=com,如图所示。


图中adsec.com域有3台域服务器,分别是LABDC01、RESDC01及WIN2016-DC01,标红的正是我们实验环境的域服务器。我们测试的机器为Win7X86cn04,测试成功的则会生成一个新的NTDS-DSA(nTDSDSA)类对象,如下图所示。这里需要说明的是,工具本身测试成功后,不会留下这些,这里为了表述更清晰,对工具源码稍作了改动,将注册的结果保留了下来,以便大家分析。

 

需要注意的是,不能通过LDAP协议创建nTDSDSA对象,而是RPC方法。

查看CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=adsec,DC=com的安全描述符,可知必须有域管理员权限才具备写权限,如下图。所以发动DCShadow攻击首先必须具备域管理员权限。

不过普通域用户如果被赋予了完全权限,则普通用户也可以进行修改 

0x02 注册的DC被其他DC认可,能够参与域复制 

个刚注册的DC要想被域中其他DC认可,能够参与域复制,需要满足3个条件:


这台伪造DC具备认证凭证,能认证到域,即有域内账号,可以使用机器账号,实验环境中为WIN7X86CN04$;
伪造DC能认证其他DC来访问的账号,如果我们给WIN7X86CN04$添加SPN,则可以实现这一点。关键是需要添加哪些SPN,DCShadow的一个大贡献是找到了SPN的最小合集,只需要2个即可:DRS服务(GUID为E3514235–4B06–11D1-AB04–00C04FC2DCD2)和GS(Global Catalog)服务,如下图。

运行DRS服务,最少需要实现IDL_DRSBind、IDL_DRSUnbind、IDL_DRSGetNCChanges、IDL_DRSUpdateRefs这4个RPC接口,以便其他DC能够通过RPC获取需要复制的数据。Mimikatz工具的最新版已经集成了这4个接口。

信任新的域控制器

如前文所述,DCShadow攻击需要在Configuration区中添加新的nTDSDSA对象,以将其注册为复制过程中的新成员。然而,单单添加这个对象并不足以让我们的恶意服务器启动复制过程。实际上,为了成为复制过程的一员,我们需要满足两个前提条件:

1、被其他服务器信任,也就是说我们需要拥有有效的身份认证凭据。

2、支持身份认证,以便需要复制数据时其他DC能够连接到我们的恶意服务器。

恶意服务器可以通过有效的计算机账户成为可信的AD服务器。Kerberos SPN属性可以为其他DC提供身份认证支持。因此,每个nTDSDSA对象会通过serverReference属性链接到computer对象。


 虽然理论上我们有可能使用用户账户完成这个任务,但使用计算机账户貌似更加方便,也更为隐蔽。事实上,利用这种方法我们可以实现服务器在DNS环境中的自动注册(这样其他DC就可以定位到我们的资源)、自动设置所需的属性以及自动管理身份认证秘钥。

这样一来,DCShadow就可以使用合法的计算机账户通过其他DC的身份认证。虽然computer对象以及nTDSDSA对象同样可以帮我们通过其他DC的身份认证,但我们还是需要让其他DC连接到恶意服务器,从该服务器上复制恶意信息。

我们可以使用Kerveros Service Principal Name(SPN,服务主体名称)来满足最后一个条件。许多文章中已经介绍过SPN方面的内容,Kerberos服务(KDC)需要使用SPN所关联的计算机账户来加密Kerberos票据。对我们而言,DCShadow可以在合法的computer对象上添加SPN,以通过身份认证。

在这方面工作上,Benjamin Delpy以及Vincent Le Toux发挥了非常关键的作用,他们找到了复制过程中所需的最小SPN集合。根据他们的研究成果,我们只需要两个SPN就可以让其他DC连接到恶意服务器:

1、DRS服务类(非常有名的GUID:E3514235–4B06–11D1-AB04–00C04FC2DCD2);

2、Global Catalog服务类(包含“GC”字符串)。

比如,我们的恶意服务器(在alsid.corp域中DSA GUID为8515DDE8–1CE8–44E5–9C34–8A187C454208的roguedc)所需的两个SPN如下所示:


发起攻击时,DCShadow会将这两个SPN设置为目标计算机账户。

0x03 注入恶意对象 

根据 MS-DRSR规范中的描述,为了提供恶意数据,恶意域控制器必须实现某些RPC函数,即:IDL_DRSBind、IDL_DRSUnbind、IDL_DRSGetNCChanges以及IDL_DRSUpdateRefs。微软在公开规范文档中提供了这类IDL函数,现在Benjamin Delpy开发的Mimikatz工具中已经集成了这些函数。

DCShadow攻击的最后一个步骤就是启动复制过程。为了完成这一任务,我们可以采用如下两种策略:

1、等待其他DC上的KCC进程来启动复制过程(需要15分钟的延迟);

2、调用DRSReplicaAdd RPC函数启动复制过程。这样可以修改repsTo属性的内容,马上启动数据复制过程。


使用IDL_DRSReplicaAdd RPC发起复制过程是DCShadow攻击的最后一个步骤,这样我们就可以将任意数据注入到目标AD基础架构中。完成该任务后,想在域环境中添加任何后门就易如反掌(比如在管理员组中添加新成员,或者在可控用户账户上设置SID历史记录)。

0x04 整体过程

DCShadow整体攻击过程如下图所示

DCShadow攻击与利用 

一、原理

我们知道可以利用Mimikatz远程从DC中复制数据,即Dcsync; 类似的dcshadow可以伪装成DC,让正常DC通过伪造的DC中复制数据。

步骤

1、通过dcshadow更改配置架构和注册SPN值,将我们的服务器注册为Active Directory中的DC
2、在我们伪造的DC上更改数据,并利用域复制将数据同步到正常DC上。

 

 二:实验环境

测试环境:Dc机器2008r2 x64、伪装机器:win7 x64
准备条件:
     我们获得了win7 管理员权限。
     我们需要域管理员权限的用户。

1、在win7 中利用psexec 调用cmd:

此时我们已经在win7机器上打开了Mimikatz。

2、我们获得了域管用户,在win7 中利用psexec 调用cmd即可:

 此时我们已经以域管理员的身份打开了Mimikatz。

利用方式一(修改数据):

在win7机器上执行:

lsadump::dcshadow /object:CN=dc,CN=Users,DC=seven,DC=com /attribute:description /value:“anquanke-test2018!!”

 

 此时我们在win7上伪造了DC并修改了数据

接着我们在域管理员身份的cmd窗口运行:

lsadump::dcshadow /push

此时我们在域控执行了域复制。

在dc2008上查看结果: 

利用方式二(添加域管):

在win7机器上执行:

lsadump::dcshadow /object:CN=dc,CN=Users,DC=seven,DC=com /attribute:primarygroupid/value:512

 

这一步我们在win7伪造了DC,并添加了一个域管理员用户。

接着我们在域管理员身份的cmd窗口运行:

lsadump::dcshadow /push

执行域复制后成功添加域管如下图:

利用方式三(添加sidhistory 后门):

利用条件:我们需要知道域管administrator sid

域管cmd窗口运行查看administrator sid:

whoami /all 

 

接着在win7机器上执行:

lsadump::dcshadow /object:CN=dc,CN=Users,DC=seven,DC=com /attribute:sidhistory /value:S-1-5-21-1900941692-2128706383-2830697502-500

 

这一步我们在win7伪造了DC,并添加了一个sidhistory 后门。

接着我们在域管理员身份的cmd窗口运行:

lsadump::dcshadow /push

 执行域复制成功添加sidhistory 后门。

使用dc用户建立ipc链接后可成功访问域控:

 防御方法

本文介绍的DCShadow并不是漏洞,而是将非法数据注入AD基础架构的一种新型方法。不具备高权限的攻击者无法使用该方法来提升权限,也无法获取目标AD的管理访问权限。我们需要明确的一条底线是:如果我们的AD环境已经正确配置过并且处于安全状态,那么我们不需要采取任何紧急行动来进一步防护。面对DCShadow技术,我们不需要打上紧急补丁,也不需要应用特殊配置,这一点与WannaCry/NotPetya事件响应处置过程有所不同。由于DCShadow不是漏洞,因此微软也不会发布更新来封堵该方法。如果想对付这种技术则需要改变AD的现有工作方式,这样一来也会给系统运行带来不便。高权限的攻击者可以借助该方法悄悄发起攻击,因此我们应该更新检测策略来检测这种攻击。传统的事件日志分析方法可能无法检测到DCShadow攻击活动,为了有效检测这类行为,我们需要持续监视AD数据库,隔离非法的更改操作。

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怰月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值