安卓实现安卓-光速虚拟机技术内幕

光速虚拟机是基于安卓系统和ARM处理器架构实现的一套虚拟化技术,在安卓系统的用户态空间无需特殊权限实现了一套完整的安卓内核和硬件抽象层,能够在安卓APP内部运行另外一个安卓系统,虚拟机内部的APP和游戏运行性能能够接近真机的运行性能和兼容性。光速虚拟机也可以认为是一种安卓系统上的库操作系统(libos)。从行业的情况来看,微软和Google分别在不同系统上实现过类似的方案,微软DrawBridge是在Windows上实现Windows,以及其后续发展出来的WSL是Windows上实现linux,Google的gVisor则是linux上实现linux。光速虚拟机是通过安卓来实现安卓。光速虚拟机是市面上第一家在手机上实现完整安卓虚拟化的产品。

选择光速虚拟机作为研发方向主要考虑了如下三种场景:
1) 游戏场景
用户在玩游戏的时候需要多开游戏,或者息屏以后仍然希望游戏能够运行。
由于受到众所周知的原因,华为手机不能安装GooglePlay,外服游戏的用户也会遇到很大障碍。光速虚拟机内部可以预装GooglePlay和内置外服游戏的加速能力。
2) 安全场景
安全场景分为普通用户场景和企业场景。
普通用户在运行一些来路不明的APP的时候,担心隐私泄露、流氓广告的风险。而光速虚拟机将真机系统和虚拟系统实现了隔离,确保用户的信息不会被这些APP收集,也不会受到流氓广告的侵扰。
企业场景主要是安全管控能力,在移动办公领域,对企业办公APP的管控和防数据泄露,通常使用的方案是重打包或者沙箱方案(比如VirtualAPP),这些方案会存在兼容性、部署重、安全管控能力不足的问题。光速虚拟机实现了内核和硬件抽象层,具备可证明的安全性,能够实现对企业APP进行完整安全管控,并且是非侵入式方案,原理上能够达到更好的兼容性和更完整的安全性。
3) 兼容性场景
一些老的应用和游戏对新版本的安卓系统更新不及时,比如安卓10,或者即将升级的安卓11。光速虚拟机内部可以运行安卓4.4-安卓10系统和未来更高版本的安卓系统,目前外发的版本支持安卓7.1.2。这样能保证一些老的应用和游戏能够在新的安卓系统上运行起来。有点类似Windows操作系统的兼容模式。

相关技术介绍
团队分析了目前已经有的用户态虚拟化技术,挑选最具代表微软的Drawbridge&WSL和Google的gVisor,以及国内产商VMOS来进行介绍。
1)Drawbridge&WSL介绍
Drawbridge技术架构图:

微软基于这样一个背景来做Drawbridge:VM的虚拟化技术效率不高,而传统的OS虚拟化技术,如Linux Container技术,安全性又不足,所以Drawbridge选择了一条两者兼顾的道路,把Kernel的内存状态放到了Windows Container中,用户间的隔离更彻底,而各个Container之间依然共享一部分资源,所以相较VM虚拟化效率要高。
Drawbridge继续发展成为了支持linux的WSL。WSL则是通过Windows内核驱动来是实现linux内核的完整功能,不过技术原理上和Drawbridge有相关性。

2)Google gVisor介绍
Google gVisor技术架构图:

gVisor是用Go编写的用户空间内核,它实现了Linux内核系统调用的很大一部分。它包括一个称为runsc的开放容器标准(OCI)运行时,它在应用程序和主机内核之间提供隔离边界。 runsc运行时与Docker和Kubernetes集成,使运行沙盒容器变得简单。

3) VMOS
VMOS采用类似anbox的技术,没有实现完整的内核功能,而是基于现有安卓系统的内核,修改C库函数的基础上在安卓系统上运行另外一个安卓系统,这样实现的问题就是由于对系统调用很难实现完整截获,会引入一些兼容性问题,并且不能根治。

