摘 要:近年來(lái),隨著Android手機(jī)技術(shù)的日益進(jìn)步,客戶端上的應(yīng)用程序可以通過(guò)相對(duì)應(yīng)的開(kāi)放式API訪問(wèn)手機(jī)卡片上的應(yīng)用程序。結(jié)合Android核心技術(shù)與訪問(wèn)控制安全等方面因素,介紹了最新訪問(wèn)控制實(shí)現(xiàn)方式與規(guī)范,并提出一種手機(jī)卡片中訪問(wèn)控制規(guī)則的實(shí)現(xiàn)方案以及應(yīng)用示例。
關(guān)鍵詞:Android;開(kāi)放式API;訪問(wèn)控制
中圖分類號(hào):TP393.09
隨著Android技術(shù)的不斷發(fā)展,智能手機(jī)逐漸成為人們的日常消費(fèi)品,智能手機(jī)的用戶與日俱增。除了基本的通話功能以外,智能手機(jī)還具備PDA(personal digital assistant)的主要功能,尤其包括個(gè)人信息管理以及無(wú)線接入互聯(lián)網(wǎng)的功能,智能手機(jī)已經(jīng)成為互聯(lián)網(wǎng)中新型的終端節(jié)點(diǎn)。目前智能手機(jī)的主流操作系統(tǒng)主要有Android和IOS。
惡意程序威脅著計(jì)算機(jī)系統(tǒng)的安全,攻擊者利用計(jì)算系統(tǒng)的漏洞在目標(biāo)計(jì)算機(jī)上安裝惡意程序,借此來(lái)竊取被攻擊者的敏感信息。智能手機(jī)通過(guò)在無(wú)線接入設(shè)備進(jìn)入互聯(lián)網(wǎng)的同時(shí),也成為惡意程序新的攻擊對(duì)象。智能手機(jī)客戶端訪問(wèn)手機(jī)卡或SD卡的同時(shí),也兼?zhèn)渲鴲阂夤艋虿《靖腥镜奈kU(xiǎn)。因此,如何控制Android手機(jī)客戶端對(duì)手機(jī)卡或SD卡的訪問(wèn),已成為智能終端必須解決的重要目標(biāo)。
針對(duì)上述問(wèn)題,本文以Android手機(jī)為平臺(tái),介紹了最新中國(guó)電信集團(tuán)公司提出的訪問(wèn)控制企業(yè)標(biāo)準(zhǔn),即訪問(wèn)控制實(shí)現(xiàn)方式與規(guī)范,并在此基礎(chǔ)上,提出一種手機(jī)卡片中訪問(wèn)控制規(guī)則的實(shí)現(xiàn)方案。
1 相關(guān)研究
對(duì)于Android手機(jī)上的一個(gè)客戶端應(yīng)用而言,可以通過(guò)手機(jī)底層的一組開(kāi)放式API[1]訪問(wèn)手機(jī)卡中的一個(gè)客戶端應(yīng)用,手機(jī)卡中會(huì)存儲(chǔ)是否允許手機(jī)客戶端應(yīng)用訪問(wèn)卡片應(yīng)用的一個(gè)規(guī)則,這個(gè)訪問(wèn)規(guī)則的實(shí)現(xiàn)方式規(guī)范在中國(guó)電信集團(tuán)公司企業(yè)標(biāo)準(zhǔn)TSM平臺(tái)技術(shù)要求[2]中已經(jīng)作出了明確規(guī)范,現(xiàn)對(duì)最新訪問(wèn)控制方面的技術(shù)要求進(jìn)行介紹。
1.1 體系結(jié)構(gòu)
技術(shù)要求中定義了SE訪問(wèn)控制的通用機(jī)制,對(duì)于任何SE都可用(包括嵌入式SE、有安全控制器的microSD卡、UICC卡等)。它支持多個(gè)應(yīng)用方的應(yīng)用程序管理,并允許每個(gè)應(yīng)用方為其加載到卡內(nèi)的應(yīng)用設(shè)置訪問(wèn)規(guī)則。
SE訪問(wèn)規(guī)則數(shù)據(jù)存儲(chǔ)在SE里,供設(shè)備上的訪問(wèn)控制執(zhí)行器使用。訪問(wèn)控制執(zhí)行器將從SE里取回訪問(wèn)規(guī)則,然后運(yùn)用這些規(guī)則來(lái)控制應(yīng)用客戶端對(duì)SE應(yīng)用的訪問(wèn)。本文闡述Android系統(tǒng)其中一種架構(gòu)方式。如圖1所示。
圖1 訪問(wèn)控制體系架構(gòu)—訪問(wèn)規(guī)則僅存放主安全域中
卡發(fā)行商為SE應(yīng)用定義了訪問(wèn)控制規(guī)則,并把這些規(guī)則提供給訪問(wèn)規(guī)則應(yīng)用主控(ARA-M)。(卡發(fā)行商可委托TSM進(jìn)行代管)。當(dāng)一個(gè)應(yīng)用客戶端試圖訪問(wèn)一個(gè)SE應(yīng)用時(shí),訪問(wèn)控制執(zhí)行器就使用ARA-M提供的設(shè)備接口從SE中取回訪問(wèn)規(guī)則。只有規(guī)則允許的情況下,才能進(jìn)行訪問(wèn)。ARA-M是一個(gè)普通的SE應(yīng)用,它能通過(guò)由GP定義的AID來(lái)選擇。ARA-M是唯一的,盡管訪問(wèn)規(guī)則數(shù)據(jù)可能被存儲(chǔ)在SE的不同位置,在收到來(lái)自設(shè)備上的訪問(wèn)控制執(zhí)行器的訪問(wèn)請(qǐng)求后,ARA-M負(fù)責(zé)取回所有有效的訪問(wèn)規(guī)則。
1.2 訪問(wèn)控制規(guī)則
存儲(chǔ)在SE中的每個(gè)訪問(wèn)控制規(guī)則通過(guò)以下方式進(jìn)行聲明:①對(duì)于一個(gè)指定的SE應(yīng)用,或一個(gè)指定SE中的所有其他應(yīng)用;②一個(gè)指定的應(yīng)用客戶端,或所有其他應(yīng)用客戶端有權(quán)訪問(wèn):所有的APDU命令,沒(méi)有任何APDU命令或指定的APDU命令以及所有的NFC事件或沒(méi)有任何NFC事件。
因?yàn)樵L問(wèn)控制規(guī)則可能適用于一個(gè)或多個(gè)應(yīng)用程序,并且不同的規(guī)則可能存放在SE的不同位置(例如在ARA-M和ARA-C),因此訪問(wèn)控制規(guī)則間可能會(huì)發(fā)生重疊或沖突,所以必須定義一個(gè)方法用于解決沖突?,F(xiàn)簡(jiǎn)略說(shuō)明訪問(wèn)控制規(guī)則沖突解決方案。
一個(gè)規(guī)則的優(yōu)先權(quán)不是基于它的讀取順序。
管理規(guī)則沖突的策略基于以下三個(gè)基本原則(按順序):
(1)特定規(guī)則優(yōu)先。特定規(guī)則是指顯式聲明了以下內(nèi)容的規(guī)則:第一是通過(guò)AID或者隱式選擇應(yīng)用方式指定SE應(yīng)用;第二是通過(guò)聲明用于簽署應(yīng)用程序的數(shù)字證書(shū)指定一個(gè)應(yīng)用客戶端。如表1給出了規(guī)則優(yōu)先級(jí)從高到低排列的順序。
表1 訪問(wèn)控制標(biāo)識(shí)規(guī)則
SE應(yīng)用是否被顯式聲明應(yīng)用客戶端是否被顯式聲明優(yōu)先級(jí)
是是最高
是否高
否是低
否否最低
(2)與位于證書(shū)鏈末端的數(shù)字證書(shū)相關(guān)的規(guī)則優(yōu)先。如果應(yīng)用客戶端是使用一個(gè)證書(shū)鏈里的證書(shū)來(lái)簽名的,在查找最為特定規(guī)則的過(guò)程中,首先查找用于簽署應(yīng)用程序的證書(shū)(證書(shū)鏈最末端的證書(shū))是否定義了相關(guān)規(guī)則;如無(wú)定義,則再查找證書(shū)鏈上的上一級(jí)證書(shū)的規(guī)則定義,以此類推,直到找到一個(gè)合適的證書(shū)。如果整個(gè)證書(shū)鏈中都未找到定義了相關(guān)規(guī)則的證書(shū),那么才會(huì)進(jìn)入下一個(gè)更低優(yōu)先級(jí)的查找。
(3)限制性規(guī)則優(yōu)先。限制性越強(qiáng)的規(guī)則優(yōu)先級(jí)越高。主要包括以下幾點(diǎn):①限制性最強(qiáng)的規(guī)則禁止應(yīng)用客戶端訪問(wèn)SE應(yīng)用;②中等限制規(guī)則只允許應(yīng)用客戶端訪問(wèn)一些特定的APDU命令;③限制性最弱的規(guī)則總是允許應(yīng)用客戶端訪問(wèn)SE應(yīng)用[3]。
如前面所描述的那樣,最特定的規(guī)則比通用規(guī)則具有優(yōu)先權(quán)。這種嚴(yán)格的優(yōu)先級(jí)將由訪問(wèn)控制執(zhí)行器來(lái)執(zhí)行。因此,訪問(wèn)控制執(zhí)行器首先尋找應(yīng)用在特定SE應(yīng)用和特定應(yīng)用客戶端的規(guī)則,如果沒(méi)有找到特定的規(guī)則,再去查找通用規(guī)則。如果一個(gè)或多個(gè)特定規(guī)則應(yīng)用到一個(gè)訪問(wèn)請(qǐng)求,則優(yōu)先級(jí)高的規(guī)則將被使用,而優(yōu)先級(jí)低的規(guī)則將被忽略。
如果有多個(gè)規(guī)則適用于同一個(gè)目標(biāo)SE應(yīng)用,并且具有相同的優(yōu)先級(jí),這些規(guī)則將被聚合,具有更強(qiáng)限制性的規(guī)則優(yōu)先于更寬松的規(guī)則。如果兩個(gè)規(guī)則有具有相同的限制等級(jí),兩個(gè)規(guī)則的數(shù)據(jù)(NFC事件處理權(quán)限、APDU命令過(guò)濾)將被合并,并且都會(huì)被運(yùn)用。如表2中總結(jié)了以規(guī)則聚合的方式解決訪問(wèn)控制規(guī)則沖突問(wèn)題。
表2 訪問(wèn)控制規(guī)則沖突解決方案組合
沖突規(guī)則解決方案R1
AllAID
NeverFilterAlwaysNeverFilterAlways
R2AllNeverR1=R2R2R2R1
FilterR1R1+R2R2
AlwaysR1R1R1+R2
AIDNeverR2R1=R2R2R2
Filter R1R1+R2R2
Always R1R1R1=R2
2 訪問(wèn)控制規(guī)則實(shí)現(xiàn)方案
2.1 實(shí)現(xiàn)目標(biāo)
在通過(guò)ARA_M應(yīng)用訪問(wèn)ARA_C應(yīng)用中的規(guī)則。ARA_M應(yīng)用屬于ISD,ARA_C應(yīng)用可以屬于ISD,也可以屬于其他SD。
2.2 實(shí)現(xiàn)方案
ARA_C應(yīng)用必須實(shí)現(xiàn)ARAShareble接口,ARA-M通過(guò)調(diào)用ARAShareble接口方法來(lái)獲取ARA-C的規(guī)則,ARAShareble接口定義如下(提供的是源碼):
ARAShareble.java:
package com.telecom.ARAShareble;
import javacard.framework.Shareable;
public class ARAShareble extends Shareable
{
public short getRules(byte[] rules,short rulesLen byte[] aramAid, short aidOffset, short aidLen);
};
2.3 getRules函數(shù)說(shuō)明
函數(shù)定義源碼如下:
public short getRules(byte[] rules,short rulesLen byte[] aramAid, short aidOffset,short aidLen);
(1)功能描述。該接口用于為ARA-M提供獲取ARA-C所有訪問(wèn)規(guī)則的入口。通過(guò)此接口當(dāng)前ARA-C應(yīng)該輸出其中存儲(chǔ)的所有訪問(wèn)規(guī)則。輸出的訪問(wèn)規(guī)則在rules中排列,格式按照GPAC規(guī)范[4](GPD_SE_Access_Control_v1.0)中storedata命令Command-Get-AR-DO模式輸出,當(dāng)規(guī)則太長(zhǎng)不能單條輸出時(shí),ARA-M應(yīng)用應(yīng)多次調(diào)用此函數(shù)得到全部規(guī)則。Rules中采用LV結(jié)構(gòu),L表示后續(xù)V的長(zhǎng)度,V表示所有的規(guī)則;其中L<=(rulesLen-1);函數(shù)的返回值表示ARA-C剩余規(guī)則的長(zhǎng)度,如果為0表示所有規(guī)則已經(jīng)取完;ARA-C應(yīng)用需要校驗(yàn)傳入的ARA-M應(yīng)用的AID,如果不是允許的AID應(yīng)拋出SecurityException;如果rules數(shù)組越界或者aramAid數(shù)組越界,返回IndexOutOfBoundsException,ArrayIndexOutOfBoundsExc-eption等異常信息。
(2)參數(shù)說(shuō)明。rules:用于存放規(guī)則的buffer,LV結(jié)構(gòu);rulesLen:rules buffer的可用長(zhǎng)度;aramAid:ARA-M的AID buffer;aidOffset:aramAid的起始偏移;aidLen:Aid的長(zhǎng)度。
(3)返回值。<=0,表示成功執(zhí)行,并返回所有規(guī)則的數(shù)據(jù);>0,表示剩余規(guī)則[5]數(shù)據(jù)長(zhǎng)度。
(4)異常信息包括以下幾種。Security Exception, IndexOu- tOfBounds Exception,Array Index out of Bounds Exception。
(5)應(yīng)用示例。
ARA-C.java:
package com.telecom.arac;
import com.telecom.ARAShareble;
public class ARAC extends Applet
implements MultiSelectable, ARAShareble{
protected ARAC(byte[] bArray, short bOffset, byte bLength) {
register(bArray, (short)(bOffset+(short)1), bArray[bOffset]);
}
public static void install(byte[] bArray, short bOffset, byte bLength) {
new ARAC(bArray, bOffset, bLength);
}
public void process(APDU apdu) {}
public short getRules(byte[] rules, short rulesLen byte[] aramAid, short aidOffset, short aidLen) {
// 此處需要ARA-C應(yīng)用實(shí)現(xiàn)此方法;return 0;
}}
ARA-M.java:
package com.telecom.aram;
import com.telecom.ARAShareble;
public class ARAM extends Applet implements MultiSelectable
{
protected ARAM(byte[] bArray, short bOffset, byte bLength)
{
register(bArray, (short)(bOffset+(short)1), bArray[bOffset]);
}
public static void install(byte[] bArray, short bOffset, byte bLength) {
new ARAM(bArray, bOffset, bLength);
}
public void process(APDU apdu) {
byte[] buffer = apdu.getBuffer();
byte cla = (byte)(buffer[ISO7816.OFFSET_CLA] (byte)0xFC);
byte ins = (byte)(buffer[ISO7816.OFFSET_INS]);
switch (ins)
{
case INS_GETDATA:
gettARACRules();
break;
}
}
void gettARACRules () {//第一步,先獲取ARAC的實(shí)例
ARAShareble sio;
sio=(ARAShareble)JCSystem.getAppletShareableInterfaceObject(aracAid, (byte)0);if(sio != 1)
{
//獲取到ARAC的實(shí)例了,可以調(diào)用其方法了
sio. getRules (…);
}
}
}
3 結(jié)束語(yǔ)
以Android技術(shù)為首的智能手機(jī)技術(shù)日益發(fā)展,智能手機(jī)時(shí)代已經(jīng)來(lái)臨。然而Android手機(jī)客戶端與手機(jī)卡之間訪問(wèn)控制安全問(wèn)題卻不容小覷。本文結(jié)合Android核心技術(shù)與訪問(wèn)控制安全等各方面因素,簡(jiǎn)略地介紹了最新中國(guó)電信TSM平臺(tái)技術(shù)要求中訪問(wèn)控制實(shí)現(xiàn)方式與規(guī)范,并提出一種手機(jī)卡片中訪問(wèn)控制規(guī)則的實(shí)現(xiàn)方案以及應(yīng)用示例。
參考文獻(xiàn):
[1]中國(guó)電信集團(tuán)公司企業(yè)標(biāo)準(zhǔn)(中國(guó)電信TSM平臺(tái)技術(shù)要求SE應(yīng)用安全下載技術(shù)要求分冊(cè))[R].
[2]Secure Element Access Control[R].
[3]孫曉波.淺談移動(dòng)通信終端發(fā)展趨勢(shì)[J].移動(dòng)通信,2010(21).
[4]劉昌平,范明鈺.Android手機(jī)的輕量級(jí)訪問(wèn)控制[J].計(jì)算機(jī)應(yīng)用研究,2010(07).
[5]劉偉,梁洪亮.移動(dòng)終端系統(tǒng)的訪問(wèn)控制框架[J].計(jì)算機(jī)科學(xué),2006(06).
作者簡(jiǎn)介:黃?。?976-),男,工程師,畢業(yè)于廣東工業(yè)大學(xué),研究方向:計(jì)算機(jī)軟件與理論,現(xiàn)在從事通信智能卡和手機(jī)終端,安全訪問(wèn)控制研究工作;黃健文(1972-),男,工程師,畢業(yè)于武漢大學(xué),研究方向:計(jì)算機(jī)軟件與理論,現(xiàn)在從事通信智能卡和手機(jī)終端研究;劉兆元(1970-),男,工程師,畢業(yè)于華南理工大學(xué)通信與信息系統(tǒng)專業(yè),現(xiàn)在從事通信智能卡和手機(jī)終端研究,移動(dòng)行業(yè)應(yīng)用定制開(kāi)發(fā)工作;梁棟(1981-),男,工程師,畢業(yè)于成都理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),現(xiàn)在從事通信智能卡和手機(jī)終端研究,移動(dòng)行業(yè)應(yīng)用定制開(kāi)發(fā)工作;李俊磊(1987-),男,工程師,畢業(yè)于長(zhǎng)沙學(xué)院計(jì)算機(jī)科學(xué)與應(yīng)用專業(yè),現(xiàn)在從事通信智能卡和手機(jī)終端研究,移動(dòng)行業(yè)應(yīng)用定制開(kāi)發(fā)工作。
作者單位:廣州電信研究院,廣州 510630