本项目致力于将一些Windows软件进行隔离(虚拟化、容器化),以提供更高的安全性,保护敏感数据。 目前采用的主要思路是利用Windows Sandbox沙箱机制。但是Windows Sandbox并不支持持久化,因此我 们需要利用Sandbox的路径映射机制将部分路径映射到Sandbox中以支持持久化。
目前支持Ruby脚本,在当前目录下运行prepare_containerize.rb准备环境,之后运行
Containerize.wsb,即可在其中安装需要的应用程序。应用程序的持久化文件会被存储在当前目录下的
文件夹中。
由于个人需求,本项目目前支持的应用程序列表可以参见 directory_mappings目录。如果需要将适用范围拓展到其他应用程序, 需要额外的步骤,主要是添加目录映射以将应用程序的文件持久化到主机。
添加目录映射参考步骤: 以下步骤是参考步骤,也是本仓库目前各个应用程序目录映射的获取办法
- 创建一个空白沙箱,准备好安装程序和文件修改监视器(可用 ProcMon/ FileActivityWatch)。
Note: ProcMon在沙箱中运行似乎会有性能等导致的bug,容易导致沙箱闪退,建议使用 FileActivityWatch。
- 打开文件修改监视器,运行安装程序,安装完成后运行一次程序。
- 导出修改的文件列表,并据此确定需要的目录映射(通常包括
AppData/Local、AppData/Roaming等目录,不包括各种Temp目录)。 - 创建应用程序的目录映射文件,并放置到directory_mappings目录。
如果你创建了其他应用程序的目录映射,并测试通过可以正常使用,欢迎贡献到本仓库!
本项目的启发来自于tencent-sandbox, 沙箱主XML的模板也是参考这一项目完成的。非常感谢此项目作者的宝贵思路,以及他们为用户提供安全 的Windows环境所做出的努力!
在尝试收容软件的探索中,参考网络资料,我曾经尝试过许多不同的思路,最终在 tencent-sandbox的启发下选择了 Windows Sanbox这一思路。在此,我将对探索过程中尝试过的方案进行整理,希望能对大家有所启发。
Windows提供了完备的权限控制机制,对于文件系统等资源的访问提供了精细的控制。基于Windows和NTFS 的访问控制策略,我们可以创建一个受限用户,控制其文件系统访问权限,再利用runas运行应用程序以实现 访问控制。可惜,腾讯QQ等程序上来就要求提权,因此此方式对其无效。
注:可能有方式可以模拟UAC提权或绕过UAC提权,但是我没有进行进一步的探索,欢迎补充,如果合适的话 也可以贡献到本仓库中。
Docker等容器化机制显然是理想的选择。可惜,Docker等容器不支持Windows GUI程序的容器化。
Sandboxie提供的数据保护型沙箱机制可以提供良好的保护,而且安装、配置运行均较为方便,是较理想的 解决方案。但是该方案目前存在两个问题:
- Sandboxie在运行腾讯QQ和微信时会报错,尽管似乎并没有影响程序正常功能,但是可能存在没有测试 到的不兼容性;
- Sandboxie实质上是付费软件,其免费模式提供的沙箱并不能实现数据的隔离,需要通过Supporter Certificate(实质上就是订阅机制)来获取增强沙箱,从而实现隔离。
注:尽管Sandboxie是开源软件,但是由于其涉及驱动程序代码,需要取得Windows认证的企业开发者数字 证书方可部署,该证书价格不菲,因此阻碍了普通用户通过自行编译获得免费版本。当然,可以选用测试证书 在本地安装部署,但是对于非专业用户的要求较高,且可能导致额外的风险。欢迎具有企业开发者资质的朋友 编译并分享二进制!
Comodo安全软件提供的虚拟桌面功能可以实现对应用程序的隔离运行,同时开箱即用,操作方便。但是我在 前期使用过程中注意到其资源开销较大,会拖慢系统运行速度。
虚拟机方案的最大问题在于空间占用。我尝试过各种精简版,以及自己精简的Win10、Win11,但是其磁盘空 间占用均在6GB以上,对于配置紧张的用户还是相当可观的开销。同时虚拟机中运行需要首先启动虚拟机,再 运行程序,启动开销较高。使用Win7等更早期的操作系统或许是可行的解决方案,但是由于过于老旧,在未 来可能会逐渐不兼容大部分应用程序。
火绒等安全软件提供了高度可配置的安全防护规则,是一种比较可行的解决方案。其缺点在于规则过于复杂, 可能对普通用户不太友好。