域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(1)

翻译:hac425

预估稿费:200RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言


现在攻击者有很多方法可以用来获取域管理员权限.这篇文章的目的是介绍一些当前较受欢迎的方式。这里所介绍的技术的基本点是攻击者已经拿到了一台域中的服务器,并已获得域用户凭据。

对大多数企业来说有一个不幸的现实:对于一个攻击者来说,从域用户权限提升到域管理员权限往往不需要太长的时间。为什么会这样呢?本文会介绍其中使用的一些技巧.

现在针对一个企业,组织的攻击越来越频繁通过一些钓鱼手法来开始.比如通过发送大量的钓鱼邮件给目标的成员来在目标网络的机器上执行代码.一旦攻击者能够在企业内部网络中执行代码,攻击者要做的第一件事情就是尽可能的搜集有用的信息,比如网络拓扑,一些配置文件,账号密码等等,然后使用这些信息来提升权限,维持访问,最后当然是最重要的一步,获取目标的核心数据.虽然具体到每次的攻击可能其攻击的具体细节不同,但是他们一般都会有以下的几个大步骤:

攻击者在访问该XML文件后,可以使用AES私钥来解密文件中加密的GPP密码。除此之外,我们可以使用PowerSploit其中的一个功能 Get-GPPPassword来解密那个被加密的秘钥。下面是一个使用示例

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(2)

当然其他文件类型也可能会包含一些密码(通常是明文),如VBS和bat文件中,这就需要我们做好信息搜集了.

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(3)

你可能会认为只要打上一个防止管理员在Group Policy Preferences中放置凭证的补丁就能够解决这个问题,但我在对客户进行安全评估的时候依旧会在SYSVOL中搜索凭据。

解决方案:

在每台计算机上安装KB2962486补丁来管理管理GPO以防止在Group Policy Preferences中放置新的凭据

删除现有的包含SYSVOL密码的GPP XML文件。

不要将密码保存在所有经过验证的用户都可以访问的文件中。

关于这种攻击的的更多信息可以在这篇文章中找到: Finding Passwords in SYSVOL & Exploiting Group Policy Preferences.

2.在没打补丁的域控制器上利用MS14-068漏洞

虽然这个漏洞已经过了很久了,但是这并不意味着所有的域控制器都已经打上了补丁。大多数组织在该漏洞爆出来后都为域控制器打上了补丁但这并不意味着之后的每一台新的的域控制器也都被打上了补丁. 感谢Gavin Millard(@gmillard在Twitter上),我们有一个比较好的图来诠释这个漏洞

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(4)

简单地说,利用MS14-068漏洞,只需不到5分钟就能使攻击者重新写一个有效的Kerberos TGT身份验证票据,使他们可以直接获取域管理员权限。如上图所示,只要在一张普通的机票上写上“飞行员”,然后在登机,你就可以享受飞行员的待遇了......

首次公布的针对MS14-068漏洞的exploit 在漏洞补丁被发布的第二个星期被发布.该exploit由Sylvain Monné (@BiDOrD) 编写,exploit的名字为PyKEK。PyKEK是一个可以运行在任何支持python并且能与域控制器交互的机器上的python脚本.脚本执行完毕后会生成一个ccache文件。然后使用Mimikatz把刚才PyKEK生成的ccache文件注入TGT到内存中,攻击者就可以拿到一个可以被当做域管理员的票据了!使用这张票据,攻击者就可以访问域控制器上的admin$ 共享了.下面是整个利用过程.

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(5)

缓解:

打上补丁.

利用MS14-068漏洞的过程:

1.以标准用户申请一个没有PAC的Kerberos TGT身份验证票证,域控制器会返回一个无PAC的TGT.

2.不使用key生成一个伪造的PAC,所以产生的PAC会使用当前域用户的密码数据来进行MD5而不是HMAC_MD5“签名”。

3.发送 PAC-less TGT和伪造的PAC给域控制器,作为TGS服务票据请求的数据的一部分。

4.之后域控制器会被这个迷惑,它会丢弃由用户发送的PAC-less TGT,并且创建一个新的TGT然后在它自己的授权数据中插入伪造的PAC ,接着发送该TGT给用户。

5.这个拥有伪造PAC的TGT使用户对于一个有漏洞的DC而言成为了一个域管理员。

Benjamin Delpy(Mimikatz的作者)写了一个MS14-068漏洞利用工具他的名称为Kekeo。这个工具的效果比pykek要好.下面是一个示范>

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(6)

缓解措施:

1.运行DCPromo进程前检测是否安装了KB3011780补丁.使用powershell快速检测:get-hotfix 3011780

2.此外,实施自动化的过程,确保强制安装严重漏洞的补丁

3.离线破解 Kerberos TGS Service Ticket( Kerberoast)

Kerberoast可以作为一种从Active Directory中以一个普通用户权限提取服务帐户凭据的有效的方法,而且不需要发送任何数据包到目标系统。因为人们往往会使用弱口令,因而这种攻击是有效的。

Note: 使用这种方式,不需要提升权限,也不会向目标发送流量.

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(7)

针对这种攻击的详细情况:https://files.sans.org/summit/hackfest2014/PDFs/Kicking the Guard Dog of Hades - Attacking Microsoft Kerberos - Tim Medin(1).pdf

工具:https://github.com/nidem/kerberoast

缓解措施:

1.域管理员的账号不能以任何形式在普通主机上登录.

2.所以机器的本地管理员账号密码要复杂,随机.

访问域数据库文件(NTDS.DIT)

域数据库文件(NTDS.DIT)包含了域中所有对象的信息,其中我们最为关注的是其中还包含了所有用户的账号和密码的hash值.NTDS.DIT文件只有能登录到域控制器上的用户才有可能访问得到.显然保护该文件非常重要.

下面是一些不需要域管理员权限来获取NTDS.DIT文件的方法.

找NTDS.DIT文件备份位置

在成员服务器上找NTDS.DIT文件

拿到了虚拟机宿主机的权限,把虚拟机中的域控制器中的 NTDS.DIT拷贝出来

域中有很多的组,其中能登录到域控制器的组有

Enterprise Admins (member of the domain Administrators group in every domain in the forest)

Domain Admins (member of the domain Administrators group)

Administrators

Backup Operators

Account Operators

Print Operators

这意味着如果我们能拿到一个位于这些组中的用户的账号密码我们就可以登录到域控制器了.

缓解措施:

限制能登录到域控制器的用户和组

限制拥有完全域权限的用户

保护NTDS.DIT文件.

当我们有了域管理员权限之后......


当我们拿到域管理员权限后,要做的最重要的事就是 dump所有域用户的凭证.

使用mimikatz dump所有域凭据

mimikatz可以在域控制器上dump所有域凭据

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(8)

Dump LSASS memory with Mimikatz (拿到域管理员凭据)

mimikatz可以被用来dump LSASS然后从LSASS.dmp 文件中导出所有已经登录了的账号密码.在域控制器中这通常会得到域管理员的凭据.

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(9)

使用ntdsutil拿到NTDS.dit文件

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(10)

从NTDS.dit文件中dump用户凭据

一旦攻击者从注册表中拿到了 system hive(reg save hklm\system c:\system.hive)和NTDS.dit文件,就意味着他拿到了域中的所有凭据.

域控给成员添加管理员权限(在域中获取域管理员权限的多种方法及一些缓解措施)(11)

,