馬建華,劉劍飛,程 濤
(1.河北工業(yè)大學(xué)信息工程學(xué)院,天津 300401;2.北京聯(lián)想軟件有限公司,北京 100102)
Android是Google開發(fā)的基于Linux的開源操作系統(tǒng)平臺,近年來得到了迅猛的發(fā)展。Android操作系統(tǒng)也由手機移植到平板PC和智能電視中。而隨著Android的不斷發(fā)展,針對Android平臺的惡意軟件層出不窮,除智能手機外,搭載Android系統(tǒng)的平板PC、智能電視、機頂盒等設(shè)備,也面臨著嚴重的安全隱患。根據(jù)殺毒廠商McAfee發(fā)布的2011第三季度安全威脅報告[1],Android系統(tǒng)已成為惡意軟件作者最關(guān)注的操作系統(tǒng)。目前惡意軟件的行為包括惡意扣費、系統(tǒng)破壞、隱私竊取等,最主要的行為還是惡意吸費、偷跑流量。怎樣做好流量監(jiān)控,拒絕吸費,成為當(dāng)前亟待解決的問題。而目前流量監(jiān)控軟件大多是基于應(yīng)用層的研究[2],對于遏制流量損失效果并不明顯。文獻[3]提出了應(yīng)用軟件安裝前漏洞檢測與運行時IPC監(jiān)測兩種方法,但只是針對應(yīng)用層和中間層的修改,不能屏蔽惡意軟件的間接訪問。文獻[4]提出了一種加權(quán)行為特征的安全監(jiān)控策略,能夠有效攔截病毒,遏制吸費現(xiàn)象,但對一些應(yīng)用可能產(chǎn)生誤判,攔截正常應(yīng)用的行為。
本文針對Android流量監(jiān)控系統(tǒng)的安全缺陷,在協(xié)議層提出了一種基于白名單的流量監(jiān)控改進策略,該策略能夠有效遏制應(yīng)用偷跑流量、惡意吸費的現(xiàn)象。
Android平臺下要獲取應(yīng)用程序流量信息,主要通過讀取Linux內(nèi)核的/proc/self/net/dev文件,該文件保存了從開機到現(xiàn)在的所有網(wǎng)絡(luò)流量信息。Android2.3開始把數(shù)據(jù)流量監(jiān)控封裝到TrafficStats類中,可以直接調(diào)用該類中的方法來獲取流量統(tǒng)計。
Android4.0完善了流量監(jiān)控系統(tǒng)的設(shè)計,流量監(jiān)控系統(tǒng)捆綁在Android操作系統(tǒng)中,這樣就比以前三方的流量監(jiān)控軟件有著先天的優(yōu)勢,它能獲取更多的系統(tǒng)信息,制定更完善的安全策略。并且3G/WiFi流量分別監(jiān)控,每個應(yīng)用的前臺數(shù)據(jù)和后臺數(shù)據(jù)單獨對待,還設(shè)計了流量警報線[5]。
圖1是Android4.0的流量監(jiān)控框圖,其中DataUsage-Summary是對人機接口的封裝,它需要解決的問題是用戶需要監(jiān)控哪些內(nèi)容,用戶需要統(tǒng)計哪些數(shù)據(jù)。圖中虛線部分是Android framework網(wǎng)絡(luò)管理的核心,它主要封裝的是Android網(wǎng)絡(luò)管理的策略,本文只討論流量監(jiān)控這一部分。Trafficstats類是一個工具類,在Android中要獲得流量相關(guān)的數(shù)據(jù),需要調(diào)用這個類來獲取,而android_net_Traffic-Stats.cpp則是Trafficstats的JNI實現(xiàn),在這個文件中,利用Linux的/sys接口和/proc接口來獲取網(wǎng)絡(luò)的流量信息。Android的核心是Linux,Android進行層層封裝,層層包裹,最后提供監(jiān)控手段的還是Linux kernel。
圖1 Android4.0流量監(jiān)控框圖
Google為Android平臺配備了多個安全機制,不僅有Linux機制,還有Android特有的安全機制:應(yīng)用程序權(quán)限,組件包裝和數(shù)字簽名[6-7]。Android系統(tǒng)通過android_net_TrafficStats.cpp這個類來判斷系統(tǒng)訪問網(wǎng)絡(luò)是通過WiFi還是3G。它定義了一系列的網(wǎng)絡(luò)接口,認為通過這些網(wǎng)絡(luò)接口傳上來的數(shù)據(jù)都是2G/3G的數(shù)據(jù),而這之外的網(wǎng)絡(luò)接口都是WiFi接口。代碼如下:
在目前的Android系統(tǒng)中,默認情況下所有的應(yīng)用都可以自己申請訪問網(wǎng)絡(luò)的權(quán)限,用戶沒有太多的方法去偵測哪些應(yīng)用在聯(lián)網(wǎng)。另外,在實測中發(fā)現(xiàn),Android4.0在網(wǎng)絡(luò)接口這一層實施監(jiān)控,一些惡意軟件可以很簡單地繞開這種監(jiān)控。惡意軟件通常通過下面的手段來攻擊Android的流量監(jiān)控系統(tǒng):
1)建立網(wǎng)絡(luò)接口別名。Android系統(tǒng)中的文件(包括應(yīng)用程序和系統(tǒng)文件)訪問控制主要基于Linux權(quán)限機制。通常Android中的系統(tǒng)文件的所有者為system root用戶,應(yīng)用程序文件的所有者為該應(yīng)用程序?qū)俚挠脩?。由于所屬用戶不同,普通?yīng)用程序無法訪問其他應(yīng)用程序擁有的文件。但Android的權(quán)限系統(tǒng)并不可靠,攻擊者可以通過root工具在Android平臺獲得Linux的控制權(quán)。
前面分析過android_net_TrafficStats.cpp文件是Android流量監(jiān)控的核心,惡意軟件作者獲得root權(quán)限后用ifconfig工具給ppp建立別名,如果這時再用ppp0來進行網(wǎng)絡(luò)通信,那么看起來用的是WiFi流量,事實上損耗的卻是3G流量。
2)重新編譯ppp驅(qū)動。ppp是一個與硬件無關(guān)的協(xié)議,而且ppp的實現(xiàn)是開源的,攻擊者完全可以重新編譯一個ppp.ko的驅(qū)動來代替原始Android系統(tǒng)中那個驅(qū)動,從而達到改寫ppp驅(qū)動的目的[8]。3G的數(shù)據(jù)業(yè)務(wù)全部要通過這個ppp協(xié)議層來傳到上層供TCP/IP協(xié)議棧來使用,如果惡意軟件做到這一步,那么系統(tǒng)的3G數(shù)據(jù)的操控權(quán)就全部交給了惡意軟件,即使android_net_TrafficStats.cpp設(shè)計得再嚴密,也無法監(jiān)控到惡意ppp驅(qū)動層的惡意行為。
針對以上安全缺陷,本文接下來在Android4.0系統(tǒng)的基礎(chǔ)上提出了一種在協(xié)議層實施流量監(jiān)控的策略,使得所有應(yīng)用的聯(lián)網(wǎng)訪問都是在用戶授權(quán)的情況下,有效攔截了惡意軟件后臺偷跑流量的行為。
在TCP和UDP的報文結(jié)構(gòu)中,源端口號和目的端口號是最重要的標(biāo)識字段,任何一個應(yīng)用收到和發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)都包含這兩個字段,以此為突破點來設(shè)計流量監(jiān)控策略,使系統(tǒng)在TCP/IP協(xié)議層就能對所有數(shù)據(jù)進行甄別,這種方式無疑是最直接和有效的方式。
Android系統(tǒng)中網(wǎng)絡(luò)狀態(tài)的每條邏輯通路都是由一對IP地址和一對端口號組成。在TCP/IP協(xié)議中,IP地址被綁定到網(wǎng)絡(luò)接口,端口號則被綁定到進程,因此要解決以下問題:1)建立一個白名單數(shù)據(jù)庫,存放允許聯(lián)網(wǎng)的應(yīng)用和進程,利用端口號來索引進程號和應(yīng)用;2)找到一種能通過白名單控制網(wǎng)絡(luò)連接的方法。
終端和服務(wù)器利用socket API連接的標(biāo)準(zhǔn)流程如圖2所示。在整個聯(lián)網(wǎng)建立邏輯鏈路的過程中,有一個節(jié)點就是connect/accept API,把白名單策略放在connect這個環(huán)節(jié)來實現(xiàn),讓它能根據(jù)給出的端口號來進行聯(lián)網(wǎng),從而控制整個系統(tǒng)中所有的應(yīng)用的聯(lián)網(wǎng)行為。
圖2 服務(wù)器/客戶機聯(lián)接流程圖
Connect是一個內(nèi)核API,但并不表示它不能與用戶層通信。改變的是AF_INET(IPv4)和AF_INET6(IPv6)這兩個域的connect API的形為,而Unix域(AF_LOCAL)則還是保留原流程,這樣在實現(xiàn)白名單策略的時候就不會影響進程間的通信。由于在邏輯鏈路建立的過程中,connect的時間復(fù)雜度是O(1),所以本算法的時間復(fù)雜度也是O(1),而且這種O(1)的影響只有建立鏈路階段起作用,不會數(shù)據(jù)傳輸階段的吞吐量。
根據(jù)Android移動終端對流量監(jiān)控的要求,當(dāng)為終端處于WiFi網(wǎng)絡(luò)時,所有的connect請求會按標(biāo)準(zhǔn)流程來完成;當(dāng)為3G網(wǎng)絡(luò)時,使終端有選擇性的聯(lián)網(wǎng)(應(yīng)用白名單策略)。
添加白名單策略后的聯(lián)網(wǎng)流程如圖3所示。修改的是AF_INET(IPv4),AF_INET6(IPv6)這兩個域的connect API的行為,當(dāng)上層有connect請求時,內(nèi)核會用AF_LOCKAL域的UNIX進程間通信來向用戶態(tài)發(fā)出消息,查詢端口號數(shù)據(jù)庫,詢問這個端口號是否是用戶充許聯(lián)網(wǎng)的端口號,如果是,則connect操作成功;如果不是,則彈出UI詢問用戶是否允許這個端口號(應(yīng)用)聯(lián)網(wǎng),用戶確認后conncet操作才能繼續(xù)完成,否則禁止connect操作,使用這個端口號的進程也就無法聯(lián)網(wǎng)了。系統(tǒng)可以提供多種多樣的工具來供用戶定制白名單數(shù)據(jù)庫,為各種用戶群制定不同的策略,比如微博迷、游戲迷等。
圖3 白名單流程圖
此白名單策略的優(yōu)點在于系統(tǒng)任何一個應(yīng)用的聯(lián)網(wǎng)操作都必須在用戶知情并授權(quán)的情況下完成,也就是用戶會給內(nèi)核一份可以聯(lián)網(wǎng)的白名單,這份名單之外的進程都無法聯(lián)網(wǎng),這樣就能避免一些吸費軟件在后臺聯(lián)網(wǎng)偷偷吸走流量。并且改進是在內(nèi)核中加入控制操作,破解更困難,控制更為有效。
在實驗中,以高通msm8660芯片為平臺,將改進后的系統(tǒng)分別和 Android2.3,Android3.0 和 Android4.0 系統(tǒng)作對比。用戶將各系統(tǒng)的流量監(jiān)控功能設(shè)置為最優(yōu),在用戶不主動上網(wǎng)的情況下,來驗證實施白名單后的改進流量監(jiān)控系統(tǒng)對惡意軟件吸流量的遏制效果。
通過互聯(lián)網(wǎng)采集100個APK樣本。圖4所示是安裝了不同數(shù)目的相同APK樣本后,各個Android系統(tǒng)的3G流量損耗圖,時間均為24 h??梢钥吹礁倪M后的系統(tǒng)比安裝相同數(shù)目APK樣本的其他系統(tǒng)對遏制流量損耗有更明顯的效果。
圖4 不同數(shù)目測試樣本的流量損耗圖
圖5所示為不同測試時長內(nèi),各Android系統(tǒng)的3G流量損耗圖,均安裝100個相同APK樣本。在相同的時間內(nèi)改進后的系統(tǒng)具有更明顯的遏制流量損耗的效果。
圖5 不同測試時長的流量損耗圖
從圖4和圖5可以看出,Android2.3和Android3.0的防御能力很低,流量損失嚴重,Android4.0集成了流量監(jiān)控,在短時間內(nèi)與APK安裝數(shù)目較少時流量控制效果明顯,但一旦測試時長增長,APK樣本數(shù)量增加時流量監(jiān)控的功能明顯降低,這主要是因為Android4.0的流量監(jiān)控在此時管理成本迅續(xù)上升,無法管理所有的惡意APK,少數(shù)APK甚至攻破了原生的流量監(jiān)控系統(tǒng)。而相比之下,加入白名單策略后的Android流量監(jiān)控系統(tǒng)遏制流量損耗效果明顯。
隨著Android系統(tǒng)的迅猛發(fā)展,惡意吸費軟件偷跑流量問題日益嚴重。本文提出了一種在協(xié)議層實施流量監(jiān)控的白名單策略,使得任何一個應(yīng)用的聯(lián)網(wǎng)必須在用戶授權(quán)的情況下完成。實驗結(jié)果表明實施該策略后的改進流量監(jiān)控系統(tǒng)有效地增強了Android系統(tǒng)的安全性,有明顯的遏制流量損耗的效果,目前已在平板PC產(chǎn)品中有良好的應(yīng)用。
[1]McAfee Labs.McAfee Q32011 Threats Report Shows 2011 on Target to Be the Busiest in Mobile Malware History[EB/OL].[2012-06-20].http://cn.reuters.com/article/pressRelease/idUS117347+21-Nov-2011+BW20111121?symbol=INTC.O.
[2]黃婧,張林,季刊,等.基于Android平臺的GPRS流量統(tǒng)計系統(tǒng)[J].計算機系統(tǒng)應(yīng)用,2011,20(12):141-143.
[3]沈才樑,唐科萍,俞立峰,等.Android權(quán)限提升漏洞攻擊的檢測[J].電信科學(xué),2012(5):115-119.
[4]張毅,何遠,唐紅,等.加權(quán)行為特征的智能手機安全監(jiān)控研究[J].電視技術(shù),2011,35(1):122-124.
[5]金泰延,宋亨周,樸知勛,等.Android框架揭秘[M].北京:人民郵電出版社,2012.
[6]ENCK W,ONGTANG M,MCDANIEL P.Understanding Android security[J].IEEE Security & Privacy,2009,7(1):53-54.
[7]SHABTAI A,F(xiàn)LEDEK Y,KANONOV U,et al.Google Android:a comprehensive security assessment[J].IEEE Security & Privacy,2010:35-38.
[8]NEMETH E,SNYDER G.UNIX and Linux system administration handbook[M].[S.l.]:Prentice Hall,2010.