網(wǎng)絡(luò)安全攻防:Android系統(tǒng)安全之安全機制
Android是一種基于Linux的、自由的、開源的操作系統(tǒng)。它主要使用于移動設(shè)備,如智能手機和平板電腦,由Google公司和開放手機聯(lián)盟開發(fā)。Android系統(tǒng)架構(gòu)可以分為4層結(jié)構(gòu),由上至下分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運行庫層以及內(nèi)核層,如圖1所示。
圖1 Android系統(tǒng)結(jié)構(gòu)
Android應(yīng)用層允許開發(fā)者無須修改底層代碼就能對設(shè)備的功能進行拓展,Android的應(yīng)用程序框架層為開發(fā)者提供了大量的API來訪問Android的設(shè)備。
Android 應(yīng)用和Android 框架都是用 Java 語言開發(fā)的,并運行在 DalvikVM 中運行。DalvikVM的作用主要就是為操作系統(tǒng)底層提供一個高效的抽象層。DalvikVM是一種基于寄存器的虛擬機,能夠解釋執(zhí)行Dalvik可執(zhí)行格式DEX的字節(jié)碼,Android 應(yīng)用和Android 框架都是用 Java 語言開發(fā)的,并運行在 DalvikVM 中運行。DalvikVM的作用主要就是為操作系統(tǒng)底層提供一個高效的抽象層。DalvikVM是一種基于寄存器的虛擬機,能夠解釋執(zhí)行Dalvik可執(zhí)行格式DEX的字節(jié)碼,
Android 將安全設(shè)計貫穿系統(tǒng)架構(gòu)的各個層面,覆蓋系統(tǒng)內(nèi)核、虛擬機、應(yīng)用程序框架層以及應(yīng)用層各個環(huán)節(jié),力求在開放的同時,也能保護用戶的數(shù)據(jù)、應(yīng)用程序和設(shè)備安全。
1. Android進程沙箱隔離機制
進程沙箱隔離機制,使Android應(yīng)用程序在安裝時被賦予獨特的用戶標識(UID),并永久保持。應(yīng)用程序及其運行的Dalvik虛擬機運行在獨立的Linux進程空間,與其他應(yīng)用程序完全隔離,如圖2所示。
圖2 Android進程沙箱隔離機制
在特殊情況下,進程間還可以存在相互信任關(guān)系。如源自同一開發(fā)者或同一開發(fā)機構(gòu)的應(yīng)用程序,通過Android提供的共享UID(Shared UserId)機制,使具備信任關(guān)系的應(yīng)用程序可以運行在同一進程空間。
2. 應(yīng)用程序簽名機制
規(guī)定 APK 文件必須被開發(fā)者進行數(shù)字簽名,以便標識應(yīng)用程序作者和在應(yīng)用程序之間的信任關(guān)系。在安裝應(yīng)用程序APK時,系統(tǒng)安裝程序首先檢查APK是否被簽名,有簽名才能安裝。當應(yīng)用程序升級時,需要檢查新版應(yīng)用的數(shù)字簽名與已安裝的應(yīng)用程序的簽名是否相同,否則,會被當作一個新的應(yīng)用程序。Android 開發(fā)者有可能把安裝包命名為相同的名字,通過不同的簽名可以把它們區(qū)分開來,也保證簽名不同的安裝包不被替換,同時防止惡意軟件替換安裝的應(yīng)用。
3. 權(quán)限聲明機制
要想在對象上進行操作,就需要把權(quán)限和此對象的操作進行綁定。不同級別要求應(yīng)用程序行使權(quán)限的認證方式也不一樣,Normal級申請就可以使用,Dangerous級需要安裝時由用戶確認,Signature和SignatureOrSystem級則必須是系統(tǒng)用戶才可用。
4. 進程通信機制
基于共享內(nèi)存的 Binder 實現(xiàn),提供輕量級的遠程進程調(diào)用(RPC)。通過接口描述語言(AIDL)定義接口與交換數(shù)據(jù)的類型,確保進程間通信的數(shù)據(jù)不會溢出越界,如圖3所示。
圖3 進程通信機制
5. 內(nèi)存管理機制
基于Linux的低內(nèi)存管理機制,設(shè)計實現(xiàn)了獨特的LMK,將進程重要性分級、分組,當內(nèi)存不足時,自動清理級別進程所占用的內(nèi)存空間。同時,引入的 Ashmem 內(nèi)存機制,使Android具備清理不再使用共享內(nèi)存區(qū)域的能力。
正是因為Android采用多層架構(gòu),在保護信息安全的同時,也保證開放平臺的靈活性。