光速虚拟机技术架构
通过上面的分析我们知道,微软Drawbridge是在Windows上实现Windows,Google的gVisor则是linux上实现linux。光速虚拟机则是通过Android来实现Android,我们在安卓用户态实现了一个完整的安卓内核和安卓硬件抽象层。从工程角度来看,光速虚拟机比gVisor实现的困难度要大不少,手机终端的多样性远大于后台linux服务器版本的多样性,对性能的要求也更加严苛。光速虚拟机除了能在安卓上运行安卓,实现了跨系统的迁移层,具有很好的迁移性,能够在国产操作系统UOS、Linux、macOS和云上来运行安卓和linux程序。

1,完整的安卓内核
安卓内核基于linux内核,多了一些特殊设备比如binder的实现。光速虚拟机将真机安卓内核视为一种资源,在其基础上完整实现了内存管理,进程管理,文件系统和设备管理等安卓内核功能。对上层提供标准的安卓内核接口。这样安卓虚拟机内部运行的安卓系统将不依赖于手机内核的实现,可以实现在安卓5-安卓11上运行任意版本的安卓系统,这意味着可以在安卓5的手机上运行安卓7,或者安卓11。目前光速虚拟机外发发布版本主要支持安卓7。

从安全角度来看,相对于沙箱或者加固重打包方案,由于光速虚拟机是独立于主机的内核,能够实现更好的安全性和隔离性。也不会因为主机内核的漏洞导致APP之间的互相穿透行为。

2,完整的硬件抽象层次
光速虚拟机基于真机系统的安卓资源,实现了一个完整的硬件抽象层包含显示屏幕、输入输出设备、蓝牙等。这样能对虚拟机内部的APP使用硬件资源能够进行很强的管控。甚至可以的对屏幕打盲水印这样一些特殊安全能力。

3,精简的安卓系统
光速虚拟机目前会携带一个精简的安卓系统,目前系统是基于AOSP7.1.2精简而来,大小在170M左右,外发版本因为普通用户的一些需求会有200多M,未来比较方便扩展到安卓其他版本。

光速虚拟机实现过程中的主要技术难点:
1) 系统调用的兼容性
光速虚拟机内核对自身内部运行的APP是根据linux内核4.14的标准来实现的。
由于各个安卓系统所基于的linux内核版本不一致,各个厂商对内核也有会很多修改,光速虚拟机对真机内核使用的时候尽可能按照最少使用原则来,尽可能不使用新内核的新特性。这种方式对光速虚拟机内核实现的难度和复杂度都比较大,却能得到比较好的兼容性。

2) 系统调用的完备性
1、基于主操作系统内核来实现300多个系统调用,具有非常大的工程难度和工作量。
2、沙箱技术目前面临的最大问题是系统调用的完备性问题,沙箱通过HOOK C库函数的方式拦截所有系统调用,对于一些加固加壳的应用或者游戏,这些加固的代码不通过C库直接调用系统调用,对于这些系统调用没有通用的HOOK办法来实现拦截,需要通过搜索特征码的方式来实现。沙箱技术可以通过seccomp来实现对系统调用的拦截(seccomp是linux的一种安全机制,可以设置条件接管应有的所有系统调用),但是由于地址随机化ASLR的原因,沙箱很难区分系统调用是来自于C库还是来自于应用自身的直接调用,意味着每一个系统调用都需要进出两次内核,性能开销很大。光速虚拟机由于拥有相对完整的内核实现,比较好的解决这个问题,即兼顾性能又能实现系统调用监控的完备性。

3) TLS的处理
TLS (Thread Local Storage)是操作系统比较重要的特性,线程本地存储。
本质上虚拟机是真机上的一个APP,虚拟机里面运行的APP包含的进程是真机上的进程。如果虚拟机进程使用真机的TLS,会导致从虚拟机进入真机或者从真机回到虚拟机出现数据混乱的情况。这时就需要进程在虚拟机内部TLS和真机TLS的切换过程。虚拟机需要完整实现虚拟机内部TLS到真机TLS的互相切换过程。

