个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化《Windows Sysinternals 从入门到精通》读书笔记 2.5应用程序隔离同一台机器上的一个个安全小盒子1. 写在前面应用程序隔离到底在解决什么问题2. 为什么一定要有应用程序隔离2.1 隔离不是“麻烦”而是保护2.2 排障时要换一种问法3. 第一层隔离账号和权限3.1 Access Token进程的“身份证 权限包”3.2 ACL对象门口的“访问规则表”3.3 Process Explorer 怎么看账号和权限4. 第二层隔离完整性级别 Integrity Level4.1 为什么有了账号权限还需要完整性级别4.2 Low / Medium / High / System 怎么理解4.3 在 Process Explorer 中查看完整性级别5. 第三层隔离会话、窗口站和桌面5.1 会话 Session不同登录环境之间的边界5.2 窗口站和桌面谁能看见谁6. 第四层隔离虚拟化与兼容性重定向6.1 为什么需要虚拟化6.2 常见虚拟化路径6.3 Procmon 中怎么看虚拟化7. Sysinternals 怎么看见这些隔离边界7.1 Process Explorer看进程在哪个盒子里7.2 Process Monitor看行为在哪里被挡住8. 实战案例老软件设置不生效可能是被虚拟化了8.1 问题现象8.2 排查思路8.3 可能看到的结果8.4 处理建议9. 企业桌面支持中的应用隔离排查清单9.1 看进程身份9.2 看完整性级别9.3 看会话边界9.4 看 Procmon 结果9.5 看是否应该提升权限10. 应用隔离排障流程图11. 常见误区不要把隔离机制当成系统故障11.1 误区一ACCESS DENIED 就是系统异常11.2 误区二所有软件都管理员运行11.3 误区三服务程序可以随便弹窗11.4 误区四老软件配置不生效就是软件坏了12. 总结应用隔离就是 Windows 的多层安全盒子13. 本文关键知识点速记1. 写在前面应用程序隔离到底在解决什么问题前面几节我们已经聊过了进程、线程、句柄、用户模式和内核模式。这些内容解决的是程序是怎么运行的线程是怎么执行的进程怎么访问系统对象用户态和内核态分别承担什么职责。到了这一节问题开始升级同一台 Windows 电脑上运行着这么多程序系统怎么保证它们不能乱碰彼此这就是应用程序隔离Application Isolation要解决的问题。简单说Windows 不会默认相信每一个应用程序。它会把不同程序放进不同的“安全小盒子”里让它们既能正常完成工作又不能随便越界。从 Sysinternals 的视角看应用程序隔离不是一个单独功能而是一整套机制叠加后的结果包括账号和权限Access Token 与 ACL完整性级别 Integrity Level会话 Session窗口站 Window Station桌面 DesktopUAC 虚拟化进程、作业和命名空间更严格的 AppContainer 应用容器应用程序隔离的本质是在同一台机器上给不同进程划出安全边界谁能访问什么谁不能访问什么谁能和谁交互谁必须被系统挡住。对于桌面支持和 Windows 排障来说这一节非常重要。因为很多看似“系统异常”的问题底层其实不是异常而是隔离机制在正常工作文件写不进去注册表修改失败程序访问被拒绝老软件配置不生效服务不能弹出窗口普通程序无法控制管理员程序Procmon 里看到大量ACCESS DENIED。不要一看到访问失败就说系统坏了很多时候是 Windows 在保护系统边界。2. 为什么一定要有应用程序隔离先设想一个极端情况如果 Windows 完全没有隔离机制会发生什么那就意味着任意程序都可以读写别的程序内存普通程序可以随便修改系统目录浏览器网页脚本可以直接删除你的文档任意进程都能终止系统服务低权限程序可以给高权限程序发消息、注入代码一个程序崩溃可能拖垮整个系统恶意软件只要运行一次就能随便横向移动。这显然不可接受。所以现代操作系统会默认假定应用程序不一定可信必须放进受限制的安全边界中运行。2.1 隔离不是“麻烦”而是保护很多用户遇到权限问题时会觉得 Windows 很烦访问被拒绝 权限不足 需要管理员权限 无法写入此位置但从系统安全角度看这些提示背后其实是 Windows 在执行边界检查。例如普通用户进程不能随便写C:\Windows普通应用不能随便改HKLM低完整性进程不能随便控制高完整性进程用户会话中的程序不能随便操作服务会话未授权程序不能随便访问受保护对象隔离的目标不是让你操作变麻烦而是防止一个普通程序获得不该有的能力。2.2 排障时要换一种问法遇到权限类问题不要只问为什么失败了更应该问这个进程在哪个安全盒子里 它以哪个用户运行 它的完整性级别是多少 它是否有访问目标对象的权限 它和目标对象是否处在同一个会话 是否发生了虚拟化或重定向这就是 Sysinternals 排障的价值。它不是简单告诉你“失败了”而是让你看到哪个进程失败访问哪个路径失败返回什么结果当前进程是什么用户完整性级别是什么是否被权限、会话或虚拟化机制影响。3. 第一层隔离账号和权限应用程序隔离最基础的一层就是账号和权限。Windows 中的每个进程通常都带着一个访问令牌Access Token。这个 Token 代表这个进程属于哪个用户属于哪些用户组拥有哪些特权当前权限是否经过 UAC 提升默认安全上下文是什么。同时Windows 中很多受保护对象都有自己的访问控制列表ACL。例如文件文件夹注册表键进程对象服务共享资源命名管道。当进程访问对象时Windows 会做一个核心判断进程的 Access Token 对象的 ACL → 是否允许访问3.1 Access Token进程的“身份证 权限包”可以把 Token 理解为进程随身携带的“身份证 权限包”。里面包含Token 信息作用User SID当前用户身份Group SID当前用户所属组Privileges当前拥有的系统特权Default DACL默认安全描述信息Elevation 状态是否管理员提升Integrity Level完整性级别信息也就是说Windows 判断一个进程能不能做某件事时并不是只看程序名而是看它拿着什么 Token。同一个 exe用普通用户运行和用管理员运行安全上下文完全可能不同。3.2 ACL对象门口的“访问规则表”ACL 可以理解为对象门口的规则表。例如某个文件夹的 ACL 可能写着主体权限Administrators完全控制Users读取和执行Everyone无写入权限那么一个普通用户进程想往这里写文件时就可能被拒绝。这就是 Procmon 里常见的ACCESS DENIED3.3 Process Explorer 怎么看账号和权限在 Process Explorer 中可以通过几个位置观察主界面增加User Name列双击进程查看Security标签查看 Token、组、权限和完整性级别。建议在排查权限问题时优先确认这个进程是谁启动的是否是当前用户是否是管理员提升是否是 SYSTEM是否是服务账号是否是域账号是否是普通标准用户。不同用户运行的进程本质上处在不同安全盒子里。不能只看程序名相同就认为权限也相同。4. 第二层隔离完整性级别 Integrity Level账号和 ACL 解决的是“你是谁、能访问什么”的问题。但 Windows 还多加了一层信任分级机制也就是完整性级别Integrity LevelIL可以把完整性级别理解为进程在系统中的信任等级。常见完整性级别包括完整性级别常见对象Low低信任进程、受限沙箱进程Medium普通用户启动的大多数应用High以管理员身份运行的程序System系统服务、核心系统进程4.1 为什么有了账号权限还需要完整性级别因为同一个用户下的进程也不应该完全平等。例如浏览器网页内容风险更高管理员程序权限更高系统服务比普通应用更敏感低信任进程不应该随便影响高信任进程。所以 Windows 使用完整性级别进一步限制低完整性进程不能随便向高完整性进程写入、发送窗口消息或注入代码。这背后涉及一个重要机制UIPIUser Interface Privilege Isolation也就是用户界面特权隔离。4.2 Low / Medium / High / System 怎么理解可以用楼层来理解System → 系统机房层 High → 管理员权限层 Medium → 普通应用层 Low → 沙箱受限层正常情况下普通记事本通常是 Medium管理员运行的 PowerShell 是 High系统服务通常是 System某些沙箱进程可能是 Low。完整性级别越高代表它能接触到的系统区域越敏感出问题后的影响范围也越大。4.3 在 Process Explorer 中查看完整性级别可以这样操作View → Select Columns → Process Image → Integrity Level启用后主界面会显示每个进程的完整性级别。这比只看“有没有小盾牌图标”更准确。因为有时候你需要直接判断这个程序是不是 High当前程序是否真的完成 UAC 提升普通进程为什么不能操作管理员进程安全软件或浏览器是否有低完整性子进程某个自动化工具为什么不能控制另一个窗口。排查跨进程交互失败时Integrity Level 是一个非常关键的线索。5. 第三层隔离会话、窗口站和桌面除了账号和完整性级别Windows 还通过会话 Session、窗口站 Window Station、桌面 Desktop隔离图形界面和交互边界。这一块在后续章节会继续展开这里先建立整体印象。5.1 会话 Session不同登录环境之间的边界Windows 中不同登录用户、远程桌面用户、服务进程可能处在不同 Session 中。常见情况Session常见用途Session 0系统服务Session 1本地登录用户Session 2远程桌面用户或其他登录会话早期 Windows 中服务可以直接在用户桌面弹窗口这带来了很多安全风险。现在服务通常运行在 Session 0与用户桌面隔离。这也是为什么很多服务不能直接在当前用户桌面弹出交互窗口。5.2 窗口站和桌面谁能看见谁窗口站和桌面决定哪些进程能看到当前桌面哪些进程能和窗口交互哪些进程能发送窗口消息图形界面资源如何隔离。这解释了很多看似奇怪的问题服务启动了 GUI 程序但用户看不到窗口远程桌面会话里看不到本地用户窗口某些自动化脚本无法操作另一个会话的窗口程序在后台运行但没有可交互界面。会话隔离解决的是谁能看见谁谁能和谁交互。6. 第四层隔离虚拟化与兼容性重定向隔离不一定只有“硬拦截”。有时候 Windows 会采用更温和的方式你以为你写到了系统位置其实 Windows 把它重定向到了用户专属位置。这就是UAC 虚拟化 / 文件与注册表虚拟化的典型场景。6.1 为什么需要虚拟化很多老程序习惯往这些位置写数据C:\Program Files\ C:\Windows\ HKLM\Software\但在现代 Windows 中普通用户进程通常没有权限直接写这些系统位置。如果完全拒绝很多老软件会直接运行失败。所以 Windows 提供了一种兼容性折中方案老程序以为自己写入系统目录 实际被重定向到当前用户的 VirtualStore6.2 常见虚拟化路径例如程序尝试写入C:\Program Files\App\config.ini实际可能被重定向到%LOCALAPPDATA%\VirtualStore\Program Files\App\config.ini注册表也类似。程序以为自己写入HKLM\Software\App实际可能被重定向到当前用户相关位置。虚拟化的目标是兼顾安全和兼容性既不让普通程序随便改系统位置又尽量让老程序能继续运行。6.3 Procmon 中怎么看虚拟化在 Process Monitor 中可能会看到一些非常有价值的结果ACCESS DENIED REPARSE Virtualized如果某个老软件设置不生效可以重点观察它尝试写哪里是否被拒绝是否被重定向实际写入了哪个用户目录是否不同用户看到不同配置。很多老软件“配置改了但不生效”本质上不是配置没写入而是写到了另一个被虚拟化的位置。7. Sysinternals 怎么看见这些隔离边界Sysinternals 工具的价值不只是查看进程和日志。更重要的是它能帮助我们看见这些隔离边界。7.1 Process Explorer看进程在哪个盒子里Process Explorer 可以帮我们看观察项对应隔离机制User Name账号隔离Integrity Level完整性级别Session ID会话隔离Security / Token权限和特权Job作业边界Parent Process父子进程关系也就是说当你看到一个进程时不应该只看这是 chrome.exe 这是 notepad.exe 这是 cmd.exe而应该进一步看它以哪个用户运行 它是不是管理员权限 它在 Session 几 它是否属于某个 Job 它有哪些权限 它是否受到低完整性或沙箱限制这才是 Process Explorer 作为系统结构观察工具的真正价值。7.2 Process Monitor看行为在哪里被挡住Procmon 可以帮我们看进程行为是否被边界限制。常见结果包括Procmon Result可能含义ACCESS DENIED权限不足、ACL 不允许、完整性级别限制NAME NOT FOUND路径不存在、注册表项不存在REPARSE路径被重解析、符号链接、挂载点或重定向Virtualized发生虚拟化重定向SHARING VIOLATION文件被其他进程占用排查时不要只看最后一个报错而要看最早出现异常的位置是否连续访问失败是否从系统路径转向用户路径是否某个进程一直被权限拒绝是否同一操作在管理员权限下正常。Procmon 里的失败结果不是废日志而是隔离规则留下的证据。8. 实战案例老软件设置不生效可能是被虚拟化了这是企业桌面支持中非常常见的问题。8.1 问题现象用户反馈某个老软件已经修改了配置但重新打开后配置没有生效。表面上看可能会以为是软件 Bug配置保存失败用户不会操作软件版本太旧。但从应用隔离角度看还要考虑它是不是尝试写系统目录或 HKLM但被 Windows 虚拟化重定向了8.2 排查思路可以这样做以普通用户运行软件打开 Procmon设置过滤条件Process Name is xxx.exeOperation contains WriteResult is ACCESS DENIED / REPARSE / Virtualized执行保存配置动作观察配置文件或注册表实际写入位置再以管理员方式运行对比一次。8.3 可能看到的结果例如WriteFile C:\Program Files\App\config.ini ACCESS DENIED CreateFile C:\Users\用户名\AppData\Local\VirtualStore\Program Files\App\config.ini SUCCESS这说明程序以为自己写的是系统目录实际被写到了用户目录下的 VirtualStore。这个问题不是单纯“软件没保存”而是 Windows 用虚拟化机制把写入位置改了。8.4 处理建议可以根据场景选择修改软件配置路径让它写入用户目录给程序配置正确的安装和数据目录使用管理员权限完成一次必要配置升级软件版本避免依赖旧式写入方式不建议长期靠“管理员运行”解决一切问题。推荐方向是让软件按现代 Windows 权限模型运行而不是粗暴提升所有权限。9. 企业桌面支持中的应用隔离排查清单遇到权限、访问、交互、兼容性问题时可以按下面清单排查。9.1 看进程身份先确认这个进程是谁启动的检查项User Name是否域用户是否本地管理员是否 SYSTEM是否服务账号是否被 UAC 提升。9.2 看完整性级别确认它是 Low、Medium、High 还是 System重点判断普通程序是否需要 High自动化程序是否在控制高 IL 窗口浏览器或沙箱进程是否是 Low是否存在低权限进程操作高权限对象失败。9.3 看会话边界确认它运行在哪个 Session重点判断是否在 Session 0是否和当前用户桌面同一个 Session是否远程桌面会话服务是否试图和用户桌面交互。9.4 看 Procmon 结果重点关注ACCESS DENIED REPARSE Virtualized SHARING VIOLATION这些结果往往就是隔离机制的证据。9.5 看是否应该提升权限不是所有失败都要管理员权限。建议先判断场景建议普通配置保存失败优先检查保存路径写系统目录失败优先调整应用数据目录安装驱动或服务需要管理员权限控制高权限窗口检查 IL 与 UAC服务弹窗失败检查 Session 0 隔离不要把“以管理员身份运行”当成万能解法它可能绕过隔离边界也可能扩大安全风险。10. 应用隔离排障流程图为了方便记忆可以把应用隔离排障整理成下面这条流程应用访问失败 / 配置不生效 / 跨进程交互失败确认进程身份查看 User Name 和 Token查看 Integrity Level查看 Session ID用 Procmon 捕获失败行为Result 是什么ACCESS DENIED权限/ACL/ILVirtualized虚拟化重定向REPARSE路径重解析SHARING VIOLATION文件占用调整权限或运行方式确认真实写入位置检查符号链接/重定向路径用 Handle/Process Explorer 查占用验证问题是否解决这个流程的核心不是“碰到失败就提权”而是先定位到底是哪一层隔离机制在起作用。隔离问题要从身份、权限、完整性级别、会话和行为结果几个维度一起看不能只看一个报错。11. 常见误区不要把隔离机制当成系统故障11.1 误区一ACCESS DENIED 就是系统异常ACCESS DENIED很多时候不是异常而是系统按规则拒绝了访问。正确做法是继续判断当前进程是谁目标对象 ACL 是什么是否需要管理员权限完整性级别是否匹配是否触发了安全软件或策略限制。11.2 误区二所有软件都管理员运行这确实可能绕过很多问题但风险很高恶意代码影响范围扩大普通软件获得过高权限UAC 保护被削弱后续问题更难定位用户养成错误习惯。管理员权限应该是临时诊断手段不应该成为长期运行习惯。11.3 误区三服务程序可以随便弹窗现代 Windows 中服务通常在 Session 0与用户桌面隔离。所以服务弹窗、服务启动 GUI、服务和用户桌面交互失败并不是罕见问题。更推荐的设计是服务负责后台逻辑用户态客户端负责界面两者通过 IPC、管道、HTTP、本地端口等方式通信。11.4 误区四老软件配置不生效就是软件坏了老软件配置不生效可能是写入路径被拒绝注册表被虚拟化文件被写到 VirtualStore不同用户看到不同配置程序没有适配现代权限模型。这类问题要用 Procmon 看真实写入路径而不是只看软件界面。12. 总结应用隔离就是 Windows 的多层安全盒子这一节的核心可以压缩成三句话应用程序隔离不是单一功能而是账号权限、完整性级别、会话桌面、虚拟化、作业和应用容器等机制共同组成的安全边界。Process Explorer 可以帮我们看清进程在哪个盒子里Procmon 可以帮我们看清进程在哪一步被规则挡住。遇到权限、访问、配置、交互类问题时不要只说系统异常要判断到底是哪一层隔离边界在起作用。如果用一句话总结应用隔离让同一台 Windows 上的程序既能一起工作又不能随便互相伤害。真正成熟的 Windows 排障不是绕过所有限制而是看懂限制来自哪里再选择合适、最小风险的处理方式。下一节 2.6 会继续讲应用容器 AppContainer。它可以理解为在这些隔离机制之上又加了一层更现代、更严格的沙箱式安全盒子常见于 UWP、Microsoft Store 应用以及部分现代 Windows 安全模型中。13. 本文关键知识点速记应用程序隔离解决的是谁能访问谁谁不能访问谁Access Token 代表进程身份和权限ACL 决定对象允许哪些用户或组访问完整性级别决定进程在系统中的信任等级低完整性进程不能随便操作高完整性进程Session 0 隔离让服务和用户桌面分开UAC 虚拟化会把老程序写系统目录的动作重定向到用户目录Process Explorer 用来看进程盒子属性Procmon 用来看行为在哪里被规则拦下ACCESS DENIED 不一定是异常可能是隔离机制正常工作不要把管理员权限当成万能解法最小权限原则更安全如果这篇文章对你有帮助欢迎继续关注我的《Sysinternals 实战教程》专栏。后续我会继续围绕 Windows Internals、Process Explorer、Process Monitor、权限、句柄、AppContainer 和系统隔离机制整理更多适合桌面支持、系统排障和企业运维场景的实战笔记。 返回顶部点击回到顶部