劉 蓉 于浩佳 陳思遠(yuǎn) 陳 波
(南京師范大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 南京 210023) (1250071326@qq.com)
近2年,Android手機(jī)在全球市場(chǎng)份額占比始終維持在80%以上[1].隨之而來(lái)的是Android平臺(tái)的安全問(wèn)題也日益增多.360發(fā)布的《2017年度安卓系統(tǒng)安全性生態(tài)環(huán)境研究》顯示[2],截至2017年12月,所測(cè)設(shè)備中93.94%的Android手機(jī)存在安全漏洞.用戶(hù)從Android應(yīng)用市場(chǎng)下載應(yīng)用時(shí),無(wú)法了解該應(yīng)用存在的漏洞及安全隱患,而那些廣泛存在的漏洞中相當(dāng)一部分會(huì)導(dǎo)致用戶(hù)在毫不知情的情況下泄露隱私信息,給用戶(hù)甚至組織造成財(cái)產(chǎn)損失.因此,對(duì)Android應(yīng)用進(jìn)行安全評(píng)估就顯得尤為重要.
安全評(píng)估系統(tǒng)會(huì)對(duì)Android應(yīng)用進(jìn)行全面的檢測(cè),并提示用戶(hù)該應(yīng)用可能存在的安全風(fēng)險(xiǎn),例如該應(yīng)用可能暴露用戶(hù)位置信息,或者惡意軟件可以通過(guò)該應(yīng)用的代碼漏洞進(jìn)行權(quán)限提升等等.用戶(hù)得到評(píng)估信息后可以對(duì)安全風(fēng)險(xiǎn)有更充分的認(rèn)識(shí),并根據(jù)評(píng)估系統(tǒng)給出的提示更好地保護(hù)自己的隱私數(shù)據(jù),從而對(duì)存在的安全漏洞進(jìn)行相應(yīng)的防范.安全評(píng)估系統(tǒng)還能幫助Android程序員在開(kāi)發(fā)過(guò)程中及時(shí)發(fā)現(xiàn)應(yīng)用的漏洞與不足之處.另外,安全評(píng)估亦是Android應(yīng)用市場(chǎng)以及各級(jí)管理者進(jìn)行安全管理的關(guān)鍵技術(shù).各大Android應(yīng)用市場(chǎng)會(huì)對(duì)市場(chǎng)內(nèi)提供的應(yīng)用進(jìn)行安全評(píng)估,以告知用戶(hù)應(yīng)用是否安全并拒絕危險(xiǎn)應(yīng)用上架.
要對(duì)Android應(yīng)用進(jìn)行系統(tǒng)化的安全評(píng)估,首先必須有一種科學(xué)的漏洞分類(lèi)法.通過(guò)對(duì)Android應(yīng)用漏洞進(jìn)行科學(xué)合理的分類(lèi),能使評(píng)估結(jié)果更為客觀(guān)準(zhǔn)確、更具有說(shuō)服力.但是,目前Android應(yīng)用漏洞分類(lèi)方面的研究尚未引起足夠重視,已有的一些Android漏洞分類(lèi)法實(shí)際上不滿(mǎn)足Amoroso[3]提出的分類(lèi)法所應(yīng)具有的六大特性,部分分類(lèi)法不具有良好的可擴(kuò)展性,難以將新出現(xiàn)的漏洞擴(kuò)展到分類(lèi)體系中去.為此,本文提出了一種基于APP分層結(jié)構(gòu)的Android應(yīng)用漏洞分類(lèi)方法.
安全漏洞分類(lèi)是指依據(jù)漏洞的特征或?qū)傩赃M(jìn)行類(lèi)別的劃分.計(jì)算機(jī)軟件安全漏洞分類(lèi)方面的研究由來(lái)已久,早在1976年Abbott等人[4]就對(duì)操作系統(tǒng)的安全漏洞分類(lèi)進(jìn)行了研究,在此后的40多年中,國(guó)內(nèi)外都有不少相關(guān)的研究,研究?jī)?nèi)容也不局限于操作系統(tǒng)的安全漏洞,而是涵蓋了Web應(yīng)用漏洞、應(yīng)用軟件漏洞、Android應(yīng)用漏洞等多個(gè)計(jì)算機(jī)領(lǐng)域[5-8].下面對(duì)與Android安全漏洞分類(lèi)相關(guān)的研究進(jìn)行分析.
軟件安全漏洞分類(lèi)方面的相關(guān)研究較多,例如Tsipenyuk等人[9]提出的“7+1”分類(lèi)法,“7”是指輸入驗(yàn)證(對(duì)輸入內(nèi)容過(guò)度信任)、API濫用(調(diào)用者未按協(xié)議使用API)、安全功能(訪(fǎng)問(wèn)控制、加密、權(quán)限管理等設(shè)置不當(dāng))、時(shí)間和狀態(tài)(分布式計(jì)算中時(shí)間和狀態(tài)錯(cuò)誤)、錯(cuò)誤(系統(tǒng)對(duì)非預(yù)期輸入處理不當(dāng))、代碼質(zhì)量(代碼質(zhì)量不佳導(dǎo)致漏洞產(chǎn)生)、封裝(代碼未作合適的封裝處理),“1”則指環(huán)境(軟件運(yùn)行環(huán)境存在漏洞).還有王勇等人[10]在Frei等人[11]工作的基礎(chǔ)上提出了一種基于漏洞生存期的多維量化屬性分類(lèi)法.該方法對(duì)軟件安全漏洞的3種屬性進(jìn)行了研究和量化:生存周期屬性、安全屬性和分布屬性.
我國(guó)在2017年發(fā)布了安全漏洞分類(lèi)的國(guó)家標(biāo)準(zhǔn)[12],標(biāo)準(zhǔn)中按成因、空間及時(shí)間分成3類(lèi),并提出分類(lèi)法應(yīng)當(dāng)遵循唯一性和擴(kuò)展性原則.
上述分類(lèi)方法,均對(duì)漏洞本身特征與漏洞所在平臺(tái)的特點(diǎn)進(jìn)行了充分考慮,將所有漏洞都囊括在構(gòu)建的分類(lèi)框架中,因此也是Android安全漏洞分類(lèi)值得借鑒的.但是Android平臺(tái)上的漏洞與傳統(tǒng)的PC平臺(tái)漏洞由于所在系統(tǒng)平臺(tái)以及應(yīng)用上的不同而具有一些天然的差異性.
1) 基于系統(tǒng)架構(gòu)的Android漏洞分類(lèi)方法
Android操作系統(tǒng)是基于Linux的,由應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和Linux內(nèi)核層這4層架構(gòu)組成,不同的層次分擔(dān)不同的工作,而不同的漏洞也會(huì)出現(xiàn)在不同的層次,因此有的學(xué)者圍繞4層架構(gòu)進(jìn)行分類(lèi).盧雙龍等人[13]在此基礎(chǔ)上又進(jìn)行了進(jìn)一步的擴(kuò)展,將4層擴(kuò)充為6層,增加了管理層和硬件層.管理層主要包含權(quán)限管理漏洞、應(yīng)用安裝機(jī)制漏洞等;硬件層則包含了會(huì)對(duì)設(shè)備造成損害的環(huán)境因素和傳感器等可能遭受的物理?yè)p壞.這種6層分類(lèi)法相比4層分類(lèi)法更為細(xì)致,對(duì)漏洞的劃分也更為精確.但這種分類(lèi)法主要是面向Android系統(tǒng)漏洞的,而非針對(duì)應(yīng)用安全漏洞,Android應(yīng)用漏洞幾乎不會(huì)出現(xiàn)在Linux內(nèi)核層或系統(tǒng)運(yùn)行庫(kù)層這些層次,因此這種分類(lèi)法無(wú)法適用于Android應(yīng)用漏洞的分類(lèi).
2) 基于漏洞庫(kù)的Android漏洞分類(lèi)方法
NVD,CNVD,CNNVD是目前國(guó)內(nèi)外比較主流的漏洞庫(kù),我們?cè)谶@3個(gè)漏洞庫(kù)中均進(jìn)行了高級(jí)搜索,搜索關(guān)鍵詞為Android,廠(chǎng)商為Google,產(chǎn)品為Android的漏洞.NVD中共有結(jié)果1 280個(gè),CNVD中有漏洞930個(gè),CNNVD有803個(gè)(搜索日期是2018年5月31日).其中CNVD和CNNVD的漏洞詳情中都有漏洞類(lèi)型,CNVD對(duì)幾乎所有搜索結(jié)果的漏洞類(lèi)型都標(biāo)記為通用軟硬件漏洞,無(wú)法很好地體現(xiàn)漏洞特征.而CNNVD的漏洞類(lèi)型描述相對(duì)比較詳細(xì),有信息泄露漏洞、權(quán)限許可和訪(fǎng)問(wèn)控制漏洞、緩沖區(qū)溢出漏洞等多種類(lèi)型,但也有很多漏洞的漏洞類(lèi)型處寫(xiě)著資料不足而未予以分類(lèi).董國(guó)偉等人[14]對(duì)這些Android漏洞進(jìn)行了整理歸納,將Android應(yīng)用常見(jiàn)漏洞歸納為7種:組件權(quán)限暴露漏洞、Webview組件遠(yuǎn)程代碼執(zhí)行漏洞、弱隨機(jī)數(shù)漏洞、Intent注入漏洞、SQL注入漏洞、敏感數(shù)據(jù)泄露漏洞和運(yùn)行時(shí)代碼加載漏洞.然而這種分類(lèi)法只是簡(jiǎn)單地枚舉了幾類(lèi)漏洞,許多已知的Android應(yīng)用漏洞不屬于這7類(lèi)中的任何一類(lèi),例如數(shù)據(jù)傳輸時(shí)的HTTPS未校驗(yàn)服務(wù)器證書(shū)漏洞、Intent組件的隱式意圖調(diào)用漏洞等都無(wú)法在該分類(lèi)方法中進(jìn)行歸類(lèi),因此這種方法在實(shí)際應(yīng)用中需要不斷擴(kuò)充和優(yōu)化.
3) 基于經(jīng)驗(yàn)的Android漏洞分類(lèi)方法
基于經(jīng)驗(yàn)的Android漏洞分類(lèi)方法通常是作者根據(jù)手中已有的資料,對(duì)Android漏洞進(jìn)行歸納總結(jié),然后基于自身經(jīng)驗(yàn)對(duì)這些漏洞進(jìn)行分類(lèi).
劉昊晨[15]對(duì)Android漏洞進(jìn)行了如下分類(lèi):緩沖區(qū)溢出漏洞、Root漏洞、拒絕服務(wù)漏洞、API邏輯漏洞、瀏覽器審查漏洞、藍(lán)牙等連接攻擊漏洞和其他漏洞.這種分類(lèi)方法羅列的漏洞種類(lèi)較少,對(duì)于大多數(shù)漏洞都未予研究,將所有未涵蓋的漏洞都?xì)w于其他漏洞分類(lèi)中.
網(wǎng)上有許多Android應(yīng)用安全評(píng)估平臺(tái),這些平臺(tái)也都有各自的漏洞分類(lèi)方法.例如“愛(ài)加密APP漏洞分析平臺(tái)”將檢測(cè)項(xiàng)目分為五大類(lèi):內(nèi)置SDK檢測(cè)、數(shù)據(jù)存儲(chǔ)檢測(cè)、源碼檢測(cè)、敏感信息檢測(cè)和其他項(xiàng)檢測(cè).還有“愛(ài)內(nèi)測(cè)移動(dòng)應(yīng)用安全測(cè)試專(zhuān)家”,該平臺(tái)檢測(cè)項(xiàng)目分為應(yīng)用安全檢測(cè)、源碼安全檢測(cè)和數(shù)據(jù)安全檢測(cè).360旗下的移動(dòng)安全檢測(cè)平臺(tái)“360顯危鏡”則沒(méi)有對(duì)漏洞進(jìn)行分類(lèi),而是在網(wǎng)頁(yè)上對(duì)所有檢測(cè)項(xiàng)目進(jìn)行了列舉,用戶(hù)體驗(yàn)較差.
基于經(jīng)驗(yàn)的分類(lèi)方法通常缺乏足夠的理論依據(jù)支撐,并且很容易因?yàn)樽髡呓?jīng)驗(yàn)不足而出現(xiàn)遺漏.這樣的分類(lèi)通常只需滿(mǎn)足工作需求即可,從而出現(xiàn)分類(lèi)質(zhì)量低、漏洞覆蓋不全面的問(wèn)題.
以上3種分類(lèi)方法都存在各自的問(wèn)題,基于漏洞庫(kù)的分類(lèi)法和基于經(jīng)驗(yàn)的分類(lèi)法都出現(xiàn)了未包含全部漏洞的問(wèn)題,并且可擴(kuò)展性都較差,而基于系統(tǒng)架構(gòu)的分類(lèi)法則并不適用于應(yīng)用安全漏洞的分類(lèi).這些問(wèn)題是我們?cè)贏ndroid應(yīng)用漏洞分類(lèi)方法中需要注意和避免的,在保證漏洞分類(lèi)方法能滿(mǎn)足安全評(píng)估需求的同時(shí),還要做到分類(lèi)科學(xué)合理,具有良好的可擴(kuò)展性和通用性.
針對(duì)當(dāng)前Android應(yīng)用安全評(píng)估技術(shù)相關(guān)研究欠缺、Android漏洞分類(lèi)通用性和可擴(kuò)展性差等現(xiàn)狀,本文在現(xiàn)有方法的基礎(chǔ)上,提出了一種基于APP分層結(jié)構(gòu)的Android應(yīng)用漏洞分類(lèi)方法——LSA分類(lèi)法.
Android應(yīng)用的安全評(píng)估,評(píng)估的是應(yīng)用的APK文件以及安裝后應(yīng)用功能的安全性,此外,用戶(hù)安裝應(yīng)用的環(huán)境千差萬(wàn)別,因此,各個(gè)不同版本的Android操作系統(tǒng)的系統(tǒng)漏洞并不在分類(lèi)范圍內(nèi).
圖1 漏洞層次分布圖
LSA分類(lèi)法(a taxonomy of Android application vulnerabilities based on layered structure of application)將Android應(yīng)用中的漏洞分為3層4類(lèi),如圖1所示.最底層的是Java代碼層,Java代碼層中有組件安全漏洞(component security vulnerabilities)和數(shù)據(jù)安全漏洞(data security vulnerabilities).Java代碼層之上是應(yīng)用源文件層,這里的文件指的是APK文件解壓縮后產(chǎn)生的dex文件、so文件等,在這一層有源文件安全漏洞(source file security vulnerabilities)和Manifest文件漏洞,其中Manifest文件漏洞介于代碼層和源文件層之間,但Java代碼層考慮的漏洞主要是Java代碼產(chǎn)生的漏洞,而Manifest文件是可擴(kuò)展標(biāo)記語(yǔ)言XML所寫(xiě),因此此處將其歸于應(yīng)用源文件層.頂層是用戶(hù)界面層,這一層的漏洞是業(yè)務(wù)邏輯漏洞(logical vulnerability).
在對(duì)Android應(yīng)用漏洞進(jìn)行層次劃分后,分類(lèi)結(jié)果如圖2所示:
圖2 LSA分類(lèi)法圖示
1) 組件安全漏洞
一個(gè)Android應(yīng)用是由不少于一個(gè)的組件組成的,通過(guò)對(duì)Android漏洞的整理發(fā)現(xiàn),這些組件中Activity組件、Services組件、Broadcast Receiver組件、Content Provider組件、Intent組件和WebView組件這6種組件的漏洞較多,因此6種組件均單獨(dú)列為一類(lèi),除此之外Android中還有數(shù)量眾多的其他組件,這些組件的漏洞均歸類(lèi)為其他組件漏洞.
Activity組件漏洞:Activity組件可導(dǎo)出漏洞,即設(shè)置exported=“true”,這會(huì)導(dǎo)致該組件被一個(gè)第三方的惡意應(yīng)用利用,從而導(dǎo)致安全風(fēng)險(xiǎn);Activity Manager漏洞,ActivityManager類(lèi)中的killBackgroundProcesses函數(shù)能夠殺死進(jìn)程,誤用將導(dǎo)致安全威脅,是一個(gè)風(fēng)險(xiǎn)較低的漏洞.類(lèi)似的漏洞還有不少,凡是與Activity組件直接相關(guān)的漏洞均屬于此類(lèi).
Services組件漏洞:Services組件可導(dǎo)出漏洞,原理與Activity組件可導(dǎo)出漏洞類(lèi)似.還有一些漏洞利用Services組件在后臺(tái)運(yùn)行的特性,在不提示用戶(hù)的情況下在后臺(tái)執(zhí)行敏感操作,這類(lèi)漏洞均屬于Services組件漏洞.
Broadcast Receiver組件漏洞:Broadcast Receiver組件可導(dǎo)出漏洞.動(dòng)態(tài)注冊(cè)廣播組件暴露漏洞,應(yīng)用動(dòng)態(tài)注冊(cè)了一個(gè)Receiver組件,導(dǎo)致其被惡意應(yīng)用利用,造成應(yīng)用泄露敏感數(shù)據(jù)或執(zhí)行不安全操作.
Content Provider組件漏洞:Content Provider組件可導(dǎo)出漏洞.Provider文件目錄遍歷漏洞,攻擊者通過(guò)openFile()遍歷文件目錄,進(jìn)而獲取所有可讀文件;讀寫(xiě)權(quán)限漏洞,Content Provider組件如果沒(méi)有對(duì)文件讀寫(xiě)權(quán)限進(jìn)行合理限制,攻擊者就可以讀取其中的敏感數(shù)據(jù),而Content Provider中往往會(huì)包含不少此類(lèi)數(shù)據(jù).
Intent組件漏洞:隱式意圖調(diào)用漏洞是Intent組件最常見(jiàn)的漏洞,未指定具體接收對(duì)象,導(dǎo)致Intent可被其他應(yīng)用獲取,造成數(shù)據(jù)泄露;意圖協(xié)議URL漏洞,通過(guò)特定URL直接向應(yīng)用發(fā)送意圖,調(diào)用未導(dǎo)出的組件.
WebView組件漏洞:WebView組件用于展示W(wǎng)eb頁(yè)面,因此涉及的漏洞也較多,包括WebView明文存儲(chǔ)密碼風(fēng)險(xiǎn)、WebView遠(yuǎn)程代碼執(zhí)行漏洞、WebView繞過(guò)證書(shū)校驗(yàn)漏洞、未移除有風(fēng)險(xiǎn)的WebView系統(tǒng)隱藏接口、WebView忽略SSL證書(shū)錯(cuò)誤等多個(gè)漏洞.
2) 數(shù)據(jù)安全漏洞
數(shù)據(jù)安全漏洞指的是會(huì)導(dǎo)致應(yīng)用內(nèi)敏感數(shù)據(jù)泄露的漏洞,這里需要指出的是,由組件漏洞導(dǎo)致的數(shù)據(jù)泄露均歸于組件安全漏洞,這會(huì)在下面驗(yàn)證分類(lèi)法科學(xué)性的部分進(jìn)行詳細(xì)闡述.數(shù)據(jù)安全漏洞又分為4類(lèi):數(shù)據(jù)存儲(chǔ)漏洞、數(shù)據(jù)加密漏洞、數(shù)據(jù)傳輸漏洞、日志信息漏洞.
數(shù)據(jù)存儲(chǔ)漏洞:SharedPreferences漏洞,使用getSharedPreferences時(shí)參數(shù)設(shè)置不當(dāng),使應(yīng)用文件可被第三方讀寫(xiě)篡改;File任意讀寫(xiě)漏洞,使用openFileOutput (string name,int mode)方法創(chuàng)建內(nèi)部文件時(shí)設(shè)置為全局可讀寫(xiě),導(dǎo)致創(chuàng)建的文件可被全局讀寫(xiě).
數(shù)據(jù)加密漏洞:明文數(shù)字證書(shū)漏洞,數(shù)字證書(shū)未進(jìn)行加密可能會(huì)被盜取或篡改,造成用戶(hù)賬號(hào)信息被攻擊者獲取;AESDES弱加密,使用“AESECBNoPadding”或“AESECBPKCS5padding”的模式,ECB方式易被破解,安全性不足;setSeed偽隨機(jī)數(shù)漏洞,本地加密時(shí)使用setSeed方法,這種方法產(chǎn)生的偽隨機(jī)數(shù)易被破解.
數(shù)據(jù)傳輸漏洞:在應(yīng)用進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳輸時(shí)會(huì)產(chǎn)生許多安全漏洞,其中包括許多傳統(tǒng)網(wǎng)絡(luò)安全漏洞,但這里主要考慮應(yīng)用本身造成的漏洞.例如SSL通信服務(wù)端檢測(cè)信任任意證書(shū)、未使用HTTPS協(xié)議的數(shù)據(jù)傳輸、HTTPS未校驗(yàn)服務(wù)器證書(shū)、HTTPS關(guān)閉主機(jī)名驗(yàn)證、開(kāi)放socket端口,這些都是應(yīng)用中一些設(shè)置不當(dāng)導(dǎo)致的數(shù)據(jù)傳輸漏洞.
日志信息漏洞:日志是Android的一大特色,在日志文件中會(huì)包含大量的敏感數(shù)據(jù),而日志在很多時(shí)候都是可以通過(guò)一些方法來(lái)調(diào)用或惡意獲取的,這就會(huì)導(dǎo)致日志中敏感數(shù)據(jù)的泄露.
3) Manifest文件漏洞
Manifest文件漏洞是指AndroidManifest.xml配置文件中一些參數(shù)設(shè)置不合理而導(dǎo)致的安全風(fēng)險(xiǎn).主要有:應(yīng)用設(shè)置為可調(diào)試,從而易被攻擊或破解;調(diào)用敏感權(quán)限,例如發(fā)送或攔截短信、訪(fǎng)問(wèn)通訊錄、發(fā)送地理位置等敏感權(quán)限,但這不能一概而論,部分應(yīng)用確實(shí)需要一些敏感權(quán)限來(lái)實(shí)現(xiàn)一些功能,但如若應(yīng)用調(diào)用一個(gè)與其功能完全不相關(guān)的敏感權(quán)限,則就會(huì)被認(rèn)為存在安全隱患;申請(qǐng)冗余權(quán)限,應(yīng)用申請(qǐng)了非必須權(quán)限,該權(quán)限可能并非敏感權(quán)限,但這將導(dǎo)致應(yīng)用遭受提權(quán)攻擊的風(fēng)險(xiǎn)上升.
4) 源文件安全漏洞
Android的APK文件屬于一種壓縮文件,解壓后可以獲得包括dex文件、so文件、xml文件等各種類(lèi)型的文件,如果對(duì)這些文件沒(méi)有進(jìn)行很好的保護(hù),則會(huì)導(dǎo)致應(yīng)用易被攻擊.對(duì)文件保護(hù)不足主要有3類(lèi):dex文件保護(hù)不足、so文件保護(hù)不足、代碼未混淆.
dex文件保護(hù)不足:dex文件是Android應(yīng)用的核心文件,若不進(jìn)行適當(dāng)?shù)募庸瘫Wo(hù),則應(yīng)用極容易被反編譯,從而導(dǎo)致代碼篡改等安全風(fēng)險(xiǎn).
so文件保護(hù)不足:so文件雖然相較于dex文件更難被破解,但仍有經(jīng)驗(yàn)豐富的攻擊者能夠通過(guò)一些工具對(duì)其破解,一旦so文件被破解,應(yīng)用中的一些關(guān)鍵算法就會(huì)泄露.
代碼未混淆:如果應(yīng)用被反編譯,代碼混淆能夠?qū)?yīng)用代碼進(jìn)行一定程度的保護(hù),攻擊者面對(duì)混淆過(guò)的代碼無(wú)法輕易地理解,一些關(guān)鍵代碼也難以尋找,而一旦代碼未混淆,攻擊者就能輕易地找到關(guān)鍵代碼進(jìn)行查看或篡改,造成巨大的安全威脅.
5) 業(yè)務(wù)邏輯漏洞
業(yè)務(wù)邏輯漏洞通常在實(shí)際運(yùn)行應(yīng)用時(shí)通過(guò)人工的方式才能發(fā)現(xiàn),例如最常見(jiàn)的密碼找回,有些應(yīng)用的密碼找回功能存在邏輯缺陷,在沒(méi)有充分驗(yàn)證當(dāng)前用戶(hù)身份的前提下就允許其進(jìn)行密碼找回或修改.比如給用戶(hù)賬號(hào)綁定的手機(jī)發(fā)送驗(yàn)證碼,輸入該驗(yàn)證碼即可進(jìn)行密碼找回,那么一旦用戶(hù)手機(jī)失竊,手機(jī)持有者就能完成這一操作,而對(duì)用戶(hù)的信息、財(cái)產(chǎn)安全構(gòu)成威脅.
2.3.1符號(hào)定義
接下來(lái)對(duì)LSA分類(lèi)法的科學(xué)性進(jìn)行驗(yàn)證.
首先定義如下符號(hào):
1) 集合符號(hào)
V為所有Android應(yīng)用漏洞集合;v為集合V中的一個(gè)元素;C為組件安全漏洞集合;D為數(shù)據(jù)安全漏洞集合;F為源文件安全漏洞集合;L為業(yè)務(wù)邏輯漏洞集合.
2) 函數(shù)符號(hào)
domf表示函數(shù)f的域,滿(mǎn)足f(x)的x的集合;f:X→Y表示f為X映射到Y(jié)的部分函數(shù),即domf為X的子集;C-D:C×D表示C-D為C與D的有序?qū)?,C-D中的元素即同時(shí)屬于組件安全漏洞和數(shù)據(jù)安全漏洞的Android應(yīng)用漏洞,C-F,C-L,D-F,D-L,F(xiàn)-L的定義與C-D同理;VC-D:V→C-D表示函數(shù)VC-D把滿(mǎn)足條件的Android應(yīng)用漏洞映射到C-D類(lèi)中,VC-F,VC-L,VD-F,VD-L,VF-L的定義與VC-D同理.
在某些情況下,組件安全漏洞可能導(dǎo)致數(shù)據(jù)泄露等問(wèn)題,為去除二義性,定義所有由組件安全漏洞引起的數(shù)據(jù)安全漏洞均屬于組件安全漏洞,即
另外根據(jù)分類(lèi)法的分層,C,D,F(xiàn),L分屬3個(gè)不同的層次,顯然,位于不同層次的漏洞集合都是不相交集合,對(duì)于層次劃分可能存在歧義的Manifest文件漏洞,前文已經(jīng)明確將其劃分為應(yīng)用源文件層.
2.3.2Z表示法描述與驗(yàn)證
本文使用Z語(yǔ)言的模式(schema)對(duì)分類(lèi)法進(jìn)行描述.
模式是Z語(yǔ)言的基本描述單位,是Z規(guī)格說(shuō)明的基本結(jié)構(gòu),如圖3所示.一個(gè)模式由3部分組成:模式的名稱(chēng)、聲明部分和斷言部分.模式的聲明部分引入變量及其類(lèi)型;斷言部分描述了這些變量之間的不變式關(guān)系.分類(lèi)法的描述如圖4所示.
圖3 Z表示法
圖4 分類(lèi)法描述
Amoroso[3]提出,分類(lèi)法應(yīng)當(dāng)具有互斥性、窮舉性、非二義性、可重復(fù)性、可接受性和可用性.根據(jù)圖解可以得出結(jié)論,LSA分類(lèi)法中,4類(lèi)漏洞的集合具有互斥性,兩兩之間均無(wú)重復(fù)元素,對(duì)于任一新加入的漏洞,也只會(huì)屬于4個(gè)集合中的1個(gè)集合,具有非二義性.
LSA分類(lèi)法將一個(gè)Android應(yīng)用完整地劃分為3層,避免了一一列舉而造成漏洞的遺漏,因此也很好地滿(mǎn)足窮舉性.
LSA分類(lèi)法定義明確,不同漏洞類(lèi)型間界定分明,使用者及使用情景不會(huì)對(duì)分類(lèi)結(jié)果造成影響,是可重復(fù)的.
LSA分類(lèi)法符合邏輯,對(duì)多種已有的分類(lèi)法進(jìn)行了參考,具有良好的可接受性.
LSA分類(lèi)法可以直接應(yīng)用于Android應(yīng)用的漏洞分類(lèi),并且能夠很好地滿(mǎn)足安全評(píng)估的需求,符合Amoroso提出的可用性.
為了更好地說(shuō)明本文提出的Android應(yīng)用漏洞分類(lèi)法在APP安全評(píng)估中的優(yōu)勢(shì),將其與1.2節(jié)中列舉的幾種已有的Android安全漏洞分類(lèi)法進(jìn)行比較,具體有如下優(yōu)點(diǎn):
1) 科學(xué)性和嚴(yán)謹(jǐn)性.3種已有的分類(lèi)法都不能很好地滿(mǎn)足分類(lèi)法所應(yīng)具有的六大特性,其中基于漏洞庫(kù)的Android漏洞分類(lèi)方法和基于經(jīng)驗(yàn)的Android漏洞分類(lèi)方法都具有較強(qiáng)的主觀(guān)色彩,主要分類(lèi)依據(jù)是作者的經(jīng)驗(yàn),分類(lèi)較為隨意.本文提出的LSA分類(lèi)法則通過(guò)系統(tǒng)的層次劃分、嚴(yán)格的類(lèi)別定義和形式化描述證明,保證了分類(lèi)法的科學(xué)性和嚴(yán)謹(jǐn)性.
2) 可擴(kuò)展性.LSA分類(lèi)法具有良好的可擴(kuò)展性,在Android系統(tǒng)不發(fā)生巨大變革的前提下,可以對(duì)漏洞分類(lèi)下的具體漏洞進(jìn)行擴(kuò)展,將最新產(chǎn)生的漏洞加入其中.
3) 針對(duì)性.LSA分類(lèi)法從安全評(píng)估的角度出發(fā),對(duì)安全評(píng)估中需要檢測(cè)的項(xiàng)目進(jìn)行了科學(xué)系統(tǒng)的分類(lèi),涵蓋了Android應(yīng)用中需要檢測(cè)的敏感項(xiàng)目,因此本文分類(lèi)法對(duì)于安全評(píng)估的需求具有很強(qiáng)的針對(duì)性.
4) 實(shí)用性.目前國(guó)內(nèi)有眾多的Android應(yīng)用安全評(píng)估平臺(tái),例如“愛(ài)加密APP漏洞分析平臺(tái)”、“愛(ài)內(nèi)測(cè)移動(dòng)應(yīng)用安全測(cè)試專(zhuān)家”、“360顯危鏡”等,各大評(píng)估平臺(tái)對(duì)漏洞分類(lèi)標(biāo)準(zhǔn)不一,評(píng)估結(jié)果也因此具有很大差異,因此,本文提出一種專(zhuān)門(mén)的分類(lèi)法可以統(tǒng)一評(píng)估指標(biāo),具有重要的實(shí)用價(jià)值.
Android應(yīng)用安全評(píng)估是對(duì)一個(gè)應(yīng)用進(jìn)行全面的檢測(cè).例如源文件是否進(jìn)行了足夠的保護(hù)、程序中是否有安全漏洞、應(yīng)用是否會(huì)泄露用戶(hù)敏感信息等等.通過(guò)對(duì)這些項(xiàng)目進(jìn)行檢測(cè),給出被檢測(cè)應(yīng)用的安全等級(jí)或安全評(píng)分,對(duì)普通用戶(hù)、Android程序員、Android應(yīng)用市場(chǎng)管理者都具有較強(qiáng)的實(shí)用性.
本文從Android應(yīng)用安全評(píng)估的角度出發(fā),提出了LSA分類(lèi)法,滿(mǎn)足分類(lèi)法應(yīng)當(dāng)具有互斥性、窮舉性、非二義性、可重復(fù)性、可接受性和可用性.LSA分類(lèi)法對(duì)已有的幾種Android漏洞分類(lèi)法進(jìn)行了優(yōu)化和改良,并對(duì)安全評(píng)估具有更強(qiáng)的針對(duì)性.
本文已將提出的分類(lèi)法應(yīng)用到安全評(píng)估系統(tǒng)中,并基于LSA分類(lèi)法提出一種Android應(yīng)用漏洞統(tǒng)一描述語(yǔ)言,我們將另文介紹完成的工作.