gpt4 book ai didi

windows - Windows 的 ImpersonateLoggedOnUser() + RevertToSelf() 与 Unix 的 seteuid() + setegid() 的速度

转载 作者:可可西里 更新时间:2023-11-01 10:27:14 25 4
gpt4 key购买 nike

在 Unix 中,当代表某个用户执行某些操作时,系统程序通常调用 seteuid(UID)(附带 setegid())首先切换到该用户,执行该操作,并在完成时切换回 super 用户使用 seteuid(0)。我对 seteuid() 计时,它的时间大约为一到几微秒(这意味着,相对于需要完成的操作(如操作文件或运行 CGI 程序),它非常便宜)。

我不熟悉 Windows API。我们是否在 Windows 上做同样的事情(但使用 ImpersonateLoggedOnUser() + RevertToSelf() API 函数)?一般来说,这些功能有多快?

最佳答案

它大部分是相同的,但要记住一个重要的区别:您提到的 Windows API 需要一个有效 token 的句柄。

换句话说,即使以 SYSTEM 身份运行(或任何具有 SeTcbPrivilege 的进程),您也需要模拟一个登录用户

用户可以通过多种方式登录:

  • 在物理计算机上进行交互
  • 通过远程桌面 session
  • 几乎所有 Microsoft 网络连接,如文件共享、名称管道、邮槽、RPC 和所有其他建立在其上的。

在大多数情况下,创建进程将使其继承当前 token 。

无论您在 IIS 中使用 Kerberos、NTLM 还是 HTTP BASIC 身份验证都无关紧要。它全部由 Windows 进行身份验证,因此您将获得一个 token 。另一方面,Tomcat 中的 HTTP BASIC 身份验证不会为您提供 Windows token ,因此无法进行模拟。

现在是棘手的部分。

仔细想想, token 实际上只是一个内存结构,带有用于授权 (DACL) 和审计 (SACL) 的访问控制列表。它是由 Authentication Package 创建的(美联社)。它是创建 token 的 AP。有点像 Unix 中的 PAM,AP 可以用自定义代码代替。

事实上,开源的setuid Authentication Package是存在的。将 CVS 移植到 Windows NT 的人们完成了编写 AP 的工作 creates a token out of thin air ,只要您拥有 SeTcbPrivilege(相当于 root)。我从未尝试过,但它可以在本地机器上为不存在的用户提供 token 。该代码相当旧(它只会创建提升的 token )但除此之外,它是 LGTM。不涉及身份验证、密码或智能卡,因此使用该 token 运行的进程将无法使用它来对另一台计算机进行身份验证。

总结:

  • 大体思路是一样的
  • 如果您遵守规则,您将只能冒充已登录的用户,无论登录程序或位置如何
  • 你可以改变这种行为,但它
  • 模拟在 Unix 和 Windows 中的速度可能一样快,因为内部工作原理大致相似。您可能不会注意到差异。

一个建议:我的Programming Windows Security的副本全是咖啡的黄色,上面挂着便利贴和撕破的纸页。关于该主题的最佳文本,如果您想了解 Windows 安全性,则必须阅读。

关于windows - Windows 的 ImpersonateLoggedOnUser() + RevertToSelf() 与 Unix 的 seteuid() + setegid() 的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com