個人自備裝置(BYOD)-安全輕量化虛擬手機

工研院資通所 吳天健

自攜裝置面臨安全管理挑戰,行動裝置管理技術相應誕生。

截至2018年九月為止,台灣的智慧型手機滲透率已經達到百分之六十[5]。智慧型手機已經取代筆記型電腦,成為工作上最重要的運算設備。然而當員工自攜智慧手機至工作環境使用時,各式式樣自行下載的APP及不同手機中運行的系統服務,亦同時接續入企業內部網路,造成了嚴峻的自攜裝置(BYOD)安全管理挑戰,行動裝置管理(Mobile Device Management)技術相應誕生。行動裝置管理(Mobile Device Management)藉由在智慧手機上加裝安全軟體的方式提供安全規則管理,阻止使用黑名單APP,禁用相機等等。然而盡管嚴格控管智慧終端,卻衍生了智慧終端便利與安全管理不能兼顧之兩難。

另外,有的安全智慧手機(Secure Smartphones)採用移除軟體堆層(Software Stack)的設計方式,大多數的應用程式(Application)與軟體函式庫(Library)被移除,只留下通話功能;不僅移除了安卓作業系統的官方應用商店(Google Play Store),且因為社群軟體有潛在得取用(access)用戶資料的問題,也禁止執行社群軟體。這類的安全智慧手機雖有新穎的硬體,方便好用的大螢幕觸控屏,使用起來卻與功能手機(Feature Phone)差不多,不能滿足現代人的日常需求。

因為公發手機的不便利,有部分工作者攜帶著兩支以上的手機以兼顧辦公室場合與個人的使用;試想,若公司配給了工作用的智慧型手機作為一種生產力工具,然而因為行動裝置管理軟體或安全智慧手機的限制不能安裝時下最流行的通訊軟體LINE,她或他只好再攜帶一支能隨自己心意使用的手機以便與朋友家人連絡了。若是能使一支智慧手機同時支持高度安全以及使用便利的執行環境該有多好? (圖1)

圖1 一支手機適用全部

手持裝置的輕量化虛擬機技術

工研院資料中心系統軟體組致力於研究用於資料中心的虛擬機技術,該類技術的核心為使用容器(Container)與虛擬機器監視器(Hypervisor)讓多個客戶作業系統(Guest OS)使用同一個伺服器物理機的資源,且確保客戶作業系統之間的資料受到隔離保護。智慧型手機的計算機架構(Computer Architecture) 漸趨與伺服器相同,譬如過往功能手機多使用特製的即時作業系統而現今安著手機的軟體底層則是基於Linux核心,過往只適用於伺服器的資源隔離技術如今可用於智慧手機上。

於2016年工業技術研究院提出了基於虛擬機器監視器(HYPERVISOR)技術的虛擬化智慧手機(Virtualized Smartphone)技術[6]。該技術在ASUS ZENFONE上實作,利用ATOM處理器的HYPER MODE,使多個安卓作業系統同時運作且資料完美隔離;該技術新穎的幀緩衝設計,利用維持dirty bitmap資料結構,確保虛擬機與宿主間幀緩衝複製只發生在必要的時候,進而確保系統負擔最小。

儘管前述方案取得一定的成果,然而虛擬機為基礎的方案有兩個限制,第一,啟用HYPERMODE需要硬體支援,同時需要協力廠商提供板級支援包(Board Support Package),第二,客體機器(Guest OS)使用圖形處理器加速(GPU Acceleration)有困難。2015年浙江大學發表了以Linux軟體容器 (Linux Container) 為基礎的虛擬化智慧手機技術 [13] 。工業技術研究院參考其概念完成實作並取名為Clondroid。

介紹Clondroid之前,讓我們先來了解Linux軟體容器 (Linux Container)。它的發展可以追溯至1979年Unix V7實作的chroot系統呼叫: 將程序與它的子程序的根目錄切換到檔案系統的另一個目錄節點。2006年Google啟動了行程容器 (process containers) 計畫 (後更名為cgroup) ,用來限制,計算,與隔離處理器/記憶體/磁碟輸出入/網路的資源使用。[9] 到了2008年LXC (LinuX Containers) 開源專案橫空出世;LXC是一組執行於用戶空間的操作程式與函式庫,程式設計簡潔且不需要額外的核心補丁 (kernel patch) [10] 。接著Docker與Google Kubernetes分別於2013與2017年問世。前述的三個開源專案提供的功能與規模各異,其目的都是便利使用者部屬與管理軟體容器,實際提供隔離與資源管理能力的則是底層的Linux核心,因此這類的技術也被稱為作業系統層虛擬化(operating system level virtualization)。不同的Linux發行版(distribution)皆可在軟體容器內運行,此外也有專門的容器化作業系統(Container OS),如CoreOS [12]。

接著,讓我們進一步談安卓的容器化(Containerized Android)吧。我們將介紹最關鍵的Binder虛擬化(Binder Virtualization)以及安卓系統服務分享。

Binder虛擬化

