楊 頻, 冉 濤, 張 磊, 劉 易
(四川大學網絡空間安全學院, 成都 610064)
Android平臺憑借其開放性和生態圈的豐富多樣性,吸引了大量的開發者,也包括惡意攻擊者.由于現有的安卓系統沒有統一的入口,很多惡意軟件能夠輕易地繞過官方市場,進入普通用戶的設備.因此,針對惡意軟件的檢測一直是安全領域的一個重要研究.
大多數惡意軟件主要通過調用系統的特定API來獲取用戶信息.因此,目前識別惡意軟件的方法主要以API調用分析為主,劉凱等人[1]以API調用為基礎,提出一種基于圖卷積網絡的惡意代碼聚類檢測方法.趙翠镕等人[2]通過提取真機的API序列進行惡意代碼檢測從而避免反虛擬機檢測.Zhang等人[3]則是通過抽象API調用產生的行為語義來實現惡意代碼檢測.Jung等人[4]則是通過構建良性與惡性API列表來提高檢測準確度.還有其他檢測方法:例如,Utku等人[5]實現了一個基于權限的多層感知系統用于檢測惡意軟件.劉曉建等[6]、葛文麒等人[7]通過對應用數據流進行分析,提取特征值來識別應用行為.AppIntent[8]提出一種基于數據轉移來判斷應用程序是否可疑的方法.目前已有研究表明應用行為模式分析[9-10]比數據流分析更能揭示應用存在的惡意性.目前的研究都沒有考慮到設備狀態這一技術點,但是設備的實時狀態在反映應用行為惡意性這一點有更加明顯迅速的優勢.
為了彌補大多數基于API的行為分析研究與設備外部狀態割裂造成的研究不準確,本文提出一種基于傳感器的應用行為分析方法,該方法通過生成多元時序:設備外部狀態時序、應用API調用時序和當前系統GUI首屏時序,基于多元時序數據提出一種惡意行為識別算法來識別應用的惡意性.本文主要貢獻如下:(1) 設計并實現一種推算設備實時狀態的算法,能利用傳感器數據計算出當前設備的外部狀態;(2) 設計了一種Android平臺下高效準確的打樁方法,能通過該方法獲取API調用的時序數據;(3) 提出一種分析應用行為的三元時序模型,以及基于該模型數據的惡意行為識別算法,并通過典型案例驗證了模型的準確性.
相對于常規行為分析的靜態分析模塊用來對需要分析的APK進行打樁外,本文還有采集器模塊用來采集傳感器數據用于計算設備外部狀態、采集GUI首屏序列用于得出當前前臺運行的程序,以及分析模塊用于根據所得數據分析該應用是否惡意行為應用,得到如圖1的技術流程圖.
靜態分析模塊實現靜態分析和打樁,通過逆向APK得出smali文件,并對敏感的API調用點標記輸出應用調用該API的記錄,再重新打包APK.采集器模塊通過傳感器采集數據,并實時分析數據生成手機狀態時序得到手機的實時狀態.GUI首屏采集通過實時采集系統首屏APP生成交互時序,用來查看當前的前臺應用是否目標應用.惡意行為分析器,基于前面得到的數據生成多元時間序列模型,用于識別應用的惡意行為.

圖1 基于傳感器的應用識別技術流程
為了能夠計算出設備運行時的平放、翻轉、手持、靜止等外部狀態,本文設計了一種計算設備實時狀態的算法,該算法通過對加速度傳感器的數據進行分析,最后,計算出當前設備處于的狀態.例如當俯仰角角度為-180°左右,此時如果設備移動加速度小于1,通過上述算法就能推斷出此時設備處于反扣靜止狀態.所以需要對傳感器中的加速度傳感器數據進行采集.
Android系統定義的傳感器框架使用3軸坐標系來表示數據值.對于大多數傳感器,當設備處于默認屏幕方向時,會相對于設備屏幕來定義坐標系(如圖2).當設備處于默認屏幕方向時,X軸為水平方向右延伸,Y軸為垂直方向向上延伸,Z軸為垂直于屏幕向外延伸.
由于人體受脈搏跳動影響,在人處于靜止不動狀態時,捕獲到的移動加速度傳感器數值基本都是大于1.通過移動加速度的大小可以判斷此時設備是處于靜止的平面,還是在用戶身上.移動加速度公式如下式.
(1)
其中,speed是我們要求的移動加速度,dx、dy、dz分別為加速度沿著圖2坐標系的分量在采集時間t(單位:ms)間隔內的增量.

