腾讯反病毒实验室:深度解析AppContainer工作机制

深度解析AppContainer

Win8开始,Windows引入了新的进程隔离机制AppContainer,MetroAPP以及开启EPM的IE Tab进程都运行在AppContainer隔离环境,在最新的Win10Pre(9926)上,仍然如此。腾讯反病毒实验室对AppContainer的工作机制做一深入解读。

AppContainer带来的变化

Vista以前的系统,如XP,用安全描述符(简称SD,下同)里的DACL(discretionaryaccess control list)来控制用户和用户组的访问权限。

Vista以后,增加了IntegrityMechanism,在SD的SACL(system access control list)里增加一个mandatory label的ACE,扩展了Windows安全体系。默认的控制策略是No-Write-Up,允许较低完整性级别的进程读访问较高完整性级别的对象;禁止较低完整性级别的进程写访问较高完整性级别的对象。

Win8引入了AppContainer隔离机制,提供了更细粒度的权限控制,能够阻止对未授权对象的读写访问。

以Win10PreX64(9926)开启EPM的IE Tab进程为例,看看有哪些变化。

从ProcessExplorer里可以看到,,IE Tab进程的完整性级别不再是Low,而是变成了AppContainer:

图1

在进程属性的Security标签可以看到,增加了标志为AppContainer以及Capability的SID:

图2

一个AppContainer进程可以访问的对象,在SD的DACL里增加了额外的ACE。以IE Tab进程的进程对象为例:

图3

如何使用AppContainer隔离机制

这里我们不讨论MetroAPP,主要看看DesktopAPP如何使用AppContainer隔离机制。

仍然以Win10PreX64(9926)开启EPM的IE Tab进程为例:在IE选项里开启EPM,下断点nt!NtCreateLowBoxToken,然后新建IE Tab,命中断点,截取最上面的几层调用栈:

图4

可见,通过CreateProcess这个API就可以创建出AppContainer进程。

看看CreateAppContainerProcessStrW的逻辑片段,把PackageSIDString(图2里标记为AppContainer的SID)和CapabilitySID(图2里标记为Capability的SID) string转为SID后,传给了CreateAppContainerProcessW:

图5

看看CreateAppContainerProcessW的逻辑片段,把传入的CapabilitySIDs和PackageSID加入到ProcThreadAttributes,然后通过STARTUPINFOEX结构把ProcThreadAttributes传给了CreateProcessW。

图6

图7

图8

搞清楚IE Tab进程的创建逻辑,我们就可以创建自己的AppContainer进程了。

直接复用IE的PackageSID和CapabilitySIDs来创建AppContainer进程。如果需要定义自己的PackageSID,可以参考MSDN上的CreateAppContainerProfile等API,这里就不讨论了。

成功的创建出了具有AppContainer隔离机制的记事本进程。32位和64位进程都可以。可以自由组合Capability,这里我选择了IE Tab6个Capability里的3个。

一遍一遍的……你突然明白自己还活着,

腾讯反病毒实验室:深度解析AppContainer工作机制

相关文章:

你感兴趣的文章:

标签云: