欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何获取TrustedInstaller权限

来源:本站整理 作者:佚名 时间:2017-08-29 TAG: 我要投稿

这篇文章将带你了解TI的本质是什么,进一步探索如何在powershell和NtObjectManager模块的帮助下获取TI权限,以便在操作系统中完成任何你想要的操作。
如果你曾管理过windows系统,那么你应该知道trustedInstaller(TI)组的概念,大部分对系统文件和注册表的操作都需要TI组权限。举个例子,你可以看一下System32文件夹下的文件的属性,在安全选项下TI和文件Owner可以删除和修改文件(甚至管理员都不能),所以你不能直接对安全选项进行修改。

然而,如果你查看本地用户和组选项你是没办法找到TI用户或组的。这篇文章将带你了解TI组的本质,然后进一步学习,如何在Powershell和NtObjectManager模块的帮助下获得TI组权限,以便在操作系统中完成任何你想要的操作。
什么是TrustedInstaller
如果TI既不是用户又不是组那它又是什么?查询ACL会给我们一些启示。你可以使用Get-Acl命令来读取一个文件的安全描述,同时我们可以列出TI信息。

从上图可以看到在IdentityReference项中我们看到了TI组,并且它有一个NT SERVICE的前缀。因此,它是一个Windows 服务SID,这是在Vista中加入的特性,这个特性允许操作系统上运行的每一项服务都有一个用来进行权限检查的组。通过这种机制,操作系统不必承担增加独立真实的组的额外开销。
SID本身是服务名的大写表示的SHA1值,下面这段代码就可以计算真实的SID值:
$name = "TrustedInstaller"
# Calculate service SID
$bytes = [Text.Encoding]::Unicode.GetBytes($name.ToUpper())
$sha1 = [System.Security.Cryptography.SHA1]::Create()
$hash = $sha1.ComputeHash($bytes)
$rids = New-Object UInt32[] 5
[Buffer]::BlockCopy($hash, 0, $rids, 0, $hash.Length)
[string]::Format("S-1-5-80-{0}-{1}-{2}-{3}-{4}", `
$rids[0], $rids[1], $rids[2], $rids[3], $rids[4])
当然,你大可不必自己去实现这个方法,NTDLL中有一个RtlCreateServiceSid方法可以做到这一点,同时LSASS中也能把服务名转换成SID。也就是说,当系统资源被更改时,一个名为TrustedInstall的系统服务一定会被运行。我们使用SC模块也能发现这一点。

如果开启TI服务并查看Access Token,我们可以看到TI组被启用。

到这里背景知识就介绍完了,假如我们是管理员,该如何利用TrustedInstaller呢?
成为TrustedInstaller
如果你搜索过如何删除TI拥有的资源,你一般会得到这样的结果:它会告诉你首先要获取文件或者密钥的所有权,然后再更改DACL来添加管理员组。这是因为即使是兼容IFileOperation UAC COM的组件通常也不会自动运行,并且会弹出下面这个对话框:

改变系统文件的权限实在不是个好主意,如果你做错了你会将操作系统暴露给EOP,尤其是对目录来说。资源管理器可以轻松地更改所有子文件和文件夹的安全属性为初始值。当然,TI会阻止你这么做的,但是总有些人出于某些目的而想要这么做。
你也许会想,我可以把当前用户添加到TI组中。不幸的是像NetLocalGroupAddMembers这样的LSASS api不使用SID,修改注册表值NT SERVICE\TrustedInstaller同样无效。因为它根本就不是一个真实的组,它是使用其他方法来创建的。也许你可以通过念一段神奇的咒语来完成这件事,或者至少使用底层的RPC调用,但我认为这么做不太值得。
因此,修改TI服务设置的最快方法是通过改变设置来运行一个其他的二进制文件。奇怪的是,TI服务使得系统上的文件很难被随意修改,但是它却不保护它自己,修改它的操作可以以一个普通管理员的权限完成。所以你可以使用下面的命令来删除任意文件

sc config TrustedInstaller binPath= "cmd.exe /C del path\to\file"
启动TI服务,咻的一声文件就没了。这条命令能够生效的另一个原因是,TI不是一个Protected Process Light (PPL),这也是一件奇怪的事情,因为TI组被赋予了删除和停止PPL服务的权限。我把这一点向MSRC指出过(并且Alex lonescu在2013年也这么做了),但是微软并没有采取任何措施去修复。看起来微软也并不认为PPL是一个安全边界。
上述操作做完之后你必须把TI服务恢复到原来的状态,否则像Windows Update之类的服务就没法正常工作了。由于TI服务有一个token,那么我们是否可以借用这个token来创建一个新进程呢?

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载