国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Android軟件靜態(tài)分析技術(shù)研究進展

2014-10-27 16:33:57郁峰
無線互聯(lián)科技 2014年9期

郁峰

摘 要:通過介紹基于Linux內(nèi)核的Android操作系統(tǒng)所面臨的被惡意軟件威脅的現(xiàn)狀,引出靜態(tài)分析。本文首先介紹了靜態(tài)分析的對象、常用的靜態(tài)分析方法及分類,然后從靜態(tài)分析的一般流程和常見惡意行為的靜態(tài)分析以及分析中存在的問題方面介紹了靜態(tài)分析研究的現(xiàn)狀,最后根據(jù)靜態(tài)分析的現(xiàn)狀和特點提出了進一步研究的方向。

關(guān)鍵詞:Android應(yīng)用;惡意行為;靜態(tài)分析

近幾年,Android的發(fā)展極為迅猛,這除了相關(guān)產(chǎn)品強大的功能與豐富的應(yīng)用外,更是因為它優(yōu)良的性能表現(xiàn)吸引著用戶。隨著Android的興起,基于Android平臺的應(yīng)用需求也越來越復(fù)雜,形形色色的軟件壯大了Android市場,也豐富了我們的生活,給我們的生活帶來了極大的便利。事情有利有弊,惡意程序泄露用戶隱私信息、惡意扣費、破壞系統(tǒng)的事件屢見不鮮,Android系統(tǒng)的安全逐漸成為了研究的熱點。

如今Android平臺的逆向分析主要應(yīng)用于惡意代碼檢測,從根本上來說這是對逆向技術(shù)的一種合理運用和發(fā)展。Android平臺的逆向分析技術(shù),主要分為靜態(tài)分析和動態(tài)分析兩類。靜態(tài)分析和動態(tài)分析是相對的概念,動態(tài)分析需要觀察軟件實際運行的情況,而靜態(tài)分析只需要從一個正常工作的軟件出發(fā),分析的對象是該軟件的源碼。

1 問題描述與定義

靜態(tài)分析是指不運行代碼的情況下,采用詞法分析、語法分析等各種技術(shù)手段對程序文件進行掃描從而生成程序的反匯編代碼,然后閱讀反匯編代碼來掌握程序功能的一種一種技術(shù),在實際的分析過程中,完全不運行程序是不現(xiàn)實的,需要通過運行目標程序來尋找程序的突破口。靜態(tài)分析強調(diào)的是靜態(tài),在整個分析過程中,閱讀反匯編代碼是主要的分析工作。

1.1 靜態(tài)分析對象

Android應(yīng)用程序的后綴的.apk,APK文件其實是zip格式的文件,可以使用Winrar打開,得到它的目錄結(jié)構(gòu)。如圖1所示,主要包括五個部分,一是META-INF目錄,用來存放簽名信息,保證apk包的完整性和系統(tǒng)安全;二是res目錄,用來存放資源文件,包括程序圖片等內(nèi)容;三是AndroidManifest.xml文件,用來描述應(yīng)用的名字、版本、權(quán)限和引用的庫文件等信息;四是class.dex文件,是java源編譯后生成的java字節(jié)碼文件;五是resources.arsc文件,是編譯后的二進制資源文件[1]。在這五個部分中,最重要的是AndroidManifest.xml和class.dex文件。我們可以通過對應(yīng)用程序的AndroidManifest.xml反編譯后進行分析,得到該程序運行的權(quán)限設(shè)置等信息,分析該程序的惡意行為。同樣的可以通過反編譯class.dex文件得到程序源碼,對程序進行分析。

1.2 靜態(tài)分析方法

Android靜態(tài)分析主要在于惡意代碼的匹配及信息泄露等,Android源碼的量非常大,如何對問題代碼快速定位是分析Android源碼的基礎(chǔ)。主要的分析方法[2]:

⑴信息反饋法是指先運行目標程序,然后根據(jù)目標運行時給出的反饋信息作為突破口尋找關(guān)鍵代碼。通常情況下,程序中用到的字符串會存儲在String.xml文件或者硬編碼到程序代碼中,如果是前者,字符串在程序中會以id的形式訪問,只需在反匯編代碼中搜索字符串的id值即可找到代碼處;如果是后者的話,在反匯編代碼中直接搜索字符串即可。

⑵特征函數(shù)法,無論程序做出任何動作或者反饋,都需要調(diào)用Android SDk中提供的相關(guān)API函數(shù)來完成的。

⑶順序查看法是指從軟件的啟動代碼開始,逐行的向下分析,掌握軟件的執(zhí)行流程。