圖2 Android傳感器坐標系
設備狀態計算算法思路:首先根據加速度在各方向的絕對值大小確定設備當前主要操作,然后,根據對應增量來判斷具體情況.例如,當|z|>|y|&&|z|>|x|時,再根據z此時的值是否大于0來判斷設備是正面向上還是正面向下.
目前的靜態打樁主要是針對需要分析的應用進行逆向分析,然后得到二進制代碼插入可執行代碼段輸出自己需要的內容.由于Android應用還包含了大量的資源文件以及一些配置文件,所以在打樁之后會有一個打包過程,打包的同時會對包進行簽名.Android對于APK的簽名有著嚴格的驗證,當發現當前簽名包與官方簽名值不一致的時候,就會進行異常簽名處理.文獻[11]提出利用Android的“Master Key”漏洞將修改過后的Dex文件植入原Apk文件.鑒于本文的目的僅僅是為了分析應用的行為,所以這里直接采用第三方簽名,雖然不同于官方簽名,但是能保證APK正常運行,也能達到分析應用行為的目的.
圖3展示了針對APK靜態分析以及打樁的具體流程,通過逆向工具對需要追蹤的APK進行解包,反編譯生成Smali文件,分析Smali文件在需要進行追蹤的位置進行污點日志輸出,然后重新打包并簽名生成可執行APK.
為了得到APK對應的二進制運行文件,需要用分析工具將APK解碼,分析工具一般使用Apktool,它可以將APK解碼成資源文件形式,也能將解碼后的資源文件重新打包成APK.打樁器主要用于向Smali文件中添加Smali語法的Log方法,用于輸出對應API調用的日志記錄.

圖3 靜態分析與打樁流程圖
為更加高效地追蹤API,本文提出一種結合AndroidManifest配置文件的高效打樁方法.該方法通過提取配置文件中的Uses-Permission權限列表,然后通過分析權限列表針對性的打樁.相對于根據敏感API普遍撒網式的打樁,它根據實際使用權限對應的API進行打樁,更加高效明確.
打樁語法如下所示.
1) const-stringv0, "u8c03u7528u6444"
2) invoke-static{v1,v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
第一行定義了要輸出的日志內容.引號內的Unicode內容是日志里面輸出的內容,可以根據要記錄的內容自定義,放在寄存器v0里面.第二行執行android系統方法Log方法,用于打印日志信息.v1寄存器是tag用于查看日志時快速區分,一般是使用應用的包名.當需要記錄某個API調用的時候只需要在調用指令處,添加以上內容就能在調用該API的時候輸出對應的日志.
應用是否處在與用戶交互的狀態,對于判斷其行為是否具有惡意性是一個很重要的指標.GUI首屏數據能很好地反映應用是否處于與用戶交互狀態.為了方便后期分析應用行為,本文在采集GUI首屏數據的時候,加上了時間戳形成了時序序列.GUI首屏也就是應用棧棧頂APP,更細分就是棧頂APP的對應的Activity.對于移動應用來說,除了在跟用戶直接交互之外,其他時候都判定為后臺時刻.本文把首屏時序作為識別惡意行為的一個非常重要的參考因子,因為絕大多數惡意行為都是在后臺悄悄進行的.
Android5.0以前可以通過ActivityManager獲取位于棧頂的應用包名,但是5.0以后Google對此做了限制,只允許獲取桌面包名和自身應用的包名.因此本文通過UsageStatsManager來獲取棧頂應用包名.UsageStatsManager是使用情況記錄類,通過它可以獲取應用的使用情況,應用在前臺的時間、次數等.
惡意行為分析器主要通過分析傳入的首屏記錄、API調用記錄和設備狀態記錄來確定應用行為的惡意性.每條記錄在輸出的時候都會標記當前系統時間戳,這就使得不相關的數據能通過時間線合并成一個多元時間序列,作為最終分析的數據來源.
如圖4所示,本來互不相關的設備外部狀態、API調用記錄和GUI首屏通過時間相互之間聯系在一起有了交集E.

圖4 多元時序原理
2.4.1 應用行為惡意性分類 根據彭國軍等人[12]的研究表明,android惡意軟件特征主要體現在其惡意負載上,主要有特權提升、遠程控制、話費吸取、隱私竊取和自我保護這5類,具體如下.
1) 特權提升:通過利用android漏洞,突破android的權限機制和沙盒機制,允許惡意軟件進行特權操作;
2) 遠程控制:遠程控制信息回傳,更新本地惡意功能等;
3) 話費吸取:通過手機的短信功能,偷偷利用短信功能定制服務并從中牟利;
4) 隱私竊取:獲取用戶的各種隱私信息,例如通訊錄,定位,通話錄音,背景錄音,拍照,通話記錄等,這些信息多用于進行進一步攻擊的前奏;
5) 自我保護:Android惡意軟件開始采用商業級代碼保護技術,造成自動化靜態分析失敗,人工反匯編反編譯困難,啟發式檢測、已知特征檢測等難度加大.
2.4.2 惡意行為識別 為了能夠更加準確地識別應用行為的惡意性,在推斷之前需要進行時序數據的過濾.根據時序數據我們可以分為Wa:API調用時序,Wg: GUI時序,Wp:設備狀態時序.最終需要得到We:應用事件時序.We應該是3個序列的交集:
We=Wa∩Wg∩Wp
(2)
首先,我們根據對應應用的包名在Wa里面獲取應用的API調用序列,過濾掉噪聲數據;然后,根據每次API調用記錄的時間,在Wg和Wp里面過濾掉其他的噪聲數據;最后,就得到了We用于識別應用行為的惡意性.
在進行應用行為識別的時候一般有以下兩個著手點,一種是根據需要監控的API著手,然后通過We得到的數據并結合設備的行為推斷當前應用行為的惡意性.一種是根據設備行為,先找出最能辨別出應用高惡意性的時段(這里是靜止狀態),然后根據這個時間段在We里面查找應用是否做出了高敏感的API調用.兩種方法各有優點,可以根據實際需求在分析的過程中靈活選擇.
本文實驗環境:紅米note5a,Android7.0,采集應用授予傳感器權限,不限制后臺用電,未root.不限制后臺用電是防止采集應用被系統回收,不能正常采集數據.

