一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法及裝置制造方法
【專利摘要】本申請(qǐng)公開了一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法及裝置。所述方法包括:在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息;根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征;如果否,則確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)。上述方案可以在不改變Android系統(tǒng)運(yùn)行機(jī)制的前提下,直接通過擴(kuò)展系統(tǒng)函數(shù)的方式實(shí)現(xiàn),不僅實(shí)現(xiàn)簡(jiǎn)單,而且通用性強(qiáng)。
【專利說明】—種Android系統(tǒng)Act i vity劫持風(fēng)險(xiǎn)檢測(cè)方法及裝置
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)信息安全【技術(shù)領(lǐng)域】,特別是涉及一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法及裝置。
【背景技術(shù)】
[0002]Android是一種以Linux為基礎(chǔ)的開放源碼操作系統(tǒng),主要使用于智能手機(jī)、平板電腦等便攜設(shè)備。該系統(tǒng)采用Java語言開發(fā),包括操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件等組成部分。隨著Android系統(tǒng)的不斷發(fā)展,各大硬件廠商也在不斷推出各種基于Android系統(tǒng)的產(chǎn)品。目前,基于Android系統(tǒng)終端已經(jīng)在市場(chǎng)上占有重要地位。
[0003]Activity是Android系統(tǒng)的一種基本組件,負(fù)責(zé)系統(tǒng)與用戶之間的交互操作。在Android系統(tǒng)中,一個(gè)Activity相當(dāng)于一個(gè)頁面,該頁面一方面用于向用戶顯示各種內(nèi)容,另一方面還用于監(jiān)聽并響應(yīng)用戶的操作行為。
[0004]在Android系統(tǒng)運(yùn)行過程中,各種系統(tǒng)服務(wù)或應(yīng)用程序可能會(huì)創(chuàng)建多個(gè)Activity,而在某一時(shí)刻,系統(tǒng)僅允許一個(gè)Activity在前臺(tái)運(yùn)行,該Activity處于激活狀態(tài),其他Activity則處于暫?;蛲V?fàn)顟B(tài)。利用Android系統(tǒng)的這一特性,惡意程序可以通過創(chuàng)建Activity來實(shí)現(xiàn)以偽造頁面替換真實(shí)頁面,這種手段被稱為Activity劫持,利用偽造頁面,可以達(dá)到騙取點(diǎn)擊、甚至盜取用戶私有信息等目的。更為嚴(yán)重的是,這種手段利用了 Android系統(tǒng)的Activity管理機(jī)制,具有很強(qiáng)的隱蔽性,無論是在實(shí)施劫持的前后還是過程中,者很難被用戶發(fā)覺。
【發(fā)明內(nèi)容】
[0005]為解決上述問題,本申請(qǐng)實(shí)施例提供一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法及裝置,技術(shù)方案如下:
[0006]本申請(qǐng)實(shí)施例提供一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法,該方法包括:
[0007]在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息;
[0008]根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征;
[0009]如果否,則確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)。
[0010]本申請(qǐng)實(shí)施例還提供一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)裝置,該裝置包括:
[0011]特征獲取模塊,用于在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息;
[0012]特征比較模塊,用于根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征;
[0013]風(fēng)險(xiǎn)判斷模塊,用于在所述特征比較模塊判斷結(jié)果為否的情況下,確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)。
[0014]一般的Activity劫持手段,都會(huì)在盜取信息完畢后,將偽造的Activity結(jié)束,并且真實(shí)Activity會(huì)被重新激活,以此達(dá)到隱蔽的效果,使得普通用戶難以發(fā)現(xiàn)異常狀況。本申請(qǐng)所提供的技術(shù)方案,針對(duì)Activity劫持手段的上述特點(diǎn),在真實(shí)Activity進(jìn)入激活狀態(tài)之前,加入對(duì)當(dāng)前處于激活狀態(tài)的Activity的檢測(cè)步驟,通過判斷檢測(cè)到的Activity是否安全,進(jìn)一步確定系統(tǒng)是否存在Activity劫持風(fēng)險(xiǎn)。
[0015]本申請(qǐng)所提供的技術(shù)方案,可以在不改變Android系統(tǒng)運(yùn)行機(jī)制的前提下,直接通過擴(kuò)展系統(tǒng)函數(shù)的方式實(shí)現(xiàn),不僅實(shí)現(xiàn)簡(jiǎn)單,而且通用性強(qiáng)。在實(shí)際應(yīng)用中,既可以對(duì)所有的Activity開啟檢測(cè),也可以僅對(duì)個(gè)別關(guān)鍵Activity開啟檢測(cè),從而實(shí)現(xiàn)對(duì)系統(tǒng)安全和性能的靈活調(diào)控。
【專利附圖】
【附圖說明】
[0016]為了更清楚地說明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,還可以根據(jù)這些附圖獲得其他的附圖。
[0017]圖1為本申請(qǐng)實(shí)施例Android系統(tǒng)Activity劫持原理示意圖;
[0018]圖2為本申請(qǐng)實(shí)施例Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法的流程圖;
[0019]圖3為本申請(qǐng)實(shí)施例Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法的原理示意圖;
[0020]圖4為本申請(qǐng)實(shí)施例Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)裝置的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0021]Android系統(tǒng)通過一種稱為Activity棧的方式來管理Activity, —個(gè)Activity實(shí)例的狀態(tài)決定它在棧中的位置,在Android系統(tǒng)中,Activity擁有四種基本狀態(tài):
[0022]I) Active (激活)/Runing (運(yùn)行):
[0023]一個(gè)新Activity啟動(dòng)入棧后,在屏幕最前端顯示,處于棧的最頂端,此時(shí)它處于可見并可和用戶交互的激活狀態(tài)。
[0024]2) Paused (暫停):
[0025]當(dāng)Activity被另一個(gè)透明或者Dialog樣式的Activity覆蓋時(shí)的狀態(tài)。此時(shí)它依然與窗口管理器保持連接,系統(tǒng)繼續(xù)維護(hù)其內(nèi)部狀態(tài),所以它仍然可見,但它已經(jīng)失去了焦點(diǎn)故不可與用戶交互,這種狀態(tài)稱為暫停狀態(tài)。
[0026]3) Stoped (停止):
[0027]當(dāng)Activity被另外一個(gè)Activity完全覆蓋、失去焦點(diǎn)并不可見時(shí)處于Stoped狀態(tài),也稱為停止?fàn)顟B(tài)。
[0028]4)Killed(回收):
[0029]當(dāng)Activity被系統(tǒng)回收或者沒有被啟動(dòng)時(shí)處于Killed狀態(tài)。
[0030]當(dāng)一個(gè)Activity實(shí)例被創(chuàng)建、銷毀或者啟動(dòng)另外一個(gè)Activity時(shí),Activity在這四種狀態(tài)之間進(jìn)行轉(zhuǎn)換,這種轉(zhuǎn)換的發(fā)生依賴于用戶程序的動(dòng)作。一個(gè)Activity的實(shí)例的狀態(tài)決定它在棧中的位置:
[0031]處于前臺(tái)的Activity總是在棧的頂端,當(dāng)前臺(tái)的Activity被銷毀或者用戶執(zhí)行“回退”等操作時(shí),處于棧第二層的Activity將被激活,上浮到棧頂;當(dāng)新的Activity啟動(dòng)入棧時(shí),原Activity會(huì)被壓入到棧的第二層,變?yōu)椤皶和!被颉巴V埂睜顟B(tài)。除了最頂層即處在Active狀態(tài)的Activity外,其它的Activity都有可能在系統(tǒng)內(nèi)存不足時(shí)被回收,即變?yōu)閗illed狀態(tài);一個(gè)Activity的實(shí)例越是處在棧的底層,它被系統(tǒng)回收的可能性越大。
[0032]可見,一個(gè)Activity在棧中的位置變化反映了它在不同狀態(tài)間的轉(zhuǎn)換。Android系統(tǒng)負(fù)責(zé)管理?xiàng)V蠥ctivity的實(shí)例,根據(jù)Activity所處的狀態(tài)來改變其在棧中的位置。
[0033]通過研究發(fā)現(xiàn),Activity劫持正是利用了 Activity棧運(yùn)行機(jī)制來實(shí)現(xiàn)攻擊,同時(shí)還可以很好地隱藏自己,使用戶難以發(fā)覺,Activity劫持的實(shí)現(xiàn)原理如下:
[0034]惡意程序在系統(tǒng)運(yùn)行期間在后臺(tái)啟動(dòng)一個(gè)服務(wù)(Service),該服務(wù)的作用是對(duì)系統(tǒng)中運(yùn)行的所有進(jìn)程進(jìn)行監(jiān)聽,或者對(duì)系統(tǒng)當(dāng)前棧頂?shù)腁ctivity進(jìn)行監(jiān)聽,將監(jiān)聽到目標(biāo)程序或目標(biāo)Activity后,貝U啟動(dòng)惡意Activity來偽造頁面。
[0035]參見圖1所示,假設(shè)惡意程序的目的是盜取某應(yīng)用程序的賬號(hào)和密碼,那么當(dāng)監(jiān)聽服務(wù)檢測(cè)到該應(yīng)用程序進(jìn)程處于運(yùn)行狀態(tài)、或者檢測(cè)到登錄頁面對(duì)應(yīng)的Activity處于棧頂時(shí),則立即啟動(dòng)一個(gè)Ac t i V i ty,根據(jù)Andro i d系統(tǒng)的棧運(yùn)行機(jī)制,新啟動(dòng)的Ac t i v i ty將被放到棧頂,也就是說,原有的真實(shí)Activity將被該偽造Activity擠到第二位,此時(shí)用戶實(shí)際看到是偽造的登錄頁面,用戶在該偽造登錄頁面輸入賬號(hào)和密碼,并且確認(rèn)點(diǎn)擊后,信息就可能被發(fā)送到了攻擊者處,造成用戶信息泄露。
[0036]另一方面,在用戶確認(rèn)點(diǎn)擊的同時(shí),偽造Activity會(huì)觸發(fā)“回退”操作,將偽造Activity從棧中移除,此時(shí)棧中第二位的真實(shí)Activity被激活,用戶將看到真實(shí)的頁面,盡管可能需要重新輸入賬號(hào)和密碼等信息,但用戶可能認(rèn)為是網(wǎng)絡(luò)問題、程序bug,一般很難意識(shí)到自己已經(jīng)被攻擊了。
[0037]針對(duì)上述問題,本申請(qǐng)?zhí)峁┮环NActivity劫持風(fēng)險(xiǎn)檢測(cè)方法如下:
[0038]在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息;
[0039]根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征;
[0040]如果否,則確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)。
[0041]Activity劫持是利用了 Android系統(tǒng)的自有運(yùn)行機(jī)制實(shí)現(xiàn)攻擊目的,因此隱蔽性好,難以被發(fā)覺。但是,從另一個(gè)方面看,由于無法擺脫Android自有機(jī)制的限制,也使得Activity劫持有規(guī)律可循。一般的Activity劫持手段,都會(huì)在盜取信息完畢后,將偽造Activity結(jié)束,并且真實(shí)Activity會(huì)被重新激活,以此達(dá)到隱蔽的效果,使得普通用戶難以發(fā)現(xiàn)異常狀況。本申請(qǐng)方案則針對(duì)上述規(guī)律,在真實(shí)Activity進(jìn)入激活狀態(tài)之前,加入對(duì)當(dāng)前處于激活狀態(tài)的Activity的檢測(cè)步驟,通過判斷檢測(cè)到的Activity是否安全,進(jìn)一步確定系統(tǒng)是否存在Activity劫持風(fēng)險(xiǎn)。
[0042]為了使本領(lǐng)域技術(shù)人員更好地理解本申請(qǐng)中的技術(shù)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行詳細(xì)地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。
[0043]圖1所示,其為本申請(qǐng)所提供的一種Activity劫持風(fēng)險(xiǎn)檢測(cè)方法的流程圖,其中,“目標(biāo)Activity”指代的是需要保護(hù)的真實(shí)Activity, “偽造Activity”指代的是惡意程序所創(chuàng)建的惡意Activity。
[0044]S101,在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息;
[0045]根據(jù)Activity劫持原理,偽造的Activity會(huì)在完成欺騙或盜取目的后執(zhí)行“回退”操作moveTaskToBack(true),將偽造Activity從棧中移除,然后位于棧中第二位的真實(shí)Activity將被移至棧頂激活。也就是說,在真實(shí)Activity尚未被激活之前,如果查看當(dāng)前處于激活狀態(tài)的Activity,結(jié)果將是偽造Activity。那么,只要能夠在Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息,就可以進(jìn)一步根據(jù)所獲取的特征信息進(jìn)行是否安全的判斷。
[0046]在Android 系統(tǒng)的 android, app.Activity 類中,定義了一系列與 Activity 生命周期相關(guān)的函數(shù),這些函數(shù)包括:
[0047]onCreate ():是一個(gè)Activity的實(shí)例被啟動(dòng)時(shí)調(diào)用的第一個(gè)方法;
[0048]onStart O:在onCreate O函數(shù)之后被調(diào)用,或者在Activity從Stop狀態(tài)轉(zhuǎn)換為Active狀態(tài)時(shí)被調(diào)用;
[0049]onResume O:在Activity從Pause狀態(tài)轉(zhuǎn)換到Active狀態(tài)時(shí)被調(diào)用;
[0050]onPause O:在Activity從Active狀態(tài)轉(zhuǎn)換到Pause狀態(tài)時(shí)被調(diào)用;
[0051]onStop ():在Activity從Active狀態(tài)轉(zhuǎn)換到Stop狀態(tài)時(shí)被調(diào)用;
[0052]onDestroy ():在 Active 被結(jié)束時(shí)調(diào)用;
[0053]根據(jù)Android生命周期描述,一個(gè)Activity A如果被另外一個(gè)Activity B完全覆蓋,A會(huì)順序調(diào)用onPause、onStop函數(shù),在重新展示的時(shí)候會(huì)順序調(diào)用onRestart、onStart、onResume 函數(shù)。
[0054]而B實(shí)際要在A調(diào)用完onResume函數(shù)后才會(huì)真正從Activity棧中撤銷,因此,如果在B完全覆蓋了 A,然后退出的過程中,A在onRestart或onStrart或onResume方法中查看當(dāng)前棧頂?shù)腁ctivity,那么會(huì)是B的名稱。
[0055]如果存在Activity劫持的情況,那么在真實(shí)Activity被激活之前,需要調(diào)用onRestart、onStart、onResume函數(shù),而在這個(gè)階段,偽造的Activity —直位于棧頂,因此,可以在真實(shí)Activity調(diào)用onRestart/onStart/onResume函數(shù)的任一個(gè)階段,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息并進(jìn)行判斷,以確定這個(gè)處于棧頂?shù)腁ctivity是否安全。
[0056]在實(shí)際應(yīng)用中,除了上述“完全覆蓋”情況之外,還可能存在一種“不完全覆蓋”情況,即Activity B激活后,所對(duì)應(yīng)的頁面并沒有把Activity A所對(duì)應(yīng)的整個(gè)頁面都覆蓋住(但是仍然能達(dá)到偽裝的效果),這種情況下,A僅會(huì)調(diào)用onPause函數(shù),在重新展示的時(shí)候僅調(diào)用onResume函數(shù),因此,上述“獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息”的操作,應(yīng)在onResume函數(shù)的調(diào)用階段執(zhí)行。
[0057]可見,如果考慮通用性和方便性,將“獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息”的操作,都放在onResume函數(shù)的調(diào)用階段執(zhí)行即可。
[0058]本申請(qǐng)實(shí)施例直接通過對(duì)系統(tǒng)函數(shù)onRestart/onStart/onResume進(jìn)行擴(kuò)展來實(shí)現(xiàn)Activity的特征信息獲取,不僅實(shí)現(xiàn)簡(jiǎn)單,而且通用性強(qiáng)。當(dāng)然,可以理解的是,這僅是本申請(qǐng)方案的一種優(yōu)選實(shí)施方案,基于本申請(qǐng)方案的基本原理,本領(lǐng)域技術(shù)人員可以采用其他手段在“目標(biāo)Activity進(jìn)入激活狀態(tài)之前”實(shí)現(xiàn)對(duì)可疑Activity的特征信息的獲取。事實(shí)上,onRestart/onStart/onResume也僅是Android系統(tǒng)現(xiàn)階段的函數(shù)名稱而已,即便函數(shù)名稱發(fā)生改變,相應(yīng)的方案顯然也應(yīng)視為本申請(qǐng)的保護(hù)范圍之內(nèi)。
[0059]S102,根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征;
[0060]Activity的特征信息是能夠用于表征或識(shí)別一個(gè)Activity的特征的信息的統(tǒng)稱,具體可以是Activity名稱、倉Il建該Activity進(jìn)程的名稱、Activity的內(nèi)存占用大小等等,本申請(qǐng)對(duì)此并不需要進(jìn)行限定。
[0061]本實(shí)施例中以Activity名稱為例進(jìn)行說明,對(duì)Activity是否安全的具體判斷策略可以包括很多,一般可以從以下幾個(gè)方面考慮:
[0062]Android系統(tǒng)級(jí)的應(yīng)用程序(名稱形式如com.android, xxx)所創(chuàng)建的Activity,認(rèn)為是安全的;
[0063]目標(biāo)Activity對(duì)應(yīng)的應(yīng)用程序所創(chuàng)建的Activity,認(rèn)為是安全的;
[0064]根據(jù)經(jīng)驗(yàn),排除其他可以確認(rèn)安全的Activity ;
[0065]判斷是否為已經(jīng)確認(rèn)不安全的Activity。
[0066]上述判斷策略,可以通過白名單/黑名單的形式實(shí)現(xiàn),其中,白名單對(duì)應(yīng)安全Activity的特征集合,黑名單則對(duì)應(yīng)不安全Activity的特征集合。
[0067]如果獲取到的Activity特征信息與白名單匹配成功,貝U認(rèn)為該Activity是安全的,如果獲取到的Activity特征信息與黑名單匹配成功,則認(rèn)為該Activity是不安全的。
[0068]可以理解的是,在實(shí)際應(yīng)用中,白名單/黑名單可以分別使用,也可以結(jié)合使用,本申請(qǐng)對(duì)此并不需要進(jìn)行限制。
[0069]白名單/黑名單可以保存為一個(gè)單獨(dú)的文件放置在應(yīng)用程序的APK中(例如保存XML格式或普通文本格式),或者作為maplist/String字符串寫在java中,允許用戶自定義修改;也可以直接存放在服務(wù)器中,以便于統(tǒng)一配置和更新。
[0070]S103,確定系統(tǒng)是否存在Activity劫持風(fēng)險(xiǎn)。
[0071]如果所獲取的特征信息不符合預(yù)設(shè)的安全特征,則認(rèn)為系統(tǒng)存在Activity劫持風(fēng)險(xiǎn),其中,“確定存在Activity劫持風(fēng)險(xiǎn)”又包括以下幾方面內(nèi)容:
[0072]確定目標(biāo)Activity存在被劫持風(fēng)險(xiǎn);
[0073]確定當(dāng)前處于激活狀態(tài)的Activity為惡意Activity ;
[0074]確定啟動(dòng)該惡意Activity的程序,找出不安全因素的根源。
[0075]確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)后,可以以告警的方式通知用戶,提高用戶的警惕性,以便采取進(jìn)一步措施;也可以將檢測(cè)到的風(fēng)險(xiǎn)信息上傳到服務(wù)器端,供開發(fā)人員進(jìn)一步排查或制定相應(yīng)的解決方案。
[0076]在本申請(qǐng)方案的實(shí)際應(yīng)用過程中,并不是對(duì)應(yīng)用程序的每個(gè)Activity都要在激活之前進(jìn)行判斷。事實(shí)上,Android系統(tǒng)的Activity狀態(tài)切換非常頻繁,如果對(duì)每個(gè)Activity都加入激活之前的判斷,那么不僅會(huì)影響系統(tǒng)性能,而且誤報(bào)的可能性也大大提升。
[0077]基于上述情況,本申請(qǐng)實(shí)施例建議僅對(duì)存在被劫持風(fēng)險(xiǎn)的Activity加入激活之前的判斷,例如,用戶登陸頁面、支付頁面、隱私信息輸入頁面等等,將這些存在被劫持風(fēng)險(xiǎn)的頁面所對(duì)應(yīng)的Activity定義為“目標(biāo)Activity”,能夠較好地防止Activity劫持帶來的風(fēng)險(xiǎn),同時(shí)又不至于嚴(yán)重影響系統(tǒng)性能或產(chǎn)生大量告警信息。此外,在實(shí)際應(yīng)用中,也可以向用戶提供自定義功能,既可以對(duì)所有的Activity開啟檢測(cè),也可以僅對(duì)個(gè)別關(guān)鍵Activity開啟檢測(cè),從而實(shí)現(xiàn)對(duì)系統(tǒng)安全和性能的靈活調(diào)控。
[0078]下面結(jié)合一個(gè)具體的實(shí)例,對(duì)本申請(qǐng)所提供的Activity劫持風(fēng)險(xiǎn)檢測(cè)方法進(jìn)行說明:
[0079]假設(shè)Activity B 是惡意 Activity,其攻擊目標(biāo)為 Activity A。Activity B 的監(jiān)聽程序發(fā)現(xiàn)Activity A處于棧頂后,立即啟動(dòng)Activity B,如圖3a所示;
[0080]Activity B 將 Activity A 擠到了第二位,同時(shí) Activity B 模仿 Activity A 樣式,誘騙用戶將信息輸入到Activity B中,如圖3b所示;
[0081]Activity B在完成信息收集后將自動(dòng)銷毀,Activity A重新回到棧頂,如圖3c所示;
[0082]其中,Activity B自動(dòng)銷毀過程對(duì)應(yīng)的系統(tǒng)函數(shù)調(diào)用順序?yàn)?onPause、onStop、onDestroy !Activity A重新回到棧頂過程對(duì)應(yīng)的系統(tǒng)函數(shù)調(diào)用順序?yàn)?onRestart、onStart、onResume。整個(gè)過程的函數(shù)調(diào)用執(zhí)行順序如下:
[0083]Activity B onPause ;
[0084]Activity B onStop ;
[0085]Activity A onRestart ;
[0086]Activity A onStart ;
[0087]Activity A onResume ;
[0088]Activity B onDestroy?
[0089]可見,Activity B在完全銷毀前,需要Activity A先執(zhí)行完resume函數(shù),在此期間,位于棧頂?shù)囊恢笔茿ctivity B。根據(jù)該執(zhí)行順序,在Activity A的onRestart/onStart/onResume三個(gè)函數(shù)的任意一個(gè)中,判斷當(dāng)前棧頂Activity是否安全即可。
[0090]本實(shí)施例通過復(fù)寫onResume函數(shù)、根據(jù)白名單進(jìn)行Activity劫持風(fēng)險(xiǎn)檢測(cè),代碼示例如下:
[0091]protected void onResume()
{
super.0nResumeO;
AcrivityManager am = (ActivitvMa 11 ager) getSystemService(ACTIVITY_SERVICE);
ComportentName cn = am.getRunningTasksi I ).get(0).topActivlty;
String TopActivityName = cn.getClassName().toString();
If(TopActivityName! = applicat1nActivity || TopActivityName!= AndroidActivity ||T 0 p A c t i V i t y N a in e! = W h i t e L i s t A c t i \ i t V)
{//提示有Activity劫持風(fēng)險(xiǎn)(代碼略)}
}
[0092]上述代碼的含義是:在目標(biāo)Activity的onResume階段,獲取獲取棧頂?shù)?Activity 名稱(TopActivityName),如果該 Activity 非 Android 系統(tǒng)原生Activity (AndroidActivity)、非應(yīng)用程序自身的 Activity (applicat1nActivity)、且不在白名單中Activity(WhiteListActivity),則提示存在劫持風(fēng)險(xiǎn)。
[0093]這樣,在目標(biāo)Activity執(zhí)行onResume函數(shù)的過程中,就可以實(shí)現(xiàn)對(duì)Activity劫持風(fēng)險(xiǎn)的自動(dòng)檢測(cè)。
[0094]需要說明的是,與前面的實(shí)施例介紹相比,本代碼中的“WhiteList”是一種狹義的白名單,其中并未包括AndroidActivity和applicat1nActivity的情況。
[0095]相應(yīng)于上面的方法實(shí)施例,本申請(qǐng)還提供一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)裝置,參見圖4所示,該裝置包括:
[0096]特征獲取模塊110,用于在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息;
[0097]特征比較模塊120,用于根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征;
[0098]風(fēng)險(xiǎn)判斷模塊130,用于在所述特征比較模塊判斷結(jié)果為否的情況下,確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)。
[0099]在本申請(qǐng)的一種【具體實(shí)施方式】中,特征獲取模塊110具體可以用于:
[0100]在針對(duì)目標(biāo)Activity調(diào)用系統(tǒng)函數(shù)onRestart、onStart和/或onResume的階段,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息。
[0101]在本申請(qǐng)的一種【具體實(shí)施方式】中,所述目標(biāo)Activity可以設(shè)置為:存在被劫持風(fēng)險(xiǎn)的 Activity。
[0102]在本申請(qǐng)的一種【具體實(shí)施方式】中,特征比較模塊120具體可以用于:
[0103]根據(jù)預(yù)設(shè)的黑名單和/或白名單,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征。
[0104]在本申請(qǐng)的一種【具體實(shí)施方式】中,風(fēng)險(xiǎn)判斷模塊130具體可以用于實(shí)現(xiàn)以下幾方面內(nèi)容:
[0105]確定目標(biāo)Activity存在被劫持風(fēng)險(xiǎn);
[0106]確定當(dāng)前處于激活狀態(tài)的Activity為惡意Activity ;
[0107]確定啟動(dòng)該惡意Activity的程序,找出不安全因素的根源。
[0108]確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)后,可以以告警的方式通知用戶,提高用戶的警惕性,以便采取進(jìn)一步措施;也可以將檢測(cè)到的風(fēng)險(xiǎn)信息上傳到服務(wù)器端,供開發(fā)人員進(jìn)一步排查或制訂相應(yīng)的解決方案。
[0109]為了描述的方便,描述以上裝置時(shí)以功能分為各種模塊分別描述。當(dāng)然,在實(shí)施本申請(qǐng)時(shí)可以把各模塊的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。
[0110]通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn)?;谶@樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
[0111]本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
[0112]以上所述僅是本申請(qǐng)的【具體實(shí)施方式】,應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本申請(qǐng)?jiān)淼那疤嵯拢€可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。
【權(quán)利要求】
1.一種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)方法,其特征在于,該方法包括: 在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息; 根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征; 如果否,則確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息,包括: 在針對(duì)目標(biāo)Activity調(diào)用任一系統(tǒng)函數(shù)onRestart、onStart、onResume的階段,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述目標(biāo)Activity為: 存在被劫持風(fēng)險(xiǎn)的Activity。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述判斷當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征,包括: 根據(jù)預(yù)設(shè)的黑名單和/或白名單,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn),包括: 確定所述目標(biāo)Activity存在被劫持風(fēng)險(xiǎn); 和/或 確定所述當(dāng)前處于激活狀態(tài)的Activity為惡意Activity。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)后,根據(jù)所述當(dāng)前處于激活狀態(tài)的Activity,確定啟動(dòng)該Activity的惡意程序。
7.—種Android系統(tǒng)Activity劫持風(fēng)險(xiǎn)檢測(cè)裝置,其特征在于,該裝置包括: 特征獲取模塊,用于在目標(biāo)Activity進(jìn)入激活狀態(tài)之前,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息; 特征比較模塊,用于根據(jù)所獲取的特征信息,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征; 風(fēng)險(xiǎn)判斷模塊,用于在所述特征比較模塊判斷結(jié)果為否的情況下,確定系統(tǒng)存在Activity劫持風(fēng)險(xiǎn)。
8.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述特征獲取模塊,具體用于: 在針對(duì)目標(biāo)Activity調(diào)用任一系統(tǒng)函數(shù)onRestart、onStart、onResume的階段,獲取當(dāng)前處于激活狀態(tài)的Activity的特征信息。
9.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述目標(biāo)Activity為: 存在被劫持風(fēng)險(xiǎn)的Activity。
10.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述特征比較模塊,具體用于: 根據(jù)預(yù)設(shè)的黑名單和/或白名單,判斷所述當(dāng)前處于激活狀態(tài)的Activity是否符合預(yù)設(shè)的安全特征。
【文檔編號(hào)】G06F21/56GK104182686SQ201310195684
【公開日】2014年12月3日 申請(qǐng)日期:2013年5月23日 優(yōu)先權(quán)日:2013年5月23日
【發(fā)明者】何哲偉 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司