1.3 靜態(tài)分析分類

靜態(tài)分析根據(jù)分析對象的不同,主要分為二進制程序分析和源代碼分析[3]。對二進制程序進行分析,通過比較二進制文件中是否包含惡意行為特征碼,判斷程序是否具有惡意行為。對二進制文件進行特征碼分析,只能針對已經(jīng)出現(xiàn)的病毒、木馬進行查殺,不能檢測未知病毒,面對不斷出現(xiàn)的新病毒或病毒變種,必須不斷更新病毒庫。源代碼分析,是指分析軟件的源代碼,通過與預(yù)先定義的引起惡意行為的API調(diào)用進行比對,判斷程序中是否含有惡意行為。以“惡意扣費”為例,引起扣費行為的發(fā)生,往往是由于惡意應(yīng)用以發(fā)送短消息的方式,注冊了相關(guān)的SP服務(wù)。分析Android應(yīng)用反編譯后的源代碼,通過查詢源代碼中是否包含發(fā)送短消息相關(guān)的API調(diào)用,并判斷相應(yīng)的API 參數(shù),是否為某些特定SP服務(wù)注冊碼,從而檢測Android 應(yīng)用中是否包含“惡意扣費”等行為。

分析Android應(yīng)用反編譯后的源代碼,由于源代碼邏輯結(jié)構(gòu)更為清晰,查找更精確。引起惡意行為發(fā)生是相關(guān)的API調(diào)用導(dǎo)致的,而無論惡意行為如何變種,在源代碼中都必須調(diào)用關(guān)鍵的底層系統(tǒng)API。對源代碼進行檢測,只需查找關(guān)鍵的系統(tǒng)API調(diào)用進行判斷,對于不斷更新的病毒、木馬變種,并不需要頻繁地更新相應(yīng)的檢測規(guī)則。

2 靜態(tài)分析技術(shù)研究現(xiàn)狀

目前在對Android程序進行靜態(tài)分析時,主要采取以下兩種方法:一是閱讀反匯編生成的Dalvik字節(jié)碼,可以使用IDA Pro分析dex文件,或者使用文本編輯器閱讀baksmali反編譯生成的smali文件;二是閱讀反匯編生成的java源碼,可以使用dex2jar生成jar文件,然后使用jd-gui閱讀jar文件的代碼。

2.1 靜態(tài)分析的一般流程

2.1.1 Android軟件預(yù)處理

在靜態(tài)分析過程中獲得反匯編代碼是主要的分析工作,首先要選取一個強大的反匯編工具,本文選取的是開源的Dex2jar工具。Dex2jar采用d2j-dex2jar ***.apk命令獲得java字節(jié)碼,獲得java字節(jié)碼后就可以通過反編譯工具jd-gui直接以源碼的形式顯示jar文件中的內(nèi)容。在反編譯得到的文件中包含AndroidManifest.xml文件和java源代碼,在xml文件中獲得源碼的元信息(包括Activity、Service等的注冊信息和入口)和權(quán)限申請信息。Android軟件預(yù)處理的流程如圖2所示。

一個Android程序由一個或多個Activity以及它的組件構(gòu)成,不同的Activity實現(xiàn)不同的功能。每個程序有且只有一個主Activity,也是程序啟動和顯示的第一個Activity。在程序中使用到的Activity都需要在AndroidManifest.xml文件中手動聲明,聲明Activity使用的activity標簽。在反編譯出的AndroidManifest.xml中找到主Activity后,可以直接去查看其所在類的OnCreate()方法的反匯編代碼,對大多數(shù)軟件來說,這就是程序的代碼入口,所有的功能都從這里開始得到執(zhí)行,然后可以追蹤軟件的執(zhí)行流程。

2.1.2 控制流圖生成

抽象語法樹(AST)作為程序的中間表現(xiàn)形式,是基于JavaCC工具得到的,在經(jīng)過對源碼預(yù)處理,然后經(jīng)過詞法語法分析得到的。能夠直觀地表示出源程序信息,存儲效率高,但是無法表示復(fù)雜的控制流信息,如選擇、循環(huán)語句??梢曰诔橄笳Z法樹得到源碼的控制流圖和數(shù)據(jù)流以及函數(shù)調(diào)用圖,以便進行靜態(tài)分析。控制流圖是程序的中間表示形式,作為函數(shù)依賴分析、控制流分析和數(shù)據(jù)流分析的基礎(chǔ),可以很好的反映語句以及模塊之間的調(diào)用和執(zhí)行流程??刂屏鲌D生成流程如圖3所示。

2.1.3 安全規(guī)則解析

