前言

「沙箱」是一种安全隔离机制,让程序在受限环境中运行,防止其对宿主系统造成破坏。Windows 平台提供了从进程级到虚拟机级的完整隔离谱系。本文是系列首篇,对各种技术做全景概览。

隔离谱系

Windows 的隔离技术按隔离强度性能开销从轻到重排列:

轻量 ←─────────────────────────────────────→ 重量

Integrity   Restricted   Job Object   AppContainer   WDAG   Windows Sandbox   Hyper-V VM
 Levels       Token                                    (Application Guard)

每种技术解决不同层次的问题,可以组合使用。


1. Integrity Levels (MIC) — 完整性级别

机制: Windows Vista 引入的 Mandatory Integrity Control(强制完整性控制),为每个进程和对象分配完整性级别:

级别典型进程说明
Untrusted极少使用最低级别
LowAppContainer、Edge 内容进程低完整性,不能写中/高完整性对象
Medium普通用户进程默认级别
High管理员进程UAC 提权后
System系统服务Windows 内核级

隔离效果: 低完整性进程不能写入高于自身完整性的对象(文件、注册表、命名对象)。这是 IE Protected Mode 和 Edge 沙箱的基础。

优点: 零开销,内核原生支持 缺点: 只做「写」隔离,不限制「读」;粒度粗


2. Restricted Token — 受限令牌

机制: CreateRestrictedToken 从现有令牌中移除权限SID,生成一个能力更弱的令牌。用此令牌创建的进程天然受限。

可做:

  • 删除特权(如 SeDebugPrivilegeSeLoadDriverPrivilege
  • 将 SID 设为 Deny Only(拒绝特定组访问)
  • 限制为仅 USE_FOR_DENY_ONLY

典型组合: 受限令牌 + Job Object + AppContainer = 轻量级自定义沙箱


3. Job Object — 进程组管理

机制: Job Object 是 Win32 可命名、可保护、可共享的内核对象,用于管理一组进程。进程一旦加入,不可脱离。

能力一览:

限制类型说明
内存限制工作集大小上限
CPU 速率JOBOBJECT_CPU_RATE_CONTROL_INFORMATION (Win8+)
进程数最大进程数限制
UI 限制不能读剪贴板、不能改系统参数、不能退出 Windows
I/O 速率I/O 带宽限制
时间限制超时自动终止
杀灭策略JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE:Job 关闭时杀全部子进程

嵌套 Job(Win8+): 支持层级结构,父 Job 的限制会传递到子 Job。

核心 API:

  • CreateJobObject — 创建
  • AssignProcessToJobObject — 将进程加入 Job
  • SetInformationJobObject — 设置限制
  • TerminateJobObject — 终止整个 Job
  • QueryInformationJobObject — 查询统计

⚠️ Job Object 不做文件/注册表隔离,它是资源限制器,不是完整的沙箱。但常作为沙箱的组件使用。


4. AppContainer — 应用级沙箱

机制: Windows 8 引入的进程级隔离,通过受限令牌 + AppContainer SID + Capability SID 实现细粒度权限控制。UWP 应用和 Edge 浏览器使用此机制。

六大隔离维度

维度说明
凭证隔离应用身份 ≠ 用户身份,不能冒充用户访问其他资源
设备隔离摄像头/麦克风/GPS 默认拒绝,需 Broker 授权
文件隔离只能访问被 ACL 授予的文件/注册表位置
网络隔离细粒度控制 Internet / Intranet / Server 能力
进程隔离内核对象隔离,崩溃不影响其他进程
窗口隔离不能操控其他应用窗口

实现

CreateProcess + PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES
  ├─ AppContainer SID(唯一标识容器)
  ├─ Capability SID 列表(声明能力,如 internetClient)
  └─ 受限令牌(自动生成)

常用 Capability

Capability说明
internetClient出站 Internet 访问
internetClientServerInternet 入站+出站
privateNetworkClientServer内网访问
documentsLibrary文档库访问
microphone麦克风
webcam摄像头

AppContainer 是 Windows 上最实用的编程级沙箱,比 Job Object 更强的隔离(文件/网络/设备),比 VM 更轻量。


5. WDAG — Windows Defender Application Guard

机制: 将 Edge 浏览器或 Office 文档在 Hyper-V 隔离容器中运行。用户看到的窗口通过远程显示协议(RDP)呈现,但实际进程在虚拟机内。

场景:

  • 浏览不受信任的网站 → Edge 在容器中运行
  • 打开不受信任的 Office 文档 → Office 在容器中打开

特点: 硬件级虚拟化隔离,即使容器内被攻破也无法逃逸到宿主。


6. Windows Sandbox (WSB) — 一次性 VM 沙箱

机制: Windows 10 (build 18305+) 内置的轻量级桌面沙箱,基于 Hyper-V 虚拟化,但比传统 VM 轻量得多。

架构创新

技术说明
Dynamic Base Image复用宿主 OS 不可变文件 + 小份可变文件副本(安装包仅 30MB)
Direct Map 内存共享OS 二进制共享物理内存页(如 ntdll.dll),大幅降低内存占用
WDDM GPU 虚拟化直接透传 GPU 加速(需 WDDM 2.5+)
智能内存管理类似进程竞争内存,宿主可回收

前提条件

  • Windows Pro / Enterprise / Education(不支持 Home)
  • BIOS 虚拟化已开启
  • 启用 Hyper-V + Windows Sandbox 功能

.wsb 配置文件

xml
<Configuration>
  <vGPU>Enable</vGPU>
  <Networking>Disable</Networking>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\SandboxDemo</HostFolder>
      <SandboxFolder>C:\Demo</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>cmd.exe /k "echo Welcome to Sandbox"</Command>
  </LogonCommand>
  <MemoryInMB>2048</MemoryInMB>
</Configuration>

限制

  • 同时只能运行一个实例
  • 无持久化(关闭即销毁,22H2+ 支持沙箱内重启保持状态)
  • 不支持 ARM64 vGPU

7. Hyper-V VM — 完整虚拟机

最重但最强的隔离方式。完整虚拟机,独立内核,完全隔离。适合需要持久化、多实例、多操作系统的场景。不在本系列重点讨论范围。


技术对比矩阵

维度Integrity LevelRestricted TokenJob ObjectAppContainerWDAGWindows SandboxHyper-V VM
隔离强度★★★★★★★★★★★★★★★★★★★★★★★
性能开销极低极低极低
文件隔离写隔离✅ 细粒度
网络隔离✅ 细粒度✅ 可开关
进程隔离部分部分
资源限制内存
编程接口Win32 APIWin32 APIWin32 APIWin32 API策略配置.wsb XMLWMI/Hyper-V
持久化N/AN/AN/AN/A
启动速度即时即时即时即时秒级秒级分钟级

组合使用

实际生产中的沙箱方案往往是组合的:

AppContainer (文件/网络/设备隔离)
  + Job Object (CPU/内存限制)
  + Restricted Token (权限裁剪)
  + Integrity Level Low (写隔离)
  = 轻量级自定义沙箱
Windows Sandbox (完整 OS 隔离)
  + .wsb 配置 (文件夹映射/网络控制)
  = 安全测试环境

系列文章导航

  1. Windows 沙箱技术全景(本文)
  2. Windows 沙箱 Demo - WSB 配置实战
  3. Windows 沙箱 Demo - AppContainer 编程
  4. Windows 沙箱 Demo - Job Object 进程管控

📅 创建时间:2026-08-12 🏷️ 分类:Windows 安全 / 沙箱技术