張楠 滕英巖
摘 要:研究基于Android平臺的安全防護(hù)軟件,使用Android SDK和Java Web技術(shù)實現(xiàn)了Android平臺安全防護(hù)系統(tǒng)的各項功能。系統(tǒng)支持手機(jī)防盜找回、騷擾攔截、緩存清理、病毒掃描等功能,實現(xiàn)了對惡意程序和騷擾程序有效地攔截,后臺服務(wù)器使用Servlet編寫部署在百度云平臺,擁有快速的響應(yīng)和穩(wěn)定等特點,給后期的維護(hù)工作帶來的極大的便捷。
關(guān)鍵詞:Android平臺安全防護(hù)系統(tǒng);惡意程序;百度云平臺
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A
1 引言(Introduction)
近年來,Android平臺安全防護(hù)系統(tǒng)是目前市面上安卓平臺廣泛應(yīng)用的軟件系統(tǒng),然而信息安全領(lǐng)域在移動與嵌入式安全研究開發(fā)上的行動在過去幾年里過于緩慢),以至于移動安全在某種程度上仍然被認(rèn)為是前沿研究,因為移動設(shè)備的消費(fèi)者與用戶最近才開始察覺并理解日常使用移動設(shè)備所面臨的安全威脅。這些威脅也隨之為移動安全研究與安全產(chǎn)品創(chuàng)造了市場前景[1]。本文研究的安全防護(hù)系統(tǒng)采用最新的Android SDK開發(fā),本著精簡高效的原則,對市面上流行的安全軟件的功能進(jìn)行包含和實現(xiàn),由于占用內(nèi)存資源少,本系統(tǒng)兼容安裝Android 2.3.3到目前最新Android 4.2.2的所有智能手機(jī)。
2 關(guān)鍵技術(shù)介紹(The introduction of key
technology)
2.1 Android系統(tǒng)平臺簡介
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。尚未有統(tǒng)一中文名稱,中國大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機(jī)。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發(fā)商及電信營運(yùn)商組建開放手機(jī)聯(lián)盟共同研發(fā)改良Android系統(tǒng)。隨后Google以Apache開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。第一部Android智能手機(jī)發(fā)布于2008年10月。Android逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機(jī)、游戲機(jī)等。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。2013年的第四季度,Android平臺手機(jī)的全球市場份額已經(jīng)達(dá)到78.1%。2013年09月24日谷歌開發(fā)的操作系統(tǒng)Android在迎來了5歲生日,全世界采用這款系統(tǒng)的設(shè)備數(shù)量已經(jīng)達(dá)到10億臺[2]。
2.2 手機(jī)惡意軟件
手機(jī)惡意軟件,一般是指在用戶不完全知情和認(rèn)可(它包括未經(jīng)用戶許可、強(qiáng)迫引導(dǎo)用戶許可或隱瞞關(guān)鍵信息等)的情況下強(qiáng)行安裝到用戶手機(jī)中,或者一旦安裝就無法正常卸載和刪除,但又具備一定正常功能的軟件程序。
惡意軟件是介于病毒和正常軟件之間的軟件,它與病毒的區(qū)別是:通常還具備一定的正常功能。
相比于正常軟件,判定是否是惡意軟件的兩個標(biāo)準(zhǔn):
(1)是否被安裝到了用戶手機(jī)中。
(2)對于用戶而言,是否具有不可控制性:即用戶不完全知情和認(rèn)可,或者是安裝后無法讓用戶用正常的手段卸載和刪除。
符合以下任意即可定義為惡意軟件:
(1)沒有任何提示,暗地里發(fā)短信、聯(lián)網(wǎng)、扣費(fèi),輕微的發(fā)一次,嚴(yán)重的重復(fù)發(fā)。
(2)雖然有提示,但提示很不顯眼,很容易讓新手用戶摁錯,誤導(dǎo)新手,導(dǎo)致發(fā)送短信、聯(lián)網(wǎng)、扣費(fèi)。
(3)雖然有提示,但提示是虛假的,比如明明是CMNET,卻提示是CMWAP。
(4)沒有提示或者誤導(dǎo)用戶,暗地里收集用戶個人資料的。
(5)不經(jīng)用戶同意,捆綁了快捷鍵、書簽等可恢復(fù)性內(nèi)容。
(6)安裝很容易,刪除不簡單。
2.3 MD5算法簡介
MD5算法為計算機(jī)安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護(hù)。MD5的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被“壓縮”成一種保密的格式(就是把一個任意長度的字節(jié)串變換成一定長的十六進(jìn)制數(shù)字串)。MD5就可以為任何文件(不管其大小、格式、數(shù)量)產(chǎn)生一個同樣獨(dú)一無二的MD5“數(shù)字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應(yīng)的“數(shù)字指紋”都會發(fā)生變化。加密流程如圖1所示[3]。
圖1 MD5加密算法流程圖
Fig.1 Process of MD5 encryption algorithm
2.4 Android安全權(quán)限機(jī)制
Android本身是一個權(quán)限分立的操作系統(tǒng)。在這類操作系統(tǒng)中,每個應(yīng)用都以唯一的一個系統(tǒng)識別身份運(yùn)行(Linux用戶ID與群組ID)。系統(tǒng)的各部分也分別使用各自獨(dú)立的識別方式。Linux就是這樣將應(yīng)用與應(yīng)用,應(yīng)用與系統(tǒng)隔離開。
系統(tǒng)更多的安全功能通過權(quán)限機(jī)制提供。權(quán)限可以限制某個特定進(jìn)程的特定操作,也可以限制每個URI權(quán)限對特定數(shù)據(jù)段的訪問。
Android安全架構(gòu)的核心設(shè)計思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒有權(quán)限對其他應(yīng)用、系統(tǒng)或用戶進(jìn)行較大影響的操作。這其中包括讀寫用戶隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫其他應(yīng)用文件,訪問網(wǎng)絡(luò)或阻止設(shè)備待機(jī)等。
安裝應(yīng)用時,在檢查程序簽名提及的權(quán)限,且經(jīng)過用戶確認(rèn)后,軟件包安裝器會給予應(yīng)用權(quán)限。從用戶角度看,一款A(yù)ndroid應(yīng)用通常會要求如下的權(quán)限:撥打電話、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫入日程數(shù)據(jù)、讀取電話狀態(tài)或識別碼、精確的(基于GPS)地理位置、模糊的(基于網(wǎng)絡(luò)獲?。┑乩砦恢?、創(chuàng)建藍(lán)牙連接、對互聯(lián)網(wǎng)的完全訪問、查看網(wǎng)絡(luò)狀態(tài),查看WiFi狀態(tài)、避免手機(jī)待機(jī)、修改系統(tǒng)全局設(shè)置、讀取同步設(shè)定、開機(jī)自啟動、重啟其他應(yīng)用、終止運(yùn)行中的應(yīng)用、設(shè)定偏好應(yīng)用、震動控制、拍攝圖片等。
一款應(yīng)用應(yīng)該根據(jù)自身提供的功能,要求合理的權(quán)限。用戶也可以分析一款應(yīng)用所需權(quán)限,從而簡單判定這款應(yīng)用是否安全。如一款應(yīng)用是不帶廣告的單機(jī)版,也沒有任何附加的內(nèi)容需要下載,那么它要求訪問網(wǎng)絡(luò)的權(quán)限就比較可疑。
3 系統(tǒng)設(shè)計(System design)
3.1 系統(tǒng)結(jié)構(gòu)
Android平臺安全防護(hù)系統(tǒng)采用Android原生SDK進(jìn)行開發(fā),客戶端主要由手機(jī)防盜、通訊衛(wèi)士、軟件管理、進(jìn)程管理、流量統(tǒng)計、病毒掃描、緩存清理、高級工具、設(shè)置中心這幾大模塊構(gòu)成,系統(tǒng)結(jié)構(gòu)如圖2所示。
圖2 系統(tǒng)結(jié)構(gòu)圖
Fig.2 System architecture diagram
程序中各個模塊都有自己獨(dú)立的服務(wù)和廣播接收器為之提供支持,客戶端利用JSON數(shù)據(jù)格式和后臺服務(wù)器之間做數(shù)據(jù)交換,每個功能模塊之間相互獨(dú)立,但是由主頁面切換進(jìn)入。以手機(jī)防盜功能模塊為例,一共有四個頁面對數(shù)據(jù)進(jìn)行記錄,分別是設(shè)置密碼,綁定SIM卡,綁定安全號碼,啟動管理員模式,當(dāng)數(shù)據(jù)記錄完畢后,后臺會有相應(yīng)的服務(wù)和廣播接收器啟動,來記錄安全號碼發(fā)入目標(biāo)手機(jī)的指令,從而可以啟動相關(guān)功能對目標(biāo)手機(jī)執(zhí)行一系列的操作。
3.2 數(shù)據(jù)庫設(shè)計
數(shù)據(jù)庫密碼列采用MD5加密算法存儲密碼,這樣可以避免明文密碼的泄露。數(shù)據(jù)庫設(shè)計表如表1所示。
表1 數(shù)據(jù)庫表設(shè)計
Tab.1 Design of database table
表名 類型 約束 備注
UserID Verchar(30) 唯一 用戶唯一的ID號
UserPass Varchar(30) 非空 用戶密碼
4 系統(tǒng)實現(xiàn)(System implementation)
本文著重對Android平臺安全防護(hù)系統(tǒng)子系統(tǒng)進(jìn)行剖析,闡釋系統(tǒng)的運(yùn)行原理。安全防護(hù)子系統(tǒng)主要包括手機(jī)防盜和病毒掃描模塊兩部分。
4.1 手機(jī)防盜模塊
手機(jī)防盜功能中包含手機(jī)定位、手機(jī)報警、手機(jī)鎖屏和手機(jī)數(shù)據(jù)清理功能。本模塊利用手機(jī)長駐后臺服務(wù)監(jiān)聽短信內(nèi)容,根據(jù)短信執(zhí)行相關(guān)操作[4]。定位功能是程在序中加入了百度地圖定位功能,當(dāng)用戶綁定了SIM卡和安全號碼后,如果手機(jī)丟失,用安全號碼手機(jī)直接編輯短信指令+密碼發(fā)送到丟失手機(jī)上,可以讓手機(jī)執(zhí)行定位操作并回復(fù)短信當(dāng)前手機(jī)所在坐標(biāo)位置。以下是部分定位功能的實現(xiàn)代碼段。
public void initOption() {
LocationClientOption option=new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//設(shè)置定位模式
option.setCoorType("bd09ll");//返回的定位結(jié)果疊加地圖使用bd09ll模式
option.setScanSpan(2000);//設(shè)置發(fā)起定位請求的間隔時間為5000ms
option.setIsNeedAddress(true);//返回的定位結(jié)果包含地址信息
option.setNeedDeviceDirect(true);//返回的定位結(jié)果包含手機(jī)機(jī)頭的方向
option.setOpenGps(true);
locClient.setLocOption(option);
}
public void TraceStart() {
locClient.start();
}
public void TraceStop() {
locClient.stop();
}
鎖屏功能是使用安全手機(jī)發(fā)送鎖屏指令,然后目標(biāo)手機(jī)會自動執(zhí)行鎖屏指令。
手機(jī)報警功能是收到安全號碼發(fā)來的指令后以最大聲音播放報警音樂。
手機(jī)數(shù)據(jù)清理功能是接收到數(shù)據(jù)清理指令后在后臺執(zhí)行數(shù)據(jù)清理功能。觸發(fā)這些功能都是在后臺讓偷盜者無法察覺的情況下完成的。
4.2 病毒掃描模塊
病毒掃描模塊主要利用MD5特征匹配篩選安全程序和病毒程序,進(jìn)入掃描進(jìn)程后程序會在后臺將計算出每個程序的MD5值,然后利用云端同步的病毒特征庫進(jìn)行比對,利用折半查找法加速了程序掃描大樣本數(shù)據(jù)庫的對比算法。當(dāng)病毒程序被掃描出,程序會提示用戶是否清理,如果用戶點擊清理按鈕程序會強(qiáng)制卸載目標(biāo)程序,掃描過程結(jié)束。
病毒掃描過程部分核心代碼段如下:
private void scanVirus() {
pm=getPackageManager();
tv_scan_status.setText("正在初始?xì)⒍疽?.....");
new Thread(){
@Override
public void run() {
Listinfos= pm.getInstalledPackages(0);
pb.setMax(infos.size());
int progress=0;
for(PackageInfo info:infos) {
//info.applicationInfo.dataDir; //數(shù)據(jù)文件保存地址
String apkPath=info.applicationInfo.sourceDir; //APK安裝包路徑
String md5=FileToMD5.GetFileMd5(apkPath);
//準(zhǔn)備保存數(shù)據(jù)傳出讓UI線程更新
ScanInfo scanInfo=new ScanInfo();
scanInfo.Name=info.applicationInfo.loadLabel(pm).toString();
scanInfo.packName=info.packageName;
if(AntivirusTools.isVirus(md5)) {
//發(fā)現(xiàn)病毒
scanInfo.isVirus=true;
}else{
//掃描安全
scanInfo.isVirus=false;
}
//定義消息,把消息發(fā)到UI線程更新界面
Message msg=Message.obtain();
msg.obj=scanInfo;
msg.what=520;
handler.sendMessage(msg);
progress++;
pb.setProgress(progress);
}
Message msg=Message.obtain();
msg.what=0;
handler.sendMessage(msg);
}
}.start();
}
5 關(guān)鍵問題(Core question)
5.1 實現(xiàn)了病毒庫自動更新
程序在運(yùn)行過程中,固定的時間會向服務(wù)器拉取一個XML配置文件,里面是用JSON格式記錄的病毒庫版本和病毒庫下載地址。當(dāng)程序發(fā)現(xiàn)新版本病毒庫發(fā)布后,會自動去更新病毒庫,由于病毒庫只是一個txt格式的文檔,所有占用流量不會太多。當(dāng)程序下載下新版本病毒庫后會自動將數(shù)據(jù)插入已有的病毒庫。從而完成了病毒庫的更新操作。
5.2 手機(jī)防盜模塊實現(xiàn)了手機(jī)自動定位回傳功能
當(dāng)手機(jī)收到安全號碼發(fā)來的指令的時候,手機(jī)會自動啟動定位功能,程序會自動啟動GPS,利用網(wǎng)絡(luò)輔助定位確定手機(jī)當(dāng)前坐標(biāo),并將坐標(biāo)點和手機(jī)所處位置名稱以短信的形式回傳至安全手機(jī),當(dāng)用戶收到定位點后利用百度坐標(biāo)拾取就可以輕松找到手機(jī)位置。這一定位和回傳過程都是在后臺完成的,前臺無任何痕跡,這也是為了保證用戶手機(jī)落入小偷手中定位過程不被小偷發(fā)現(xiàn)。
5.3 手機(jī)防盜模塊實現(xiàn)了手機(jī)數(shù)據(jù)清理功能
當(dāng)手機(jī)收到安全號碼發(fā)來的指令的時候,手機(jī)會開始抹
去手機(jī)當(dāng)前的數(shù)據(jù),這一功能的開發(fā)主要是當(dāng)用戶手機(jī)無法定位的時候最后可以操作的,這也可以最大限度的保護(hù)用戶的隱私不被盜竊。但是由于這一功能需要開啟管理員權(quán)限,同時也讓第三方軟件無法卸載本程序。如果用戶需要卸載只需要關(guān)閉管理員權(quán)限然后就可以正常卸載了。
5.4 安全防護(hù)系統(tǒng)自身安全性
系統(tǒng)自身安全性又是項目的另一個重點。安全性問題主要來自于以下兩方面:
(1)用戶密碼的安全性。如果用戶密碼被泄露,安全手機(jī)用密碼+指令就可以任意操作目標(biāo)手機(jī),所以在密碼的保存上面,程序使用MD5加密算法加密存儲至數(shù)據(jù)庫,用戶可以自己更改程序密碼。這樣安全手機(jī)只有在密碼正確的時候指令才有效。
(2)服務(wù)器端的安全性。為保證服務(wù)器安全穩(wěn)定運(yùn)行,我們將編寫好的Servlet部署在百度云平臺上,在百度提供的高性能的服務(wù)器上避免了服務(wù)器的故障和惡意入侵的問題,百度云平臺之間的項目獨(dú)立運(yùn)行又不會相互影響。云平臺的智能性也大大減少了服務(wù)器端的維護(hù)成本和難度。
6 結(jié)論(Conclusion)
本Android平臺安全防護(hù)系統(tǒng)的開發(fā)解決了目前安全軟件體積龐大弊端,目前360和金山手機(jī)助手安裝完畢就已經(jīng)達(dá)到20MB左右,小內(nèi)存的手機(jī)安裝后會導(dǎo)致手機(jī)假死或者死機(jī)的癥狀。而Android平臺安全防護(hù)系統(tǒng)安裝包只有3.9MB,開啟后運(yùn)行服務(wù)也只有4MB左右,基本對手機(jī)的運(yùn)行不會產(chǎn)生太大的影響。同樣的功能我們的可以占用更少的內(nèi)存解決,這就是我們精簡系統(tǒng)的優(yōu)勢。
然而系統(tǒng)還是有一些善待解決的問題,比如病毒特征庫的更新,比如程序執(zhí)行效率的優(yōu)化。因為安全類軟件最看重的就是病毒特征庫的數(shù)量,個人沒有辦法去獲取大量病毒特征庫特征值,所以本系統(tǒng)還是借鑒了最新版的金山毒霸的特征病毒庫才可以進(jìn)行掃描。
參考文獻(xiàn)(References)
[1] Joshua J.Drake.Android安全攻防權(quán)威指南[M].北京:人民郵電 出版社,2013.
[2] 百度百科.android(Google公司開發(fā)的操作系統(tǒng))[EB/OL]. http://dwz.cn/test_android.
[3] 百度百科.MD5加密[EB/OL].http://baike.baidu.com/view/ 1039631.htm.
[4] 李興華.Android開發(fā)實戰(zhàn)經(jīng)典[M].北京:清華大學(xué)出版社, 2012:562-583.
作者簡介:
張 楠(1992-),男,本科生.研究領(lǐng)域:軟件開發(fā)及數(shù)據(jù)庫.滕英巖(1972-),女,碩士,教授.研究領(lǐng)域:嵌入式軟件及
應(yīng)用.