一種基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法
【專利摘要】本發(fā)明公開一種基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法,包括以下步驟:定義狀態(tài)屬性、擴(kuò)展AndroidManifest.xml文件、獲取狀態(tài)屬性和實(shí)施權(quán)限訪問控制策略。本發(fā)明擴(kuò)展了Android應(yīng)用的AndroidManifest.xml文件,在申請(qǐng)權(quán)限的標(biāo)簽中增加表示權(quán)限使用條件的子標(biāo)簽,權(quán)限訪問控制策略的實(shí)施分為應(yīng)用安裝階段和運(yùn)行階段兩部分,用戶在安裝時(shí)若拒絕應(yīng)用聲明的權(quán)限使用條件可中止安裝;已安裝的應(yīng)用在運(yùn)行時(shí)使用權(quán)限若不滿足聲明的使用條件也會(huì)被系統(tǒng)拒絕,另外本發(fā)明對(duì)AndroidManifest.xml文件的擴(kuò)展可以和當(dāng)前的格式兼容,不影響現(xiàn)存應(yīng)用的安裝和使用。
【專利說(shuō)明】-種基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方 法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及智能手機(jī)安全【技術(shù)領(lǐng)域】,具體涉及一種基于運(yùn)行環(huán)境狀態(tài)的Android 權(quán)限細(xì)粒度訪問控制方法。
【背景技術(shù)】
[0002] 首先對(duì)本發(fā)明中用到的縮寫進(jìn)行定義:
[0003] XML (Extensible Markup Language):可擴(kuò)展標(biāo)記語(yǔ)言;
[0004] UID(User Identifier):用戶標(biāo)識(shí)符;
[0005] GID (Group Identifier):組標(biāo)識(shí)符。
[0006] An dr 〇 i d是一個(gè)多進(jìn)程系統(tǒng),系統(tǒng)和應(yīng)用之間的安全性是通過給應(yīng)用程序分配 UID和GID,在進(jìn)程級(jí)別強(qiáng)制實(shí)現(xiàn)的,而更細(xì)化的安全特性則是通過Permission (權(quán)限)機(jī) 制對(duì)特定的進(jìn)程的特定操作進(jìn)行限制,其中心思想是:應(yīng)用程序在默認(rèn)的情況下不可以執(zhí) 行任何可能對(duì)其他應(yīng)用程序、系統(tǒng)或者用戶帶來(lái)負(fù)面影響的操作,包括讀/寫用戶的私有 數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)或E-mail數(shù)據(jù))、讀/寫另一個(gè)應(yīng)用程序的文件、進(jìn)行網(wǎng)絡(luò)連接等。
[0007] Android系統(tǒng)中一個(gè)應(yīng)用程序進(jìn)程就是一個(gè)安全的沙箱,除非顯式地聲明了 Permission,否則它不能夠獲取基本沙箱所不具備的額外的能力。應(yīng)用程序開發(fā)者必須在 AndroidManifest. xml添加一個(gè)或多個(gè)〈uses_permission>標(biāo)簽,用以聲明應(yīng)用程序需要 的Permission。這些權(quán)限在程序中靜態(tài)地聲明,在程序安裝時(shí)被告知用戶從而獲得授權(quán) (否則用戶無(wú)法安裝該應(yīng)用程序),之后不會(huì)再發(fā)生改變。理論上來(lái)說(shuō),應(yīng)用程序請(qǐng)求的這 些權(quán)限應(yīng)該可以被各種各樣的操作處理,如自動(dòng)允許該權(quán)限,或者通過用戶操作或證書來(lái) 禁止該權(quán)限。
[0008] 在現(xiàn)行的Android權(quán)限機(jī)制下,應(yīng)用程序在安裝時(shí)獲得權(quán)限授權(quán)后,即可以在運(yùn) 行的任意時(shí)刻和任意狀態(tài)使用權(quán)限,存在一定的安全隱患,例如惡意程序可以在沒有用戶 操作的情況下發(fā)送短信、產(chǎn)生網(wǎng)絡(luò)流量或者執(zhí)行資費(fèi)操作等。另外對(duì)于安全性要求較高的 應(yīng)用,也無(wú)法對(duì)其權(quán)限使用做出更詳細(xì)的限制。
【發(fā)明內(nèi)容】
[0009] 發(fā)明目的:本發(fā)明的目的在于解決現(xiàn)有技術(shù)中的權(quán)限訪問控制粒度較粗、使用權(quán) 限不受限制的問題,提供一種可以防止Android系統(tǒng)權(quán)限的濫用,更好地保護(hù)手機(jī)安全和 用戶隱私的基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法。
[0010] 技術(shù)方案:本發(fā)明的一種基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方 法,包括以下步驟:
[0011] (1)定義狀態(tài)屬性
[0012] 定義描述權(quán)限使用條件時(shí)所用到的狀態(tài)屬性,包括應(yīng)用狀態(tài)、系統(tǒng)狀態(tài)、用戶狀態(tài) 三個(gè)層面的屬性,以及每個(gè)狀態(tài)屬性的取值范圍;
[0013] (2)擴(kuò)展 AndroidManifest. xml 文件
[0014] 定義權(quán)限使用條件在AndroidManifest. xml文件中表示時(shí)用到的〈state〉標(biāo)簽的 屬性,并定義每個(gè)狀態(tài)屬性在標(biāo)簽中表示時(shí)對(duì)應(yīng)的名稱和取值范圍;使用〈state〉標(biāo)簽表 示權(quán)限使用條件時(shí),把〈state〉作為<uses-permission>的下一級(jí)標(biāo)簽,對(duì)于不需要擴(kuò)展設(shè) 置字段、只有取值的狀態(tài)屬性,用name和value的標(biāo)簽屬性分別表示狀態(tài)屬性的名稱和取 值;對(duì)于需要設(shè)置字段的狀態(tài)屬性,除了 name和value標(biāo)簽屬性外,還要增加用戶自定義 的標(biāo)簽屬性;多個(gè)〈state〉標(biāo)簽之間默認(rèn)的取值邏輯是"與",在需要表示"或"或"非"邏輯 時(shí),增加〈not〉標(biāo)簽作為〈state〉標(biāo)簽的上級(jí)標(biāo)簽;多個(gè)〈state〉標(biāo)簽組合成的邏輯表達(dá)式 表示該權(quán)限的訪問條件,只有其值為"真",該權(quán)限才可以被訪問;
[0015] (3)獲取狀態(tài)屬性
[0016] 通過Android API獲取除"是否全屏"、"前綴權(quán)限"、"是否有用戶操作"以外的所 有權(quán)限使用條件涉及的每個(gè)狀態(tài)屬性的當(dāng)前值;
[0017] (4)實(shí)施權(quán)限訪問控制策略
[0018] 權(quán)限訪問控制策略的實(shí)施分為應(yīng)用安裝階段和運(yùn)行階段兩部分:在應(yīng)用階段需要 修改Android系統(tǒng)代碼以增加安裝階段處理權(quán)限使用條件申請(qǐng),在運(yùn)行階段判斷權(quán)限的使 用是否滿足聲明條件的功能。
[0019] 進(jìn)一步的,所述步驟(1)中的應(yīng)用狀態(tài)包括應(yīng)用是否運(yùn)行在全屏狀態(tài)、應(yīng)用在前 臺(tái)還是在后臺(tái)運(yùn)行、應(yīng)用使用權(quán)限時(shí)的前綴權(quán)限等;所述系統(tǒng)狀態(tài)包括允許使用該權(quán)限的 時(shí)間段、是否是鎖屏狀態(tài)、是否連接Wi-Fi等;所述用戶狀態(tài)包括是否有用戶操作、手機(jī)上 部是否被遮擋,以及行走、摔跤等其他的用戶狀態(tài)。
[0020] 進(jìn)一步的,所述步驟(3)中:
[0021] 是否全屏的當(dāng)前狀態(tài)的獲取方法為:創(chuàng)建大小為0X0的視圖,檢查視圖的y軸坐 標(biāo)是否為〇 ;
[0022] 前綴權(quán)限的當(dāng)前狀態(tài)的獲取方法為:分別在framework和kernel層記錄該應(yīng)用使 用該權(quán)限的歷史信息,根據(jù)最近一次使用的時(shí)間和設(shè)定的閾值(如200ms),判斷是否存在 設(shè)定的如綴權(quán)限;
[0023] 是否有用戶操作的當(dāng)前狀態(tài)的獲取方法為:通過讀取/dev/input/eventO的用戶 操作序列和操作時(shí)間,可以得知當(dāng)前權(quán)限使用時(shí)是否有用戶操作。
[0024] 進(jìn)一步的,所述步驟(4)中:
[0025] (41)在安裝階段,需要修改 framework 層 android, content, pm. PackageParser, 以適應(yīng)AndroidManifest. xml文件的變化,能夠讀取并存儲(chǔ)聲明的權(quán)限使用條件;
[0026] (42)在運(yùn)行階段,需要修改kernel層kernel/groups. c中檢查gid部分的代碼, 和 framework 層 com. android, server, pm. PackageManagerService 中檢查權(quán)限是否已聲明 的代碼,用于檢查使用的權(quán)限是否滿足聲明的條件。
[0027] 進(jìn)一步的,所述前綴權(quán)限是指在權(quán)限使用的歷史記錄中,在某個(gè)權(quán)限使用前并且 在一定時(shí)間閾值內(nèi)最近一次由同一 UID使用的權(quán)限。
[0028] 有益效果:與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
[0029] (1)本發(fā)明采用擴(kuò)展權(quán)限聲明方式的方法,增加權(quán)限使用的運(yùn)行環(huán)境狀態(tài)條件限 制,在應(yīng)用運(yùn)行時(shí)檢查權(quán)限的使用是否符合聲明的條件。
[0030] (2)本發(fā)明所獲取的狀態(tài)屬性較為全面,能滿足一般情況下對(duì)使用權(quán)限的條件的 限制。
[0031] (3)本發(fā)明可以在申請(qǐng)權(quán)限時(shí)不使用〈state〉標(biāo)簽,表示該權(quán)限沒有使用條件,允 許在運(yùn)行的任何時(shí)刻、任何條件下使用該權(quán)限,進(jìn)而保證向下兼容。
[0032] (4)本發(fā)明定義了評(píng)估系統(tǒng)、用戶以及應(yīng)用本身所處狀態(tài)的三個(gè)層面的屬性,并規(guī) 定應(yīng)用在申請(qǐng)權(quán)限時(shí)需聲明權(quán)限使用的狀態(tài)條件,限制了權(quán)限只能在滿足申請(qǐng)的狀態(tài)條件 的情況下才能使用,從而達(dá)到了細(xì)粒度控制權(quán)限使用的目的。
[0033] (5)本發(fā)明擴(kuò)展了 Android應(yīng)用的AndroidManifest. xml文件,在申請(qǐng)權(quán)限的標(biāo)簽 中增加表示權(quán)限使用條件的子標(biāo)簽。權(quán)限訪問控制策略的實(shí)施分為應(yīng)用安裝階段和運(yùn)行階 段兩部分,用戶在安裝時(shí)若拒絕應(yīng)用聲明的權(quán)限使用條件可中止安裝;已安裝的應(yīng)用在運(yùn) 行時(shí)使用權(quán)限若不滿足聲明的使用條件也會(huì)被系統(tǒng)拒絕。
【專利附圖】
【附圖說(shuō)明】
[0034] 圖1為本發(fā)明中權(quán)限使用條件的狀態(tài)屬性的體系示意圖;
[0035] 圖2為本發(fā)明中擴(kuò)展的AndroidManifest. xml文件格式示意圖;
[0036] 圖3為本發(fā)明中安裝時(shí)權(quán)限的訪問控制策略實(shí)施流程示意圖;
[0037] 圖4為本發(fā)明中運(yùn)行時(shí)權(quán)限的訪問控制策略實(shí)施流程示意圖。
【具體實(shí)施方式】
[0038] 下面對(duì)本發(fā)明技術(shù)方案結(jié)合附圖進(jìn)行詳細(xì)說(shuō)明。
[0039] 本發(fā)明的一種基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法,包括以下 步驟:
[0040] (1)定義狀態(tài)屬性
[0041] 定義描述權(quán)限使用條件時(shí)所用到的狀態(tài)屬性,包括應(yīng)用狀態(tài)、系統(tǒng)狀態(tài)、用戶狀態(tài) 三個(gè)層面的屬性,以及每個(gè)狀態(tài)屬性的取值范圍。
[0042] 如圖1所示,本實(shí)施例中的應(yīng)用狀態(tài)包括:
[0043] 應(yīng)用是否運(yùn)行在全屏狀態(tài),取值范圍為0或1,分別表示不在/在全屏狀態(tài);
[0044] 應(yīng)用在前臺(tái)還是在后臺(tái)運(yùn)行,取值范圍為0或1,分別表示不在/在前臺(tái)運(yùn)行;
[0045] 應(yīng)用使用權(quán)限時(shí)的前綴權(quán)限:擴(kuò)展設(shè)置字段為權(quán)限名,對(duì)應(yīng)的取值范圍為0或1, 分別表示不存在/存在該前綴權(quán)限。
[0046] 而本實(shí)施例中的系統(tǒng)狀態(tài)包括:
[0047] 允許使用該權(quán)限的時(shí)間段,擴(kuò)展設(shè)置字段為開始時(shí)間和結(jié)束時(shí)間,對(duì)應(yīng)的取值范 圍為〇或1,分別表示不在/在設(shè)置時(shí)間段內(nèi);
[0048] 是否是鎖屏狀態(tài),:取值范圍為0或1,分別表示不在/在鎖屏狀態(tài);
[0049] 是否連接Wi-Fi,取值范圍為0或1,分別表示未連接/已連接Wi-Fi。
[0050] 本實(shí)施中的用戶狀態(tài)包括:
[0051] 是否有用戶操作,取值范圍為0或1,分別代表沒有/有用戶操作手機(jī)上部是否被 遮擋,取值范圍為〇或1,分別表示手機(jī)上部不被/被遮擋行走、摔跤等其他的用戶狀態(tài)。
[0052] (2)擴(kuò)展 AndroidManifest. xml 文件
[0053] 應(yīng)用程序在申請(qǐng)Android系統(tǒng)權(quán)限時(shí),如果需要細(xì)粒度地控制權(quán)限的使用,則需 要在AndroidManifest. xml文件中聲明權(quán)限使用的條件。
[0054] 定義權(quán)限使用條件在AndroidManifest. xml文件中表示時(shí)用到的〈state〉標(biāo)簽的 屬性,并定義每個(gè)狀態(tài)屬性在標(biāo)簽中表示時(shí)對(duì)應(yīng)的名稱和取值范圍;使用〈state〉標(biāo)簽表 示權(quán)限使用條件時(shí),把〈state〉作為<uses-permission>的下一級(jí)標(biāo)簽,對(duì)于不需要擴(kuò)展設(shè) 置字段、只有取值的狀態(tài)屬性,用name和value的標(biāo)簽屬性分別表示狀態(tài)屬性的名稱和取 值;對(duì)于需要設(shè)置字段的狀態(tài)屬性,除了 name和value標(biāo)簽屬性外,還要增加用戶自定義 的標(biāo)簽屬性;多個(gè)〈state〉標(biāo)簽之間默認(rèn)的取值邏輯是"與",在需要表示"或"或"非"邏輯 時(shí),增加〈not〉標(biāo)簽作為〈state〉標(biāo)簽的上級(jí)標(biāo)簽;多個(gè)〈state〉標(biāo)簽組合成的邏輯表達(dá)式 表示該權(quán)限的訪問條件,只有其值為"真",該權(quán)限才可以被訪問,具體如表1所示:
[0055] 表1 :各個(gè)狀態(tài)屬性在state標(biāo)簽中對(duì)應(yīng)的名稱和賦值/取值范圍
[0056]
[0057]
【權(quán)利要求】
1. 一種基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法,其特征在于包括以下 步驟: (1) 定義狀態(tài)屬性 定義描述權(quán)限使用條件時(shí)所用到的狀態(tài)屬性,包括應(yīng)用狀態(tài)、系統(tǒng)狀態(tài)、用戶狀態(tài)三個(gè) 層面的屬性,以及每個(gè)狀態(tài)屬性的取值范圍; (2) 擴(kuò)展 AndroidManifest. xml 文件 定義權(quán)限使用條件在AndroidManifest. xml文件中表示時(shí)用到的〈state〉標(biāo)簽的屬 性,并定義每個(gè)狀態(tài)屬性在標(biāo)簽中表示時(shí)對(duì)應(yīng)的名稱和取值范圍;使用〈state〉標(biāo)簽表示 權(quán)限使用條件時(shí),把〈state〉作為<uses-permission>的下一級(jí)標(biāo)簽,對(duì)于不需要擴(kuò)展設(shè)置 字段、只有取值的狀態(tài)屬性,用name和value的標(biāo)簽屬性分別表示狀態(tài)屬性的名稱和取值; 對(duì)于需要設(shè)置字段的狀態(tài)屬性,除了 name和value標(biāo)簽屬性外,還要增加用戶自定義的標(biāo) 簽屬性;多個(gè)〈state〉標(biāo)簽之間默認(rèn)的取值邏輯是"與",在需要表示"或"或"非"邏輯時(shí), 增加〈not〉標(biāo)簽作為〈state〉標(biāo)簽的上級(jí)標(biāo)簽;多個(gè)〈state〉標(biāo)簽組合成的邏輯表達(dá)式表 示該權(quán)限的訪問條件,只有其值為"真",該權(quán)限才可以被訪問; (3) 獲取狀態(tài)屬性 通過Android API獲取除"是否全屏"、"前綴權(quán)限"、"是否有用戶操作"以外的所有權(quán) 限使用條件涉及的每個(gè)狀態(tài)屬性的當(dāng)前值; (4) 實(shí)施權(quán)限訪問控制策略 權(quán)限訪問控制策略的實(shí)施分為應(yīng)用安裝階段和運(yùn)行階段兩部分:在應(yīng)用階段需要修改 Android系統(tǒng)代碼以增加安裝階段處理權(quán)限使用條件申請(qǐng),在運(yùn)行階段判斷權(quán)限的使用是 否滿足聲明條件的功能。
2. 根據(jù)權(quán)利要求1所基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法,其特征 在于:所述步驟(1)中的應(yīng)用狀態(tài)包括應(yīng)用是否運(yùn)行在全屏狀態(tài)、應(yīng)用在前臺(tái)還是在后臺(tái) 運(yùn)行、應(yīng)用使用權(quán)限時(shí)的前綴權(quán)限等;所述系統(tǒng)狀態(tài)包括允許使用該權(quán)限的時(shí)間段、是否是 鎖屏狀態(tài)、是否連接Wi-Fi等;所述用戶狀態(tài)包括是否有用戶操作、手機(jī)上部是否被遮擋, 以及行走、摔跤等其他的用戶狀態(tài)。
3. 根據(jù)權(quán)利要求1所述的基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法,其 特征在于:所述步驟(3)中: 是否全屏的當(dāng)前狀態(tài)的獲取方法為:創(chuàng)建大小為0X0的視圖,檢查視圖的y軸坐標(biāo)是 否為〇 ; 前綴權(quán)限的當(dāng)前狀態(tài)的獲取方法為:分別在framework和kernel層記錄該應(yīng)用使用 該權(quán)限的歷史信息,根據(jù)最近一次使用的時(shí)間和設(shè)定的閾值,判斷是否存在設(shè)定的前綴權(quán) 限; 是否有用戶操作的當(dāng)前狀態(tài)的獲取方法為:通過讀取/dev/input/eventO的用戶操作 序列和操作時(shí)間,可以得知當(dāng)前權(quán)限使用時(shí)是否有用戶操作。
4. 根據(jù)權(quán)利要求1所述的基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法,其 特征在于:所述步驟(4)中: (41)在安裝階段,需要修改 framework 層 android, content, pm. PackageParser,以適 應(yīng)AndroidManifest. xml文件的變化,能夠讀取并存儲(chǔ)聲明的權(quán)限使用條件; (42)在運(yùn)行階段,需要修改kernel層kernel/groups. c中檢查gid部分的代碼,和 framework 層 com. android, server, pm. PackageManagerService 中檢查權(quán)限是否已聲明的 代碼,用于檢查使用的權(quán)限是否滿足聲明的條件。
5.根據(jù)權(quán)利要求2所述的基于運(yùn)行環(huán)境狀態(tài)的Android權(quán)限細(xì)粒度訪問控制方法,其 特征在于:所述前綴權(quán)限是指在權(quán)限使用的歷史記錄中,在某個(gè)權(quán)限使用前并且在一定時(shí) 間閾值內(nèi)最近一次由同一 UID使用的權(quán)限。
【文檔編號(hào)】G06F21/53GK104156660SQ201410431653
【公開日】2014年11月19日 申請(qǐng)日期:2014年8月28日 優(yōu)先權(quán)日:2014年8月28日
【發(fā)明者】楊明, 倪振宇, 羅軍舟, 吳文甲, 凌振 申請(qǐng)人:東南大學(xué)