如何正确地删除(删除或禁用)Windows 中的权限?
How to properly drop (remove or disable) privileges in Windows?
我正在尝试编写一个对 Windows 执行特权操作的安全应用程序(特别是它会更改系统时间)。因此,我要求用户 运行 此应用程序具有管理员权限。作为我想在程序中做的第一件事,就是从我的访问令牌中删除所有不必要的特权,以限制我稍后引入的任何错误的影响。从 Microsoft documentation on the topic 我了解到我可以通过 AdjustTokenPrivileges“禁用”这些权限,或者通过 CreateRestrictedToken 创建一个具有“已删除”权限的新访问令牌并使用它重新启动我的应用程序。如果我理解正确,禁用的权限可以随时重新启用,所以任何充分受损的应用程序都会这样做,而忽略我试图施加的任何限制。另一方面,如果我使用 CreateRestrictedToken 完全删除权限,则无法将它们添加回来,这听起来更安全,而且我通常会在“删除权限”一词下想象(这种方式听起来也很麻烦重新启动等)。
我怀疑这种理解可能是错误的。在 Windows 中放弃所有但需要的权限的最合适方法是什么?
我的理解确实是错误的。尽管文档声称如此,您可以通过在 NewState
字段中将属性 SE_PRIVILEGE_REMOVED
设置为适当的权限来使用 AdjustTokenPrivileges()
“轻松”删除权限。
我正在尝试编写一个对 Windows 执行特权操作的安全应用程序(特别是它会更改系统时间)。因此,我要求用户 运行 此应用程序具有管理员权限。作为我想在程序中做的第一件事,就是从我的访问令牌中删除所有不必要的特权,以限制我稍后引入的任何错误的影响。从 Microsoft documentation on the topic 我了解到我可以通过 AdjustTokenPrivileges“禁用”这些权限,或者通过 CreateRestrictedToken 创建一个具有“已删除”权限的新访问令牌并使用它重新启动我的应用程序。如果我理解正确,禁用的权限可以随时重新启用,所以任何充分受损的应用程序都会这样做,而忽略我试图施加的任何限制。另一方面,如果我使用 CreateRestrictedToken 完全删除权限,则无法将它们添加回来,这听起来更安全,而且我通常会在“删除权限”一词下想象(这种方式听起来也很麻烦重新启动等)。
我怀疑这种理解可能是错误的。在 Windows 中放弃所有但需要的权限的最合适方法是什么?
我的理解确实是错误的。尽管文档声称如此,您可以通过在 NewState
字段中将属性 SE_PRIVILEGE_REMOVED
设置为适当的权限来使用 AdjustTokenPrivileges()
“轻松”删除权限。