如果有人在使用默认UAC设置的同时使用管理员Windows帐户进行日常工作,则每当某个应用程序(某些预定义的系统应用程序以外)需要提升权限时,UAC都会提示UAC。从安全性的角度来看,这相当于没有防止恶意软件获得更高权限的保护。:
只有当应用程序试图更改设置选项时,通知才可能被任何应用程序破坏,只需将线程插入资源管理器并在其中执行其肮脏的工作即可。由于资源管理器是设置允许悄悄提升的程序,因此可以从任何具有线程注入权限的线程执行静默提升(这几乎是任何在中等完整性级别或更高级别运行的程序)。
因此,可以将UAC滑块设置为最高设置(“始终通知”)。但是,即使是这样的设置也不建议。正如最近在“DMZ”聊天室讨论的例子一样,许多人会建议在日常工作中使用标准的Windows帐户。如果需要提升权限,UAC提示将请求管理员帐户的密码,然后才允许进程运行,但这次是在不同的帐户(管理员帐户,而不是标准帐户)下运行。
这如何防止恶意软件比使用具有最高UAC设置的管理员帐户获得更高的权限?
我可以看到两种可能的选择,但我没有足够的知识来说明哪一种--如果有的话--是正确的:
我忽略了第三种选择吗?使用标准Windows帐户是否为使用具有最高UAC设置的管理员帐户提供了安全好处?
发布于 2021-09-25 03:42:26
有几个原因。从策略的角度来看,主要原因是Microsoft不认为UAC是“安全边界”;也就是说,UAC旁路不像跨用户攻击(攻击者不是管理员)那样被视为同一类型的错误。正如您可能预期的那样,这意味着已经找到的UAC旁路并不总是被修复,或者不及时。的确,允许任何形式的自动电梯是危险的,许多容易绕过。然而,即使没有自动提升,至少有一个完整的旁路。
另一个原因是,有时明确区分特权用户和非特权用户是有用的。打破这一区别会导致某些安全模型的崩溃。例如,假设一个程序只写入管理员的位置(任何类型的;它可以是注册表项、目录、设备驱动程序等)并创建一个新的对象。程序可以安全地假定它是以管理员身份运行的,因此如果它想确保当前用户能够访问新对象--例如,将"Creator/Owner“主体设置为拥有完全访问权--它假设它没有授予任何非管理员的访问权限。但实际上是这样的;当您使用UAC提升时,您的组成员身份会改变(某种程度上),但是您的用户身份不会改变,所以在提升时您拥有的东西仍然是您拥有的(并且所有代码都以您的身份运行)。有解决这一问题的方法(其中一种强制完整性控制是由Windows为某些对象类型自动实现的),但对于某些类型的可能无法工作的交互(例如,如果新对象只检查您的身份)。是的,确实存在这样的安全漏洞(尽管它们相对较少)。
至于你的“两个可能的选择”,两者都不正确。提升总是需要生成另一个进程(或者通过RPC调用另一个已经提升的进程)。不同的是,如果启用了自动提升,受信任的进程就会无形中说:“嘿,我知道我没有被提升,但是我想用这个新进程做{需要提升}的事情”,操作系统将无形中说“好吧,这个新进程允许自动升级,下面是它的管理令牌,祝您玩得开心”。然而,如果自动提升被禁用,那么用户将被提示使用新进程的完整命令行,并且假设他们没有预料到它(或者该命令看起来很可疑),他们不会批准它。
但是,除了资源管理器之外,还有许多其他方法可以绕过UAC。请参见https://cqureacademy.com/cqure-labs/cqlabs-how-uac-bypass-methods-really-work-by-adrian-denkiewicz,然后Ctrl+F表示“始终通知”。
https://security.stackexchange.com/questions/255530
复制相似问题