LowBox Token Permissive Learning Mode
最近有人询问我关于这个主题的问题,因此我认为将其整理成公开博客文章能让更多人受益。Windows 11(和Windows Server 2022)为令牌引入了一项新功能,允许内核执行正常的LowBox访问检查,但在检查失败时记录错误而非直接返回访问拒绝。这项功能允许你启动一个AppContainer沙箱进程,运行任务,并确定如果实际尝试沙箱化进程时哪些部分会失败。这使得在尝试实际应用沙箱时,更容易确定需要授予哪些权限来防止应用程序崩溃。这是一个非常有用的诊断工具,尽管微软是否会正式文档化还有待观察。
让我们通过一个简单示例来了解如何使用它。
首先需要为Microsoft-Windows-Kernel-General
提供程序启动ETW跟踪,并启用KERNEL_GENERAL_SECURITY_ACCESSCHECK
关键字(值0x20)。在管理员PowerShell控制台中运行以下命令:
|
|
这将启动跟踪会话,并将事件记录到用户主目录的access_trace.etl
文件中。由于这是ETW,你还可以进行实时跟踪或启用堆栈跟踪来找出实际失败的代码,但本示例我们将尽可能简化操作。此日志也用于我之前博客中提到的Adminless等功能。
现在需要生成一些日志事件。只需在创建lowbox令牌或进程时添加permissiveLearningMode
能力。在开发沙箱化UWP应用时,你几乎可以将其添加到应用程序清单中,但这里我们假设是手动设置沙箱。
|
|
上述代码创建了具有该能力的lowbox令牌,并向用户配置文件中写入文件。正常情况下这会失败,因为用户配置文件不授予任何AppContainer写入权限。但你会发现写入操作成功了。现在回到管理员PowerShell控制台,停止跟踪并清理会话。
|
|
你会在用户配置目录中找到access_trace.etl
文件,其中包含记录的事件。有多种读取此文件的方法,最简单的是使用Get-WinEvent
命令。由于需要对日志内容进行一些解析以获取各种值,我编写了一个简单脚本来完成此任务。该脚本可在github获取。只需运行脚本并传入日志文件名即可将事件转换为PowerShell对象。
|
|
日志事件似乎不包含被打开资源的名称,但包含对象的安全描述符和类型、请求的访问掩码以及所用访问令牌的基本信息。
希望这些信息对大家有用。
发布时间:2021年9月6日 23:53
作者:tiraniddo