本文原创作者:丝绸之路
今年的 DerbyCON 5.0 以“团结”为主题,汇聚了安全行业的专家、爱好者以及感兴趣的人前往参加,地点位于美国肯塔基州路易斯维尔市区凯悦酒店,培训时间为9月23、24两日,大会于9月25-27日举办,今年与往届一样涌现了大量新鲜的、令人兴奋的议题。
本文将讲述当攻击者拥有了域管理员权限后如何将权限持久化的方法。
其中第一部分在DEFCON 23(2015)有过演示。重点介绍了DSRM密码同步方法以及如何使用DSRM账户密码远程登录DC。第二部分是此议题的第二个版本也就是在DerbyCON中所演示的内容,重点讲述了如何使用DSRM帐户密码进行Hash传递攻击。
Part 1 DEFCON(2015)
0×00 目录还原模式账户
每一个域控制器都有一个本地管理员账户其实也就是所谓的目录服务还原模式(DSRM)账户。DSRM的密码是在DC安装的时候就需要设置,并且很少会被重置。修改DSRM密码最基本的方法是在DC上运行ntdsutil命令行工具。
在安装了 KB961320 补丁的Windows Server 2008以及之后发布的Windows Server中,开始支持在DC上使用指定的域帐户同步DSRM密码。但是这个同步操作是一次性的,也就是说你必须在每次更改了DSRM密码后进行一次密码同步。
更改DSRM账户密码:
具体的更改方法可以查看微软官方的 说明 。
NTDSUTIL set dsrm password reset password on server null <PASSWORD> Q Q
使用域帐户同步DSRM账户密码:
NTDSUTIL SET DSRM PASSWORD SYNC FROM DOMAIN ACCOUNT <your user here> Q Q
0×01 使用DSRM作为活动目录的后门
有关DSRM密码的一个有意思的事情是这个DSRM账户实际上就是“Administrator”。这就意味着一旦攻击者有了DC的DSRM密码,就有可能使用这个账户通过网络作为一个本地管理员登录到DC上。
我们可以使用法国佬神器(mimikatz)来确认DSRM账号就是本地管理员帐户。首先,使用一个已知的密码创建一个AD用户(DSRMTest),之后,使用这个域账户进行DSRM密码同步操作。
DSRMTest NTLM Password Hash: 2b391dfc6690cc38547d74b8bd8a5b49 Administrator (500) Local Account NTLM Password Hash: 2b391dfc6690cc38547d74b8bd8a5b49
下面两幅图展示了DC的本地管理员帐户也就是“Administrator”和域用户帐户DSRMTest拥有相同的密码Hash值。
0×02 使用DSRM凭证
一旦知道了DSRM账户(也就是DC的本地管理员账户)的密码,就可以使用如下技巧进行进一步的攻击。
1.重启并进入目录服务还原模式(bcdedit /set safeboot dsrepair) 2.无需重启访问DSRM(Windows Server 2008之后有效): a.设置注册表DsrmAdminLogonBehavior键的值为 1 b.停止活动目录服务 c.使用DSRM凭证登录到控制台 3.无需重启访问DSRM(Windows Server 2008之后有效): a.设置注册表DsrmAdminLogonBehavior键的值为 2 b.使用DSRM凭证登录到控制台
可以使用PowerShell设置上述注册表键值:New-ItemProperty “HKLM:/System/CurrentControlSet/Control/Lsa/” -Name “DsrmAdminLogonBehavior” -Value 2 -PropertyType DWORD
注册表路径是HKLM/System/CurrentControlSet/Control/Lsa/DSRMAdminLogonBehavior(系统默认是不存在的,请手动添加),其可能的值如下:
0(默认值):只有当DC重启进入DSRM时,你才能使用DSRM管理员帐户。 1:只有当本地AD DS服务停止时,你才能使用DSRM管理员帐户登录。 2:无论哪一种情况,你都可以使用DSRM管理员帐户登录。(并不推荐此设置,因为密码策略并不会应用到DSRM的管理员帐户)
0×03 通过网络使用DSRM凭证
在Windows 2000和活动目录发布的时候,DSRM被限制使用控制台登录。不过现在有很多办法可以登录到控制台:
1.虚拟化客户端 a.VMWare Remote Console (TCP 903) b.Hyper-V VM Connection (TCP 5900) 2.Lights Out等 3.网络KVM 4.远程桌面客户端,可以使用“mstsc /console”或者“mstsc /admin”,Windows Server 2012 R2似乎拒绝使用DSRM登录到RDP的控制台。
一旦使用DC本地的DSRM账户登录后,我们可以确认当前账户就是DC的本地管理员账户,而不是一个域帐户。
进一步证明这不是一个域帐户:
0×04 检测方法
1.监控与DSRM密码重置和使用相关的事件日志 4794:试图设置目录服务还原模式管理员密码。 2.监控如下注册表位置的值,当值为 1 或 2时,应引起警示 HKLM/System/CurrentControlSet/Control/Lsa/DSRMAdminLogonBehavior
Part 2 DerbyCON (2015)
0×00 使用DSRM凭证的一种更为高级的方法
正如第一部分所述,DSRM账户实际上是一个可用的本地管理员账户,并且可以通过网络验证并登录到DC中,当然,要确保DsrmAdminLogonBehavior注册表键的值为 2。另外,攻击者并不需要知道DSRM账户的真实密码,只需要知道这个账户的HASH值。这就意味着一旦攻击者有了DSRM账户的HASH值,就可以通过网络使用“HASH传递攻击”方式,并以一个管理员的身份访问DC。这个方法在Windows Server 2008 R2 和Windows Server 2012 R2的域控中已经测试成功了。
Mimikatz “privilege::debug” “sekurlsa::pth /domain:ADSDC03 /user:Administrator /ntlm:7c08d63a2f48f045971bc2236ed3f3ac” exit
执行后如下图所示:
如上图所示,我们已经获得了域控制器的文件系统的访问权限。
0×01 结论
如果一个攻击者可以得到运行在Windows Server 2008 R2 或 Windows Server 2012 R2(DsrmAdminLogonBehavior 的值为 2)的域控的DSRM账户密码或者HASH值,那么DSRM账户就可以被用于“HASH传递攻击”方式。这就使得攻击者可以保持域控制器的管理员权限,即使所有的域用户和计算机密码被修改了。
0×02 缓解措施
对于这个问题的唯一有效的缓解措施就是确保每一台域控制器的DSRM账户密码是唯一的并且定期修改此密码。同时,确保注册表DsrmAdminLogonBehavior的值不为2,最好将其直接删除或者设置其值为1或0。
0×03 译者总结
经过译者对相关技术资料的查阅以及亲自本地搭建域环境测试后,发现此方法的确有效,在具体的渗透中也无需按照上述步骤操作,直接在域控上使用法国佬神器(mimikatz)抓取本地管理员HASH值并修改DsrmAdminLogonBehavior的值为2然后在域的客户机中使用法国佬神器(mimikatz)的pth参数进行HASH传递即可在域的客户机上获取到域控权限。
实际上DSRM已经在AD中存在了很多年了,只是大多数攻击者在进行域渗透时,往往只关注如何通过常规思路拿到域控权限,而很少去思考其他的方法。他们甚至对于AD的诸多特性知之甚少,由此可见,内网渗透也绝不只是敲几行命令那么简单。
参考来源
[1] https://support.microsoft.com/zh-cn/kb/961320
[2] https://support.microsoft.com/en-us/kb/322672
[3] https://technet.microsoft.com/zh-cn/magazine/2007.04.adrecovery.aspx
[4] http://os.51cto.com/art/201107/278089.htm
[5] https://www.derbycon.com/derbycon-2015-schedule-and-abstract/
[6] https://www.defcon.org/html/defcon-23/dc-23-speakers.html#Metcalf
*本文作者:丝绸之路,本文属FreeBuf原创奖励计划文章,未经许可禁止转载。