耿浩天
(四川大學網(wǎng)絡(luò)空間安全學院,成都 610065)
隨著各種移動設(shè)備技術(shù)的發(fā)展,智能手機已經(jīng)越來越成為人們生活不可或缺的一部分。其中,Android 平臺由于其開放性和生態(tài)圈的多樣性,占據(jù)了智能手機市場上的最大份額。然而,開放性在吸引用戶和開發(fā)者的同時也吸引著惡意攻擊者。根據(jù)奇安信平臺的一份報告,僅2020年奇安信威脅情報中心就累計截獲Android 平臺新增惡意程序樣本230 萬個,平均每天截獲新增惡意程序樣本6301個。
為了減輕Android 惡意軟件的威脅,基于動靜態(tài)分析結(jié)合的自動化檢測技術(shù)成為了主要解決方案。傳統(tǒng)的靜態(tài)分析技術(shù)應(yīng)對復雜的代碼邏輯時效率有限,同時也易受到混淆加殼等技術(shù)的影響。而動態(tài)分析則可以跳過代碼邏輯,捕捉代碼運行時的惡意行為。動靜態(tài)結(jié)合的自動化檢測平臺極大提高了惡意軟件檢測的效率和準確性。
然而,攻擊者也采用了許多手段試圖規(guī)避自動化檢測平臺的動態(tài)分析。在早期,由于自動化分析平臺大多部署在原生Android 模擬器上,攻擊者可以利用大量的模擬器檢測技術(shù)來規(guī)避動態(tài)分析。這些技術(shù)通常包括運行時對環(huán)境進行指紋識別,以及尋找可區(qū)分物理設(shè)備與模擬器的某些特征。對此,安全分析人員提出了相應(yīng)對策來破壞模擬器檢測的依據(jù),包括在模擬器上做更真實的仿真,以及直接使用物理設(shè)備。這些對策可以有效地限制反模擬器類型的動態(tài)分析規(guī)避技術(shù)。當然,動態(tài)分析和規(guī)避之間的對抗仍在繼續(xù)進行。Diao等提出了一種抗交互的規(guī)避技術(shù),成功規(guī)避了多個分析平臺的動態(tài)分析;Costamagna 等提出了一種基于沙箱特有指紋的規(guī)避方案,對特定分析平臺有很好的規(guī)避效果;梁光輝等提出了一種基于代碼進化的沙箱規(guī)避檢測技術(shù),可以有效地檢測出惡意軟件是否有動態(tài)分析規(guī)避行為。
在本文中,我們提出了一種基于操作時設(shè)備狀態(tài)的變化信息來規(guī)避動態(tài)分析的方法。該方法通過記錄Android 軟件在操作(如點擊、滑動等)時加速度傳感器數(shù)據(jù)變化情況,使用時間序列分析中的平穩(wěn)性檢驗來處理傳感器數(shù)據(jù),判斷當前軟件操作行為是否來自真實用戶,進而實現(xiàn)動態(tài)分析的規(guī)避。與已有的規(guī)避方案相比,該方法不依賴運行的設(shè)備,可以對抗非常精細的仿真方案,對基于模擬器或物理設(shè)備組成的分析平臺均有良好的效果。我們使用該方案編寫了測試樣本,對多個自動化分析平臺進行了測試,初步結(jié)果可以證明:幾乎所有測試的平臺都不能抵御我們的規(guī)避方案。
本文的主要貢獻概括如下:
(1)提出了一種規(guī)避Android 自動化分析平臺的動態(tài)分析新方法:基于操作時設(shè)備狀態(tài)的變化。該方法從新的角度出發(fā),簡單易實現(xiàn)且效果較好。
(2)設(shè)計了測試樣本,并在常用的一些Android 自動化分析平臺上進行了測試。實驗結(jié)果證明該方法非常有效。
靜態(tài)分析工具往往通過檢查程序的源代碼或二進制代碼以識別惡意負載,具有分析成本較低、分析速度較快等優(yōu)勢,但是當惡意軟件使用混淆或打包技術(shù)時,往往會使靜態(tài)分析的準確度大大降低。如許博文的工作所示,常見的Android 混淆技術(shù)就可以使惡意軟件以高成功率逃脫靜態(tài)分析工具。而動態(tài)分析框架通過執(zhí)行程序來捕獲運行時的惡意行為,這使得動態(tài)分析對代碼級規(guī)避技術(shù)有較強的抵抗性,面對程序邏輯復雜的惡意軟件也有很好的效果。
Android 動態(tài)分析框架通常搭建在模擬器或真機上,以便運行軟件對惡意行為進行捕獲。由于Android 應(yīng)用程序的行為通常由用戶或系統(tǒng)的輸入來啟動,因此動態(tài)分析框架的有效性高度依賴于輸入生成的策略。早期一些動態(tài)分析框架使用谷歌公司提供的fuzzrer Monkey工具,它可以生成偽隨機的用戶事件流(如點擊觸摸等)及系統(tǒng)級事件(如短信)。但是此種方式的事件輸入對程序行為的觸發(fā)效果一般。因此其他一些分析平臺采用谷歌公司開發(fā)的MonkeyRunner 探索工具,使得測試平臺能以預(yù)定義的事件序列與應(yīng)用程序交互,提升了代碼覆蓋率。另外,在自動化UI 交互過程中,如果完全不考慮正在分析的軟件UI 的獨特性,可能會觸發(fā)大量無效操作。為了解決這個問題,Smart-Droid、AppsPlayground、CuriousDroid分別提出了不同的方法來提高UI 交互的自動能力。
1.2.1 模擬器檢測技術(shù)及其防御措施
大多數(shù)早期Android 自動化分析平臺是基于模擬器搭建的,如cuckoodroid 等。這樣做的好處是沙箱部署起來簡單經(jīng)濟,且在模擬器上惡意軟件的行為更容易控制。然而,簡單地使用模擬器會使攻擊者利用模擬器檢測技術(shù)很容易就可以繞過沙箱的動態(tài)分析。Vidas 等總結(jié)了一些常見的通過模擬器檢測的手段繞過Android沙箱的技術(shù),如傳感器、藍牙等硬件信息,以及對較復雜指令的處理速度等。Gajrani 等對部分模擬器檢測的技術(shù)進行了進一步整理和細化,總結(jié)了多處安卓模擬器與真機可能存在的區(qū)別,并對多個分析平臺進行了測試。此外,由于Android 模擬器檢測的需求不僅在于惡意軟件對動態(tài)分析的規(guī)避,在諸如手機游戲多開、外設(shè)檢測部分也有著相當程度的需要,因此對模擬器檢測的研究也一直在持續(xù)中。有研究者對模擬器檢測的方案做了集成樣本app,可以直接用來檢測各個模擬器的反檢測能力,且仍在不斷更新。
當然,對于模擬器檢測的種種方案,研究者也找到了許多對策來抵消或減輕這些方案的效果。Gajrani 等對模擬器檢測常用的檢測特征進行了修改,或使用hook 技術(shù)返回給軟件虛擬的更貼近真實情況的值。Leguesse 等提出了一種沙箱強化的方案,實現(xiàn)了名為Androneo的系統(tǒng),可以識別Android 惡意軟件中的沙箱檢測功能,并更改和禁用其功能,以便沙箱可順利檢測惡意行為。市面上,夜神、逍遙等模擬器也已經(jīng)對絕大多數(shù)檢測特征進行了仿真,并隨著檢測技術(shù)的發(fā)展而不斷補充。Kumar 等部署了一系列基于傳感器、設(shè)備狀態(tài)及系統(tǒng)信息的Android 模擬環(huán)境,尤其在傳感器數(shù)據(jù)方面,收集了真實用戶使用手機時傳感器的數(shù)據(jù)變化情況,整合為模擬數(shù)據(jù)注入模擬環(huán)境中。該文章的工作可以解決絕大部分模擬器檢測技術(shù)的防御問題。
另一方面,使用物理設(shè)備搭建分析框架可以從根本上解決模擬器檢測問題。例如,Vidas等部署了名為A5 的混合檢測系統(tǒng),其中結(jié)合了Android設(shè)備的虛擬和物理環(huán)境。Mutti等建立了名為BareDroid 的分析系統(tǒng),該系統(tǒng)完全建立在真實的Android 設(shè)備上,并使用了快速恢復等技術(shù)來降低性能成本。
由于以上反檢測技術(shù)的存在,基于模擬器檢測的動態(tài)分析規(guī)避方案已經(jīng)很難再取得穩(wěn)定的效果。因此,惡意軟件作者也將目光轉(zhuǎn)移到了其他層面的技術(shù)上。
1.2.2 其他規(guī)避技術(shù)
針對自動化分析框架對軟件行為觸發(fā)的特點,Diao等提出了一種通過交互檢測的方式來規(guī)避分析的方案。簡單地說,他們通過檢測注入事件的主體是否為人類用戶來決定是否觸發(fā)惡意行為。其研究顯示,通過檢測某些用戶事件帶來的附加數(shù)據(jù)的值,或通過設(shè)置UI陷阱(例如,一個透明的按鈕)來檢驗事件輸入的來源,均可以達到判斷軟件當下運行環(huán)境的目的。文中對多個檢測平臺進行了測試,在所有的平臺中都可以成功規(guī)避分析。
Costamagna 等則提出了新的規(guī)避分析方式,他們通過沙箱指紋進行分析。這里的沙箱指紋指的是某分析平臺所特有的信息。例如,某沙箱搭載在真實設(shè)備上,同時設(shè)置了如通訊錄、短信、常見應(yīng)用安裝等信息來模擬真實環(huán)境,但只要該沙箱搭載過程中這些信息中存在明顯非真實用戶產(chǎn)生的信息(如聯(lián)系人名稱為張三、李四)或為固定值或非完全隨機,攻擊者即可發(fā)送大量探測應(yīng)用程序來提取該沙箱指紋并為該沙箱構(gòu)建通用規(guī)避方案。文章對多個沙箱進行了實驗,結(jié)果證實大多數(shù)沙箱都存在被此種方案攻擊的缺陷。
大部分當下使用的Android 分析平臺已經(jīng)可以避免被模擬器檢測的方式規(guī)避動態(tài)分析?;诮换サ臋z測效果雖然較好,但實現(xiàn)方案較為復雜,且有一定的失敗率。而基于沙箱指紋的規(guī)避技術(shù)可以被完全隨機生成信息的方式有效防御。
本文提出的動態(tài)分析規(guī)避方案主要基于操作時設(shè)備狀態(tài)的變化。首先通過收集操作設(shè)備時線性加速度傳感器數(shù)據(jù),重點關(guān)注在操作動作較大(如點擊一個按鈕)時的一個較短時間段內(nèi)傳感器數(shù)據(jù)變化情況,通過對該時間段內(nèi)傳感器數(shù)據(jù)做平穩(wěn)性檢驗來判斷操作是否來自于真實用戶,再決定惡意行為的觸發(fā)與否。與上述方法相比,本文提出的方案不依賴運行設(shè)備,容易實現(xiàn)且成功率較高。
為了可以準確地通過傳感器數(shù)據(jù)判斷設(shè)備狀態(tài),本文引入了應(yīng)用統(tǒng)計學中的時間序列分析的部分內(nèi)容。時間序列(或稱動態(tài)數(shù)列)是指將同一統(tǒng)計指標的數(shù)值按其發(fā)生的時間先后順序排列而成的數(shù)列。時間序列分析的主要目的是根據(jù)已有的歷史數(shù)據(jù)對未來進行預(yù)測。生活中時間序列的例子很多,如一個公司幾年中每月的繳稅額,一個地區(qū)每日的平均氣溫等。常用時間序列模型有自回歸(AR)模型、滑動平均(MA)模型、自回歸滑動平均(ARMA)模型等。
為了使用時間序列來有效預(yù)測未來一段時間數(shù)據(jù)變化的趨勢,首先要對時間序列進行平穩(wěn)性檢驗。所謂時間序列平穩(wěn),是指該序列基本不存在某種變化趨勢,序列中的觀察值基本在某個固定的水平上波動,在不同時間波動程度可能不同,但并不存在某種規(guī)律,其波動可以看作是隨機的。圖1展示了某平穩(wěn)時間序列和某不平穩(wěn)時間序列的數(shù)據(jù)圖形。容易看出,圖中下方曲線在后半段有明顯的遞增趨勢,故可簡單判斷其時間序列不平穩(wěn)。
圖1 不同時間序列對比
平穩(wěn)性檢驗的一個直觀方法是觀察法。然而,并非所有時間序列的圖像都如上圖一般容易區(qū)分。嚴格的統(tǒng)計學檢驗方法是單位根檢驗法。單位根檢驗方式有ADF 檢驗、PP 檢驗、NP檢驗等。最常用的是ADF 檢驗。在ADF 檢驗中,如果存在單位根,則序列不平穩(wěn)。因此,ADF 檢驗的H0 假設(shè)即為存在單位根。使用ADF檢驗可以計算出時間序列的顯著性檢驗統(tǒng)計量(通常稱為p-value),如果得到p-value值小于三個置信度(10%,5%,1%),則對應(yīng)有(90%,95%,99%)的把握來拒絕原假設(shè)。
Android 系統(tǒng)提供了多種傳感器供應(yīng)用層調(diào)用。其中,加速度傳感器(G-sensor)、重力傳感器(GV-sensor)和線性加速度傳感器(LA-sensor)共用一套坐標系統(tǒng),如圖2所示(三維坐標圖)。
圖2 傳感器坐標系
當設(shè)備處于圖示屏幕方向時,軸為水平坐標軸,軸為豎直坐標軸,軸為垂直于屏幕方向的坐標軸。加速度傳感器返回,,三軸加速度值,包含重力影響;重力傳感器輸出重力數(shù)據(jù);線性加速度傳感器反映加速度傳感器減去重力影響獲取的數(shù)據(jù)。因此,當設(shè)備靜止時,線性加速度傳感器的返回值近似為0。為獲得直觀準確的數(shù)據(jù),本文采取線性加速度傳感器進行采樣。
在Android 系統(tǒng)中調(diào)用傳感器十分方便,只需先給Activity實現(xiàn)SensorEventListener 接口,以便于后續(xù)持續(xù)監(jiān)聽數(shù)據(jù),然后創(chuàng)建SensorManager對象并為它注冊傳感器監(jiān)聽器即可使用。同時,Android 系統(tǒng)規(guī)定了四種采樣頻率,由慢至快依 次 為SENSOR_DELAY_NOMAL、 SENSOR_DELAY_UI、SENSOR_DELAY_GAME、SENSOR_DELAY_FASTEST。為保證采集數(shù)據(jù)的數(shù)量能夠滿足后文統(tǒng)計算法的要求,本文采用采樣速度適中的SENSOR_DELAY_UI 級別,約每秒采樣20次。
我們注意到,無論是基于真實設(shè)備還是基于模擬器的自動化分析框架,其對軟件的輸入方式都與真實用戶與軟件的交互方式有一處不同:真實用戶在執(zhí)行點擊或滑動等操作時往往會使設(shè)備產(chǎn)生一段較大程度的晃動,而自動化分析框架的傳感器或物理設(shè)備均是處于靜態(tài),且在執(zhí)行操作時也不會帶來設(shè)備的物理狀態(tài)變化。以點擊一枚位置靠上的按鈕為例(如圖3)。
圖3 點擊示例
圖4顯示了在用戶持握手機2 秒左右時間內(nèi)共40個軸線性加速度傳感器數(shù)據(jù)的變化情況,從圖4可以看出,僅持握狀態(tài)下由于人手輕微抖動等原因,加速度值一直在變化,但總體表現(xiàn)較為穩(wěn)定,ADF檢驗結(jié)果也為平穩(wěn)。
圖4 X軸線性加速度傳感器數(shù)據(jù)變化
圖5顯示了持握一段時間后點擊該按鈕,以點擊時刻為截至時刻,向前共計40 個X 軸線性加速度傳感器數(shù)據(jù)的變化情況。由圖5 可以看出,用戶在點擊該按鈕前的一小段時間,傳感器數(shù)據(jù)產(chǎn)生了較大波動, ADF 檢驗結(jié)果也為不平穩(wěn)。這是由于手機的形狀和按鈕的位置影響,為了點擊按鈕必然使手機向一側(cè)傾斜,導致了上述現(xiàn)象。而分析平臺的設(shè)備,往往只進行了簡單的傳感器數(shù)據(jù)模擬,即使如較高級的仿真技術(shù),將模擬真實的可變傳感器數(shù)值注入分析平臺的設(shè)備中,傳感器數(shù)值也只能模擬常規(guī)的設(shè)備使用狀態(tài),不能做到在點擊按鈕的時刻產(chǎn)生相應(yīng)的波動,其傳感器數(shù)據(jù)變化情況應(yīng)與真實用戶在僅手持狀態(tài)類似。
圖5 存在點擊操作的X軸線性加速度傳感器數(shù)據(jù)變化
因此,本文針對這點來實現(xiàn)對自動化動態(tài)分析的規(guī)避。以點擊界面按鈕為例,首先通過監(jiān)聽線性加速度傳感器采集手機加速度數(shù)據(jù),在點擊按鈕的時刻停止記錄,由于點擊按鈕帶來的設(shè)備抖動,手機加速度數(shù)據(jù)必然會有一段較大波動,而自動化測試工具則不會導致這種變化;取最后40 個加速度數(shù)據(jù)值,使用ADF 算法計算采集的傳感器數(shù)據(jù),如果數(shù)據(jù)平穩(wěn)則判斷為自動化測試平臺,反之則判斷為真實用戶;最后通過判斷結(jié)果來決定要繼續(xù)表現(xiàn)的行為。
為了檢驗本文的動態(tài)分析規(guī)避方案是否有效,本文設(shè)計了一款名為Devil 的惡意樣本。該樣本會讀取手機通訊錄及短信,并上傳至指定服務(wù)器,該行為模擬惡意軟件竊取用戶信息。同時,我們在復制的Devil 樣本上搭載了本文的動態(tài)分析規(guī)避方案,命名為HideDevil。HideDevil 加入了一個初始頁面,如圖3 所示,在該頁面設(shè)有一個位置靠上的按鈕,通過對按鈕的點擊確定當前是否為真實用戶在使用。若是,則繼續(xù)表現(xiàn)惡意行為;若不是,則隱藏惡意行為。
本文共設(shè)計兩個實驗。第一個實驗用來驗證該方案能否準確地判斷真實用戶。我們使用測試樣本,針對現(xiàn)實生活中常見的四種使用手機的方式(置于桌面使用、坐姿手持使用、站姿手持使用和行走手持使用)進行了多次實驗。該實驗使用華為榮耀v9手機作為實驗設(shè)備。第二個實驗用來檢驗該方案能否有效規(guī)避常見分析平臺的動態(tài)分析,即將Devil樣本和HideDevil樣本分別投入分析框架進行檢測。我們對常用的幾個線上分析平臺和線下分析框架進行了測試。
表1和表2 分別為實驗一和實驗二的結(jié)果展示。
表1 實驗一的結(jié)果
表2 實驗二的結(jié)果
由實驗一的結(jié)果可以看出,本文方案在坐姿手持使用、站姿手持使用和行走手持使用時均可準確檢測出真實用戶;在放置桌面使用時則有多次認為運行環(huán)境是分析框架。這個現(xiàn)象的原因在于,放置桌面使用時,若用戶的點擊動作不是很重,手機不會有太大的晃動,此時ADF 算法計算傳感器數(shù)據(jù)可能為平穩(wěn),因此樣本會判定運行環(huán)境為分析框架。然而,我們認為這種錯誤判斷幾乎不會造成影響,因為一個軟件幾乎不可能只使用一次,也幾乎不可能每次使用時用戶都恰好將其置于桌面使用。因此對于大多數(shù)惡意行為而言,仍可以在其他使用方式時達成其目的。換言之,惡意軟件的作者使用這種方式來規(guī)避動態(tài)分析仍然是可行的,不會影響其惡意行為的最終實現(xiàn)。
由實驗二的結(jié)果可以看出,所有測試平臺均可檢測出Devil 樣本的惡意行為,同時均不能檢測出HideDevil 樣本的惡意行為。即對本文采用的測試平臺,本文的規(guī)避方案均可成功規(guī)避它們的動態(tài)分析。
本文提出了一種新的規(guī)避Android 自動化分析平臺動態(tài)分析的方法,這種方法基于使用設(shè)備時設(shè)備狀態(tài)的變化,初步的實驗證明,相比于已有的多種規(guī)避方案,該方案在規(guī)避效果和使用難易程度上均有一定優(yōu)勢。我們認為Android 自動化分析平臺在方便、高效率分析的同時,仍可進一步研究縮小自動化操作與用戶操作的微小區(qū)別,以提高檢測的準確性。
另外,本文規(guī)避方案的局限性如下:由于本文規(guī)避方案是基于設(shè)備狀態(tài)的變化,因此使用本文規(guī)避方案的惡意軟件只能是針對日常手機用戶的惡意軟件,而目標設(shè)備本就為固定設(shè)備(如服務(wù)器木馬)等類型的惡意軟件無法使用本文規(guī)避方案。