在一篇旧文章中,Mark Russinovich 将安全边界定义为:
[A] 未经安全策略授权,代码和数据无法通过的墙。例如,在单独会话中运行的用户帐户由 Windows 安全边界分隔。
除了用户帐户,Windows 还有哪些安全边界?此外,如果您在桌面会话中以不同用户身份运行程序(例如,通过使用 runas 命令),这是否会破坏安全边界?
在一篇旧文章中,Mark Russinovich 将安全边界定义为:
[A] 未经安全策略授权,代码和数据无法通过的墙。例如,在单独会话中运行的用户帐户由 Windows 安全边界分隔。
除了用户帐户,Windows 还有哪些安全边界?此外,如果您在桌面会话中以不同用户身份运行程序(例如,通过使用 runas 命令),这是否会破坏安全边界?
微软最近分享了明确定义 Windows 及其应用程序安全边界的安全服务标准:
- 网络边界:未经授权的网络端点无法访问或篡改客户设备上的代码和数据。
- 内核边界:非管理用户模式进程无法访问或篡改内核代码和数据。管理员到内核不是安全边界。
- 进程边界:未经授权的用户模式进程无法访问或篡改另一个进程的代码和数据。
- AppContainer沙箱边界:基于AppContainer的沙箱进程基于容器能力无法访问或篡改沙箱外的代码和数据
- 用户边界:一个用户在未经授权的情况下不能访问或篡改另一个用户的代码和数据。
- 会话边界:一个用户登录会话未经授权不能访问或篡改另一个用户登录会话。
- Web 浏览器边界:未经授权的网站不能违反同源策略,也不能访问或篡改 Microsoft Edge Web 浏览器沙箱的本机代码和数据。
- 虚拟机边界:未经授权的 Hyper-V 客户虚拟机无法访问或篡改另一个客户虚拟机的代码和数据;这包括 Hyper-V 隔离容器。
- 虚拟安全模式边界:VSM trustlet 或 enclave 内的数据和代码不能被 VSM trustlet 或 enclave 之外执行的代码访问或篡改。
用户边界说“未经授权”:通过运行runas
,您授予授权(通过提供足够的凭据),因此不会违反边界。
现代 Windows 系统使用 UAC(用户帐户控制)。这适用于基于令牌的系统。因此,例如,您有一个 Windows 帐户,并且该帐户具有本地管理员。
当您登录时,您将获得一个令牌,允许以您的低级用户权限执行程序,从而将您限制在尽可能低的权限。
如果一个可执行文件需要提升的管理权限才能运行,当你午餐它时,它会提示你作为用户明确同意它。
当您执行此操作时,窗口将检查您是否具有管理权限,因为您是本地管理员组的成员,它将发出一个令牌,允许该可执行文件的实例以更高级别的权限运行。
这保留了最严格权限的策略,因为您的用户帐户仍将以其低级权限运行,但可执行文件的实例将具有更高级别的权限,从而创建安全边界。
运行身份功能的工作方式大致相同,除了它将检查用于“运行身份”的帐户具有哪些权限,而不是您登录的帐户。
因此,如果您以没有本地管理员的普通用户帐户登录,但您确实知道本地管理员凭据,则可以运行需要提升权限的可执行文件,并使用 run as 功能,使用本地管理员凭据,然后再次将发出令牌,允许该可执行文件的实例以所需的特权级别运行。
因此,它实际上不是破坏安全边界,而是启用安全边界。