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