隐蔽域后门
隐蔽域后门
- 隐藏用户
- 隐蔽程序
- 粘滞键
常见后门方式
隐藏用户
|
|
隐蔽程序
NtGodMode
NtGodMode.exe
上帝之门,不管管理员如何更改口令密码,均能以任意口令登录系统
https://blog.csdn.net/oceanark/article/details/51902042
https://www.jb51.net/article/14702.htm
https://www.52pojie.cn/forum.php?mod=viewthread&tid=19817&page=1
命名管道
命名管道,\Server\PipeName\Path
IP + Port 是常用的远程连接方式命名管道不需要特定的端口,混杂在135端口中。
实现不开端口的情况下登录
粘滞键
五次连续按下 shift
键,会弹出输入法选择器。可以将 cmd
替换输入法,获取 Shell
域内隐蔽后门
目录 ACL
一种基于域内对象 ACL(Access Control Link
)访问控制链的深度隐藏后门。
域网络中,域的组策略和脚本存放在域服务器的 SYSVOL
目录,所有域用户均可自由访问,但只有部分高权限用户才有修改权限。域内账号在登录域时,会查询、 执行(如果有变化)属于自己的域策略、执行脚本。
一定程度上说,控制了 SYSVOL
目录,就有很大概率控制域网络。
如果域中部署了登录日志审计软件,则会严格审计域内高权限账号的登录、使用情况。所以使用高权限用户控制域网络的方式,隐蔽性并不高
一般来说,域策略会强制周期性修改高权限用户的密码,但是对低权限用户来说不一定有这个强制性要求,而且域中往往有很多用户几乎不怎么登录、使用。
如果低权限用户具备 SYSVOL
目录的修改权限,登录域时,因为权限不高,不会被审计软件发现。现在的防护、监控类软件还没有过多关注目录的ACL,因此这种方式是一种很实用的隐蔽后门方式。
使用普通用户 eviluser
登录域客户端 Windows 7
。通过net use连接域服务器,可查看访问服务器共享的目录,但是没有写权限。
通过资源管理工具给 Policies
目录添加了写权限(也可以是完全控制权),并继承给所有子目录和文件
Policies
目录的安全选项卡,eviluser
单独作为权限用户。正常情况下,普通用户都只有 Authenticated users
用户组权限。
服务器中目录的 ACL
权限设置成功后,在原来的 IPC
连接中,普通域用户 eviluser
成功地往 Policies
目录写入 了数据,证明具备了对该目录的写入权限。从而可以修改里面的策略和脚本,一种隐蔽的后门。
这种后门方式,只是演示了 ACL
后门的一种具体形式,因为域中的对象太多,可以操控的 ACL
对象也很多。可以根据自己的需要,灵活选择目标的ACL作为目标进行修改,埋藏后门。
当然关于 ACL
的检测,微软也推出了专门的工具,ACL Scanner
,如果周期性地是用该工具进行检测,还是能检测到这种类型的后门。
白银票据
在 windows
系统中,许多服务以主机账号运行,即许多 ServiceAccount
账号为本机的主机账号,格式为 ComputerName$
。
下表是常见的以主机账号运行的服务。右边一栏中有些有多个服务,例如 WMI
服务包括 HOST
、RPCSS
这 2 个服务,表示访问 WMI
服务同时需要 2 个 TGS
票据
服务名称 | 同时需要的服务 |
---|---|
WMI | HOST、RPCSS |
PowerShell Remoting | HOST、HTTP |
WinRM | HOST、HTTP |
Scheduled Tasks | HOST |
Windows File Share | CIFS |
LDAP | LDAP |
Windows Remote Server | RPCSS、LDAP、CIFS |
已知域服务器主机账号的口令散列值,使用 Mimikatz
的白银票据功能,伪造访问 HOST
服务的TGS
,以域管理员权限运行域服务器的 SCHTASKS
命令,远程创建、查看、删除系统任务
构造白银票据
|
|
创建计划任务
修改主机账号的口令策略制作后门
- 在主机的注册表中修改策略,具体位置为
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters
,键值为DisablePasswordChange
,设置为 1,即表示禁止修改账号口令; - 在组策略中修改默认的 30 天,修改位置为 “
Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\Domain member: Maximum machine account password age
",设置为 0 时,表示无限长;
- 组策略直接禁止修改主机账号口令,用来支持
VDI(virtual desktops Infrastructure)
等类型的使用,具体位置为 “Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\Domain member: Disable machine account password changes
”
方案 1 较为安全。由于组策略存在快照,因此方案 2、3 风险较大
修改主机账号的委派设置权限制作后门
域委派攻击中,一个主机账号被设置了约束性委派,则可以使用主机账号的口令散列值和约束性委派获取域管理员权限。前提条件为:主机账号的口令散列值和委派(约束性和非约束性均可)
如果我们在域内有多个稳定的控制点,且获取了当前系统的 SYSTEM
权限,则随时可获取当前主机的主机账号 (演示中的账号为 win7x86cn$
)口令散列值,满足了第 1 个条件;
如果将该 win7x86cn$
账号的 SeEnableDelegationPrivilege
权限赋予本机的低权限登录域用户 (eviluser) ,则通过 eviluser
用户随时可更改 win7x86cn$
账号的委派设置,从而可满足第 2 个条件
并不是拥有一个对象的 GenericAll
权限,就可以修改对象的 msDS-AllowedToDelegateTo
属性,攻击者只有拥有对象的 SeEnableDelegationPrivilege
权限时,才能修改
默认情况下,SeEnableDelegationPrivilege
权限只有域控制器才有,因此我们需要检测应用到这些域控制器上的哪些组策略改变了用户的 SeEnableDelegationPrivilege
权限配置
一般情况下,都是默认组策略“Default Domain Controllers Policy”
SeEnableDelegationPrivilege
权限很特殊,设置方法为修改 GPO
策略文件,位置为域服务器中\SYSVOL\sysvol\testlab.com\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
文件
添加 eviluser
具备 SeEnableDelegationPrivilege
权限,则 eviluser
可修改域内所有用户的委派设置。下图是测试在 eviluser
的登录会话中修改 win7x86cn$
账号的委派设置
查看了 win7x86cn
这个账号的委派设置情况,标红的 useraccountcontrol
表示没有设置委派,中间使用 Set-DomainObject
进行委派设置,16777216 表示设置 TRUS TED_TO_AUTH_FOR_DELEGATION
,通过Get-DomainObject
查询设置后的结果,有了 msds-allowedtodelego
选项,且 useraccountcontrol
发生了变更。
应对此后门的安全策略
-
通过域的组策略强制设置主机账号的最长有效期为 30 天;
-
保护
{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
文件、即关键组策略的完整性; -
高权限的用户,设置不能被委派
-
主机账号需设置委派时,只能设置为约束性委派
LAPS
域网络中,主机的本地管理员很少被使用,但是给网络安全却带来了很大的风险。攻击者如果获取了本地管 理员的 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 或整个域内的主机具有设置自身属性的权限。
每个主机对象能自动存储口令明和口令过期时间。
在域服务器中,可通过 GUI 直接查看指定主机中本地管理员的口令明文。
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-AdmPwdExtendedRi ghts
仅仅分析应用到 OU 或计算机的 ACE,所有其他的容器对象都忽略,使用 Set-AdmPwdComputerSelfPermission
进行权限设置时的参数也是 OU 类型。攻击者可以在非 OU 容器对象上赋予自身读取 ms-Mcs-AdmPwd
属性的权限
msImaging-PSPs
类型容器不在检测分析范围,如果将计算机对象放至该类型的容器中,则可以规避被检测
如果赋予某个低权限用户关于该类型容器的完全权限,则可以控制容器中计算机的属性,包括 ms-Mcs-AdmPwd
属性。
win7x86user
是域内普通用户,NotOu
为一个 msImaging-PSPs
类型容器,其中有一台机器win7x86cn,在 NotOu
上赋予了 win7x86user
对该容器的全部权限,容器中的对象 win7x86cn
继承了所有权限
上面的测试和实验表明,在安装有 LAPS 环境的域网络中,可以有效利用 LAPS 作为一个隐蔽的后门,赋予低权限用户随时读取高权限主机本地管理员口令明文的权限,从而快速获取高权限主机的控制权,进一步通过散列值获取等方式获取域控制权限。当然这一切的前提是已经获取了域控制权限。
LAPS在客户端仅仅部署了一个 AdmPwd.dll
文件,用于响应来自域服务器的密码更改策略,然后将口令明文以 Kerberos
加密方式存储至服务器中对应的主机账号的 ms-Mcs-AdmPwd
属性
LAPS
起源于一个公开项目,通过对公开项目源码的分析,可以使用手动的方式模拟口令修改过程
客户端在使用 AdmPwd.dll
文件时,Windows
并没有对该文件进行完整性校验或者签名验证。因此一个被篡改过的 DLL
一样可以正常使用。所以如果攻击者根据公开源码编译一个功能类似的 DLL
,同时在 DLL
中添加部分功能,将修改后的口令明文写到指定位置。这可使攻击者随时都能获取口令明文,从而具备对客户端的完全控制权限
根据LAPS的安装介绍说明,在客户端上安装有3种方式,
-
客户端安装
LAPS.x64.msi
或LAPS.x86.msi
-
在客户端使用
regsvr32.exe AdmPwd.dll
安装
如果以第二种方式在客户端安装 LAPS
,且 AdmPwd.dll
的目录为普通用户的可写目录,则普通用户可直接用伪造的 DLL
文件替换原来真实的 DLL
文件。可获取本地管理员的口令明文,获取本机的完全控制权,实现权限提升
LAPS
是微软为了加强本地管理员的口令管理,提高网络安全性而部署的解决方案,但是方案中的一些瑕疵导致 LAPS
可以变成攻击者制作隐蔽后门的工具。不仅 LAPS
如此,许多其他软件亦是如此。随着产品的增多,安全性得到提升的同时,暴露给攻击者的攻击面同时也得到了扩大。安全之路任重道远。