解析安全規(guī)則[4],查找規(guī)則中定義的關(guān)鍵API調(diào)用,以及API調(diào)用和某個參數(shù)、返回值或某些資源的關(guān)系,從而判別安全問題的存在。安全分析規(guī)則,一般規(guī)定對程序中關(guān)鍵信息元素的約束,如關(guān)鍵類、關(guān)鍵方法等。如果類、方法的相應(yīng)屬性符合規(guī)則定義的約束條件,則報告分析結(jié)果。規(guī)則的內(nèi)容上主要涉及自動耗費、隱私竊取、系統(tǒng)破壞等常見惡意行為。

2.2 Android軟件常見惡意行為的靜態(tài)分析

基于java編寫的Android應(yīng)用程序,有著移動終端普遍的安全問題。具體的惡意行為可分為以下幾類[5]:

2.2.1 耗費用戶錢財行為

這些行為包括沒有用戶提示自動連接網(wǎng)絡(luò)、自動發(fā)送短信息、自動撥號等。查找連網(wǎng)行為,可以通過查找網(wǎng)址URL字符串以及Android執(zhí)行連網(wǎng)行為的關(guān)鍵API調(diào)用進行判斷。針對此類惡意行為,可以分析程序方法間依賴關(guān)系,通過定位在執(zhí)行網(wǎng)絡(luò)連接前,是否彈出對話框等,提示用戶有網(wǎng)絡(luò)連接行為,判斷在程序在執(zhí)行時是否有用戶提示。

2.2.2 竊取用戶隱私行為

涉及未經(jīng)用戶許可讀取個人隱私數(shù)據(jù),包括短信息、Email電子郵件、通訊錄、通話記錄、日程安排、多媒體資料和手機IMEI標識,以及監(jiān)控、記錄、處理話音記錄,啟動GPS全球定位系統(tǒng)監(jiān)控物理位置并將其發(fā)送到特定網(wǎng)站等。

進一步考慮下面獲取手機IMEI標識,并將其發(fā)送到特定網(wǎng)站的惡意代碼:

TelePhonyManager tm=(TelePhonyManager)getSystemService(”phone”);

String userld=tm.getDeviceld();

