Win32 App Isolation测试感想

发布于 2023-05-30  940 次阅读


前段时间听说微软推出了一个很有意思的预览版功能——Win32 App Isolation,号称可以通过容器将Win32软件隔离,防止其读取容器外的资源,达到一定的边界防护效果。

看它的描述,感觉有点像是微软版的VMware ThinApp,似乎能够用它打包一些不那么干净的软件,防止乱读乱写行为。

读完安装指导,下好软件,这就来试试看它好不好用。

1.获取软件

Win32 App Isolation预览版下载地址:https://github.com/microsoft/win32-app-isolation/releases

MSIX打包工具的使用说明:https://github.com/microsoft/win32-app-isolation/blob/main/docs/packaging/msix-packaging-tool.md

2.生成PFX证书

通过MSIX打包软件时,需要使用证书对软件进行签名,才能确保打包后的软件能正常安装。

没签名或者签名不受信任的MSIX软件包是无法正常安装的。

省事一点的方式是通过Windows SDK生成一个自签名PFX证书。

2.1.获取Windows SDK

装过Visual Studio的电脑可以直接通过VS添加Windows SDK。

我用的是一台新部署的虚拟机,不想专门去装Visual Studio,因此就直接找Windows SDK的安装包了。

Windows SDK安装包下载地址:https://developer.microsoft.com/zh-cn/windows/downloads/windows-sdk/

2.2.生成自签名证书

找了篇微软的文档(https://learn.microsoft.com/zh-cn/windows/msix/package/create-certificate-package-signing),依葫芦画瓢地生成了一份自签名的PFX证书。

启动PowerShell,输入命令生成自签名证书。自签名证书的格式是New-SelfSignedCertificate -Type Custom -Subject "CN=<公用名称>, O=<单位名称>, C=<国家缩写>" -KeyUsage DigitalSignature -FriendlyName "<证书别名>" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") -NotAfter (Get-Date).AddYears(<证书有效期>)

反正是测着玩的,就直接复制了文档中的示例代码,有效期设置个100年。

New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") -NotAfter (Get-Date).AddYears(100)

命令执行后稍等几秒钟,证书就生成完毕了。执行以下命令进入证书所在的目录,查看刚才生成的证书。

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

注意记下证书的指纹(Thumbprint),接下来需要根据证书指纹进行导出。

Win32 App Isolation测试感想

2.3.导出PFX证书

导出证书前,必须为证书设置一个密码。

首先执行以下命令将密码转换成密钥字符串。偷懒起见,我设的密码就叫“Your_Password”。

$password = ConvertTo-SecureString -String Your_Password -Force -AsPlainText

接着使用刚刚生成的密钥字符串导出证书。命令格式是

Export-PfxCertificate -cert "Cert:\CurrentUser\My\<证书指纹>" -FilePath <导出位置> -Password $password

这里是导出到了我的文档里面。

Export-PfxCertificate -cert "Cert:\CurrentUser\My\6028F872F8DFEED3FD7393092007DAEE9B4F013D" -FilePath C:\Users\VMware\Documents\demo.pfx -Password $password

2.4.导出CER证书

同时也需要导出一份CER证书,用于将生成的自签名证书添加到受信任的根证书里面。

Export-Certificate -cert "Cert:\CurrentUser\My\6028F872F8DFEED3FD7393092007DAEE9B4F013D" -FilePath C:\Users\VMware\Documents\demo.cer

3.打包MSIX软件包

准备好2个证书文件后,终于可以开始打包软件了。

随手用Firefox 52.9 ESR安装包试试。

3.1.安装MSIX Packaging Tool

第一步,当然是解压从GitHub下载的压缩包,并安装里面的MSIX Packaging Tool打包工具。

Win32 App Isolation测试感想

3.2.启动打包向导

运行MSIX Packaging Tool,选择“应用软件包”进入新建程序包向导。

向导在确认操作系统环境正常后,就可以选择一个软件的安装包,将其进行打包了。

软件选择完毕后,别忘了设置一下PFX证书签名。“密码”一栏填写导出证书时使用的那个密码。

Win32 App Isolation测试感想

3.3.运行软件安装包

执行到“安装”这一步时,向导会运行刚才选择的软件安装包。按照正常步骤将软件安装一遍即可。

3.4.选择首次启动任务

软件安装完成后,需要指定软件的入口点。打包后的MSIX软件将通过这里选择的入口点运行容器中的软件。

Firefox的场合,入口点是firefox.exe这个文件。

Win32 App Isolation测试感想

3.5.完成打包

将打包好的MSIX安装包保存到指定位置,大功告成。

接下来也可以选择启动程序包编辑器,对MSIX安装包进行进一步的修改。

Win32 App Isolation测试感想

4.安装MSIX软件

换一个虚拟机,将打包好的MSIX软件包和导出的CER证书复制过去。

4.1.导入CER证书

双击CER证书,将它导入到“受信任的根证书颁发机构”中。

Win32 App Isolation测试感想

4.2.运行MSIX软件包

证书导入完成,就可以正常安装MSIX软件包,并且开始效果测试啦。

5.个人吐槽

通过MSIX打包后的软件由于是运行在容器中,因此配置文件通过一层虚拟化技术保存到了……不知道哪儿%LocalAppData%目录(C:\Users\{用户名}\AppData\Local\Packages\{包名} \)。感谢评论区GoldenPotato137大佬提供的情报。

回到文章开头的吐槽,这个Win32 App Isolation和VMware ThinApp确实有很多异曲同工之处,都能达到将软件沙箱化的效果。不过两者的侧重点不同,VMware那边更注重兼容与便携,而这边则是着力于隐私与安全。

但说到安全,现在我用着刚刚打包的MSIX版Firefox写着这篇文章,图片文件夹里的截图看样子依旧能正常通过Firefox读取与上传,暂时没有达到宣称的阻止访问容器外数据的效果。

考虑到这只是个早期预览版,更强大的数据隔离功能或许还要等到之后的版本再实装。期待正式版能看到不错的效果。