基于LAPS的隐蔽后门(三)

阅读量412973

|评论1

|

发布时间 : 2018-06-07 17:05:49

0x01 前言 

域网络中,主机的本地管理员很少被使用,但是给网络安全却带来了很大的风险。攻击者如果获取了本地管理员的NTLM,不必破解,即可通过PTH攻击域内其他主机。为了解决这个问题,微软在2014年发布了KB2871997和KB2928120两个补丁,PTH方式失效。但是如果域内主机的本地管理员的口令比较简单,则可能被破解,口令仍然可被用于口令猜解或爆破的字典库、IPC或远程桌面登录等。

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

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

LAPS提供了GUI和AdmPwd.PS脚本模块2种管理工具。安装完成LAPS后,需要使用AdmPwd.PS模块的Set-AdmPwdComputerSelfPermission命令,赋予某个OU或整个域内的主机具有设置自身属性的权限,图一所示,这是为了每个主机对象能自动存储口令明和口令过期时间。

IMG_256

图一 设置OU属性

在域服务器中,可通过GUI直接查看指定主机中本地管理员的口令明文,图二所示。有关LAPS的功能和使用介绍,请看参考文献[1]。

IMG_256

图二 LAPS UI方式查看口令明文及过期时间

 

0x02 服务器端的隐蔽后门

LAPS在域内的主机账号属性中增加了ms-Mcs-AdmPwd和ms-Mcs-AdmPwdExpirationTime两个属性。第1个属性存储本地管理员的口令明文,第2个属性存储口令的过期时间。这里也许有读者会疑问,为什么会储存明文口令,而不是某种密文形式的口令。

AdmPwd.PS模块的Find-AdmPwdExtendedRights命令,可检测域内哪些账号或组具备读取ms-Mcs-AdmPwd属性的权限。

在检测某个特定的域对象的AD权限时,有2个事情需要考虑:一是哪些域内主体可以赋予自身或其他域内主体这项AD权限;二是哪些已有的ACE包含了这项AD权限,这些ACE应用在哪些对象上。

在做第1个事情的检查时,Find-AdmPwdExtendedRights没有检测安全描述符的控制权。在第2个事情的检查中,该接口通过4个方面来决定结果:

  • AD对象类型;
  • ACE访问掩码;
  • ACE对象类型;
  • ACE继承的对象类型。

在AD对象类型检测时,Find-AdmPwdExtendedRights仅仅分析应用到OU或计算机的ACE,所有其他的容器对象都忽略,使用Set-AdmPwdComputerSelfPermission进行权限设置时的参数也是OU类型。攻击者可以在非OU容器对象上赋予自身读取ms-Mcs-AdmPwd属性的权限。系统默认的Computers(CN=Computers)就是一个非OU的Container容器,除域服务器之外的所有域内主机默认会被加入该容器。Find-AdmPwdExtendedRights不会分析该容器,所以攻击者如果在该容器上给自己添加权限(权限会通过继承方式到达主机对象),则工具不会检测出。

msImaging-PSPs类型容器不在检测分析范围,如果将计算机对象放至该类型的容器中,则可以规避被检测。图三是msImaging-PSPs类型的对象。

IMG_256

图三 msImaging-PSPs类型对象

如果赋予某个低权限用户关于该类型容器的完全权限,则可以控制容器中计算机的属性,包括ms-Mcs-AdmPwd属性。实验中,win7x86user是域内普通用户,NotOu为一个msImaging-PSPs类型容器,其中有一台机器win7x86cn,在NotOu上赋予了win7x86user对该容器的全部权限,容器中的对象win7x86cn继承了所有权限,见图四。但LAPS的Find-AdmPwdExtendedRights命令没有检测到,见图五。

win7x86cn

图四 赋予win7x86user完全控制权

win7x86user-pwd

图五 Find-AdmPwdExtendedRights检测结果

上面的测试和实验表明,在安装有LAPS环境的域网络中,可以有效利用LAPS作为一个隐蔽的后门,赋予低权限用户随时读取高权限主机本地管理员口令明文的权限,从而快速获取高权限主机的控制权,进一步通过散列值获取等方式获取域控制权限。当然这一切的前提是已经获取了域控制权限。

 

0x03 客户端的隐蔽后门

LAPS在客户端仅仅部署了一个AdmPwd.dll文件,用于响应来自域服务器的密码更改策略,然后将口令明文以Kerberos加密方式存储至服务器中对应的主机账号的ms-Mcs-AdmPwd属性。LAPS起源于一个公开项目,通过对公开项目源码的分析,可以使用手动的方式模拟口令修改过程,图六是在客户端系统权限下修改口令并推送至服务器端的测试结果,2个红框表示连续2次修改口令,以进行前后对比。图七表示在服务器端查看连续2次修改口令后的结果,比对图六,结果正确。

IMG_256

图六 客户端系统权限下2次修改口令

图七 在服务器端使用LAPS UI查看2次修改口令后的结果

客户端在使用AdmPwd.dll文件时,Windows并没有对该文件进行完整性校验或者签名验证。因此一个被篡改过的DLL一样可以正常使用。所以如果攻击者根据公开源码编译一个功能类似的DLL,同时在DLL中添加部分功能,将修改后的口令明文写到指定位置。这可使攻击者随时都能获取口令明文,从而具备对客户端的完全控制权限。

根据LAPS的安装介绍说明,在客户端上安装有3种方式,一是客户端安装LAPS.x64.msi或LAPS.x86.msi;二是在客户端使用regsvr32.exe AdmPwd.dll安装。

如果以第二种方式在客户端安装LAPS,且AdmPwd.dll的目录为普通用户的可写目录,则普通用户可直接用伪造的DLL文件替换原来真实的DLL文件。可获取本地管理员的口令明文,获取本机的完全控制权,实现权限提升。

 

0x04 小结

LAPS是微软为了加强本地管理员的口令管理,提高网络安全性而部署的解决方案,但是方案中的一些瑕疵导致LAPS可以变成攻击者制作隐蔽后门的工具。不仅LAPS如此,许多其他软件亦是如此。随着产品的增多,安全性得到提升的同时,暴露给攻击者的攻击面同时也得到了扩大。安全之路任重道远。

 

参考文献

  1. https://flamingkeys.com//deploying-the-local-administrator-password-solution-part-1/
  2. https://blog.netspi.com/running-laps-around-cleartext-passwords/
  3. https://adsecurity.org/?p=1790
  4. www.harmj0y.net/blog/powershell/running-laps-with-powerview/

本文由三体虫子原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/147288

安全KER - 有思想的安全新媒体

分享到:微信
+11赞
收藏
三体虫子
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66