宋愷 王淞鶴 武林娜 周飛
(1. 移動(dòng)應(yīng)用創(chuàng)新與治理技術(shù)工業(yè)和信息化部重點(diǎn)實(shí)驗(yàn)室,北京 100191;2.中國(guó)信息通信研究院泰爾終端實(shí)驗(yàn)室,北京 100191)
近年來(lái),移動(dòng)互聯(lián)網(wǎng)行業(yè)蓬勃發(fā)展,各類(lèi)移動(dòng)應(yīng)用技術(shù)、模式、架構(gòu)不斷演進(jìn)。其中,熱更新技術(shù)作為移動(dòng)應(yīng)用開(kāi)發(fā)中普遍使用的一種技術(shù),常用于實(shí)現(xiàn)代碼熱修復(fù)、數(shù)據(jù)統(tǒng)計(jì)、內(nèi)容推送等業(yè)務(wù)功能[1],提高了開(kāi)發(fā)效率,豐富了應(yīng)用場(chǎng)景。然而,熱更新技術(shù)也容易被惡意開(kāi)發(fā)者利用,成為侵害用戶(hù)權(quán)益、規(guī)避合規(guī)監(jiān)管、對(duì)抗技術(shù)檢測(cè)的手段,給移動(dòng)互聯(lián)網(wǎng)行業(yè)生態(tài)的健康發(fā)展帶來(lái)風(fēng)險(xiǎn)與隱憂(yōu)。因此,亟需加強(qiáng)對(duì)熱更新相關(guān)技術(shù)檢測(cè)及合規(guī)治理的策略研究。
熱更新技術(shù)是指通過(guò)動(dòng)態(tài)加載方式將代碼或資源裝入運(yùn)行中的移動(dòng)應(yīng)用軟件(Application,App),實(shí)現(xiàn)App的即時(shí)更新。該技術(shù)源于移動(dòng)應(yīng)用插件化的思想,即對(duì)App進(jìn)行模塊化開(kāi)發(fā),將不同的業(yè)務(wù)邏輯代碼進(jìn)行拆分和封裝,形成“主程序+插件程序”的模式,并根據(jù)不同業(yè)務(wù)需求進(jìn)行動(dòng)態(tài)更新和插件替換[2]。相較于傳統(tǒng)的App更新方法,熱更新技術(shù)無(wú)需開(kāi)發(fā)者重新發(fā)版、分發(fā)平臺(tái)重新審核上架、用戶(hù)重新下載,具備加載速度更快、更新成本更低、無(wú)需二次安裝等特性。
根據(jù)功能場(chǎng)景的差異,可將常用的熱更新技術(shù)方案分為資源熱替換、代碼熱替換和動(dòng)態(tài)庫(kù)替換三類(lèi)。其中,資源熱替換通過(guò)修改App的已有資源包或添加新資源包來(lái)實(shí)現(xiàn)圖片、文字、用戶(hù)界面(User Interface,UI)布局等資源的動(dòng)態(tài)更新和替換,主要應(yīng)用場(chǎng)景包括UI更新及修復(fù)、動(dòng)態(tài)換膚等;代碼熱替換主要包括原生層替換、類(lèi)加載替換和即時(shí)運(yùn)行三種方式,可用于漏洞修復(fù)、代碼更新等場(chǎng)景;動(dòng)態(tài)庫(kù)替換通過(guò)重載新的安卓動(dòng)態(tài)庫(kù)實(shí)現(xiàn)原生層代碼的熱更新。
熱更新技術(shù)的發(fā)展和應(yīng)用豐富了App業(yè)務(wù)模式,在促進(jìn)產(chǎn)業(yè)發(fā)展的同時(shí),技術(shù)濫用、衍生產(chǎn)品變異以及相關(guān)管理機(jī)制缺失等問(wèn)題集中凸顯,由此引發(fā)的各種安全隱患需高度關(guān)注、及時(shí)治理。
目前,由于技術(shù)濫用,熱更新技術(shù)已成為惡意應(yīng)用隱蔽擴(kuò)散和侵害用戶(hù)權(quán)益的常用手段。為了更好地隱藏自身惡意行為和違規(guī)內(nèi)容,惡意應(yīng)用通常在商店上架審核和在架投放階段將自身無(wú)害化并偽裝成正常應(yīng)用,而當(dāng)用戶(hù)完成下載安裝或滿(mǎn)足某些特定觸發(fā)條件時(shí),再通過(guò)熱更新的方式下發(fā)包含惡意代碼或內(nèi)容的新版本,實(shí)現(xiàn)App的“換裝”“變臉”[3-4]。例如,某款健康類(lèi)App在提交商店上架審核時(shí)的程序包體不包含惡意代碼,而在用戶(hù)下載并首次打開(kāi)運(yùn)行時(shí),通過(guò)熱更新方式加載惡意代碼,實(shí)現(xiàn)自身圖標(biāo)的透明化,使用戶(hù)無(wú)法正常卸載,同時(shí)開(kāi)啟常駐進(jìn)程頻繁彈出廣告,影響用戶(hù)正常使用。
此外,即使是對(duì)于沒(méi)有惡意行為的常規(guī)App,技術(shù)濫用也會(huì)導(dǎo)致潛在的安全風(fēng)險(xiǎn)。具體而言,部分App同時(shí)集成多個(gè)熱更新框架,導(dǎo)致業(yè)務(wù)功能進(jìn)一步復(fù)雜化,不僅降低了其自身安全性,而且增大了安全檢測(cè)難度。
近年來(lái),熱更新技術(shù)的衍生產(chǎn)品增多,各類(lèi)產(chǎn)品實(shí)現(xiàn)原理和技術(shù)特點(diǎn)各不相同,在安全性、穩(wěn)定性等方面難以達(dá)到統(tǒng)一標(biāo)準(zhǔn)。頭部互聯(lián)網(wǎng)公司具備更多資源和技術(shù)能力用以自主研發(fā)熱更新框架并對(duì)外輸出解決方案,中長(zhǎng)尾企業(yè)則基于外部開(kāi)源框架實(shí)現(xiàn)熱更新框架的改造和套用。目前,主流的熱更新框架包括微信的Tinker、大眾點(diǎn)評(píng)的Nuwa、百度金融的RocooFix、餓了么的Amigo、阿里的AndFix[5]和Sophix、美團(tuán)的Robust以及騰訊的KKFix等(見(jiàn)圖1)。這些熱更新產(chǎn)品的功能深度定制、代碼結(jié)構(gòu)復(fù)雜,同時(shí)在行業(yè)內(nèi)廣泛傳播,為安全技術(shù)分析和應(yīng)用合規(guī)監(jiān)管帶來(lái)一定困難。
圖1 主流熱更新框架
當(dāng)前各類(lèi)應(yīng)用商店、檢測(cè)機(jī)構(gòu)和平臺(tái)針對(duì)熱更新技術(shù)的監(jiān)督和檢測(cè)能力不足,尚未形成完整、有效的治理方案,其治理難點(diǎn)主要在于熱更新行為觸發(fā)條件復(fù)雜多樣、檢測(cè)和監(jiān)測(cè)標(biāo)準(zhǔn)不統(tǒng)一等。
熱更新行為的觸發(fā)條件和觸發(fā)機(jī)制復(fù)雜多樣,可能根據(jù)時(shí)段、地域、下載渠道等方面的差異進(jìn)行變更,大大增加了行為識(shí)別的難度。對(duì)于“人工巡查+安全檢測(cè)”的常規(guī)檢測(cè)模式而言,復(fù)雜多樣的觸發(fā)條件和觸發(fā)機(jī)制不僅顯著增大了檢測(cè)范圍和數(shù)量,還大幅降低了檢測(cè)效率。
同時(shí),行業(yè)內(nèi)尚未形成界定App熱更新違規(guī)行為的統(tǒng)一標(biāo)準(zhǔn),導(dǎo)致對(duì)熱更新違規(guī)行為的判斷基準(zhǔn)和評(píng)判規(guī)則不一致,難以在行業(yè)治理層面形成合力。
當(dāng)前,國(guó)內(nèi)外暫無(wú)針對(duì)熱更新技術(shù)的法律法規(guī)和標(biāo)準(zhǔn)要求。此外,由于國(guó)內(nèi)外移動(dòng)互聯(lián)網(wǎng)生態(tài)環(huán)境的不同,國(guó)外主流應(yīng)用分發(fā)平臺(tái)如谷歌應(yīng)用商店Google Play和蘋(píng)果應(yīng)用商店App Store與國(guó)內(nèi)分發(fā)平臺(tái)在熱更新技術(shù)政策要求和技術(shù)保障方面存在較大差異。
在政策要求方面,對(duì)于所分發(fā)的App,Google Play禁止其采用Google Play內(nèi)設(shè)更新機(jī)制以外的其他任何方式修改、替換、更新應(yīng)用本身,即App不得從Google Play以外的其他來(lái)源下載可執(zhí)行代碼(例如Dex、Jar和So等可用于熱更新的文件)[6],但該限制不適用于在虛擬機(jī)上運(yùn)行且只具備有限的安卓應(yīng)用軟件編程接口使用權(quán)限的代碼(例如WebView或?yàn)g覽器中的JavaScript)。
在技術(shù)保障方面,為方便App進(jìn)行輕量級(jí)更新和修復(fù)、保持最新?tīng)顟B(tài),Google Play核心庫(kù)提供了“應(yīng)用內(nèi)更新”功能接口,有助于確保App的更新行為在平臺(tái)的管控機(jī)制下進(jìn)行。
在政策要求方面,App Store規(guī)定App在一般情況下不得下載或安裝可執(zhí)行代碼,但可執(zhí)行代碼在滿(mǎn)足以下條件時(shí),可被下載安裝:僅通過(guò)已向App Store明示的且符合預(yù)期目的的特性或功能來(lái)改變APP主要用途;不為其他代碼或應(yīng)用創(chuàng)建商店或下載渠道;不會(huì)繞過(guò)操作系統(tǒng)的簽名、沙盒或其他安全功能[7]。
在技術(shù)保障方面,在滿(mǎn)足以上條件的基礎(chǔ)上,蘋(píng)果應(yīng)用開(kāi)發(fā)者可使用內(nèi)置技術(shù)框架WebKit或JavaScriptCore下載并運(yùn)行代碼。為了有效保障熱更新技術(shù)的規(guī)范使用,App Store對(duì)平臺(tái)上的App進(jìn)行了嚴(yán)格的安全檢測(cè),包括檢測(cè)App是否使用具有修改原生代碼能力、可能造成嚴(yán)重安全風(fēng)險(xiǎn)的JSPatch等第三方熱更新框架,對(duì)具有相關(guān)問(wèn)題的App開(kāi)發(fā)者主體予以警告,并對(duì)App進(jìn)行風(fēng)險(xiǎn)處置。
當(dāng)前,國(guó)內(nèi)應(yīng)用分發(fā)平臺(tái)對(duì)于熱更新技術(shù)的管理要求存在差異。一方面,大多數(shù)應(yīng)用分發(fā)平臺(tái)(如應(yīng)用寶、百度手機(jī)助手、360手機(jī)助手等)禁止App通過(guò)熱更新變更除游戲資源包以外的內(nèi)容,并建立App上架、在架審核機(jī)制,利用巡查抽檢和投訴舉報(bào)等方式對(duì)App的彈窗更新和熱更新行為進(jìn)行檢測(cè)和監(jiān)測(cè),一旦發(fā)現(xiàn)違規(guī)App,會(huì)立即將其下架甚至加入惡意名單;另一方面,少量應(yīng)用分發(fā)平臺(tái)仍允許App進(jìn)行熱更新,未建立具有針對(duì)性的平臺(tái)監(jiān)督審查機(jī)制。
熱更新技術(shù)涉及的業(yè)務(wù)功能多樣、影響范圍廣泛、問(wèn)題場(chǎng)景復(fù)雜,使得單一的監(jiān)督管控手段收效甚微。一方面,熱更新技術(shù)作為App開(kāi)發(fā)過(guò)程中常用的技術(shù)手段,在代碼更新、漏洞修補(bǔ)等應(yīng)用場(chǎng)景中具有不可替代性,同時(shí)在優(yōu)化資源加載、提升宿主環(huán)境結(jié)合度、拓展用戶(hù)服務(wù)等方面發(fā)揮著積極作用;另一方面,熱更新技術(shù)的濫用和無(wú)約束發(fā)展,對(duì)移動(dòng)互聯(lián)網(wǎng)發(fā)展及用戶(hù)權(quán)益保護(hù)產(chǎn)生一定威脅,行業(yè)的合理約束及合規(guī)監(jiān)管勢(shì)在必行。為了對(duì)App熱更新行為進(jìn)行有效治理,需從行業(yè)標(biāo)準(zhǔn)規(guī)范、技術(shù)監(jiān)督、行業(yè)自律三個(gè)方面入手,構(gòu)建以移動(dòng)終端企業(yè)、應(yīng)用分發(fā)平臺(tái)及應(yīng)用商店、App及軟件開(kāi)發(fā)工具包(Software Development Kit,SDK)開(kāi)發(fā)者為主體的熱更新技術(shù)監(jiān)督及治理體系,強(qiáng)化關(guān)鍵責(zé)任鏈管理制度,堅(jiān)持源頭治理,防范技術(shù)風(fēng)險(xiǎn),引導(dǎo)熱更新技術(shù)良性發(fā)展。
在標(biāo)準(zhǔn)層面,可圍繞移動(dòng)互聯(lián)網(wǎng)行業(yè)責(zé)任主體構(gòu)建熱更新技術(shù)合規(guī)使用標(biāo)準(zhǔn)體系,對(duì)移動(dòng)應(yīng)用軟件分發(fā)平臺(tái)、移動(dòng)應(yīng)用軟件服務(wù)提供者、熱更新技術(shù)廠(chǎng)商提出規(guī)范要求。
4.1.1 移動(dòng)應(yīng)用軟件分發(fā)平臺(tái)
移動(dòng)應(yīng)用軟件分發(fā)平臺(tái)應(yīng)該要求移動(dòng)應(yīng)用軟件服務(wù)提供者登記所使用的熱更新框架信息,對(duì)具備熱更新能力的移動(dòng)應(yīng)用軟件進(jìn)行審核檢測(cè)并對(duì)違規(guī)熱更新行為采取處置措施,同時(shí)針對(duì)熱更新問(wèn)題構(gòu)建相關(guān)安全機(jī)制及用戶(hù)反饋渠道。
4.1.2 移動(dòng)應(yīng)用軟件服務(wù)提供者
移動(dòng)應(yīng)用軟件服務(wù)提供者應(yīng)該明確熱更新行為的應(yīng)用場(chǎng)景(如漏洞修復(fù)、模塊更新、資源下發(fā)、小程序裝載等),根據(jù)其必要性和緊迫性進(jìn)行分類(lèi),并根據(jù)更新時(shí)機(jī)和更新方式進(jìn)行分級(jí),當(dāng)涉及重大安全漏洞及代碼缺陷修復(fù)時(shí),可進(jìn)行即時(shí)熱更新。
在用戶(hù)權(quán)益及個(gè)人信息保護(hù)方面,若要集成熱更新框架,移動(dòng)應(yīng)用軟件服務(wù)提供者應(yīng)該向用戶(hù)清晰明示熱更新的目的、方式、規(guī)則、內(nèi)容、包體大小等信息,未經(jīng)用戶(hù)同意不應(yīng)該進(jìn)行熱更新;若熱更新行為造成權(quán)限變更、個(gè)人信息處理規(guī)則變化,移動(dòng)應(yīng)用軟件服務(wù)提供者應(yīng)該向用戶(hù)明示告知并征得用戶(hù)同意;熱更新行為不應(yīng)該擅自更改用戶(hù)設(shè)置。
4.1.3 熱更新技術(shù)廠(chǎng)商
針對(duì)熱更新技術(shù)廠(chǎng)商,應(yīng)從安全、合規(guī)指引、技術(shù)備案三方面進(jìn)行要求。首先,熱更新技術(shù)廠(chǎng)商應(yīng)保障其代碼安全,對(duì)所集成或引用的第三方代碼框架進(jìn)行代碼審計(jì),避免代碼篡改或惡意利用;其次,熱更新技術(shù)廠(chǎng)商應(yīng)提供開(kāi)發(fā)者合規(guī)指引,確保開(kāi)發(fā)者可以正確使用熱更新能力;最后,熱更新技術(shù)廠(chǎng)商應(yīng)進(jìn)行熱更新技術(shù)備案,備案內(nèi)容包括接口功能、應(yīng)用場(chǎng)景、觸發(fā)機(jī)制及原理等,從而方便監(jiān)管機(jī)構(gòu)評(píng)估審查。
4.2.1 移動(dòng)應(yīng)用分發(fā)平臺(tái)監(jiān)管
在平臺(tái)管理方面,移動(dòng)應(yīng)用分發(fā)平臺(tái)應(yīng)完善應(yīng)用上架審核、在架更新流程。具體而言,App上架前開(kāi)發(fā)者應(yīng)向平臺(tái)提交完整的熱更新框架清單;在架期間如需熱更新,需在平臺(tái)提交更新申請(qǐng),包括更新代碼包、更新后版本號(hào)、功能描述、日志等信息。此外,移動(dòng)應(yīng)用分發(fā)平臺(tái)應(yīng)當(dāng)完善應(yīng)急更新機(jī)制,對(duì)于涉及修復(fù)重大漏洞和嚴(yán)重功能缺陷的更新,打通快速審核上架通道,減小造成的風(fēng)險(xiǎn)和損失。
在技術(shù)檢測(cè)和監(jiān)測(cè)方面,移動(dòng)應(yīng)用分發(fā)平臺(tái)應(yīng)構(gòu)建“事前、事中、事后”的檢測(cè)和監(jiān)測(cè)體系,實(shí)現(xiàn)“發(fā)現(xiàn)、核驗(yàn)、處置”的閉環(huán)治理。移動(dòng)應(yīng)用分發(fā)平臺(tái)應(yīng)事先對(duì)典型熱更新框架及其代碼特征進(jìn)行識(shí)別,縮小監(jiān)測(cè)范圍;事中通過(guò)人工巡查、輿情反饋、數(shù)據(jù)監(jiān)控等方式進(jìn)行專(zhuān)項(xiàng)巡查和布控;事后對(duì)存在惡意行為的應(yīng)用進(jìn)行即時(shí)處置并留存相關(guān)證據(jù)。
此外,移動(dòng)應(yīng)用分發(fā)平臺(tái)可參考國(guó)內(nèi)外先進(jìn)經(jīng)驗(yàn),提高平臺(tái)自研熱更新能力并提供給開(kāi)發(fā)者,從而在保障更新內(nèi)容及功能合法合規(guī)的同時(shí),兼顧快速審核、高效更新的要求。
4.2.2 移動(dòng)終端系統(tǒng)監(jiān)管
移動(dòng)終端應(yīng)加強(qiáng)對(duì)App的行為監(jiān)測(cè)、權(quán)限管理,包括對(duì)應(yīng)用軟件在靜默狀態(tài)或后臺(tái)運(yùn)行時(shí)的代碼加載、類(lèi)庫(kù)替換、圖標(biāo)及布局變化、權(quán)限變更、異常的網(wǎng)絡(luò)流量以及資源文件加載等行為的監(jiān)控和記錄,同時(shí)可采用通知欄或彈窗等形式向用戶(hù)即時(shí)提示。此外,對(duì)于小程序、H5應(yīng)用等新形態(tài)應(yīng)用,移動(dòng)終端可通過(guò)異常網(wǎng)址訪(fǎng)問(wèn)監(jiān)控等手段進(jìn)行安全風(fēng)險(xiǎn)監(jiān)測(cè)。
4.2.3 發(fā)揮App簽名備案技術(shù)的作用
除移動(dòng)應(yīng)用分發(fā)平臺(tái)和移動(dòng)終端系統(tǒng)監(jiān)管外,可將應(yīng)用軟件更新行為管理與應(yīng)用軟件簽名相結(jié)合。應(yīng)用軟件更新時(shí)需向平臺(tái)進(jìn)行申請(qǐng),平臺(tái)審核后通過(guò)認(rèn)證機(jī)構(gòu)獲取新的應(yīng)用簽名,該簽名中包含應(yīng)用軟件版本、最近一次更新時(shí)間、更新類(lèi)型及目的等信息。上述方法可以實(shí)現(xiàn)對(duì)應(yīng)用軟件熱更新行為的統(tǒng)一標(biāo)識(shí),有助于移動(dòng)應(yīng)用分發(fā)平臺(tái)、移動(dòng)終端系統(tǒng)、用戶(hù)等對(duì)其進(jìn)行有效識(shí)別,同時(shí)也保證了應(yīng)用軟件惡意行為的可查、可溯、可追。
App與SDK開(kāi)發(fā)者應(yīng)當(dāng)合理規(guī)范使用熱更新技術(shù),避免技術(shù)濫用,同時(shí)應(yīng)提高用戶(hù)權(quán)益及個(gè)人信息保護(hù)意識(shí),具體措施包括對(duì)熱更新行為進(jìn)行明示告知并取得授權(quán)同意、加強(qiáng)對(duì)熱更新下載和刪除的管理、加強(qiáng)對(duì)熱更新行為的報(bào)備等。
對(duì)熱更新行為進(jìn)行明示告知并取得授權(quán)同意指應(yīng)用軟件、SDK開(kāi)發(fā)者或運(yùn)營(yíng)者進(jìn)行熱更新前需向用戶(hù)明示告知其更新目的、更新方式、更新內(nèi)容、權(quán)限或個(gè)人信息處理規(guī)則是否變化,并獲得用戶(hù)同意。例如,SDK開(kāi)發(fā)者需在開(kāi)發(fā)者文檔中說(shuō)明是否存在熱更新行為并明示其具體應(yīng)用場(chǎng)景;除代碼漏洞修復(fù)等特殊情況外,SDK更新需首先征得宿主App的授權(quán)同意。
加強(qiáng)對(duì)熱更新下載和刪除的管理指熱更新代碼或資源補(bǔ)丁的下載和刪除行為必須獲得用戶(hù)授權(quán),不應(yīng)在用戶(hù)不知情的情況下靜默或后臺(tái)靜默下載,不應(yīng)未經(jīng)用戶(hù)同意刪除熱更新補(bǔ)丁的安裝包。
加強(qiáng)對(duì)熱更新行為的報(bào)備指應(yīng)用軟件、SDK開(kāi)發(fā)者或運(yùn)營(yíng)者需對(duì)熱更新行為進(jìn)行記錄,保留相關(guān)代碼或資源補(bǔ)丁包。例如,對(duì)于通過(guò)分發(fā)平臺(tái)管理下發(fā)的應(yīng)用,其熱更新行為需加強(qiáng)向平臺(tái)進(jìn)行報(bào)備,同步更新平臺(tái)上的相關(guān)信息;對(duì)于更改應(yīng)用圖標(biāo)及UI界面布局等對(duì)應(yīng)用軟件產(chǎn)生重大變化的更新,應(yīng)先通過(guò)平臺(tái)審核再下發(fā)更新補(bǔ)丁。
熱更新技術(shù)已經(jīng)發(fā)展多年,但其安全問(wèn)題仍然嚴(yán)峻復(fù)雜,需聯(lián)合行業(yè)內(nèi)終端企業(yè)、應(yīng)用分發(fā)平臺(tái)、App及SDK開(kāi)發(fā)運(yùn)營(yíng)者共同構(gòu)建熱更新治理體系,從標(biāo)準(zhǔn)規(guī)范、技術(shù)監(jiān)督、行業(yè)自律等方面入手,著力提高熱更新行為治理能力,防范技術(shù)風(fēng)險(xiǎn),引導(dǎo)熱更新技術(shù)良性發(fā)展。