朱洪軍 陳 灝 華保健 劉 業(yè) 郭 宇
1(中國(guó)科學(xué)技術(shù)大學(xué)軟件學(xué)院 安徽 合肥 230051)2(中國(guó)科學(xué)技術(shù)大學(xué)蘇州研究院 江蘇 蘇州 215123)
?
移動(dòng)應(yīng)用代碼保護(hù)現(xiàn)狀與技術(shù)研究
朱洪軍1,2陳灝1華保健2劉業(yè)2郭宇2
1(中國(guó)科學(xué)技術(shù)大學(xué)軟件學(xué)院安徽 合肥 230051)2(中國(guó)科學(xué)技術(shù)大學(xué)蘇州研究院江蘇 蘇州 215123)
基于安卓平臺(tái)應(yīng)用極易被病毒或惡意軟件攻擊,除了其平臺(tái)開源開放等原因外,移動(dòng)應(yīng)用自身代碼保護(hù)強(qiáng)度較弱也是主要因素。針對(duì)該問題,以安卓平臺(tái)應(yīng)用為研究對(duì)象,分析移動(dòng)應(yīng)用安全威脅模型及代碼安全需求,研究代碼混淆、代碼隱藏、代碼加密及代碼簽名等代碼保護(hù)技術(shù)機(jī)制及優(yōu)缺點(diǎn);設(shè)計(jì)并實(shí)現(xiàn)了安卓應(yīng)用代碼保護(hù)技術(shù)分析引擎,對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行分析和總結(jié)。結(jié)果表明,不同規(guī)模和類型的樣本都存在一定比例應(yīng)用,其代碼保護(hù)強(qiáng)度較弱;特別地,應(yīng)用規(guī)模越小,代碼保護(hù)強(qiáng)度越弱,致使該類應(yīng)用極其容易被惡意攻擊。
代碼保護(hù)移動(dòng)應(yīng)用安卓逆向工程
隨著移動(dòng)網(wǎng)絡(luò)及智能終端的發(fā)展,移動(dòng)應(yīng)用近幾年呈現(xiàn)高速爆發(fā)式增長(zhǎng);谷歌應(yīng)用商店應(yīng)用數(shù)量在2013年7月已超過100萬款[1],蘋果應(yīng)用商店應(yīng)用數(shù)量也超過90萬款[2]。移動(dòng)應(yīng)用數(shù)量增長(zhǎng)帶來大量商業(yè)營(yíng)收同時(shí),使得惡意軟件及版權(quán)侵犯也快速增長(zhǎng)。據(jù)某平臺(tái)發(fā)布的《2013中國(guó)移動(dòng)安全數(shù)據(jù)報(bào)告》中描述[3]:2013全年共檢測(cè)安卓應(yīng)用軟件39.2億次,其中檢測(cè)到惡意軟件1122萬次;2013年中國(guó)安卓手機(jī)惡意軟件個(gè)數(shù)約為6.9萬,這個(gè)數(shù)字是2012年的5倍多,其中盜版軟件占比為3.7%。惡意軟件行為主要有:隱私竊取、資費(fèi)消耗、誘騙欺詐、系統(tǒng)破壞、遠(yuǎn)程控制等;給用戶及軟件開發(fā)者帶來巨大損失;同時(shí),也對(duì)軟件保護(hù),特別是代碼保護(hù)提出很大挑戰(zhàn)。
由于安卓平臺(tái)開源、開放特點(diǎn),用戶設(shè)備權(quán)限輕易被病毒或惡意軟件獲取(特別是用戶開放操作系統(tǒng)較高權(quán)限的情況下),病毒或惡意軟件利用獲取的權(quán)限進(jìn)行惡意插件下載,分析或截獲目標(biāo)軟件關(guān)鍵數(shù)據(jù),篡改目標(biāo)軟件執(zhí)行流程,向目標(biāo)軟件植入后門程序,冒充正版軟件等;病毒或惡意軟件還可能非法訪問移動(dòng)用戶隱私信息,如聯(lián)系人、短信、地理位置、移動(dòng)設(shè)備國(guó)際身份碼IMEI號(hào)等;軟件保護(hù)在安卓平臺(tái)上顯得尤為突出。
本文以安卓平臺(tái)應(yīng)用為研究對(duì)象,闡述移動(dòng)應(yīng)用代碼面臨的安全威脅與安全需求;對(duì)常用代碼保護(hù)技術(shù)進(jìn)行分類分析,對(duì)比不同保護(hù)技術(shù)優(yōu)缺點(diǎn)及實(shí)現(xiàn)成本;設(shè)計(jì)并實(shí)現(xiàn)安卓應(yīng)用代碼保護(hù)技術(shù)分析模型,采集安卓應(yīng)用市場(chǎng)樣本并分類,分析當(dāng)前移動(dòng)應(yīng)用代碼保護(hù)現(xiàn)狀;最后進(jìn)行總結(jié)。
1.1移動(dòng)應(yīng)用安全威脅模型
應(yīng)用安全可分為數(shù)據(jù)安全、網(wǎng)絡(luò)安全和軟件安全。軟件安全是指保護(hù)軟件(包含代碼和數(shù)據(jù))為目的,對(duì)抗非法訪問、篡改、靜態(tài)或動(dòng)態(tài)分析等攻擊威脅。軟件安全面臨的攻擊威脅有網(wǎng)絡(luò)威脅、內(nèi)部威脅和惡意主機(jī)威脅。網(wǎng)絡(luò)威脅來自于外部網(wǎng)絡(luò),主要攻擊方式有緩沖區(qū)溢出、協(xié)議攻擊等;內(nèi)部威脅來自于內(nèi)部網(wǎng)絡(luò)或本地主機(jī),主要攻擊方式有提取系統(tǒng)權(quán)限、訪問用戶隱私數(shù)據(jù)等;惡意主機(jī)威脅運(yùn)行在本地主機(jī)上,主要攻擊方式有破壞主機(jī)系統(tǒng)、竊聽或截獲軟件敏感數(shù)據(jù)等[4]。
非法復(fù)制、逆向工程和篡改是移動(dòng)應(yīng)用面臨的主要攻擊威脅[5]。
非法復(fù)制指攻擊者在獲取目標(biāo)應(yīng)用后,在保持原有應(yīng)用代碼或功能相似或相同的基礎(chǔ)上,進(jìn)行代碼修改和第三方簽名并傳播。因此,它具有兩個(gè)明顯特征[6]:(1)代碼或功能與目標(biāo)應(yīng)用相似或相同;(2)簽名與目標(biāo)應(yīng)用不同。非法復(fù)制攻擊具體形式有如下幾種[7]:(1)高層代碼修改:修改包、類、方法、變量等名稱,刪除或增加類、方法,新建、刪除或修改常量;(2)方法重構(gòu):移動(dòng)方法到不同類中,合并方法,分解方法;(3)控制流重定向:替換分支執(zhí)行流執(zhí)行條件布爾值,通過中斷(break)指令改變循環(huán)執(zhí)行流循環(huán)周期,通過重定向(goto)指令重寫循環(huán),對(duì)分支執(zhí)行流進(jìn)行分支路徑替換或重排序;(4)增加或刪除代碼塊:在不改變程序執(zhí)行結(jié)果的條件下,增加新代碼塊或刪除原有代碼塊;(5)代碼塊位置變更:對(duì)數(shù)據(jù)與控制流相對(duì)獨(dú)立的代碼塊進(jìn)行位置變更。
逆向工程指攻擊者在獲取到目標(biāo)應(yīng)用二進(jìn)制安裝包文件后,借助針對(duì)該類應(yīng)用的逆向工程工具,進(jìn)行反編譯獲取二進(jìn)制級(jí)或指令級(jí)代碼,對(duì)目標(biāo)應(yīng)用指令級(jí)代碼進(jìn)行靜態(tài)分析或動(dòng)態(tài)分析,以達(dá)到攻擊目標(biāo)。逆向工程通常是攻擊者進(jìn)行目標(biāo)應(yīng)用攻擊的第一步。通過逆向工程,攻擊者可以輕易做到程序靜態(tài)分析、動(dòng)態(tài)分析、惡意代碼注入及繞過許可檢查等[8]。圖1所示為攻擊者對(duì)安卓應(yīng)用進(jìn)行逆向工程攻擊的工作流程,其中灰色背景所示流程為可選流程。
圖1 安卓應(yīng)用逆向工程攻擊流程
篡改指有時(shí)也稱代碼完整性攻擊,通常表現(xiàn)為惡意代碼注入和功能植入等[9]。針對(duì)安卓平臺(tái)應(yīng)用進(jìn)行代碼注入攻擊的技術(shù)有:內(nèi)核級(jí)、進(jìn)程級(jí)和虛擬機(jī)級(jí)鉤子或代碼注入。圖2所示為代碼注入示例,注入進(jìn)程P1向目標(biāo)進(jìn)程P2注入程序?qū)崿F(xiàn)對(duì)P2的攻擊。圖2示例的整個(gè)攻擊過程對(duì)用戶透明,目標(biāo)進(jìn)程雖然遭受攻擊,但仍向用戶交付正常服務(wù),只是交付服務(wù)時(shí)間略有延遲;如果攻擊代碼沒有復(fù)雜耗時(shí)邏輯,目標(biāo)進(jìn)程的服務(wù)延遲只是毫秒級(jí)的,用戶根本感知不到這種延遲。
圖2 代碼注入攻擊示例
1.2移動(dòng)應(yīng)用代碼安全需求
軟件攻擊者主要是對(duì)軟件代碼(源代碼或可執(zhí)行代碼)安全缺陷加以利用,從而達(dá)到攻擊目的。代碼安全是移動(dòng)應(yīng)用保護(hù)核心,代碼保護(hù)需要解決以下問題[10]:
1) 身份認(rèn)證。驗(yàn)證用戶可信度。
2) 訪問控制??刂圃L問用戶只可以訪問授權(quán)范圍內(nèi)資源,而不能越權(quán)訪問。
3) 日志安全。確保日志中不含敏感信息,及不被無權(quán)用戶或程序訪問。
4) 信息加密。對(duì)代碼中的敏感信息加密,及恰當(dāng)?shù)厥褂眉用芊椒ā?/p>
5) 數(shù)據(jù)泄漏。保證應(yīng)用數(shù)據(jù)不被暴露或被其他程序通過統(tǒng)一資源定位符URL、文件、進(jìn)程間調(diào)用IPC等訪問。
6) 數(shù)據(jù)驗(yàn)證。防止輸入驗(yàn)證攻擊,如結(jié)構(gòu)化查詢語言SQL注入等。
7) 錯(cuò)誤報(bào)告。當(dāng)應(yīng)用程序拋出異常或運(yùn)行出錯(cuò)后,錯(cuò)誤報(bào)告中不包含敏感數(shù)據(jù)及程序運(yùn)行軌跡。
8) 會(huì)話管理。恰當(dāng)管理包括會(huì)話周期、會(huì)話標(biāo)識(shí)、令牌使用等。
9)資源預(yù)測(cè)。防止存在較易推測(cè)的令牌或標(biāo)識(shí)生成方法。
2.1移動(dòng)應(yīng)用代碼特征
移動(dòng)應(yīng)用相較于桌面應(yīng)用或傳統(tǒng)網(wǎng)絡(luò)應(yīng)用,有其自身特點(diǎn):
1) 硬件資源有限和多樣性
移動(dòng)應(yīng)用運(yùn)行在移動(dòng)智能設(shè)備如手機(jī)、平板電腦等上,而這些設(shè)備本身內(nèi)存、中央處理器CPU等核心硬件資源受限。早期消費(fèi)類移動(dòng)設(shè)備內(nèi)存空間只有千字節(jié)KB[11],同期個(gè)人電腦已經(jīng)達(dá)到百兆字節(jié)MB或吉字節(jié)GB。2007年消費(fèi)類移動(dòng)智能設(shè)備出現(xiàn)后,其硬件資源性能得到較大提升,但相較于個(gè)人電腦設(shè)備仍然較小。硬件資源有限造成運(yùn)行在其之上的程序無法完成復(fù)雜功能及業(yè)務(wù)處理,而必須依賴遠(yuǎn)程服務(wù)器進(jìn)行協(xié)作,這又使得移動(dòng)應(yīng)用面臨著網(wǎng)絡(luò)安全威脅。
個(gè)人消費(fèi)類電子設(shè)備加入了多種不同的傳感設(shè)備如加速度計(jì)、磁感應(yīng)計(jì)等為用戶提供個(gè)性化服務(wù)。這些傳感設(shè)備主要用于采集用戶個(gè)人狀態(tài)數(shù)據(jù),這類數(shù)據(jù)雖然能夠用于為用戶提供更好的服務(wù),但也使得用戶隱私數(shù)據(jù)變得易于采集和傳輸,一旦用戶遭受攻擊,其損失就會(huì)更大。
2) 軟件規(guī)模小
導(dǎo)致移動(dòng)應(yīng)用軟件規(guī)模小的原因有兩個(gè):首先是有限的硬件資源,其次是應(yīng)用服務(wù)邏輯單一。移動(dòng)應(yīng)用服務(wù)邏輯通常比較單一,沒有復(fù)雜的業(yè)務(wù)處理或算法實(shí)現(xiàn),如天氣查看、快遞查詢等都不像桌面應(yīng)用有著復(fù)雜的業(yè)務(wù)邏輯和龐大的功能聚合。一般安卓應(yīng)用可執(zhí)行包規(guī)模在幾兆字節(jié),遠(yuǎn)小于多數(shù)桌面應(yīng)用幾百兆字節(jié)或吉字節(jié)。軟件規(guī)模較小,使得針對(duì)可執(zhí)行包的逆向工程及指令級(jí)的靜態(tài)或動(dòng)態(tài)分析變得容易,攻擊者所花費(fèi)的攻擊成本較?。灰虼?,移動(dòng)應(yīng)用更加容易成為攻擊目標(biāo)。
3) 隱私數(shù)據(jù)多、安全威脅大
移動(dòng)設(shè)備特別是消費(fèi)類移動(dòng)智能設(shè)備通常服務(wù)于個(gè)人用戶,設(shè)備中存儲(chǔ)和管理用戶大量的隱私數(shù)據(jù),如電話簿、私人相冊(cè)等。無論是桌面應(yīng)用、網(wǎng)絡(luò)應(yīng)用還是移動(dòng)應(yīng)用,攻擊者的攻擊目標(biāo)主要是獲取用戶隱私數(shù)據(jù)。因?yàn)?,用戶隱私數(shù)據(jù)是攻擊者挖掘攻擊價(jià)值的主要途徑,如用戶金融帳號(hào)或密碼、涉密文件或數(shù)據(jù)等。此外,不同類型傳感器對(duì)用戶狀態(tài)數(shù)據(jù)的采集,可能給用戶財(cái)產(chǎn)或生命安全帶來巨大威脅。如,利用全球定位系統(tǒng)GPS傳感器采集移動(dòng)設(shè)備位置數(shù)據(jù),就能相對(duì)精確地對(duì)設(shè)備使用者進(jìn)行定位。2013年中國(guó)安卓應(yīng)用市場(chǎng)前1400位應(yīng)用中,66.9%移動(dòng)應(yīng)用有隱私獲取權(quán)限,手機(jī)隱私泄露嚴(yán)重[12]。
對(duì)于安卓應(yīng)用,由于其平臺(tái)開源特性,攻擊者更容易對(duì)系統(tǒng)缺陷進(jìn)行研究和利用,采用不同攻擊手段對(duì)其進(jìn)行攻擊。
2.2保護(hù)技術(shù)
安卓應(yīng)用中常使用代碼混淆、代碼隱藏等技術(shù)對(duì)抗攻擊者靜態(tài)分析,使用代碼完整性檢測(cè)、加密等技術(shù)對(duì)抗篡改,使用調(diào)試器檢測(cè)等技術(shù)對(duì)抗動(dòng)態(tài)分析[8]。
(1) 代碼混淆
代碼混淆是指將正常的程序代碼、數(shù)據(jù)或控制流通過變換達(dá)到難以逆向分析的目的[13]。根據(jù)混淆目標(biāo)不同,代碼混淆技術(shù)可分為[14]:樣式混淆,控制混淆,數(shù)據(jù)混淆,預(yù)防變換。表1分別對(duì)不同混淆技術(shù)的作用、混淆實(shí)現(xiàn)方式及混淆效果強(qiáng)度等作對(duì)比分析,結(jié)果表明樣式混淆的強(qiáng)度最低,只能用于對(duì)抗靜態(tài)分析。
表1 各種混淆技術(shù)對(duì)比
基于安卓平臺(tái)的移動(dòng)應(yīng)用開發(fā),多采用代碼混淆器為ProGuard[15]。圖3所示為ProGuard輸入-處理-輸出IPO(InputProcessOutput)模型,其混淆過程分為:代碼壓縮,代碼優(yōu)化,代碼混淆及預(yù)驗(yàn)證四個(gè)步驟。ProGuard在代碼混淆步驟主要進(jìn)行包、類及類成員重命名、類分割等[16]。
圖3 代碼混淆器ProGuard輸入-處理-輸出模型
(2) 代碼隱藏
代碼隱藏是指將程序可執(zhí)行代碼或源代碼與公開發(fā)布代碼包進(jìn)行存儲(chǔ)位置或文件格式分離,達(dá)到隱藏和保護(hù)代碼目的。代碼隱藏方式可以是本地隱藏和遠(yuǎn)程隱藏。本地隱藏是將受保護(hù)代碼隨可執(zhí)行軟件包一起發(fā)布,但受保護(hù)代碼文件格式不同于正常的發(fā)布代碼格式,如在安卓應(yīng)用中將代碼隱藏在以.png、.mp3格式的資源文件中。遠(yuǎn)程隱藏則是將受保護(hù)代碼的存儲(chǔ)和執(zhí)行過程放在遠(yuǎn)端機(jī)器完成,通過網(wǎng)絡(luò)與本地代碼進(jìn)行交互,如公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu)CORBA、遠(yuǎn)程過程調(diào)用RPC等。
基于安卓平臺(tái)的應(yīng)用代碼隱藏可以采用本地和遠(yuǎn)程隱藏兩種方式。實(shí)現(xiàn)本地隱藏主要通過類加載器動(dòng)態(tài)加載字節(jié)碼(.class或.dex字節(jié)碼)文件,或通過Java本地接口JNI靜態(tài)加載機(jī)器碼(.so)文件。Java語言提供遠(yuǎn)程方法調(diào)用RMI作為遠(yuǎn)程過程調(diào)用實(shí)現(xiàn)機(jī)制[17]。圖4所示為JavaRMI工作模型,客戶端通過RMI協(xié)議向服務(wù)器發(fā)送任務(wù)請(qǐng)求,服務(wù)器接受請(qǐng)求,執(zhí)行相應(yīng)任務(wù),并返回任務(wù)執(zhí)行結(jié)果。因此,需要保護(hù)的代碼僅在服務(wù)端存儲(chǔ)和執(zhí)行,通過RMI和客戶端協(xié)作。本地隱藏或遠(yuǎn)程隱藏都能很好地保護(hù)代碼,使攻擊者無法輕易獲得目標(biāo)代碼。代碼隱藏需要花費(fèi)一定時(shí)間進(jìn)行代碼加載,直接影響代碼運(yùn)行效率;此外,遠(yuǎn)程代碼隱藏還以網(wǎng)絡(luò)連通為必要工作條件。
圖4 Java RMI工作模型
(3) 代碼加密
加密是指利用數(shù)學(xué)算法將數(shù)據(jù)轉(zhuǎn)換成難以理解的形式,數(shù)據(jù)的轉(zhuǎn)換和恢復(fù)依賴于算法和密鑰[18],加密前的數(shù)據(jù)稱為明文,加密后的數(shù)據(jù)稱為密文;加密對(duì)象可以是代碼或數(shù)據(jù)。加密算法主要有四種類型:對(duì)稱加密、非對(duì)稱加密、數(shù)據(jù)完整性保護(hù)和數(shù)字簽名認(rèn)證。對(duì)稱加密使用同一密鑰進(jìn)行加密和解密,常用的有數(shù)據(jù)加密標(biāo)準(zhǔn)DES、高級(jí)加密標(biāo)準(zhǔn)AES等;而非對(duì)稱加密則在加密時(shí)使用公共密鑰和解密時(shí)使用私有密鑰,兩個(gè)密鑰是不同的,常用的有RSA、D-H等。數(shù)據(jù)完整性保護(hù)是使用被加密數(shù)據(jù)的哈希函數(shù)值作為該數(shù)據(jù)的信息摘要信息,常用的有安全哈希算法SHA、信息摘要五MD5等,也常用來作為數(shù)字簽名認(rèn)證算法。
安卓平臺(tái)繼承了Java語言安全和密碼技術(shù)開發(fā)接口規(guī)范[19]。Java語言實(shí)現(xiàn)并提供RSA、DES、MD5等加密/解密技術(shù)開發(fā)者接口[20]?;诎沧科脚_(tái)應(yīng)用對(duì)數(shù)據(jù)和代碼使用加密技術(shù),例如使用加密殼對(duì)需要保護(hù)的代碼進(jìn)行加固等,可以使代碼安全得到很好的保護(hù)。圖5和圖6所示為安卓應(yīng)用使用本地代碼(NativeCode)方式進(jìn)行加殼與解殼的工作模型。
使用加密技術(shù)保護(hù)代碼安全性很高,只要攻擊者無法獲取密鑰或解密算法,就不能輕易破解。加密和解密提高了代碼復(fù)雜度,同時(shí)需要花費(fèi)時(shí)間完成加密或解密過程,這又影響了代碼執(zhí)行效率。
圖5 安卓應(yīng)用加殼工作模型
圖6 安卓應(yīng)用解殼工作模型
(4) 代碼簽名
數(shù)字簽名是一種授權(quán)認(rèn)證機(jī)制,通過獲取目標(biāo)信息哈希值和使用作者私鑰對(duì)目標(biāo)信息加密實(shí)現(xiàn)簽名[18]。數(shù)字簽名信息可以用來:1)認(rèn)證作者身份;2)檢測(cè)目標(biāo)信息是否被篡改;3)防止抵賴。數(shù)字簽名通常分簽名和認(rèn)證兩個(gè)階段[21]。圖7所示簽名階段中,原始代碼通過哈希運(yùn)算抽取特征值,隨后使用簽名證書和作者私鑰對(duì)哈希特征值加密生成簽名信息,再將簽名信息和簽名證書與原始代碼進(jìn)行關(guān)聯(lián)打包發(fā)布簽名后代碼。圖8所示認(rèn)證階段中,從簽名后代碼中分離原始代碼與加密的簽名信息,之后對(duì)原始代碼做哈希運(yùn)算獲取特征值,同時(shí)通過公鑰解密簽名信息抽出被加密哈希特征值,最后對(duì)兩個(gè)哈希值做對(duì)比認(rèn)證。
安卓平臺(tái)要求所有應(yīng)用在安裝之前,必須由持有私鑰的開發(fā)者進(jìn)行簽名發(fā)布;其特殊之處在于簽名證書不需要簽名認(rèn)證機(jī)構(gòu)CA頒發(fā),采用自簽證書方式[22]。安卓應(yīng)用簽名除了具有認(rèn)證作者身份、防止抵賴和檢測(cè)篡改作用外,還可用于不同應(yīng)用之間開放權(quán)限進(jìn)行數(shù)據(jù)共享和進(jìn)程通信(簽名相同的安卓應(yīng)用之間具有基于簽名的接口訪問權(quán)限)[23]。
圖7 簽名階段
圖8 認(rèn)證階段
代碼簽名能夠很好地實(shí)現(xiàn)身份認(rèn)證、防止抵賴和代碼篡改,但重打包和影子簽名等攻擊方式很容易破解該保護(hù)方法,因此需要配合其他代碼保護(hù)技術(shù)一起對(duì)目標(biāo)代碼進(jìn)行保護(hù)。
2.3技術(shù)對(duì)比
不同代碼保護(hù)技術(shù)保護(hù)程度、實(shí)現(xiàn)成本、對(duì)抗攻擊目標(biāo)等各有不同,如表2所示。代碼混淆主要用來對(duì)抗逆向工程和靜態(tài)分析,保護(hù)程度最弱,但開發(fā)者有現(xiàn)成的工具可以使用,因此實(shí)現(xiàn)成本可以忽略;代碼加密主要用來對(duì)抗逆向工程、靜態(tài)分析、動(dòng)態(tài)分析和篡改,保護(hù)強(qiáng)度強(qiáng),但實(shí)現(xiàn)時(shí)以犧牲代碼運(yùn)行效率和增大代碼復(fù)雜度為代價(jià);代碼隱藏同樣用來對(duì)抗逆向工程、靜態(tài)分析、動(dòng)態(tài)分析和篡改,也有很好的保護(hù)強(qiáng)度,實(shí)現(xiàn)成本主要是降低代碼運(yùn)行效率;代碼簽名防護(hù)目標(biāo)是篡改和非法復(fù)制,但對(duì)抗威脅能力較弱,可以很容易被攻擊者破解。
表2 代碼保護(hù)技術(shù)對(duì)比
3.1樣本數(shù)據(jù)與分析模型
樣本數(shù)據(jù)按應(yīng)用市場(chǎng)分類下載排名從高到低收集,分別來自4個(gè)不同的安卓官方或第三方應(yīng)用市場(chǎng),應(yīng)用樣本總數(shù)為1000例。樣本數(shù)據(jù)采集完畢后,根據(jù)樣本應(yīng)用類型,我們對(duì)金融支付、社交通信、系統(tǒng)工具、瀏覽器和游戲等注重代碼安全保護(hù)的應(yīng)用進(jìn)行單獨(dú)分類,將剩余應(yīng)用類型劃分為其他。各類應(yīng)用在目標(biāo)中所占比重如圖9所示。
圖9 樣本應(yīng)用分類占比
樣本數(shù)據(jù)收集整理完成之后,使用安卓應(yīng)用反編譯工具對(duì)目標(biāo)樣本進(jìn)行逆向工程。如果反編譯成功,進(jìn)入代碼保護(hù)特征分析引擎;否則,認(rèn)定該應(yīng)用采用了預(yù)防變換代碼混淆策略對(duì)抗逆向工程,將其統(tǒng)計(jì)為代碼混淆保護(hù)技術(shù)。代碼保護(hù)特征分析引擎加載代碼保護(hù)特征庫(kù),對(duì)樣本反編譯后代碼進(jìn)行特征匹配,匹配結(jié)果分類統(tǒng)計(jì)為代碼混淆、代碼隱藏、代碼加密和代碼簽名。如果代碼特征匹配輸出無保護(hù),則進(jìn)行人工復(fù)核方式,重新將其統(tǒng)計(jì)到對(duì)應(yīng)類別。
3.2樣本分析
作者分別對(duì)不同類型和規(guī)模的樣本應(yīng)用進(jìn)行分析,統(tǒng)計(jì)使用一種、兩種及以上代碼保護(hù)技術(shù)和無任何代碼保護(hù)技術(shù)的樣本比例。如表3所示為不同類型應(yīng)用代碼保護(hù)現(xiàn)狀,可以得出:(1)采用代碼保護(hù)技術(shù)的應(yīng)用比例都超過樣本數(shù)量的90%以上;(2)社交通信類和瀏覽器類應(yīng)用代碼保護(hù)比例最高,系統(tǒng)工具類應(yīng)用代碼保護(hù)比例最低;(3)金融支付類應(yīng)用中只使用一種代碼保護(hù)技術(shù)和無代碼保護(hù)技術(shù)的比例很高。
表3 不同類型應(yīng)用代碼保護(hù)現(xiàn)狀
需要特別注意的是,金融支付類應(yīng)用雖然有高達(dá)98.21%樣本采用代碼保護(hù)技術(shù),但仍然有11.31%和1.79%的樣本屬于弱保護(hù)和無保護(hù)狀態(tài),這類應(yīng)用明顯違反了支付類行業(yè)數(shù)據(jù)安全標(biāo)準(zhǔn)[24]:開發(fā)和維護(hù)安全的系統(tǒng)或應(yīng)用。沒有任何代碼保護(hù)或弱保護(hù)的應(yīng)用更加容易被攻擊者攻擊,造成用戶損失。因此,對(duì)于金融支付類、系統(tǒng)工具類、游戲類及其他等應(yīng)用,仍然需要加強(qiáng)代碼保護(hù),進(jìn)行主動(dòng)防御,保護(hù)用戶利益。
表4所示為不同規(guī)模應(yīng)用代碼保護(hù)現(xiàn)狀。表中分別對(duì)1MB以下(不含1MB)、1至5MB(不含5MB)、5至10MB(不含10MB)和10MB以上規(guī)模應(yīng)用分類統(tǒng)計(jì),得出:(1)5至10MB樣本應(yīng)用代碼保護(hù)比例最高,1MB(不含1MB)以下樣本應(yīng)用代碼保護(hù)最低;(2)1MB(含1MB)以上樣本應(yīng)用代碼保護(hù)比例都超過95%以上;(3)不同規(guī)模的樣本應(yīng)用中,都存在無任何代碼保護(hù)技術(shù)的樣本;(4)10MB及以上樣本應(yīng)用采用兩種及以上代碼保護(hù)技術(shù)比例最高。
表4 不同規(guī)模應(yīng)用代碼保護(hù)現(xiàn)狀
不同規(guī)模應(yīng)用代碼保護(hù)趨勢(shì)如圖10所示。當(dāng)應(yīng)用規(guī)模越大時(shí),代碼保護(hù)比例越高,而采用一種或以下代碼保護(hù)技術(shù)的應(yīng)用比例越低;對(duì)于規(guī)模較小的應(yīng)用,開發(fā)者采用較少或不采用代碼保護(hù)技術(shù)進(jìn)行應(yīng)用保護(hù)。但對(duì)于攻擊者,規(guī)模較小應(yīng)用更加容易進(jìn)行逆向工程和靜態(tài)分析;因此,規(guī)模較小應(yīng)用被攻擊者攻破的可能性更大,也更容易給用戶帶來安全損失。綜上,所有應(yīng)用開發(fā)者,無論是開發(fā)大規(guī)模應(yīng)用還是小規(guī)模應(yīng)用,都需要為用戶安全使用其軟件提供保證,對(duì)軟件代碼進(jìn)行保護(hù)。
圖10 不同規(guī)模應(yīng)用代碼保護(hù)趨勢(shì)
隨著Android系統(tǒng)的不斷更新,軟件保護(hù)的強(qiáng)度也在增加,多種保護(hù)技術(shù)互補(bǔ)使用頻率增大。圖11所示為AndroidAPI版本軟件保護(hù)趨勢(shì)。圖中對(duì)采用兩種及以上保護(hù)措施的移動(dòng)應(yīng)用進(jìn)行了統(tǒng)計(jì)分析;特別地,以金融類應(yīng)用和其他類型應(yīng)用進(jìn)行對(duì)比分析。分析結(jié)果表明,AndroidAPI1~4版本(不含4)的金融類和其他類型應(yīng)用采用兩種保護(hù)措施的應(yīng)用比例僅有10%;隨著AndroidAPI版本的上升,保護(hù)強(qiáng)度不斷上升,在AndroidAPI13版本之后,這一比例已經(jīng)達(dá)到88%。
圖11 不同API版本的軟件保護(hù)趨勢(shì)
同時(shí),圖11軟件保護(hù)趨勢(shì)線中有兩個(gè)明顯拐點(diǎn):1)AndroidAPI8拐點(diǎn);2)AndroidAPI13拐點(diǎn)。通過分析得出:1)AndroidAPI4之前Android系統(tǒng)特征處于不穩(wěn)定發(fā)布狀態(tài),多數(shù)Android應(yīng)用開發(fā)以功能實(shí)現(xiàn)為主,代碼保護(hù)強(qiáng)度較弱;之后,代碼保護(hù)強(qiáng)度增強(qiáng);2)自AndroidAPI11開始,Android平臺(tái)發(fā)布平板開發(fā)新特性,已有Android應(yīng)用針對(duì)這一變化,進(jìn)行了工程重構(gòu)或重新發(fā)布,重新轉(zhuǎn)向功能開發(fā)為主,特別是金融類應(yīng)用表現(xiàn)特別突出;致使趨勢(shì)線AndroidAPI13拐點(diǎn)的出現(xiàn)。作者對(duì)采集樣本中多款金融類和非金融類移動(dòng)應(yīng)用進(jìn)行了人工逆向分析,并證實(shí)了以上結(jié)論。如,樣本中某款金融類應(yīng)用在AndroidAPI17版本中采用了代碼簽名保護(hù)技術(shù),而在之后卻沒有使用該代碼保護(hù)技術(shù)。
隨著移動(dòng)應(yīng)用技術(shù)快速發(fā)展,移動(dòng)應(yīng)用市場(chǎng)規(guī)模越來越大,移動(dòng)應(yīng)用對(duì)人們的生活、生產(chǎn)方式產(chǎn)生越來越重要影響。對(duì)移動(dòng)應(yīng)用用戶及應(yīng)用開發(fā)者利益進(jìn)行保障,對(duì)抗和防止攻擊者進(jìn)行非法復(fù)制、篡改、用戶隱私數(shù)據(jù)盜取等安全攻擊,是移動(dòng)應(yīng)用開發(fā)者必須承擔(dān)的職責(zé)。采用什么樣的軟件代碼保護(hù)技術(shù),需要根據(jù)產(chǎn)品安全需求、技術(shù)不同保護(hù)作用以及實(shí)現(xiàn)成本進(jìn)行選擇和實(shí)現(xiàn)。移動(dòng)支付將成為移動(dòng)互聯(lián)網(wǎng)發(fā)展的一個(gè)新亮點(diǎn),這類移動(dòng)應(yīng)用直接關(guān)系到用戶財(cái)產(chǎn)或金融安全,對(duì)軟件安全需求更高。實(shí)驗(yàn)結(jié)果表明,規(guī)模較小類應(yīng)用缺少代碼保護(hù);特別地,應(yīng)用市場(chǎng)上仍然存在沒有任何代碼保護(hù)技術(shù)的金融支付類軟件,這類應(yīng)用極易被攻擊者利用,進(jìn)行惡意攻擊。
在進(jìn)行大量調(diào)研、文獻(xiàn)閱讀及實(shí)驗(yàn)樣本分析的基礎(chǔ)上,文章對(duì)移動(dòng)應(yīng)用代碼保護(hù)技術(shù)及當(dāng)前應(yīng)用市場(chǎng)中移動(dòng)應(yīng)用代碼保護(hù)現(xiàn)狀進(jìn)行研究與分析,主要貢獻(xiàn)有:(1)總結(jié)并對(duì)比分析不同代碼保護(hù)技術(shù)特點(diǎn)及保護(hù)機(jī)制;(2)調(diào)研分析當(dāng)前市場(chǎng)中移動(dòng)應(yīng)用代碼保護(hù)現(xiàn)狀;(3)結(jié)合實(shí)驗(yàn)結(jié)果分析指出開發(fā)者,特別是金融支付類等對(duì)軟件用戶切身利益影響較大的應(yīng)用開發(fā)者,應(yīng)當(dāng)加強(qiáng)該類應(yīng)用代碼保護(hù)。由于實(shí)驗(yàn)樣本分類及規(guī)模沒有完全覆蓋應(yīng)用市場(chǎng),以及樣本分析模型采用靜態(tài)代碼特征匹配的局限性;因此,實(shí)驗(yàn)結(jié)果只反映出當(dāng)前應(yīng)用代碼保護(hù)基本現(xiàn)狀;樣本分析模型還需完善和優(yōu)化。
[1]Wiki.GooglePlay[EB/OL]. [2014-04-16].http://en.wikipedia.org/wiki/Google_Play.
[2]Wiki.AppStore(iOS)[EB/OL]. [2014-04-21].http://en.wikipedia.org/wiki/App_Store_(iOS).
[3] 艾瑞. 2013年中國(guó)移動(dòng)安全數(shù)據(jù)報(bào)告[R/OL]. [2014-01-16].http://report.iresearch.cn/2103.html.
[4]MainA,VanOorschotPC.SoftwareProtectionandApplicationSecurity:UnderstandingtheBattleground[C].Springer-VerlagLNCS,2003.
[5]SasirekhaN,HemalathaM.ASurveyonSoftwareProtectionTechniquesagainstVariousAttacks[J].GlobalJournalofComputerScienceandTechnology,2012,12(1):53-58.
[6]ZhouWu,ZhouYajin,JiangXuxian,etal.DroidMOSS:DetectingRepackagedSmartphoneApplicationsinThird-PartyAndroidMarketplaces[C].CODASPY, 2012.
[7]JonathanCrussell,ClintGibler,HaoChen.AttackoftheClones:DetectingClonedApplicationsonAndroidMarkets[C].ESORICS,2012.
[8]PatrickSchulz,FelixMatenaar.AndroidReverseEngineering&Defenses[R/OL]. [2013].http://www.bluebox.com.
[9]MikhailJAtallah,EricDBryant,MartinRStytz.ASurveyofAnti-TamperTechnologies[J].CROSSTALK:TheJournalofDefenseSoftwareEngineering,2004,17(11):12-16.
[10]AbhishekDubey,AnmolMisra.AndroidSecurity:AttacksandDefenses[M].BocaRaton:CRCPress,2013:112-114.
[11]JamesKeogh.J2ME:TheCompleteReference[M].California:McGraw-Hill, 2003:12-15.
[12]DCCI互聯(lián)網(wǎng)數(shù)據(jù)中心. 2013移動(dòng)應(yīng)用隱私安全測(cè)評(píng)報(bào)告[R/OL]. [2013].http://www.dcci.com.cn.
[13]CappaertJ.CodeObfuscationTechniquesforSoftwareProtection[D].Leuven:KatholiekeUniversiteitLeuven-FacultyofEngineering, 2012.
[14]CollbergCS,ThomborsonC.Watermarking,tamper-proofing,andobfuscation-toolsforsoftwareprotection[J].IEEETransactionsonSoftwareEngineering,2002,28(8):735-746.
[15]Google.ToolsHelp[EB/OL].[2014].http://developer.android.com.
[16]MIT.ProGuardManual[EB/OL]. [2014].http://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html.
[17]Oracle.JavaRemoteMethodInvocation-DistributedComputingforJava[EB/OL]. [2014].http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138781.html.
[18]WilliamStallings.CryptographyandNetworkSecurity:PrinciplesandPractice[M].5thed.NewJersey:PrenticeHall,2010: 8-25,396-407.
[19]AndroidAPIs[EB/OL]. [2014].http://developer.android.com.
[20]JonathanBKnudsen.JavaCryptography[M].California:O’ReillyMedia,1998:89-187.
[21]Digcert.CodeSigningCertificates[EB/OL]. [2014].http://www.digicert.com/ppc/code-signing-certificate.htm.
[22]Google.SigningYourApplications[EB/OL]. [2014].http://developer.android.com/tools/publishing/app-signing.html.
[23]IBMCEnriqueOrtiz.UnderstandingSecurityonAndroid[EB/OL].[2010].http://www.ibm.com/developerworks/library/x-androidsecurity/.
[24]Wiki.PaymentCardIndustryDataSecurityStandard[EB/OL].[2014].http://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard.
STUDYONMOBILEAPPLICATIONSCODEPROTECTIONSTATUSANDTECHNIQUES
ZhuHongjun1,2ChenHao1HuaBaojian2LiuYe2GuoYu2
1(School of Software Engineering, University of Science and Technology of China, Hefei 230051, Anhui, China)2(Suzhou Institute for Advanced Study, University of Science and Technology of China, Suzhou 215123, Jiangsu, China)
Androidplatform-basedapplicationsareeasilytobeattackedbyvirusesormalware.Apartfromthecausesoftheplatformsbeingopensourceandopeningandsoon,theweakerprotectionabilityofthemobileapplicationscodeitselfisalsoamainfactor.Forthisproblem,inthepaperwetakeAndroidplatformapplicationsastheresearchobjects,analysethesecuritythreatsmodelandthecodessecuritydemandsofthemobileapplications,studythemechanismsofcodeprotectiontechniques,suchascodeobfuscation,code-behind,codeencryptionandcodesignature,anddescribetheiradvantagesanddisadvantages;Then,wedesignandimplementanAndroidapplicationcodeprotectiontechnologyanalysisengine,andanalyseandsummarisetheexperimentaldata.ResultshowsthatallthesamplesindifferentsizesandtypeshavetheAndroidapplicationstocertainproportion,theircodeprotectionstrengthsarenotstrong;inparticular,thesmallerthescaleoftheapplications,theweakerthecodeprotectionstrength,andthisresultsinsuchclassofapplicationsbeingmaliciouslyattackedmucheasier.
CodeprotectionMobileapplicationAndroidReverseengineering
2014-07-24。中國(guó)計(jì)算機(jī)學(xué)會(huì)-騰訊科研基金項(xiàng)目(CCF-TencentAGR20130105);蘇州市科技計(jì)劃應(yīng)用基礎(chǔ)研究項(xiàng)目(SYG201406)。朱洪軍,講師,主研領(lǐng)域:軟件測(cè)試,移動(dòng)安全。陳灝,碩士生。華保健,講師。劉業(yè),講師。郭宇,副教授。
TP3
ADOI:10.3969/j.issn.1000-386x.2016.03.074