本發(fā)明涉及信息安全技術(shù),尤其涉及一種疏堵結(jié)合的隱私保護(hù)方法與系統(tǒng)。
背景技術(shù):
Android操作系統(tǒng)是由Google和開放手持設(shè)備聯(lián)盟共同開發(fā)的移動(dòng)設(shè)備操作系統(tǒng)。自2008年9月,第一版Android( Android 1.1)發(fā)布,至今已歷經(jīng)近七年,其發(fā)展仍然呈現(xiàn)高速增長(zhǎng)趨勢(shì)。 Android作為一個(gè)開放式的移動(dòng)互聯(lián)網(wǎng)操作系統(tǒng),已成為應(yīng)用最廣的移動(dòng)互聯(lián)網(wǎng)平臺(tái)。據(jù)全球市場(chǎng)研究公司Gartner數(shù)據(jù)顯示, 2014年Android系統(tǒng)全球市場(chǎng)占有率為80.7%,總銷量為12.45億部,牢牢占據(jù)著全球智能手機(jī)市場(chǎng)份額第一的位置。
360互聯(lián)網(wǎng)安全中心將 2014年監(jiān)測(cè)的 Android惡意程序根據(jù)中國(guó)反網(wǎng)絡(luò)病毒聯(lián)盟的分類標(biāo)準(zhǔn)進(jìn)行了分類統(tǒng)計(jì),其中感染次數(shù)最高的為資費(fèi)消耗類,占比74.362%,之后是隱私竊取和惡意扣費(fèi),分別占10.8%和10.6%。其他類型(流氓行為、系統(tǒng)破壞、遠(yuǎn)程控制、惡意傳播)的惡意程序感染量占比約為 1%。感染量最大的資費(fèi)消耗類惡意程序的主要惡意行為是通過自動(dòng)聯(lián)網(wǎng)、上傳和下載數(shù)據(jù)、安裝其他應(yīng)用等消耗用戶手機(jī)流量和資費(fèi)。
由于 Android 本身的開放性以及管理制度的不健全等諸多因素,其安全性問題正逐步暴露出來,已成為遭受攻擊最多的移動(dòng)平臺(tái)。特別是國(guó)內(nèi)第三方市場(chǎng)的審核制度不嚴(yán)格,讓 Android 平臺(tái)的安全性問題雪上加霜,時(shí)刻威脅著用戶的隱私。
傳統(tǒng)安全解決方案是對(duì)敏感權(quán)限進(jìn)行攔截,這通常會(huì)導(dǎo)致應(yīng)用程序功能受限,甚至程序崩潰。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于針對(duì)現(xiàn)有技術(shù)中的缺陷,提供一種疏堵結(jié)合的隱私保護(hù)方法與系統(tǒng)。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種疏堵結(jié)合的隱私保護(hù)方法,包括以下步驟:
1)掃描已安裝的應(yīng)用,列出應(yīng)用申請(qǐng)的所有權(quán)限,判斷已安裝應(yīng)用是否涉及敏感權(quán)限;
2)對(duì)涉及敏感權(quán)限的應(yīng)用,提示用戶對(duì)其使用欺騙函數(shù)策略或跳躍函數(shù)策略;
所述欺騙函數(shù)策略具體如下:對(duì)應(yīng)用程序涉及的敏感權(quán)限進(jìn)行hook,在被hook的函數(shù)中植入欺騙函數(shù),當(dāng)監(jiān)控到應(yīng)用訪問敏感權(quán)限時(shí),對(duì)其返回一個(gè)虛假值;
所述跳躍函數(shù)策略具體如下:提取惡意應(yīng)用所涉及的權(quán)限,通過修改權(quán)限函數(shù)的入口地址,繞過惡意應(yīng)用權(quán)限的調(diào)用;
3)根據(jù)用戶選定的策略,當(dāng)敏感權(quán)限申請(qǐng)數(shù)據(jù)時(shí),對(duì)敏感權(quán)限返回虛假值或直接跳過權(quán)限調(diào)用。
按上述方案,所述步驟2)中策略函數(shù)實(shí)現(xiàn)流程如下:
2.1)在 hook方法的前后設(shè)定好參數(shù)信息;
2.2)找到要hook的類名;
2.3)根據(jù)要hook的類名,找到將要hook類的構(gòu)造方法和非抽象方法;
2.4)將獲取到的構(gòu)造方法和非抽象方法進(jìn)行hook操作;
2.5)對(duì)應(yīng)用程序的相關(guān)權(quán)限進(jìn)行虛假設(shè)置,當(dāng)應(yīng)用程序調(diào)用系統(tǒng)的服務(wù)的一個(gè)函數(shù)時(shí),通過beforeHookedMethod()函數(shù)或afterHookedMethod()函數(shù)達(dá)到返回虛假值或跳過函數(shù)調(diào)用的目的。
一種疏堵結(jié)合的隱私保護(hù)系統(tǒng),包括:
敏感權(quán)限掃描模塊,用于掃描已安裝的應(yīng)用,判斷已安裝應(yīng)用是否涉及敏感權(quán)限;
策略選擇模塊,用于對(duì)涉及敏感權(quán)限的應(yīng)用,提示用戶對(duì)其使用欺騙函數(shù)策略或跳躍函數(shù)策略;
策略函數(shù)模塊,包括欺騙函數(shù)策略模塊和跳躍函數(shù)策略模塊;
欺騙函數(shù)策略模塊,用于對(duì)應(yīng)用程序涉及的敏感權(quán)限進(jìn)行hook,在被hook的函數(shù)中植入欺騙函數(shù),當(dāng)監(jiān)控到應(yīng)用訪問敏感權(quán)限時(shí),對(duì)其返回一個(gè)虛假值;
跳躍函數(shù)策略模塊,用于提取惡意應(yīng)用所涉及的權(quán)限,通過修改權(quán)限函數(shù)的入口地址,繞過惡意應(yīng)用權(quán)限的調(diào)用;
權(quán)限疏導(dǎo)防控模塊,用于根據(jù)用戶選定的策略,當(dāng)敏感權(quán)限申請(qǐng)數(shù)據(jù)時(shí),對(duì)敏感權(quán)限返回虛假值或直接跳過權(quán)限調(diào)用。
按上述方案,所述策略函數(shù)模塊中策略函數(shù)實(shí)現(xiàn)流程如下:
1)在hook方法的前后設(shè)定好參數(shù)信息;
2)找到要hook的類名;
3)根據(jù)要hook的類名,找到將要hook類的構(gòu)造方法和非抽象方法;
4)將獲取到的構(gòu)造方法和非抽象方法進(jìn)行hook操作;
5)對(duì)應(yīng)用程序的相關(guān)權(quán)限進(jìn)行虛假設(shè)置,當(dāng)應(yīng)用程序調(diào)用系統(tǒng)的涉及隱私服務(wù)的時(shí),通過beforeHookedMethod()函數(shù)或afterHookedMethod()函數(shù)達(dá)到返回虛假值或跳過函數(shù)調(diào)用的目的。
本發(fā)明產(chǎn)生的有益效果是:本發(fā)明用于解決現(xiàn)有的手機(jī)應(yīng)用隱私數(shù)據(jù)的隱私泄露、權(quán)限濫用等安全問題。某些惡意應(yīng)用私自獲取通訊錄信息、私自發(fā)送短信,私自獲取地理位置信息等,泄露了用戶的隱私信息。傳統(tǒng)安全解決方案是對(duì)敏感權(quán)限進(jìn)行攔截,這通常會(huì)導(dǎo)致應(yīng)用程序功能受限,甚至程序崩潰。采用本發(fā)明方法,用戶不用擔(dān)心這個(gè)問題,用戶可以利用欺騙函數(shù)策略和跳躍函數(shù)策略,對(duì)敏感權(quán)限返回一個(gè)虛假值或直接跳過權(quán)限的調(diào)用,實(shí)現(xiàn)對(duì)敏感權(quán)限的“疏導(dǎo)”防控。
附圖說明
下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,附圖中:
圖1是本發(fā)明的方法流程示意圖。
圖2是本發(fā)明的權(quán)限疏導(dǎo)防控模塊關(guān)系示意圖。
圖3是本發(fā)明中策略函數(shù)模塊結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,圖1是本發(fā)明的權(quán)限疏導(dǎo)防控流程示意圖。引入了基于Xposed框架的Android API Hook技術(shù),設(shè)計(jì)欺騙函數(shù)策略和跳躍函數(shù)策略。對(duì)于欺騙函數(shù)策略:對(duì)應(yīng)用程序涉及的敏感權(quán)限進(jìn)行hook,在被hook的函數(shù)中植入欺騙函數(shù),當(dāng)監(jiān)控到應(yīng)用訪問敏感權(quán)限時(shí),對(duì)其返回一個(gè)虛假值;對(duì)于跳躍函數(shù)策略:提取惡意應(yīng)用所涉及的權(quán)限,通過修改權(quán)限函數(shù)的入口地址,繞過惡意應(yīng)用權(quán)限的調(diào)用,進(jìn)而實(shí)現(xiàn)對(duì)敏感權(quán)限的“疏導(dǎo)”防控。
圖2是本發(fā)明的權(quán)限疏導(dǎo)防控模塊關(guān)系示意圖。流程是:
(1)Android 系統(tǒng)啟動(dòng)流程,在系統(tǒng)啟動(dòng)過程中調(diào)用 Xposed 框架;Android 系統(tǒng)啟動(dòng),首先會(huì)加載系統(tǒng)內(nèi)核,內(nèi)核加載完畢后,第一個(gè)執(zhí)行的 是 init 進(jìn)程, init 進(jìn)程首先要做的是設(shè)備的初始化工作, 然后讀取 inic.rc 文件并 啟動(dòng)系統(tǒng)中的重要外部程序 Zygote。
Zygote 進(jìn)程是 Android 所有進(jìn)程的孵化器進(jìn)程,它啟動(dòng)后會(huì)首先初始化 Dalvik 虛擬機(jī),然后啟動(dòng) system_server 并進(jìn)入 Zygote 模式,通過 socket 等候命 令。 system_server 進(jìn)程就是由 Android 系統(tǒng)的 system/bin 目錄下的 app_process 程序運(yùn)行創(chuàng)建的。當(dāng)執(zhí)行一個(gè) Android 應(yīng)用程序的時(shí)候, system_server 進(jìn)程通過 socket 方式發(fā)送命令給 Zygote,Zygote 收到命令后通過 fork 自身創(chuàng)建一個(gè) Dalvik 虛擬機(jī)實(shí)例來執(zhí)行應(yīng)用程序的入口函數(shù),這樣一個(gè)程序就啟動(dòng)完成了。
Zygote 提供了三種創(chuàng)建進(jìn)程的方法:
1. fork():創(chuàng)建一個(gè) Zygote 進(jìn)程,可以繼續(xù) fork()出其它進(jìn)程;
2.forkAndSpecialize():創(chuàng)建一個(gè)非 Zygote 進(jìn)程,不可以 fork()出其它進(jìn) 程;
3.forkSystemServer():創(chuàng)建一個(gè)系統(tǒng)服務(wù)進(jìn)程,終止后子進(jìn)程也必須終 止。 其中, Zygote 進(jìn)程可以再 fork 出其他進(jìn)程,非 Zygote 進(jìn)程則不能 fork 其他 進(jìn)程,而系統(tǒng)服務(wù)進(jìn)程在終止后它的子進(jìn)程也必須終止。
(2)用Xposed框架替換了系統(tǒng)重要程序 app_process,替換后的 app_process 中注入了自定義的代碼用于在系統(tǒng)啟動(dòng)的時(shí)候加載額外的代碼文件。
Dalvik 孵化器 Zygote 進(jìn)程是由系統(tǒng) 程序 app_process 創(chuàng)建的進(jìn)程 system_server 通過 socket 通信創(chuàng)建自身而形成的。 在 Android FrameWork 載入的時(shí)候,一個(gè)由 Xposed 定義的 app_process 程序會(huì)被 復(fù)制到/system/bin 目錄下。這個(gè)程序會(huì)在開機(jī)的時(shí)候添加了額外的 jar 文件到 classpath 從而實(shí)現(xiàn)可以在 Zygote 上下文中調(diào)用這些定義的方法。 該框架由三個(gè)部分組成:
1.XposedBridge:Xposed 提供的 jar 文件, app_process 啟動(dòng)過程會(huì)加載該 jar 文件,并且其它插件模塊的開發(fā)都是基于該 jar 文件;
2. Xposed:Xposed 的 C++部分,主要用于替換/system/bin/app_process, 并為 XposedBridge 提供 JNI 方法;
3. XposedInstaller:Xposed 的安裝包,提供對(duì)基于 Xposed 框架的插件的 管理。
這個(gè) jar 文件被放置到了/data/xposed/XposedBridge.jar 下, Zygote 進(jìn)程會(huì)首先調(diào)用這個(gè) jar 文件中的方法。 XposedBridge.jar 中有一個(gè)私有的 Native( JNI) 方法 hookMethodNative,該方法也會(huì)在 app_process 中被使用。這個(gè)方法提供一個(gè) 方法對(duì)象并利用 java 的 reflection 反射機(jī)制對(duì)系統(tǒng)內(nèi)置的方法進(jìn)行覆寫。
(3)對(duì)系統(tǒng)方法的 hook 操作,模塊實(shí)現(xiàn)的關(guān)鍵技術(shù);
Xposed 框架中真正起作用的是對(duì)系統(tǒng)方法的 hook 操作。自定義 java 層 hook 代碼在 Xposed 提供的 before()和 after()方法中實(shí)現(xiàn)。 Jar 包中的本地方法 hookMethodNative 會(huì)在替換后的 app_process 中被調(diào)用。它將一個(gè)類對(duì)象作為輸 入?yún)?shù)(可以通過 java 的反射機(jī)制獲取)并且改變 Dalvik 虛擬機(jī)中對(duì)于該方法 的定義。 Xposed 將該方法的類型改變?yōu)?native 并且將這個(gè)方法的實(shí)現(xiàn)鏈接到它 的本地通用類的方法。當(dāng)調(diào)用那個(gè)被 hook 的方法的時(shí)候,通用的類方法依然會(huì) 被調(diào)用但不會(huì)對(duì)調(diào)用者有任何的影響。在 hookMethodNative 的實(shí)現(xiàn)中,會(huì)調(diào)用XposedBridge 中的 handleHookedMethod 這個(gè)方法來傳遞參數(shù)。
(4)java 反射機(jī)制;
(5)模塊實(shí)現(xiàn)流程,從模塊的一個(gè)實(shí)現(xiàn)分支出發(fā)詳細(xì)介紹模塊實(shí)現(xiàn)的流程。
圖3是本發(fā)明中策略函數(shù)模塊結(jié)構(gòu)示意圖。系統(tǒng)監(jiān)控到應(yīng)用申請(qǐng)敏感權(quán)限時(shí),利用 hook 技術(shù)轉(zhuǎn)向 BeforeHookedMethod()函數(shù),然后再執(zhí)行原函數(shù),之后轉(zhuǎn)向AfterHookedMethod()函數(shù)。欺騙函數(shù)策略則是執(zhí)行 AfterHookedMethod()函數(shù)之后,偽造一個(gè)回調(diào)參數(shù),達(dá)到返回虛假值的目的;跳躍策略函數(shù)則是執(zhí)行BeforeHookedMethod()函數(shù)之后,通過地址索引到 AfterHookedMethod()函數(shù),達(dá)到跳過權(quán)限調(diào)用的目的。
本發(fā)明具有的理論意義和實(shí)際應(yīng)用價(jià)值:在本發(fā)明原型系統(tǒng)中,用戶也可以結(jié)合自己的需求,根據(jù)Android應(yīng)用功能、用戶使用習(xí)慣、軟件熟悉程度等條件自行設(shè)定權(quán)限控制策略,實(shí)現(xiàn)基于 Android的個(gè)性化隱私保護(hù),具有較明顯的工程應(yīng)用和科研價(jià)值。
應(yīng)當(dāng)理解的是,對(duì)本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以改進(jìn)或變換,而所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。