前言 这篇文章最初由盆盆发表在华来四微信公众号(微信号:sysinternal)。Spartan是Windows 10里的最新浏览器,据说要取代统治已久的IE浏览器!那么我们来看看这个最新的Spartan浏览器和Chrome在性能和安全性方面的到底孰优孰劣呢?对了,盆盆还会顺手捎带Cortana的部分特性。
盆盆使用的Windows 10已经升级到最新的10061版本。里面自带了微软最新的Spartan浏览器,据说今后将会取代IE浏览器。
那么这款最新的Spartan浏览器,和Chrome相比,在性能和安全性方面到底孰优孰劣呢?
沙盒技术
大家都知道Chrome浏览器实现了自有的沙盒(sandbox)技术,所谓沙盒,从安全的角度看和Docker类似,都是一种进程隔离技术。
以下是Chrome沙盒原理示意图,具体解释可以参考以下网页。大致意思是Chrome会有一个高级进程,充当代理(Broker)。而每个网页,则独立封装在一个沙盒进程中,而类似保存文件等高特权的操作,都由Broker进程代劳。Broker进程和沙盒之间通过IPC机制通信。
https://www.chromium.org/developers/design-documents/sandbox
而Spartan浏览器同样采用Windows 10自有的沙盒技术,叫做App Container技术。同样会有一个高级进程,充当代理,名称叫做browser_broker.exe。而每个网页对应的进程叫做spartan_edge.exe。代理进程负责启动网页,同时执行类似文件保存等高特权动作。
对于Chrome来说,其Flash支持也作为一个独立的沙盒进程来实现,这样安全性更高。由于Chrome的子进程名称完全一样,所以可以从其线程中获知其Flash支持的进程是哪一个。
而对于Spartan来说,其Flash支持也是作为一个普通的独立进程而存在,但并不是沙盒进程。
性能对比
Spartan浏览器和Chrome到底谁性能更好?
其实比较难对比,因为两者的渲染引擎不同,得看网页本身的支持,不能光看内存占用等指标。
为了公平起见,这里对空白网页的两个浏览器的内存占用进行比较,同时再比较启动新浪微博时的内存占用。
Spartan
当启动空白网页时,Spartan一共启动5个进程,其内存占用的截图如下。这些进程一共占用约43MB内存。
当我们把鼠标焦点指向地址栏并准备输入内容时,Spartan会启动一个新的Spartan_edge进程,其父进程为spartan。该进程专门用来接收地址栏操作。
输入新浪微博地址并回车,再查看内存占用,如截图所示。由于地址栏对应的进程过段时间会退出(也可以手动关闭)。所以一共消耗内存为182MB,如果算上地址栏进程,则一共为223MB。
整理如下表所示。
Chrome
同理统计Chome的空白网页内存占用,共计消耗207MB内存,比Spartan多约150MB。
当打开新浪微博时,共计消耗338MB内存,如果不算Spartan的地址栏进程,则多出约150MB内存,如果算上的话,则多出约110MB内存。
整理如下表所示。
这里还是得说明,内存占用不能作为两者性能的最终要素,不过Spartan还有杀手锏。当我们把网页最小化后,我们会发现其对应的Spartan进程马上暂停,从而把CPU占有率降到0。如果恢复网页大小,则进程立即恢复运行。
其实Spartan浏览器,完全是一个Metro风格的进程。
盆盆点评 两者的性能比较,单就访问微博的内存占用而言,Spartan更胜一筹。
安全对比
接下来再看看Spartan和Chrome安全能力的对比。
Spartan
Spartan采用了Windows 10 Metro风格进程的沙盒技术,可以看到其网页进程的完整性级别是Low,表示其采用了Windows保护模式。
盆盆从2005年开始就开始研究保护模式,当时还帮助支付宝解决和IE的兼容性问题。完整性级别为Low的进程,只能访问以下资源:
.Read access to most files
.Write access to %USER PROFILE%\AppData\LocalLow
.Read access to most of the registry
.Write access to HKEY_CURRENT_USER\Software\AppDataLow
.Clipboard (copy and paste for certain formats)
.Remote procedure call (RPC)
.TCP/IP Sockets
.Window messages exposed via ChangeWindowMessageFilter
.Shared memory exposed via LI (low integrity) labels
.COM interfaces with LI (low integrity) launch activation rights
.Named pipes exposed via LI (low integrity) labels
同时在网页进程里,我们还可以看到该进程所具有的资源访问能力,例如指定Internet连接、家庭和工作网络访问能力等等,如附图所示。
开始菜单里的Cortana也是采用类似的沙盒技术。
可以看到Cortana进程要求更多的资源访问能力。通过这种对进程的资源访问能力加以限制,可以让Windows 10的沙盒进程获得更好的隔离能力。
再回到Spartan的安全属性对话框,可以看到其中有一个S-15-2开头的SID被标记为AppContrainer。
除了采用保护模式和限制资源访问能力,Windows 10沙盒还利用了远程桌面的会话隔离技术。
用WinObj工具可以看到,在当前的用户会话1中多出了一个名为AppContrainerNamedObjects文件夹,Spartan沙盒在其下创建了一个以上述S-1-15-2开头SID为名的子文件夹,Spartan沙盒进程所需的事件、信号对象以及RPC控制对象都会放在这里。
Chrome
Chrome的沙盒技术利用了Windows自有的安全技术,可以看到其进程的安全级别比Chrome更低,没有任何特权,而且几乎所有的SID都标记为Deny。
同时如果查看网页进程的句柄,可以发现其没有用户桌面的访问能力,在如下的截图中,我们可以看到该进程并没有WinSta0窗口站的访问能力。根据谷歌官网的说法,这可以防止网页进程里可能存在的恶意代码向用户桌面发动粉碎攻击的可能。
但是盆盆不太清楚,既然网页进程没有用户桌面的句柄,那这个网页又是如何显示在用户桌面上的呢?不知道是不是通过IPC机制让Broker进程代劳,很显然Broker进程拥有用户桌面的句柄。
盆盆点评 两者的安全对比,Spartan和Chrome都采用沙盒技术,都完全满足用户安全浏览的需求。两者难分伯仲。