雲計算

安卓實現安卓-光速虛擬機技術內幕

安卓實現安卓-光速虛擬機技術內幕

背景

1.png

光速虛擬機是基於安卓系統和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技術架構圖:
2.png

微軟基於這樣一個背景來做Drawbridge:VM的虛擬化技術效率不高,而傳統的OS虛擬化技術,如Linux Container技術,安全性又不足,所以Drawbridge選擇了一條兩者兼顧的道路,把Kernel的內存狀態放到了Windows Container中,用戶間的隔離更徹底,而各個Container之間依然共享一部分資源,所以相較VM虛擬化效率要高。
Drawbridge繼續發展成為了支持linux的WSL。WSL則是通過Windows內核驅動來是實現linux內核的完整功能,不過技術原理上和Drawbridge有相關性。
8.png

2)Google gVisor介紹
Google gVisor技術架構圖:
3.png

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程序。
4.png
5.png

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%

光速虛擬機的進一步應用
移動端安全
6.png

基於光速虛擬機引擎能力的安全虛擬手機,提供整體可信任的移動端數據安全整體保護方案,包含企業應用防護,移動設備管控,安全審計等功能。
與其他解決方案進行對比,主要優勢:
1,安全虛擬手機有獨立於手機系統的內核和硬件抽象層,安全虛擬手機的內核數據、進程管理、內存管理、文件系統、設備管理獨立於手機系統,具備完整的安全性。現有SDK方案或者沙箱方案和手機系統共用一個內核和安卓框架層,企業應用存在和手機上的其他應用進行通信和數據交互的風險。
2,非侵入式方案,方便部署和管理,方便接入到第三方管理系統,完全不需要企業應用做任何修改,具備更好的兼容性。侵入式方案通常包含SDK方案或者加固方案,需要企業重新打包已有企業應用,存在兼容性以及應用管理問題。
3,特殊安全能力,由於安全虛擬手機的屏幕是一個虛擬的屏幕設備,通過控制屏幕上像素點的顯示方式,支持屏幕盲水印,需要有特殊算法才能計算出盲水印的信息。

跨平臺遷移
7.png

光速虛擬機具備很好的遷移性,不依賴於虛擬化技術、在主流系統平臺包含國產操作系統UOS、Android、Linux、macOS、雲上系統等運行Android和Linux應用程序。
開放合作
光速虛擬機除了產品自身外,正在和行業全方位合作,我們的官網:www.gsxnj.cn。有興趣的同學可以聯繫[email protected]

參考鏈接
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

Leave a Reply

Your email address will not be published. Required fields are marked *