本發(fā)明屬于android系統(tǒng)訪問控制領(lǐng)域,特別涉及一種支持android運(yùn)行時權(quán)限機(jī)制的第三方應(yīng)用間通信訪問控制方法。
背景技術(shù):
android是目前市場占有率最高的開源移動平臺操作系統(tǒng),系統(tǒng)采用了軟件疊層架構(gòu),由定制的linux內(nèi)核層、中間件層及應(yīng)用層組成。其中,中間件層提供了大量的系統(tǒng)服務(wù),例如該層中的activitymanager組件包含了對應(yīng)用間通信進(jìn)行強(qiáng)制訪問控制的功能。
android系統(tǒng)通過沙箱機(jī)制隔離各應(yīng)用的運(yùn)行環(huán)境(簽名相同的應(yīng)用將運(yùn)行于同一沙箱內(nèi),共享其中的資源與權(quán)限);同時,android權(quán)限機(jī)制利用由其定義的權(quán)限標(biāo)簽以及強(qiáng)制訪問控制機(jī)制,控制應(yīng)用對沙箱外資源的訪問過程。當(dāng)應(yīng)用請求訪問沙箱外的資源(包括系統(tǒng)api、其他應(yīng)用等)時,android權(quán)限機(jī)制將根據(jù)被訪問者所設(shè)定的訪問權(quán)限限制要求,對該應(yīng)用所擁有的權(quán)限進(jìn)行檢查,從而對該訪問進(jìn)行控制。
android系統(tǒng)將其定義的權(quán)限分為普通級(normal),危險級(dangerous),簽名級(signature)和系統(tǒng)/簽名級(signatureorsystem)。其中,普通權(quán)限與危險權(quán)限是第三方應(yīng)用普遍使用的權(quán)限類別,而危險權(quán)限則進(jìn)一步根據(jù)其功能相關(guān)性被分為若干組。由于危險權(quán)限涉及通話、短信等敏感服務(wù),更易造成用戶損失,成為了各類基于權(quán)限的保護(hù)技術(shù)的關(guān)注重點(diǎn)。此外,從android6.0marshmallow(apilevel23)開始,android系統(tǒng)引入了運(yùn)行時權(quán)限機(jī)制。應(yīng)用在安裝時,其在manifest.xml文件中所聲明的危險權(quán)限不會被立即授予,而是在應(yīng)用運(yùn)行時發(fā)出權(quán)限請求,由用戶以權(quán)限組為單位自行決定是否授予。即當(dāng)用戶根據(jù)應(yīng)用請求授予其某一危險權(quán)限時,系統(tǒng)將自動賦予該應(yīng)用在manifest.xml文件中聲明的其它同組權(quán)限。另外,在系統(tǒng)運(yùn)行時,用戶可以隨時以組為單位對應(yīng)用的危險權(quán)限進(jìn)行授予或撤銷操作。
android系統(tǒng)為應(yīng)用提供了組件間通訊機(jī)制(inter-componentcommunitation,icc),為不同應(yīng)用間的通信與功能重用提供了極大的便利,然而android權(quán)限機(jī)制由于依賴開發(fā)者自主制定的應(yīng)用訪問限制策略來實(shí)現(xiàn)對應(yīng)用間通信的控制,因此留下了巨大的安全隱患:一個未被授予相關(guān)權(quán)限的惡意程序可以通過icc通信調(diào)用其它具有相關(guān)權(quán)限的應(yīng)用的未受保護(hù)的接口,利用后者非法使用相關(guān)服務(wù)及數(shù)據(jù),從而實(shí)現(xiàn)一類特定的權(quán)限提升攻擊:混淆代理人攻擊。在android市場中,由于第三方應(yīng)用的開發(fā)者往往缺乏相應(yīng)的安全意識,未對其應(yīng)用設(shè)置適當(dāng)?shù)脑L問策略,因而十分容易成為混淆代理人攻擊的對象。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提出了一種支持android運(yùn)行時權(quán)限機(jī)制的第三方應(yīng)用間通信訪問控制方法,其目的在于,通過增加對通信請求雙方間的訪問控制關(guān)系進(jìn)行合法性計(jì)算,依據(jù)合法性計(jì)算結(jié)果對通信請求進(jìn)行管理控制,從而避免android系統(tǒng)中發(fā)生的混淆代理人攻擊的問題。
一種支持android運(yùn)行時權(quán)限機(jī)制的第三方應(yīng)用間通信訪問控制方法,其特征在于,首先,通過在android系統(tǒng)中間件層擴(kuò)展pms服務(wù)和擴(kuò)展activitymanager中的icc監(jiān)控器;其次,構(gòu)建應(yīng)用危險權(quán)限編碼映射表、訪問控制決策管理器及由其動態(tài)維護(hù)的訪問控制信息庫;接著,訪問控制決策管理器實(shí)時查詢訪問控制信息庫中通信請求中雙方應(yīng)用的運(yùn)行權(quán)限,同時更新訪問控制信息庫,拒絕不具有客體應(yīng)用危險權(quán)限的第三方應(yīng)用所發(fā)起的通信請求,實(shí)現(xiàn)對android第三方應(yīng)用間通信的訪問控制;
所述擴(kuò)展pms服務(wù)是指增加將應(yīng)用程序最新的危險權(quán)限信息與應(yīng)用uid打包發(fā)送至控制決策管理器的過程語句;所述擴(kuò)展icc監(jiān)控器是指對checkcomponentpermission()方法增加將通信雙方的應(yīng)用uid打包發(fā)送至控制決策管理器,并依據(jù)控制決策管理器的決策結(jié)果,返回是否允許本次通信;
所述訪問控制信息庫包括訪問控制關(guān)系圖和應(yīng)用危險權(quán)限狀態(tài)字集,其中,所述訪問控制關(guān)系圖用于記錄應(yīng)用間的合法通信關(guān)系的有向圖,由鄰接矩陣與十字鏈表構(gòu)成,所述鄰接矩陣記錄應(yīng)用間訪問控制關(guān)系的合法性計(jì)算結(jié)果,所述十字鏈表記錄應(yīng)用間的訪問控制關(guān)系;
所述應(yīng)用危險權(quán)限狀態(tài)字集為short數(shù)組,其中第i個數(shù)是uid為10000+i的應(yīng)用的危險權(quán)限狀態(tài)字;
pms為packagemanagerservices,icc為應(yīng)用間組件間通信,uid為標(biāo)識符;
所述危險權(quán)限編碼映射表是指對具有危險權(quán)限的應(yīng)用進(jìn)行映射編碼;
所述訪問控制決策管理器包括應(yīng)用權(quán)限信息管理模塊和icc通信處理模塊,
應(yīng)用權(quán)限信息管理模塊通過接收來自擴(kuò)展的pms服務(wù)的消息,對訪問控制信息庫進(jìn)行實(shí)時維護(hù);icc通信處理模塊同時通過擴(kuò)展的icc通信監(jiān)控器實(shí)時監(jiān)控android系統(tǒng)中發(fā)起的icc通信。
所述危險權(quán)限編碼映射表為hash表結(jié)構(gòu)。提供了將危險權(quán)限字符串映射為一個特定整數(shù)編號的查詢功能。其中,屬于同一個group的權(quán)限將被分配至同一個狀態(tài)字位號。
進(jìn)一步地,在系統(tǒng)初次啟動時,對訪問控制信息庫進(jìn)行初始化,過程如下:
首先,應(yīng)用權(quán)限信息管理模塊在系統(tǒng)啟動時檢查訪問控制信息庫是否已經(jīng)初始化,并返回結(jié)果;
若訪問控制信息庫尚未初始化,應(yīng)用權(quán)限信息管理模塊將掃描系統(tǒng)中所有應(yīng)用的信息,并根據(jù)信息更新訪問控制信息庫中的應(yīng)用危險權(quán)限狀態(tài)字集,同時將訪問控制關(guān)系圖進(jìn)行初始化,十字鏈表初始化為空,并將鄰接矩陣初始化為合法性未計(jì)算狀態(tài)。
進(jìn)一步地,所述訪問控制決策管理器實(shí)時查詢訪問控制信息庫中通信請求中雙方應(yīng)用的運(yùn)行權(quán)限,同時更新訪問控制信息庫的過程如下:
首先,依據(jù)發(fā)起通信請求的應(yīng)用方查詢鄰接矩陣中通信請求雙方的訪問控制關(guān)系是否合法,返回查詢結(jié)果;
若所查詢的訪問控制關(guān)系合法性尚未計(jì)算,則依據(jù)危險權(quán)限比較方法計(jì)算通信請求雙方的訪問控制關(guān)系的合法性,將合法性計(jì)算結(jié)果返回,并更新鄰接矩陣,且在十字鏈表中增加通信請求雙方間的訪問控制關(guān)系節(jié)點(diǎn)。
進(jìn)一步地,應(yīng)用權(quán)限信息管理模塊對訪問控制信息庫的維護(hù)過程如下:
1.1)在系統(tǒng)開機(jī)時對訪問控制信息庫進(jìn)行檢查,若訪問控制信息庫尚未初始化,則調(diào)用擴(kuò)展的pms服務(wù)掃描應(yīng)用信息,通過查詢危險權(quán)限編碼映射表將已安裝應(yīng)用的危險權(quán)限狀態(tài)寫入訪問控制信息庫中的應(yīng)用危險權(quán)限狀態(tài)字集中,并將訪問控制關(guān)系圖初始化;
1.2)當(dāng)接收到擴(kuò)展的pms服務(wù)傳來的應(yīng)用安裝的消息時,獲取待安裝應(yīng)用的所有權(quán)限更新引用危險權(quán)限狀態(tài)字集。
進(jìn)一步地,icc通信處理模塊對通信請求進(jìn)行監(jiān)測過程如下:
2.1)當(dāng)接收到來自擴(kuò)展的icc通信管理機(jī)制的消息時,調(diào)用擴(kuò)展后的pms服務(wù),對存放通信雙方應(yīng)用的mpackage進(jìn)行掃描,實(shí)時獲取雙方應(yīng)用的flag及uid,依據(jù)flag和uid判斷當(dāng)前應(yīng)用中存在非第三方應(yīng)用,則不對此次通信實(shí)施訪問限制,否則,進(jìn)入步驟2.2);.
2.2)查詢訪問控制信息庫,對鄰接矩陣對應(yīng)的兩應(yīng)用間的訪問控制關(guān)系進(jìn)行查找,若其值為1,則認(rèn)為訪問合法,不對本次訪問進(jìn)行限制,若值為0,則認(rèn)為本次訪問不合法,通知icc通信監(jiān)控器拒絕本次訪問,若值為-1或發(fā)生arrayindexoutofboundexception異常,則轉(zhuǎn)入步驟2.3);
2.3)利用危險權(quán)限比較方法判斷訪問主體應(yīng)用所擁有的危險權(quán)限集合是否完全包含訪問客體的危險權(quán)限集合,若結(jié)果為true則允許本次訪問,若結(jié)果為false則拒絕本次訪問,并根據(jù)計(jì)算結(jié)果更新訪問控制關(guān)系圖。
進(jìn)一步地,所述危險權(quán)限比較方法的具體過程如下:
3.1)對icc通信發(fā)起者應(yīng)用a的危險權(quán)限狀態(tài)字與icc通信接受者應(yīng)用b的危險權(quán)限狀態(tài)字進(jìn)行位或運(yùn)算,將所得的結(jié)果與a的危險權(quán)限狀態(tài)字進(jìn)行比較;
3.2)若步驟3.1)所得的結(jié)果為兩者相等,則認(rèn)為通信合法,返回true;否則,通信不合法,返回false。
所述危險權(quán)限以group的形式進(jìn)行操作。在android系統(tǒng)中被劃分為同組的危險權(quán)限在本方法中被視為同一權(quán)限進(jìn)行操作。
采用危險權(quán)限狀態(tài)字能夠加快訪問合法性的計(jì)算速度;
用十字鏈表+鄰接矩陣來記錄訪問控制關(guān)系而不是直接采用十字鏈表,提高了鄰接矩陣更新時的速度(通過查詢十字鏈表避免了更新鄰接矩陣的整行、整列);
當(dāng)android系統(tǒng)中的應(yīng)用進(jìn)行以下操作時,訪問控制決策管理器進(jìn)行如下控制:
當(dāng)應(yīng)用安裝時:
首先,對鄰接矩陣中的應(yīng)用對應(yīng)所在的行列進(jìn)行初始化,將行列上的所有項(xiàng)重新置為未計(jì)算的狀態(tài);接著,掃描該應(yīng)用所擁有的所有權(quán)限,更新應(yīng)用危險權(quán)限狀態(tài)字;
當(dāng)應(yīng)用卸載時:
首先,查找訪問控制信息庫中的十字鏈表里該應(yīng)用的對應(yīng)行鏈表與列鏈表中的所有節(jié)點(diǎn),對鄰接矩陣中與十字鏈表中節(jié)點(diǎn)對應(yīng)的項(xiàng)進(jìn)行初始化,并刪除十字鏈表中的與該應(yīng)用有關(guān)的節(jié)點(diǎn);接著,對該應(yīng)用的危險權(quán)限狀態(tài)字進(jìn)行清零處理;
當(dāng)應(yīng)用權(quán)限增加時:
首先,在十字鏈表結(jié)構(gòu)查找所有已記錄的與該應(yīng)用發(fā)生過icc通信請求的應(yīng)用;
接著,根據(jù)在十字鏈表中查詢到的所有結(jié)果,查找鄰接矩陣中的對應(yīng)位置的儲存數(shù)據(jù);
最后,對于查找到的存儲數(shù)據(jù)中所有先前由該應(yīng)用發(fā)起的不合法的訪問所對應(yīng)的訪問控制關(guān)系,及所有先前以該應(yīng)用為訪問客體的合法的對應(yīng)訪問控制關(guān)系,采用危險權(quán)限比較方法,對查找到的訪問控制關(guān)系的合法性進(jìn)行重新計(jì)算并更新鄰接矩陣,同時更新應(yīng)用危險權(quán)限狀態(tài)字;
當(dāng)應(yīng)用權(quán)限撤銷時:
首先,在十字鏈表結(jié)構(gòu)查找所有已記錄的與該應(yīng)用發(fā)生過icc通信請求的應(yīng)用;
接著,根據(jù)在十字鏈表中查詢到的所有結(jié)果,查找鄰接矩陣中的對應(yīng)位置的儲存數(shù)據(jù);
最后,對于所有查找到的先前合法的、由該應(yīng)用發(fā)起的訪問所對應(yīng)的訪問控制關(guān)系,及所有先前不合法的、以該應(yīng)用為訪問客體的對應(yīng)訪問控制關(guān)系,通過危險權(quán)限比較方法對查找到的訪問控制關(guān)系的合法性進(jìn)行重新計(jì)算并更新鄰接矩陣,同時更新應(yīng)用危險權(quán)限狀態(tài)字。
有益效果
本發(fā)明提供了一種支持android運(yùn)行時權(quán)限機(jī)制的第三方應(yīng)用間通信訪問控制方法,該方法根據(jù)通信雙方的所具有的危險權(quán)限組對android第三方應(yīng)用間的通信進(jìn)行訪問控制,從而防范企圖利用第三方應(yīng)用危險權(quán)限的混淆代理人攻擊,為第三方應(yīng)用及其相應(yīng)危險權(quán)限提供保護(hù),其優(yōu)點(diǎn)主要體現(xiàn)在以下幾個方面:
1)通過基于訪問者與被訪問者的實(shí)時權(quán)限進(jìn)行訪問控制的規(guī)則,實(shí)現(xiàn)了在權(quán)限動態(tài)變更條件下的訪問控制,避免了因權(quán)限變化而導(dǎo)致的權(quán)限漏洞與權(quán)限傳遞;
2)以組的形式對危險權(quán)限進(jìn)行比較的方法符合用戶的意圖與android權(quán)限系統(tǒng)的規(guī)則設(shè)計(jì),可以有效降低訪問控制的誤報(bào)率;
3)通過嚴(yán)格限制應(yīng)用間通信的權(quán)限要求,阻止惡意應(yīng)用通過將存在漏洞的第三方應(yīng)用作為混淆代理人從而獲取其所沒有的權(quán)限,降低應(yīng)用間訪問導(dǎo)致混淆代理人攻擊的可能性,從而提高系統(tǒng)的安全性;
4)實(shí)現(xiàn)了android6.0以上版本系統(tǒng)動態(tài)權(quán)限技術(shù)下對權(quán)限的實(shí)時監(jiān)控及訪問控制關(guān)系的動態(tài)更新;
5)通過運(yùn)用鄰接矩陣與十字鏈表對圖結(jié)構(gòu)進(jìn)行存儲,并利用已知的權(quán)限信息減少權(quán)限更新時的重復(fù)計(jì)算量,使得訪問控制關(guān)系圖的讀取、更新的時間復(fù)雜度分別降至o(1)與o(m),運(yùn)行效率大幅提高。
附圖說明
圖1是本發(fā)明所述方法的流程示意圖;
圖2是本發(fā)明中擴(kuò)展pms服務(wù)的主要工作流程示意圖;
圖3是本發(fā)明中訪問控制決策管理器的主要工作流程示意圖。
具體實(shí)施方式
以下將結(jié)合附圖和實(shí)例對本發(fā)明做進(jìn)一步的說明。
如圖1所示,一種支持android運(yùn)行時權(quán)限機(jī)制的第三方應(yīng)用間通信訪問控制方法,首先,在android系統(tǒng)中間件層擴(kuò)展packagemanagerservices(pms)服務(wù)并擴(kuò)展activitymanager中的應(yīng)用間組件間通信(icc)監(jiān)控器,其次,構(gòu)建應(yīng)用危險權(quán)限編碼映射表、訪問控制決策管理器及由其動態(tài)維護(hù)的訪問控制信息庫,此后,訪問控制決策管理器將實(shí)時查詢訪問控制信息庫中已保存的計(jì)算結(jié)果或進(jìn)一步比較通信雙方運(yùn)行時權(quán)限的方式,拒絕不具有客體應(yīng)用危險權(quán)限的第三方應(yīng)用所發(fā)起的通信請求,實(shí)現(xiàn)對android第三方應(yīng)用間通信的訪問控制。
所述擴(kuò)展pms服務(wù)是指在若干個系統(tǒng)用于處理應(yīng)用安裝、刪除及權(quán)限變化的函數(shù)中分別增加將應(yīng)用程序最新的危險權(quán)限信息與應(yīng)用uid打包發(fā)送至控制決策管理器的過程語句,在本例中修改的系統(tǒng)函數(shù)為installnewpackageli()、removepackagelpw()、grantruntimepermission()、revokeruntimepermission()。所述擴(kuò)展icc監(jiān)控器是指對checkcomponentpermission()方法增加將通信雙方的應(yīng)用uid打包發(fā)送至控制決策管理器、并依據(jù)控制決策管理器的決策結(jié)果,返回是否允許本次通信的過程語句。
如圖2所示,所述訪問控制信息庫中包括訪問控制關(guān)系圖、應(yīng)用危險權(quán)限狀態(tài)字集。其中,所述訪問控制關(guān)系圖用于記錄應(yīng)用間的合法通信關(guān)系的有向圖,由二維數(shù)組與十字鏈表構(gòu)成,所述鄰接矩陣用于記錄應(yīng)用間訪問控制關(guān)系的合法性計(jì)算結(jié)果,十字鏈表用于標(biāo)記應(yīng)用與應(yīng)用間的訪問關(guān)系是否被計(jì)算過。所述應(yīng)用危險權(quán)限狀態(tài)字集為short數(shù)組,其中第i個數(shù)是uid為10000+i的應(yīng)用的危險權(quán)限狀態(tài)字,反映了應(yīng)用所擁有的危險權(quán)限。
為了節(jié)約存儲資源,在本例具體實(shí)現(xiàn)時限定二維數(shù)組的大小為1000乘1000,即僅對uid在10000以上、11000以內(nèi)的應(yīng)用的訪問關(guān)系的計(jì)算結(jié)果進(jìn)行存儲,而對超過此范圍的應(yīng)用的訪問關(guān)系每次進(jìn)行重新計(jì)算;而應(yīng)用危險權(quán)限狀態(tài)字集為short數(shù)組,其中第i個數(shù)是uid為10000+i的應(yīng)用的危險權(quán)限狀態(tài)字,反映了應(yīng)用所擁有的危險權(quán)限。在本例中,我們以其每一個二進(jìn)制位對應(yīng)一個dangerous權(quán)限組的擁有情況,其值為1表示其擁有對應(yīng)的權(quán)限組權(quán)限,為0表示其不具有對應(yīng)的權(quán)限組權(quán)限或該位不存在對應(yīng)的危險權(quán)限組。
在本例中訪問控制信息庫按照以下要求實(shí)現(xiàn):
1.1)為了持久化存儲信息庫,信息庫繼承java提供的serializable接口,將其數(shù)據(jù)通過java輸入輸出流中的fileoutputstream方法以序列化的形式持久存儲于文件中。
1.2)以應(yīng)用的uid-android.os.process.first_application_uid作為應(yīng)用在訪問控制關(guān)系圖中的節(jié)點(diǎn)編號,用于之后的查詢與修改操作。
1.3)訪問控制關(guān)系圖中鄰接矩陣主要用于提供對第三方應(yīng)用的訪問控制關(guān)系的查詢。其中中的每一項(xiàng)的取值為合法、不合法或尚未計(jì)算過。為方便表述,我們在下文中以0、1和-1分別表示對應(yīng)uid為10000+x和10000+y的id之間的訪問不合法、訪問合法或訪問合法性未知。
1.4)訪問控制關(guān)系圖中的十字鏈表結(jié)構(gòu)用于提高查找、修改鄰接矩陣中項(xiàng)目的執(zhí)行效率。結(jié)構(gòu)中存儲的形如(x,y)的節(jié)點(diǎn)表示uid為10000+y的應(yīng)用對uid為10000+y的應(yīng)用的訪問合法性已經(jīng)計(jì)算過并記錄于步驟2)中所述的鄰接矩陣結(jié)構(gòu)中。
所述危險權(quán)限編碼映射表是指對具有危險權(quán)限的應(yīng)用進(jìn)行映射編碼。在本例中,使用hash表結(jié)構(gòu)實(shí)現(xiàn)編碼映射。
如圖3所示,所述訪問控制決策管理器包括應(yīng)用權(quán)限信息管理模塊與icc通信處理模塊,其中應(yīng)用權(quán)限信息管理模塊通過接收來自擴(kuò)展的pms服務(wù)的消息,對訪問控制信息庫進(jìn)行實(shí)時維護(hù);icc通信處理模塊同時通過擴(kuò)展的icc通信監(jiān)控器實(shí)時監(jiān)控android系統(tǒng)中發(fā)起的icc通信。
應(yīng)用權(quán)限信息管理模塊通過以下步驟維護(hù)訪問控制信息庫:
2.1)在系統(tǒng)開機(jī)時對訪問控制數(shù)據(jù)數(shù)據(jù)庫進(jìn)行檢查,若訪問控制信息庫尚未初始化,則調(diào)用擴(kuò)展的pms服務(wù)對存放應(yīng)用相關(guān)信息的mpackage進(jìn)行掃描,通過查詢危險權(quán)限編碼映射表將已安裝應(yīng)用的危險權(quán)限狀態(tài)字寫入訪問控制信息庫中的應(yīng)用危險權(quán)限狀態(tài)字集中,將十字鏈表結(jié)構(gòu)清空,并將鄰接矩陣全部置-1。
2.2)當(dāng)接收到擴(kuò)展的pms服務(wù)傳來的應(yīng)用安裝的消息時,對訪問控制信息庫中的鄰接矩陣中的對應(yīng)行列進(jìn)行寫入-1的操作,該過程中若發(fā)生越界操作無需額外處理。并從mpackage中讀取該應(yīng)用所擁有的危險權(quán)限列表,針對其擁有的每一危險權(quán)限(組),通過查找危險權(quán)限編碼映射表得到該權(quán)限組所對應(yīng)的編號,將該應(yīng)用的危險權(quán)限狀態(tài)字的對應(yīng)位修改為1。
2.3)當(dāng)接收到擴(kuò)展的pms服務(wù)傳來的應(yīng)用卸載的消息時,查找訪問控制信息庫中的十字鏈表里的對應(yīng)行鏈表與列鏈表中的所有節(jié)點(diǎn),對鄰接矩陣中與十字鏈表中節(jié)點(diǎn)對應(yīng)的項(xiàng)進(jìn)行置-1操作,并刪除十字鏈表中的這些節(jié)點(diǎn),該過程中若發(fā)生越界操作無需額外處理。此后對該應(yīng)用的危險權(quán)限狀態(tài)字進(jìn)行清零處理。
2.4)當(dāng)接收到擴(kuò)展的pms服務(wù)傳來的應(yīng)用權(quán)限增加的消息時,通過十字鏈表結(jié)構(gòu)查找所有已記錄的與該應(yīng)用間發(fā)生過icc通信請求的應(yīng)用,查找鄰接矩陣中的對應(yīng)位置的儲存數(shù)據(jù),對于所有取值為0的(即當(dāng)前認(rèn)定為不合法的)、由該應(yīng)用發(fā)起的訪問所對應(yīng)的訪問控制關(guān)系,及所有取值為1的(即當(dāng)前認(rèn)定為合法的)、以該應(yīng)用為訪問客體的對應(yīng)訪問控制關(guān)系,通過危險權(quán)限比較方法與危險權(quán)限狀態(tài)字集對其進(jìn)行重新計(jì)算并更新鄰接矩陣,并將應(yīng)用危險權(quán)限狀態(tài)字的對應(yīng)編號位置相應(yīng)修改為1或0。
2.5)當(dāng)接收到擴(kuò)展的pms服務(wù)傳來的應(yīng)用權(quán)限撤銷的消息時,通過十字鏈表結(jié)構(gòu)查找所有已記錄的與該應(yīng)用間發(fā)生過icc通信請求的應(yīng)用,查找鄰接矩陣中的對應(yīng)位置的儲存數(shù)據(jù),對于所有取值為1的(即當(dāng)前認(rèn)定為合法的)由該應(yīng)用發(fā)起的訪問所對應(yīng)的訪問控制關(guān)系,及所有取值為0的(即當(dāng)前認(rèn)定為不合法的)以該應(yīng)用為訪問客體的對應(yīng)訪問控制關(guān)系,通過危險權(quán)限比較方法與危險權(quán)限狀態(tài)字集對其進(jìn)行重新計(jì)算并更新鄰接矩陣,并將應(yīng)用危險權(quán)限狀態(tài)字的對應(yīng)編號位置相應(yīng)修改為1或0。
icc通信處理模塊對通信請求進(jìn)行監(jiān)控并實(shí)施訪問控制決策的過程如下:
3.1)當(dāng)接收到來自擴(kuò)展的icc通信管理機(jī)制的消息時,調(diào)用擴(kuò)展的pms服務(wù),對存放應(yīng)用相關(guān)信息的mpackage進(jìn)行掃描,實(shí)時獲取雙方應(yīng)用的的flag及uid,若根據(jù)flag和uid判斷當(dāng)前應(yīng)用中存在非第三方應(yīng)用,則不對此次通信實(shí)施訪問限制,否則,進(jìn)入步驟3.2)。
3.2)查詢訪問控制信息庫,對其中訪問控制關(guān)系矩陣內(nèi)對應(yīng)的兩應(yīng)用間的訪問控制關(guān)系進(jìn)行查找。若其值為1,則認(rèn)為訪問合法,不對本次訪問進(jìn)行限制,若值為0,則認(rèn)為本次訪問不合法,通知icc通信監(jiān)控器拒絕本次訪問,若值為-1或發(fā)生arrayindexoutofboundexception異常,則轉(zhuǎn)入步驟4)
3.3)利用危險權(quán)限比較方法判斷訪問主體應(yīng)用所擁有的危險權(quán)限集合是否完全包含訪問客體的危險權(quán)限集合,若結(jié)果為true則允許本次訪問,若結(jié)果為false則拒絕本次訪問,并根據(jù)計(jì)算結(jié)果更新訪問控制關(guān)系圖
所述的危險權(quán)限比較方法按以下步驟進(jìn)行:
4.1)對icc通信發(fā)起者應(yīng)用a的危險權(quán)限狀態(tài)字與icc通信接受者應(yīng)用b的危險權(quán)限狀態(tài)字進(jìn)行位或運(yùn)算,將所得的結(jié)果與a的危險權(quán)限狀態(tài)字進(jìn)行比較。
4.2)若步驟1)所得的結(jié)果為兩者相等,則意味著a擁有b所擁有的全部危險權(quán)限,則認(rèn)為通信合法,返回true;否則返回false。
為了提高訪問控制決策的效率,對所述危險權(quán)限以group的形式進(jìn)行操作。在android系統(tǒng)中被劃分屬于同組的危險權(quán)限在本方法中被視為同一權(quán)限進(jìn)行操作。
所述擴(kuò)展的icc通信監(jiān)控器實(shí)現(xiàn)了對android系統(tǒng)中發(fā)起的icc通信的實(shí)時監(jiān)控,擴(kuò)展后的機(jī)制將把本次通信雙方的uid信息打包發(fā)送至訪問控制決策管理器并請求訪問控制決策管理器對第三方應(yīng)用間的icc通信進(jìn)行決策,從而根據(jù)訪問控制決策管理器的決策阻止通信發(fā)起方所擁有的危險權(quán)限(組)少于通信對象擁有的危險權(quán)限(組)的icc通信,具體按以下要求實(shí)現(xiàn):
5.1)當(dāng)應(yīng)用發(fā)起icc訪問請求時,系統(tǒng)將調(diào)用checkcomponentpermission()方法對訪問合法性進(jìn)行驗(yàn)證;
5.2)被修改的checkcomponentpermission()方法將在通常的合法性判斷規(guī)則之后,將將要通信的雙方應(yīng)用的uid信息打包發(fā)送至訪問控制決策管理器,請求訪問控制決策管理器進(jìn)行進(jìn)一步的訪問關(guān)系合法性計(jì)算;
5.3)根據(jù)根據(jù)訪問控制決策管理器返回的決策結(jié)果,若允許本次通信則在checkcomponentpermission()中返回允許通信(即android系統(tǒng)中的permission_granted常數(shù)),否則返回拒絕通信(即permission_denied常數(shù))。
5.4)若checkcomponentpermission()返回訪問合法,則系統(tǒng)將允許本次icc通信,否則拒絕本次通信。
當(dāng)android系統(tǒng)中的應(yīng)用進(jìn)行以下操作時,訪問控制決策管理器進(jìn)行如下控制:
當(dāng)應(yīng)用安裝時:
首先,對鄰接矩陣中的應(yīng)用對應(yīng)所在的行列進(jìn)行初始化,將行列上的所有項(xiàng)重新置為未計(jì)算的狀態(tài);接著,掃描該應(yīng)用所擁有的所有權(quán)限,更新應(yīng)用危險權(quán)限狀態(tài)字;
當(dāng)應(yīng)用卸載時:
首先,查找訪問控制信息庫中的十字鏈表里該應(yīng)用的對應(yīng)行鏈表與列鏈表中的所有節(jié)點(diǎn),對鄰接矩陣中與十字鏈表中節(jié)點(diǎn)對應(yīng)的項(xiàng)進(jìn)行初始化,并刪除十字鏈表中的與該應(yīng)用有關(guān)的節(jié)點(diǎn);接著,對該應(yīng)用的危險權(quán)限狀態(tài)字進(jìn)行清零處理;
當(dāng)應(yīng)用權(quán)限增加時:
首先,在十字鏈表結(jié)構(gòu)查找所有已記錄的與該應(yīng)用發(fā)生過icc通信請求的應(yīng)用;
接著,根據(jù)在十字鏈表中查詢到的所有結(jié)果,查找鄰接矩陣中的對應(yīng)位置的儲存數(shù)據(jù);
最后,對于查找到的存儲數(shù)據(jù)中所有先前由該應(yīng)用發(fā)起的不合法的訪問所對應(yīng)的訪問控制關(guān)系,及所有先前以該應(yīng)用為訪問客體的合法的對應(yīng)訪問控制關(guān)系,采用危險權(quán)限比較方法,對查找到的訪問控制關(guān)系的合法性進(jìn)行重新計(jì)算并更新鄰接矩陣,同時更新應(yīng)用危險權(quán)限狀態(tài)字;
當(dāng)應(yīng)用權(quán)限撤銷時:
首先,在十字鏈表結(jié)構(gòu)查找所有已記錄的與該應(yīng)用發(fā)生過icc通信請求的應(yīng)用;
接著,根據(jù)在十字鏈表中查詢到的所有結(jié)果,查找鄰接矩陣中的對應(yīng)位置的儲存數(shù)據(jù);
最后,對于所有查找到的先前合法的、由該應(yīng)用發(fā)起的訪問所對應(yīng)的訪問控制關(guān)系,及所有先前不合法的、以該應(yīng)用為訪問客體的對應(yīng)訪問控制關(guān)系,通過危險權(quán)限比較方法對查找到的訪問控制關(guān)系的合法性進(jìn)行重新計(jì)算并更新鄰接矩陣,同時更新應(yīng)用危險權(quán)限狀態(tài)字。
以上內(nèi)容是本發(fā)明具體實(shí)施方式的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施方式僅限于此,對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單的推演或替換,都應(yīng)當(dāng)視為本發(fā)明由所提交的權(quán)利要求書確定的專利保護(hù)范圍。