Binder是安卓系統裡面廣泛使用的行程間通訊 (Inter-Process) 機制。由於安卓App執行於ART執行環境(Android Runtime Environment)裡面,安卓App的記憶體域與安卓作業系統的不同,它們之間的通訊更類似於遠程過程調用(Remote Procedure Call);因此Binder實作於核心之中,當任兩個用戶空間的行程通訊發生的時候,只需要複製一次到核心中即可,這大大的減少了不必要的記憶體複製。

Binder是ServiceManager, 安卓服務(Android Service)與安卓App的橋樑。它們之間交互乃是透過系統呼叫open,ioctl,mmap去操作/dev/binder。虛擬化的方式為,由宿主機(host)提供主要元件Binder驅動(driver)與ServiceManager,軟體容器內不需要這些元件;取而代之的是新增一個核心驅動Virtual Binder,讓軟體容器內的安卓App透過它與宿主機溝通。請見圖3,一個驅動virtualbinder1被新增在既有的/dev/binder與Container 1之間,當Container 1發出addService或getService要求的時候,virtual binder會做服務重命名的動作,這避免了服務命名重複(service name alias);在這個例子中,容器識別碼(container identifier)為1。

圖2 Virtual Binder’s Shared Service
圖3 Virtual Binder Architecture

顯示虛擬化

安卓系統的WindowsManager儲存著系統中的視窗(window),畫面方向(screen orientation),座標(position),豎軸(z-order)等;這些中介資料(meta-data)送給Surfaceflinger,由它負責決定可視空間並渲染(render)之後輸出到屏幕上。

為了讓軟體容器共享那唯一的屏幕,我們讓宿主機執行唯一的且修改過的Surfaceflinger服務,至於每個軟體容器則各自執行它們的WindowsManager。前景容器(foreground container)的視窗豎軸被加上了一個很大的位移植,因此繪圖系統會忽略繪製背景容器的視窗,此時只有前景容器的視窗會渲染在屏幕上。當系統啟動的時候,每個容器的視窗豎軸位移值為自身識別碼(identifier)乘上10,000,識別值最大的容器為預設的前景。當切換前景背景的時候,前景與背景容器的位移值會交換,確保螢幕的顯示正確(如圖5)。

圖4 Switching Display between Containers

透過前述虛擬化的技巧,我們成功在一支Google Pixel2手機上執行了兩個安卓7.1版本的軟體容器。除了宿主機可以正常執行手機的所有功能以外,軟體容器內分別開啟了一個遊戲,與一個影音撥放App,宿主機與兩個軟體容器可以快速的切換畫面且資料各自隔離在分開的檔案系統。為了吸引開發者參與,整個計畫已開源(見圖2)。原始碼存放於最多開發者使用的GITHUB上,存取網址為https://github.com/clondroid/

圖5 ITRI’s initiated open source project hosted on Github

工研院資料中心系統軟體組致力於虛擬化技術的研發。除了資料中心虛擬化以外,研發也擴及於智慧手機。Clondroid開源專案證明了工業技術研究院在行動虛擬化領域的實力,以及擁抱開源社群的態度。開發團隊將持續加強該技術的安全性驗證,以及行動裝置管理後台的功能完整;同時與國內手機業者進行合作,提供高度安全需求單位一個國產安全手機解決方案。

參考文獻

[1] (2018) The Rise and Risk of BYOD [Online]. Available: https://www.druva.com/blog/the-rise-and-risk-of-byod/
[2] (2018) CLONDROID [Online]. Available: https://github.com/clondroid/cba-aosp-marlin-7
[3] (2018) The Case for Making BYOD Safe [Online]. Available: https://www.trendmicro.com/vinfo/us/security/news/internet-of-things/the-case-for-making-byod-safe
[4] Smartphone Virtualization, 2016 IEEE 22nd International Conference on Parallel and Distributed Systems
[5] (2018) Top 50 Countries/Markets by Smartphone Users and Penetration, https://newzoo.com/insights/rankings/top-50-countries-by-smartphone-penetration-and-users/
[6] 用於自攜裝置(BYOD)安全之智慧手機虛擬化技術;卓傳育,林浩澄,洪茂榮(Anthony),電腦與通訊165期
[7] CLONDROID, https://github.com/clondroid/
[8] A Brief History of Containers: From the 1970s to 2017, https://blog.aquasec.com/a-brief-history-of-containers-from-1970s-chroot-to-docker-2016
[9] cgroup, https://en.wikipedia.org/wiki/Cgroups
[10] LXC, https://zh.wikipedia.org/wiki/LXC
[11] CoreOS, https://coreos.com/
[12] 容器虛擬化技術發展; 陳詠翰, 電腦與通訊第167期
[13] A Lightweight Virtualization Solution for Android Devices, Wenzhi Chen, Lei Xu, Guoxi Li, Yang Xiang, IEEE TRANSACTIONS ON COMPUTERS, VOL. 64, NO. 10, OCTOBER 2015 2741

文章轉載自工業技術研究院電腦與通訊月刊