相關(guān)鏈接: 中國安全網(wǎng) 中國質(zhì)量網(wǎng) 中國論文網(wǎng) 中國資訊網(wǎng)
作者:鄭曉蒙
本文首先介紹Android系統(tǒng)的安全機制和WebView組件特性;然后總結(jié)如何通過WebView組件進行Android應(yīng)用與Web頁面的交互,以及攻擊者如何利用WebView組件這種功能特性發(fā)動攻擊行為,分析得出此類攻擊的前提是對應(yīng)用程序的逆向分析;最后提出一種使用應(yīng)用加固的技術(shù)方案防止Android逆向工程,從而為Android應(yīng)用程序進行安全防護,避免此類安全威脅發(fā)生。
1相關(guān)研究
Android系統(tǒng)為使各應(yīng)用程序之間相互獨立,提供了一種“沙箱”隔離機制,系統(tǒng)上每個應(yīng)用程序運行在各自的虛擬機中,每個應(yīng)用都擁有獨立的地址空間和資源,任何應(yīng)用程序需要訪問系統(tǒng)資源或其他應(yīng)用程序資源須在其配置文件中進行聲明。
然而,Android平臺提供的WebView組件破壞了這種“沙箱”隔離機制。WebView為Android應(yīng)用程序提供了不需依托于瀏覽器而實現(xiàn)加載和顯示W(wǎng)eb頁面的功能,同時可實現(xiàn)Web頁面中的JavaScript代碼與Android應(yīng)用中Java接口函數(shù)進行交互。WebView提供了addjavascriptinterfaceAPI,使來自Web頁面的JavaScript代碼可以調(diào)用Android應(yīng)用中的Java代碼。此外,WebView提供的loadUrlAPI實現(xiàn)了應(yīng)用程序中的Java代碼調(diào)用Web頁面中的JavaScript代碼的功能‘5J。WebView組件提供的功能打開了Web頁面與Android應(yīng)用程序之間交互的渠道,使網(wǎng)絡(luò)數(shù)據(jù)與本地Android應(yīng)用可以相互調(diào)用。
使用Android逆向分析工具對Android應(yīng)用進行反編譯,可以獲得其源代碼,通過分析源代碼可以找出應(yīng)用程序提供的WebView接口并分析其業(yè)務(wù)邏輯,這種逆向分析會暴露應(yīng)用程序可被外部調(diào)用的WebView接口,該類接口如果被攻擊者惡意利用將給Android應(yīng)用或系統(tǒng)本身帶來安全隱患。
2 WebView組件安全威脅
Webview主要為Android應(yīng)用提供了兩種功能:一種是利用addjavascriptInterfaceAPI,可以實現(xiàn)Web頁面中的JavaScript代碼調(diào)用Android應(yīng)用中的Java代碼;另一種是利用loadUrlAPI實現(xiàn)Android應(yīng)用中的Java代碼調(diào)用Web頁面中的JavaScript代碼;谶@兩種功能,本文總結(jié)了兩種攻擊模型:1)來自惡意網(wǎng)頁的攻擊。2)來自惡意應(yīng)用的攻擊。
2.1來自惡意網(wǎng)頁的攻擊
WebView使Web頁面中的JavaScript代碼可以調(diào)用Android應(yīng)用程序中的Java代碼進而執(zhí)行程序或訪問系統(tǒng)資源。該功能由addjavascriptlnterface接口實現(xiàn)。Android應(yīng)用程序開發(fā)過程中,在WebView組件中使用addjavascriptlnterface接口,聲明Java類,該類中的public函數(shù)都可以被外部調(diào)用,在SDK19版本以后,所有public類需添加Javascriptlnterface注釋,添加注釋后的接口可以被外部JavaScript代碼調(diào)用,調(diào)用關(guān)系如圖1所示。
在Android程序中為MyWebView類添加了addjavascriptInterfaceAPI,同時提供了sendMessage()接口函數(shù),通過這一做法,可以通過調(diào)用該Java接口實現(xiàn)發(fā)送短信功能,程序代碼如下所示:
wehview.addjavascriptlnterface(new MyWehView(),“MyWebView”)
@Javascriptlnterface
public sendMessage(String phone_num, String content);
在Web頁面的代碼中body域內(nèi)插入構(gòu)造的JavaScript腳本,當頁面在WebView中打開時,該JavaScript代碼將自動執(zhí)行,可以在Android客戶端實現(xiàn)編輯短信內(nèi)容并發(fā)送到目的號碼的功能,程序代碼如下所示:
<script>
<body onload=”window.MyWebView.sendMessage(‘1 555521 5556’,‘Hello Worlcl.’1”>
</body>
</script>
當使用addjavascriptlnterf'ace接口時,使JavaScript代碼可以通過Java接口實現(xiàn)程序功能,這樣就為惡意Web頁面打開了一個通道,可用來調(diào)用本地程序。該攻擊模型如圖2所示。
Android應(yīng)用程序受到來自惡意Web頁面的攻擊,應(yīng)用程序使用WebView提供的addjavascriptlnterfac:e接口,Web頁面中的JavaSCript代碼調(diào)用了應(yīng)用程序的該接口,惡意執(zhí)行程序可實現(xiàn)某些功能或竊取、破壞系統(tǒng)資源。
2.2來自惡意應(yīng)用的攻擊
Android應(yīng)用可以通過WebView使Java對象調(diào)用Web頁面中的JavaScript代碼,該功能主要通過loadUrl實現(xiàn)。如果URL字符串起始于“javascript:”,后接JavaScript代碼,IoadUrl就會在WebView打開的Web頁面中執(zhí)行JavaScript代碼,調(diào)用關(guān)系如圖3所示。
下面舉例說明,Java代碼為Web頁面添加字符串“HelloWorld”,然后將cookie設(shè)置為空,代碼如下:
String str=“<div×h2>Hello World</h2×/div>":
wchVicw.1[}adUrl(“javascript:document.appendChild(str);”);
webView.loaclUrl(”javascript:documenl.c:ookie=’’;”);
插入的JavaScript代碼和Web頁面中的代碼具有同樣的權(quán)限,WebView組件通過loadUrlAPI可以支配Web頁面的DOM( doc,ument object model)對象和cookies,并調(diào)用頁面中的JavaScript代碼,甚至給服務(wù)器發(fā)送請求。loadUrl為應(yīng)用程序控制Web頁面提供了豐富的功能,但也可能為惡意軟件提供了獲取用戶隱私的捷徑,此類威脅模型如圖4所示。
來自惡意應(yīng)用的攻擊是假設(shè)用戶安裝了攻擊者開發(fā)的惡意Android應(yīng)用程序,而且該程序使用了WebView組件,誘導用戶使用該惡意程序的WebView組件訪問Web服務(wù),惡意應(yīng)用程序可以借此盜取用戶個人信息或者誘導用戶訪問惡意網(wǎng)站。
3 WebView組件安全防護方案
來自WebVi。w的主要安全威脅在于Android應(yīng)用程序向外部暴露了其內(nèi)部WebView接口,攻擊者通過分析這些接口函數(shù)從而構(gòu)造惡意的網(wǎng)絡(luò)攻擊應(yīng)用程序。Android應(yīng)用程序是Apk類型文件,我們不能從中直接獲取到Java源碼,因此需要對Apk進行反編譯,通過靜態(tài)分析技術(shù)獲取應(yīng)用程序中提供的WebView接口。Apktool是一種常用的Apk反編譯工具,通過Apktool反編譯Apk,解析其中的dex文件,查看編譯后的class文件,檢索并分析class文件中W。bView組件提供的接口函數(shù),從而獲得WebView組件提供給外部調(diào)用的接入點。攻擊者可構(gòu)造JS腳本調(diào)用該接口,將JS腳本注入Android應(yīng)用運行過程中產(chǎn)生的Response消息,當應(yīng)用程序加載Response消息時,執(zhí)行接口函數(shù)功能實現(xiàn)惡意操作,具體流程如圖5所示。
從WebVi。w的分析方法可以得出利用WebView組件進行的攻擊,主要基于Android逆向工程,對Android應(yīng)用進行反編譯,分析出WebView組件的業(yè)務(wù)邏輯,從而進行攻擊。And,。id逆向工程指對于已經(jīng)發(fā)布的Android應(yīng)用程序,可以通過逆向工程得到其源代碼,從而分析其業(yè)務(wù)邏輯,通過逆向分析的方法可以分析程序是否存在安全隱患和漏洞。因此,為了防范針對WebView的惡意攻擊行為發(fā)生,需要防范對Android應(yīng)用進行逆向工程攻擊。
3.1 Android應(yīng)用程序加固方案
本文提出一種對Android應(yīng)用程序進行加固的解決方案,通過對Apk中的dex文件加密,防止對Android應(yīng)用程序的逆向分析。本加固方案思路為對dex文件加密并將加密后的dex文件與加密密鑰一起存儲在bin文件中,使用動態(tài)鏈接庫提供Apk運行時對dex文件解密和加載功能,使用殼文件替換原Apk中的smali文件,殼文件同時用于啟動動態(tài)鏈接庫。
方案中涉及到的名詞及解釋如下:
1) Apk:Android應(yīng)用程序安裝包。
2) dex文件:Android平臺上的可執(zhí)行文件。
3) bin文件:加密dex文件后生成的二進制文件。
4) manifest文件:Android應(yīng)用程序開發(fā)過程中的配置文件AndroidManifest.xml。
5) smali文件:對Apk反編譯后得到的文件。
6)殼文件:.。mah類型文件,解析manifest文件后生成,用于替換原smali文件。
7)動態(tài)鏈接庫:.so類型文件,用于提供解密和加載dex文件功能。
具體加固過程為:首先使用Apk解壓縮工具解壓縮Apk得到dex文件,對dex文件加密得加密后的dex文件,將加密后的dex文件與加密密鑰一起存入bin文件。再通過Apk反編譯工具對Apk進行反編譯,得到manifest文件和smali文件,解析manifest文件并生成殼文件替換原smali文件。最后將bin文件、殼文件和動態(tài)鏈接庫一起重打包并答名得到加固后的Apk。加固流程如圖6所示。
本加固方案具體步驟如下:
1)對加固前Apk解壓縮得原dex文件,加密dex文件,將加密后的dex文件與加密密鑰一起生成bin文件。
2)對加固前Apk反編譯,得到manifest文件和small文件,解析manifest文件并生成殼文件替換smali文件。
3)將動態(tài)鏈接庫與步驟1)、2)中得到的文件一起重打包得到加固后Apk。
對Apk加固后,加密了其中的dex文件,使Androicl逆向工程無法解析,達到保護程序源代碼的目的,在安裝運行Apk過程中,由動態(tài)鏈接庫實現(xiàn)對dex文件的解密和加載過程,使Apk可以正常使用。該方案為防范針對WebView組件攻擊提出,但并不限于防范針對WebView組件的攻擊,還可以為Android應(yīng)用程序提供防范其他基于Android逆向工程的攻擊。
3.2分析與評估
本方案通過Android應(yīng)用程序MyBrowser.apk檢驗加固方案效果,使用Android逆向工具Apktool和dex2j ar對加固前和加固后的應(yīng)用程序進行逆向分析,通過對MyBrowser.a(chǎn)pk中classes.dex文件反編譯得到j(luò)ar包,在jar包查看工具id-gui下杏看工程源碼,加固前如圖7所示。
從圖7可以看出Apk中提供了Javascriptlnterface接口函數(shù)browseExternaIURL,該接口實現(xiàn)打開URJ。功能,攻擊者通過在Web頁面中注入惡意的JavaScript代碼調(diào)用該接口可以實現(xiàn)打開釣魚網(wǎng)站等目的。經(jīng)過加固后得到MyBrowser.apksign.a(chǎn)pk,使用apktool反編譯并查看其源碼,結(jié)果如圖8和圖9所示。
可以看出使用Apktool無法對加固后的Apk進行正常反編譯,同樣無法查看到其源代碼,只能查看到殼文件提供的MyDemoActivity,實現(xiàn)了對其源代碼的隱藏。經(jīng)過加固技術(shù),Apk實現(xiàn)了對dex文件的加密,可以防止逆向工程分析。
4結(jié)束語
本文在歸納總結(jié)了Android平臺WebView組件特征的基礎(chǔ)上,分析了兩種基于WebView組件的攻擊模型,指出針對WebView組件攻擊的前提是通過Android逆向工程對Android應(yīng)用進行逆向分析,得到WebView組件接口。攻擊者根據(jù)WebView接口信息,篡改Web頁面中的JavaScript腳本調(diào)用該接口,實現(xiàn)攻擊應(yīng)用程序的目的。因此,我們提出了通過Android應(yīng)用程序加固技術(shù)來防止Android逆向工程,最終實現(xiàn)防范針對WebView組件的攻擊的目的。實際上,該加固技術(shù)不僅可以有效防范基于WebView組件的攻擊,還可以為Android應(yīng)用程序提供其他安全防護功能,在一定程度上提高了Android應(yīng)用程序的安全性,增加了惡意用戶對Android應(yīng)用程序的破解難度。
5摘要:
Android平臺提供了WebVicw組件用于加載和顯示W(wǎng)eb網(wǎng)頁。通過調(diào)用WebView提供的API,Android應(yīng)用程序可以與Web頁面進行交互操作。該交互過程包括允許Web頁面中的JavaScript代碼通過調(diào)用Android應(yīng)用中Java代碼訪問本地資源。在此過程中,攻擊者可以通過篡改Web頁面中的JavaScript腳本攻擊Android應(yīng)用程序。研究發(fā)現(xiàn),對Android應(yīng)用程序進行逆向工程攻擊得到WebView可調(diào)用接口,是此類攻擊的前提。因此,為了防止此類攻擊,文章提出了一種應(yīng)用加固方案防止Android逆向工程攻擊,通過隱藏WebView組件接口達到保護Android應(yīng)用程序的目的。該加固方案不僅可以防范針對WebView組件的攻擊也可以防范其他基于Android逆向工程的攻擊。