4) 渲染的性能处理
虚拟机包括安卓模拟器的渲染处理,一般是将虚拟系统内部的OpenGLES渲染指令通过管道的方案发送到窗口进程来完成渲染的处理。由于渲染传输的数据非常大,又是跨进程通信,导致会有比较大的性能损耗,用户在玩游戏的过程中会有延迟的感觉。光速虚拟机的渲染没有通过管道传输到渲染窗口,而是直接穿透虚拟机直接调用真机的渲染接口来完成渲染指令的计算,然后合成到渲染窗口,这样性能基本接近真机的渲染性能。

5) 线程数量的控制
华为手机为了提示EMUI的性能,对单个APP有线程数量限制,比如mate8之前的手机有500个线程的数量限制,这样会导致虚拟机里面如果打开多个APP会触发这个线程数量的限制(虚拟机本质上是一个APP)。为了解决这个问题,虚拟机采用了线程池的方案。在虚拟机内核里面建立一个虚拟CPU,虚拟CPU包含了一个真机的线程池,虚拟机里面的APP创建线程的时候,实际上并不对应真机上真正的线程,由虚拟机的虚拟CPU来完成对APP线程的调度。

兼容性和性能评估
安全虚拟手机在安卓内核基础上完整模拟了一个新的内核和硬件抽象层,性能、兼容性接近真机。
应用兼容性:
一个完整的安卓运行环境,技术原理上可以做到跟用户手机的兼容一致。光速虚拟机发布情况来看兼容市面上绝大部分应用和游戏。
手机兼容性:
光速虚拟机支持Android5.1-Android10的手机系统。内存方面,需要手机的内存大于等于2G

光速虚拟机在性能方面做了比较多的优化工作,实际测试来看,性能方面:
1,主流应用启动时间相比真机影响<5%
2,主流应用运行内存占用,CPU开销相比真机影响<5%
3, 主流游戏性能帧率影响,渲染一帧所花时间跟真机对比影响<5%

光速虚拟机的进一步应用
移动端安全

基于光速虚拟机引擎能力的安全虚拟手机,提供整体可信任的移动端数据安全整体保护方案,包含企业应用防护,移动设备管控,安全审计等功能。
与其他解决方案进行对比,主要优势:
1,安全虚拟手机有独立于手机系统的内核和硬件抽象层,安全虚拟手机的内核数据、进程管理、内存管理、文件系统、设备管理独立于手机系统,具备完整的安全性。现有SDK方案或者沙箱方案和手机系统共用一个内核和安卓框架层,企业应用存在和手机上的其他应用进行通信和数据交互的风险。
2,非侵入式方案,方便部署和管理,方便接入到第三方管理系统,完全不需要企业应用做任何修改,具备更好的兼容性。侵入式方案通常包含SDK方案或者加固方案,需要企业重新打包已有企业应用,存在兼容性以及应用管理问题。
3,特殊安全能力,由于安全虚拟手机的屏幕是一个虚拟的屏幕设备,通过控制屏幕上像素点的显示方式,支持屏幕盲水印,需要有特殊算法才能计算出盲水印的信息。

跨平台迁移

光速虚拟机具备很好的迁移性,不依赖于虚拟化技术、在主流系统平台包含国产操作系统UOS、Android、Linux、macOS、云上系统等运行Android和Linux应用程序。并且可以和Intel CPU的SGX或者arm CPU的trustzone技术结合来完成可信计算。

开放合作
光速虚拟机除了产品自身外,正在和行业全方位合作,我们的官网:www.gsxnj.cn。

参考链接
1) https://www.microsoft.com/en-us/research/project/drawbridge/
2) https://docs.microsoft.com/zh-cn/archive/blogs/wsl/
3) https://github.com/google/gvisor
4) www.gsxnj.cn
5) www.vmos.com
6) https://anbox.io/
7) https://github.com/asLody/VirtualApp

(完)