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