URL url=newURL(“http://www.myweb.com.cn:80?id=”+userld);

url.openConnection();

首先可以通過查找關(guān)鍵API調(diào)用定位到程序的第3、4行。程序首先定義了一個URL類的對象url,并調(diào)用url的openConnection方法企圖進行網(wǎng)絡(luò)連接。在URL類的構(gòu)造函數(shù)中,以userId變量的內(nèi)容作為“http://www.myweb.com.cn:80”URL的參數(shù)傳遞給網(wǎng)站,進一步分析,userId報訊的是通過調(diào)用telephonymanager對象的getDeviceId方法返回的結(jié)果,并且telephonymanager是利用TelephonyManager類調(diào)用其靜態(tài)方法getSystemService(“phone”)獲得的。由此得知,userId正是通過調(diào)用Android系統(tǒng)的API獲得手機設(shè)備的IMEI標識。上述程序把手IMEI標識通過URL參數(shù)上傳給指定網(wǎng)站。

此外,一些惡意代碼也會調(diào)用Location類的getLatitude和getLongitude方法獲取手機設(shè)備當前位置的緯度和經(jīng)度,再作為URL參數(shù)發(fā)送給指定網(wǎng)站,這些可疑的惡意行為都可以根據(jù)上下文,查找關(guān)鍵API調(diào)用和參數(shù)變量的取值檢測出。

2.2.3 破壞用戶數(shù)據(jù)的行為

破壞用戶數(shù)據(jù)行為包括刪除用戶數(shù)據(jù),終止其他進程或系統(tǒng)服務(wù)的運行等。刪除用戶數(shù)據(jù),包括刪除以文件形式保存的系統(tǒng)文件、配置文件和數(shù)據(jù)文件,以及刪除保存在數(shù)據(jù)庫中的通訊錄、日程、短信息記錄等。對文件的刪除,可以通過查找關(guān)鍵API調(diào)用并定位所要刪除文件的絕對路徑,判斷是否屬于系統(tǒng)文件。對數(shù)據(jù)庫中記錄的刪除,通過查找程序中調(diào)用的SQL語句,并判斷所要操作的數(shù)據(jù)庫表是否是保存用戶數(shù)據(jù)的表等。另外,如果程序在運行過程中,終止其他進程或系統(tǒng)服務(wù)的運行,造成對系統(tǒng)的破壞,也屬于惡意行為。常見的系統(tǒng)服務(wù),包括電話服務(wù)、通知服務(wù)、輸入法服務(wù)、網(wǎng)絡(luò)連接服務(wù)、聲音服務(wù)、賬戶服務(wù)等。具有惡意行為的程序,會在程序運行過程中,枚舉系統(tǒng)中當前正在運行的進程和系統(tǒng)服務(wù),獲取到進程或服務(wù)所在Package的名字,并將其作為參數(shù)調(diào)用系統(tǒng)API,終止進程或服務(wù)的運行。

為了防止惡意行為的發(fā)生,需要進行用戶行為判別。對于自動連接網(wǎng)絡(luò)、自動發(fā)送短信、自動撥打電話等惡意行為,檢測系統(tǒng)應(yīng)判斷出連網(wǎng)、發(fā)送短信、撥打電話等行為是用戶發(fā)起的,還是程序未經(jīng)過用戶許可,直接發(fā)起的請求。如果程序中使用了SMS、MMS、WII、WEB/WAP等敏感API,那么就需要對追蹤信息進行分析,如果是用戶提交的請求,那么認為調(diào)用是安全的;如果所調(diào)用的API并不是用戶提交的,參數(shù)為敏感信息,那么就認為可能存在后門隱患。

2.3 靜態(tài)分析中存在的問題

靜態(tài)分析的目標就是在不運行待測程序的基礎(chǔ)上分析程序的源代碼或者Dalvik字節(jié)碼,檢測出程序中存在的惡意行為。靜態(tài)分析需要獲得源碼、安全規(guī)則和模式庫,并且分析效果的好壞往往取決于模式庫和安全規(guī)則。對于已知惡意行為的檢測能夠做到高效、準確,但是在對惡意行為關(guān)鍵特征的搜集、提取并制定相應(yīng)規(guī)則方面還需要進一步完善,目前的安全規(guī)則還不全面,某些惡意行為的實現(xiàn)方式會有很多種情況,并不僅僅局限于一些關(guān)鍵API的調(diào)用。由于在分析時不能考慮實際運行情況,因此需要分析所有的路徑,誤報率較高,會產(chǎn)生大量的分析結(jié)果,增加了分析的難度。如何提高靜態(tài)分析的效率和準度是安全領(lǐng)域重要的研究方向。

3 進一步研究

隨著Android安全問題日益突出,靜態(tài)分析技術(shù)被運用得越來越廣泛,這項技術(shù)也會更加成熟,結(jié)合靜態(tài)分析技術(shù)的特點,今后的研究方向主要有:

⑴設(shè)計基于靜態(tài)分析的Android應(yīng)用程序惡意行為通用檢測模型,集成各種靜態(tài)分析方法,以提高靜態(tài)分析的效率。

⑵不斷完善安全規(guī)則,隨著Android平臺的不斷發(fā)展,會出現(xiàn)更多的惡意行為,現(xiàn)有的安全規(guī)則還不完善,需要不斷更新,與時俱進,才能提高靜態(tài)分析的準確性,降低誤報率。

⑶將靜態(tài)分析與動態(tài)分析以及污點傳播分析技術(shù)結(jié)合,設(shè)計一個自動化惡意軟件檢測系統(tǒng)。自動提取終端上的應(yīng)用程序進行自動化分析,實現(xiàn)對應(yīng)用程序的離線安全檢查。

[參考文獻]

[1]王世江,余志龍,陳昱勛,等.Google Android SDK 開發(fā)范例大全[M].第二版.北京:人民郵電出版社,2010.

[2]唐宇敬.Android平臺下軟件安全漏洞挖掘方法研究[D].邯鄲:河北工程大學(xué),2013.

[3]路程,張淼,徐愛國.基于源代碼靜態(tài)分析技術(shù)的Android應(yīng)用惡意行為檢測模型[J].中國科技論文在線.201111-54.

[4]余建,韓雙霞,黃云龍.軟件安全性的靜態(tài)分析[J].計算機工程與設(shè)計,2006,27(8):1411-1414.

[5]路程.Android平臺惡意軟件檢測系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2012.

玉屏| 如东县| 启东市| 芷江| 九江市| 左云县| 弥渡县| 如东县| 龙山县| 元江| 依安县| 吉安市| 汉源县| 玉门市| 娄烦县| 瓦房店市| 西林县| 桐梓县| 定日县| 措美县| 从江县| 丰顺县| 阳山县| 吉隆县| 集贤县| 淳化县| 京山县| 闻喜县| 甘泉县| 嵊州市| 百色市| 连山| 长沙县| 温宿县| 福清市| 麻栗坡县| 邳州市| 武义县| 葫芦岛市| 义乌市| 平定县|