(a)完全靜止桌面
為了評估更加的準確,本文首先驗證了人手持設備靠桌靜止下的設備加速度和設備放在靜止的桌面上的設備加速度如圖5,由于脈搏跳動的影響,人始終都在振動,所以手持設備如圖5(b)就算人完全保持靜止狀態,設備得到的加速度還是要大于設備處于完全靜止的桌面圖5(a).然后通過典型案例驗證了模型對惡意應用識別的準確性,以及一個黑盒測試驗證模型的識別能力.
為驗證本文模型識別的準確性,本文從Drebin[13]惡意樣本庫提取出了Установщик,在靜態打樁階段分析其主要權限請求里面包括讀取聯系人,發短信等敏感API操作.從而判斷其惡意行為可能是利用短信進行的扣費行為,所以在驗證本文提出方法的可行性時,主要是針對短信調用API打樁,然后在經過一段時間的日志抓取之后,從中得到圖6的行為記錄,圖中各頂點與交點代表右邊對應的事件,其中設備明顯處于閑置狀態,手機屏幕向下翻轉,首屏APP是小米自帶的桌面管理器.然后,能明顯看到Установщик發送了一條短信.以上證明本文系統能夠準確地識別應用的惡意行為.
接著本文以聚會相片一款偽裝成相片管理的惡意應用作為行為分析對象,通過本文提出的基于權限高效打樁方法,對聚會相片APP進行打樁并運行采集行為,發現這款應用安裝之后桌面并不顯示其圖標,在其運行過程中采集到其行為如圖7,發現該應用在非人為操作情況下會向固定手機號碼和郵箱發送信息對應圖最高頂點和次高頂點,根據該異常行為,最后,調試發現該應用在手機接收短信之后攔截短信,并發送到其指定郵箱和手機.以上實驗證明本文提出的方法能有效地識別惡意行為,方便安全人員調試.
最后,為驗證模型能識別未知惡意行為,本文采用黑盒測試的方法來驗證識別未知行為的能力,在不知道樣本具體惡意行為的前提下,對樣本進行行為分析,然后得到圖8所示行為圖,根據行為圖我們得到以下分析:傳感器數據表明此時設備處于正面向下靜止狀態,17點27分4秒應用調用了攝像頭,如圖8中次高頂點顯示,然后幾秒之后應用產生了一次網絡請求,圖8最高頂點顯示,而且這些操作都是在后臺完成,圖中首屏顯示為小米桌面管理.根據該行分析為有理由認為該樣本具有惡意性,因為在無人操作的情況下,應用在后臺自動拍照,并進行了網絡請求,其行為包含惡意行為中的第2條遠程控制和第4條隱私竊取.

圖6 Установщик行為分析圖

圖7 聚會相片行為分析圖

圖8 黑盒測試行為分析圖
為了更直觀地對比本方法的功能,本文選用了Mobile-Security-Framework(MobSF)[14]一個使用python實現的惡意樣本分析平臺,選擇其主要原因是MobSF是基于經典開源分析平臺Androguard[15]實現,并在其基礎上增加了新版本系統的支持,以及一些優化.選擇的測試樣本是從Drebin惡意樣本庫中選取的一款短信類惡意軟件Установщик.通過MobSF分析該樣本得到的結果圖9所示,以下主要展示了其基礎信息、安全分析以及惡意性分析模塊的截圖.通過分析結果我們能看到,MobSF會對APP有一個比較全面的分析,結果會羅列出APP的基礎信息和各種組件數量,以及用到的一些權限,并針對一些高風險的權限標記dangerous,然后在安全分析以及惡意分析里面僅僅給出了可能存在高風險的操作,并不能捕獲到具體的惡意行為.MobSF并未像本文提出的基于傳感器的應用行為識別那樣,能直接捕獲到應用的惡意行為如圖6,并且本文提出的方法捕獲到的行為能作為有力的取證分析切入點或者證據.兩者主要對比如表1所示.

圖9 MobSF下Установщик分析結果

表1 本文方案與MobSF對比
本文針對應用惡意行為識別提出一種基于傳感器的應用行為識別方法.針對目前API識別都忽略的設備狀態問題,設計了一個基于傳感器的設備狀態時序、API使用時序和GUI首屏時序的三元時序模型,以及一個基于該模型的惡意行為識別器,用于識別應用行為的惡意性.通過典型案例驗證了模型對惡意應用識別的準確性,利用黑盒測試驗證模型的識別能力,從而證明該方法的有效性,最后通過一個對比實驗,演示了本文方法相對于現有方法更加直觀更加高效.