从管理员帐户模拟SYSTEM(或等效)

6
这个问题是关于我目前正在处理的特权问题的后续和延续,原问题链接在这里问题概述: 我正在使用一个域管理员帐户运行程序,但该帐户没有Debug programs (SeDebugPrivilege)特权,而我需要在本地机器上拥有该特权。 应急解决方案: 该程序可以在本地机器上安装自己作为服务,并启动该服务。该服务现在在SYSTEM帐户下运行,这使我们能够使用SeTCBPrivilege特权创建一个新的访问令牌,该令牌具有SeDebugPrivilege。然后,我们可以使用新创建的令牌以提升的权限重新启动初始程序。
我个人不喜欢这个解决方案。我认为应该可以作为管理员获得所需的特权,而无需进行系统修改,如安装服务(即使只是暂时的)。
我希望有一种解决方案可以最小化系统修改,并且最好可以即时完成(即:不需要重新启动)。我曾尝试过以SYSTEM身份登录用户并尝试在已知的SYSTEM进程(如csrss.exe)上打开进程令牌(但是失败了,因为您无法使用正在尝试获取的特权打开PROCESS_QUERY_INFORMATION以获取指向该进程的句柄)。
我已经尽力想出解决此问题的替代方案了。我希望有一种简单的方法可以在主机上抓取特权令牌并模拟它为该程序,但我还没有找到方法。
如果有人知道解决方法,或者甚至对可能有效的事情有建议,请告诉我。非常感谢您的帮助!

安全策略的整个目的是设置谁可以执行什么操作。如果存在漏洞,那么安全策略就毫无价值了。短期解决方案不是让他们修改他们的安全策略吗?长期来看,您应该将应用程序分离成服务和用户模式组件。 - Luke
事实上,我完全不知道为什么他们的策略一开始就是这样构建的(默认情况下启用管理员调试程序,因此某个天才故意将其删除)。不幸的是,策略野兽几乎肯定是我无法击败的。然而,在这种情况下,该应用程序确实没有服务部分。那只是一种“黑客”方式,我知道它可以用于允许程序以完整的调试特权重新启动自己,尽管它可能很聪明,但我认为它不是一个非常干净的长期解决方案 :( - KevenK
不确定这个帖子是否还活跃...但我可能有一些相关的参考资料,您可能会发现有用。不过,你之前提到不喜欢基于服务的“黑客”可能意味着你对这些内容不感兴趣。你可以在以下链接中的文章中找到一些想法: http://www.alex-ionescu.com/recon2k6.pdf 它有点过时,但其中提出的思想和概念值得一看,也许可以给你一些想法或解决问题的方法。希望这可以帮助到你。 - user1699579
1个回答

6

根据设计,除非由拥有NT AUTHORITY\SYSTEM权限的另一个进程启动,否则不允许任何进程获得NT AUTHORITY\SYSTEM权限。该服务是一种解决方法,因为服务控制管理器本身是在系统启动时由内核启动的。

不幸的是,操作系统旨在防止您试图做的事情。如果您想能够之后删除自己的服务,只需为本地计算机授予相应用户SeDebugPrivilege,然后让该服务卸载自己。

更好的方法是,让要修改内存的程序更改DACLs以允许管理员访问其内存,而无需使用SeDebugPrivilege。这样,您就完全不需要获取特权了。

EDIT2:最好的做法是一开始就使用共享内存。那才是它的用途所在。


我在写原帖时就预测到默认答案会是“如果没有权限,你就不应该这样做”。我想这是有一定道理的,只是我希望管理员的其他权限中有一个漏洞,可以让人获得批准的特权令牌。不幸的是,由于这个程序的性质,它与其他正在运行的进程之间没有相互合作的机制,而我需要访问这些进程。这个程序需要独立和全能 :( - KevenK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接