Windows域环境与安全-难搞的本地管理员密码

@xuing  July 7, 2021
本文首发于 安天垂直响应服务平台,转载需授权。

​ 每台Windows主机有一个内置的Administrator账户以及相关联的密码。

​ 大多数组织机构为了安全,可能都会要求更改密码,虽然这种方法的效果并不尽如人意。

​ 一种常见的做法是利用组策略去批量设置工作站的本地Administrator密码。

​ 但是这样又会出现另一个问题,那就是所有的电脑都会有相同的本地Administrator密码。也就是说,如果获取了一个系统的Administrator认证凭据,黑客就可以获取他们所有机器的管理权限。

​ 解决这个问题之前我们先来看看难搞的本地管理员密码解决方案的演变历史,主要有以下三种:

  1. 在SYSVOL中配置脚本
  2. Group Policy Preferences
  3. Local Administrator Password Solution

在SYSVOL中配置脚本

​ SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。

​ SYSVOL包括登录脚本,组策略数据,以及其他域控所需要的域数据,这是因为SYSVOL能在所有域控里进行自动同步和共享。

在域中,存在一个默认的共享路径:

\\<DOMAIN>\SYSVOL\<DOMAIN>\

所有域内主机都能访问,里面保存组策略相关数据,包含登录脚本配置文件等

例如,测试主机所在域为test.local,可访问共享文件夹\\test.local\SYSVOL\test.local,如下图

Alt text

通过vbs脚本进行本地管理员密码设置

​ 早期如Server2003,想要批量修改域内主机本地管理员密码,常常通过配置组策略执行vbs脚本的方式。

​ 因其会存放在SYSVOL中,导致任何域用户都能读取该vbs脚本,也就能够获取脚本中保存的明文密码

现在看来,这是在微软没有推出正式的解决方案背景下,最容易想到的解决方案了吧。

Group Policy Preferences

在2006年,微软收购了桌面标准的“PolicyMaker”,并重新借此与win2008发布了GPP(策略组首选项)。

常见的组策略首选项列举如下:

映射驱动(Drives.xml)
创建本地用户
数据源(DataSources.xml)
打印机配置(Printers.xml)
创建/更新服务(Services.xml)
计划任务(ScheduledTasks.xml)
更改本地Administrator密码

设置的操作界面,如下图

image-20210607161027318

这个是Server2019的截图,可以看到右侧的本地用户和组的界面颇有年代感(XP风格)了。

MS14-025

​ 那么问题来了,密码是如何存储的呢,答案是使用一个固定的AES秘钥,加密后的密码还是存放在SYSVOL当中,以XML的方式。似乎比之前的方案更安全了?然而,请看下图:

image-20210607161339580

​ 微软在MSDN上发布了AES的私钥,微软公布AES秘钥的原因没有找到可靠来源,但写死的AES秘钥即使不公开,也会被逆向人员通过动态或静态等各种方式破解出来。

​ 也就是说,当黑客可以访问XML文件时,他能利用AES私钥解密GPP密码。

下图是配置了内置密码的策略XML文件

image-20210607163025848

​ 针对该密码的解密,网络上有大量的现成脚本,这里不过多赘述。

​ 如下图使用PowerSploit脚本解密后可得到原始密码

image-20210607163110372

解决方案

​ 2014年5月13日,微软发布了MS14-025的补丁KB2962486。

​ 在修复了该漏洞的机器上,尝试设置密码类字段(所有包含Cpassword字段的组策略均有相同的安全风险),会遇到下图提示并中断操作。

image-20210607162211101

Local Administrator Password Solution

2015年3月1号微软发布了LAPS(Local Administrator Password Solution)用来集中化管理域内主机本地管理员的口令。通过LAPS制作策略,强制管理域内主机的本地管理员口令,防止恶意攻击者利用本地管理员口令进行域内横向攻击。该方案包含客户端和服务器,分别安装于域内主机和域服务器。LAPS主要功能包括:

  • 根据策略搜集本地管理员账号,设置符合密码策略的随机口令;
  • 将新的口令上传到域服务器,并储存在域内对应的主机账号的属性中;
  • 将新的过期日期更新到主机账号属性;
  • 检查本地管理员账号的口令是否过期,如果口令过期,会产生新的随机口令,并更新AD中主机账号的相关属性。

不过如果配置不当,我们还是可以在域内一台普通主机,查看域内其他主机本地管理员账号的密码。┓( ´∀` )┏ 这里就不展开了。

参考链接

域渗透——利用SYSVOL还原组策略中保存的密码

《内网安全攻防 渗透测试实战指南》


添加新评论

  1. hxzy

    多年以后~
    爷爷,你追更的博客终于更新了~

    Reply
    1. @hxzy

      嘤嘤嘤

      Reply