![]() 眾所周知,Android 系統(tǒng)是一個開源的智能設(shè)備系統(tǒng),因?yàn)榧軜?gòu)開放、移動計算和網(wǎng)絡(luò)互聯(lián)能力強(qiáng)大的 原因,很容易存在被攻擊的安全隱患。為了確保信息安全,Android 系統(tǒng)本身需要打造一個安全的架構(gòu)規(guī)范 機(jī)制,并讓這個機(jī)制貫穿整個系統(tǒng)架構(gòu)的內(nèi)核、虛擬機(jī)、應(yīng)用框架層以及應(yīng)用層等各個環(huán)節(jié)中。只有這樣, 才能保證在 Android 平臺上保護(hù)用戶數(shù)據(jù)、應(yīng)用程序、設(shè)備和網(wǎng)絡(luò)信息的安全性。本文將詳細(xì)講解 Android 系統(tǒng)安全機(jī)制的基本知識,為讀者學(xué)習(xí) Android 后面的知識打下基礎(chǔ)。 一、在Android系統(tǒng)的應(yīng)用層中,提供了如下安全機(jī)制模型。 使用顯式定義經(jīng)用戶授權(quán)的應(yīng)用權(quán)限控制機(jī)制的方法,系統(tǒng)規(guī)范并強(qiáng)制各類應(yīng)用程序的行為準(zhǔn)則與權(quán)限許可。 提供了應(yīng)用程序的簽名機(jī)制,實(shí)現(xiàn)了應(yīng)用程序之間的信息信任和資源共享。概覽整個 Android 系統(tǒng)的框架結(jié)構(gòu),其安全機(jī)制的具體特點(diǎn)如下。采用不同的層次架構(gòu)機(jī)制來保護(hù)用戶信息的安全,并且不同的層次可以保證各種應(yīng)用的靈活性。 鼓勵更多的用戶去了解應(yīng)用程序的工作過程,鼓勵用戶花費(fèi)更多的時間和注意力來關(guān)注移動設(shè)備的安全性。無懼惡意軟件的威脅,并擁有堅定決心消滅這些威脅。時刻防范第三方惡意應(yīng)用程序的攻擊。時刻做好風(fēng)險控制工作,一旦安全防護(hù)系統(tǒng)崩潰,要盡量減少損失,并盡快恢復(fù)。根據(jù)上述模型,Android 安全系統(tǒng)提供了如下的安全機(jī)制。 (1)內(nèi)存管理 Android 內(nèi)存管理機(jī)制基于標(biāo)準(zhǔn) Linux 的 OOM(低內(nèi)存管理)機(jī)制,實(shí)現(xiàn)了低內(nèi)存清理(LMK)機(jī)制,將所有的進(jìn)程按照重要性進(jìn)行分級,系統(tǒng)會自動清理最低級別進(jìn)程所占用的內(nèi)存空間。另外,還引入 Android 獨(dú)有的共享內(nèi)存機(jī)制 Ashmem,此機(jī)制具有清理不再使用共享內(nèi)存區(qū)域的能力。 (2)權(quán)限聲明 Android 應(yīng)用程序需要顯式聲明權(quán)限、名稱、權(quán)限組與保護(hù)級別,只有這樣才能算是一個合格的 Android 程序。在 Android 系統(tǒng)中規(guī)定:不同級別應(yīng)用程序的使用權(quán)限時的認(rèn)證方式不同,具體說明如下所示。 Normal級:申請后即可用。 Dangerous級:在安裝時由用戶確認(rèn)后方可用。 Signature與Signatureorsystem級:必須是系統(tǒng)用戶才可用。 (3)應(yīng)用程序簽名 Android 應(yīng)用程序包(.apk 格式文件)必須被開發(fā)者數(shù)字簽名,同一名開發(fā)者可以指定不同的應(yīng)用程序共享 UID,這樣可以運(yùn)行在同一個進(jìn)程空間以實(shí)現(xiàn)資源共享。 (4)訪問控制 通過使用基于 Linux 系統(tǒng)的訪問控制機(jī)制,可以確保系統(tǒng)文件與用戶數(shù)據(jù)不受非法訪問。 (5)進(jìn)程沙箱隔離 Android 應(yīng)用程序安裝時會被賦予一個獨(dú)特的用戶標(biāo)識(UID),這個標(biāo)識被永久保持。當(dāng) Android 應(yīng)用程序及其運(yùn)行的 Dalvik VM 運(yùn)行于獨(dú)立的 Linux 進(jìn)程空間中時,會將與 UID 不同的應(yīng)用程序隔離出來。 (6)進(jìn)程通信 Android 采用 Binder 機(jī)制提供的共享內(nèi)存實(shí)現(xiàn)進(jìn)程通信功能,Binder 機(jī)制基于 Client-Server 模式,提供 了類似于 COM 和 CORBA 的輕量級遠(yuǎn)程進(jìn)程調(diào)用(RPC)。通過使用 Binder 機(jī)制中的接口描述語言(AIDL) 來定義接口與交換數(shù)據(jù)的類型,可以確保進(jìn)程間通信的數(shù)據(jù)不會發(fā)生越界操作,影響進(jìn)程的空間。 二、Android 具有的權(quán)限 Android 安全結(jié)構(gòu)的核心思想:在默認(rèn)的情況下應(yīng)用程序,不可以執(zhí)行任何對其他應(yīng)用程序、系統(tǒng)或者 用戶帶來負(fù)面影響的操作。對于開發(fā)者來說,只有了解并把握 Android 的安全架構(gòu)的核心,才能設(shè)計出在使 用過程中更加流暢的用戶體驗(yàn)程序。 根據(jù)用戶的使用過程體驗(yàn),可以將和 Android 系統(tǒng)相關(guān)的權(quán)限分為如下三類。Android手機(jī)所有者權(quán)限:自用戶購買Android手機(jī)(如Samsung GT-i9000)后,用戶不需要輸入任何密碼,就具有安裝一般應(yīng)用軟件、使用應(yīng)用程序等的權(quán)限。Android root權(quán)限:該權(quán)限為Android系統(tǒng)的最高權(quán)限,可以對所有系統(tǒng)中文件、數(shù)據(jù)進(jìn)行任意操作。出廠時默認(rèn)沒有該權(quán)限,需要使用z4Root等軟件獲取,但并不鼓勵進(jìn)行此操作,因?yàn)榭赡芤虼耸褂?戶失去手機(jī)原廠保修的權(quán)益。同樣,如果將Android手機(jī)進(jìn)行root權(quán)限提升,則此后用戶不需要輸入 任何密碼,都將能以Android root權(quán)限來使用手機(jī)。Android應(yīng)用程序權(quán)限:Android提供了豐富的SDK,開發(fā)人員可以根據(jù)其開發(fā)Android中的應(yīng)用程序。而應(yīng)用程序?qū)ndroid系統(tǒng)資源的訪問需要有相應(yīng)的訪問權(quán)限,這個權(quán)限就稱為Android應(yīng)用程序權(quán) 限,在應(yīng)用程序設(shè)計時設(shè)定,在Android系統(tǒng)中初次安裝時即生效。需要注意的是,如果應(yīng)用程序 設(shè)計的權(quán)限大于Android手機(jī)所有者權(quán)限,則該應(yīng)用程序無法運(yùn)行。例如,沒有獲取Android root權(quán) 限的手機(jī)無法運(yùn)行Root Explorer,因?yàn)檫\(yùn)行該應(yīng)用程序需要Android root權(quán)限。 三、Android 的組件模型(Component Model)。 Activity:Activity就是一個界面,這個界面中可以放置各種控件,例如,Task Manager的界面、RootExplorer的界面等。Service:服務(wù)是運(yùn)行在后臺的功能模塊,如文件下載、音樂播放程序等。Content Provider:是Android平臺應(yīng)用程序間數(shù)據(jù)共享的一種標(biāo)準(zhǔn)接口,以類似于URI(UniversalResources Identification)的方式來表示數(shù)據(jù),content://contacts/people/1101。Broadcast Receiver:與Broadcast Receiver組件相關(guān)的概念是Intent,Intent是一個對動作和行為的抽 象描述,負(fù)責(zé)組件之間及程序之間進(jìn)行消息傳遞。而Broadcast Receiver組件則提供了一種把Intent作為一個消息廣播出去,由所有對其感興趣的程序?qū)ζ渥鞒龇磻?yīng)的機(jī)制。 四、Android 安全訪問設(shè)置。 在 Android 系統(tǒng)中,每個應(yīng)用程序的 APK(Android Package)包中都包含AndroidManifest.xml 文件,該文件除了羅列應(yīng)用程序運(yùn)行時庫、運(yùn)行依賴關(guān)系等之外,還會詳細(xì)地羅列出該應(yīng)用程序所需的系統(tǒng)訪問。AndroidManifest.xml 文件的基本格式如下所示。 <?xml version='1.0' encoding='utf-8'?> <manifest xmlns:android='http://schemas./apk/res/android' package='cn.com.fetion.android' android:versionCode='1' android:versionName='1.0.0'> <application android:icon='@drawable/icon' android:label='@string/app_name'> <activity android:name='.welcomActivity' android:label='@string/app_name'> <intent-filter> <action android:name='android.intent.action.MAIN' /> <category android:name='android.intent.category.LAUNCHER' /> </intent-filter> </activity> </application> 文: 劉云, 朱桂英 版權(quán)歸原作者所有 |
|