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