順德職業(yè)技術(shù)學院 龍子學 鐘軍強
目前Android平臺并沒有嚴格的應(yīng)用權(quán)限審核機制,僅僅將應(yīng)用的權(quán)限請求在安裝時展示給用戶,這樣的模式會導致惡意軟件的植入留下了隱患;另一方面在Android平臺的訪問控制是靜態(tài)的,無法根據(jù)控制策略庫的動態(tài)定制,而且Android平臺上所有軟件都是平級執(zhí)行,這造成了一般的安全軟件只能通過應(yīng)用基本信息與庫的比對來判定其危害程度;Android系統(tǒng)不提供軟件行為監(jiān)控的接口,這也阻礙了以行為檢測為基礎(chǔ)的殺毒軟件無法移植。
針對上述問題,本文以Android系統(tǒng)為平臺,在Android的操作系統(tǒng)開發(fā)中如何制定和實施數(shù)據(jù)庫防御策略。
Android是基于linux內(nèi)核,所以android核心部分是c語言編寫的。但是android提供的sdk是基于java語言的,也就是說大部分用戶所使用的應(yīng)用程序是用java編寫的。java是解釋性語言,存在代碼被反編譯的隱患;建議用混淆器為proguard,proguard還可用來壓縮、優(yōu)化java字節(jié)碼,刪除無用的類、字段、方法、屬性、注釋等。
配置方法:
在Android.mk中設(shè)置LOCAL_PROGUARD_FLAG_FILES:=proguard.flags
packages/apps/Launcher2/proguard.flags的特定方法:
-keep class com.android.launcher2.Launcher{
public void previousScreen(android.view.View);
public void nextScreen(android.view.View);
public void launchHotSeat(android.view.View);}
-keep class com.android.launcher2.AllApps3D$Defines{
*;}
-keep class com.android.launcher2.ClippedImageView{
*;}
權(quán)限主要用來對應(yīng)用的操作增加限制,防止惡意應(yīng)用進行非法操作給用戶造成敏感數(shù)據(jù)泄漏和設(shè)備被非法控制,防止惡意收費等;所以在Android的Normal、Dangerous、signatureOrSystem、Signature接入權(quán)限,它框架層權(quán)限定義位置是:frameworks/base/core/res/AndroidManifest.xml權(quán)限可用于整個應(yīng)用、Activity、Service等。
android:permissionGroup=“android.permission-group.ACCOUNTS” android:protectionLevel="normal“ android:description=“@string/permdesc_getAccounts” android:label="@string/permlab_getAccounts"/> android:label="@string/permgrouplab_storage“ android:description="@string/permgroupdesc_storage"/> 因共享用戶ID即共用一個進程Android源代碼樹攜帶的系統(tǒng)證書包括“media”、“platform”、“shared”、“testkey”等,其中“media”證書用于多媒體、下載場景中;“platform”證書用于系統(tǒng)場景中;“shared”證書用于啟動器、電話簿場景中;“testkey”證書用于開發(fā)場景中,這些證書位于build/target/product/security目錄下; 目前支持的“sharedUserId”屬性包括“com.android.cts.shareduid”、“com.android.cts.process.uidpid_test”、“android.uid.phone”等。常用的包括“android.uid.system”、“android.media”、“android.uid.shared”等。 設(shè)置應(yīng)用權(quán)限: Android提供了多個方法可用于驗證調(diào)用方是否具有相應(yīng)的權(quán)限。如果調(diào)用方擁有相應(yīng)的權(quán)限,則權(quán)限驗證的返回值為PackageManager.PERMISSION_GRANTED否則返回PackageManager.PERMISSION_DENIED,如下示例: private int enforceAccessPermission(){ int ret= mContext.checkCallingOrSelfPermissio n("android.permission.BIND_WALLPAPER"); return ret;} Android的數(shù)字證書分調(diào)試模式和發(fā)布模式兩種,通過命令行和Eclipse可以生成發(fā)布模式的數(shù)字證書,在命令行方式下利用Keytool來生成數(shù)字證書,并利用Jarsigner來為APK進行數(shù)字簽名,使用ADT Export Wizard進行簽名,只有同一包名且采用同一數(shù)字證書的應(yīng)用才被認為是同一個應(yīng)用,數(shù)字證書的確保系統(tǒng)用升級和設(shè)置應(yīng)用間通信的權(quán)限的安全。 keytool-genkey-v -keystore android.keystore-alias miaozl-keyalg RSA-validity 20000“keystore android.keystore”表示生成的證書為“android.keystore”,可以加上路徑(默認在用戶主目錄下);“alias miaozl”表示證書的別名是“miaozl”;“keyalg RSA”表示采用的RSA算法;“validity 20000”表示證書的有效期是20000天。另外通過keypass可以設(shè)置數(shù)字證書私鑰的密碼,通過keysize可以設(shè)置算法的位長,默認為1024比特,推薦2048比特及更長,通過storepass可以設(shè)置證書的密碼。 jarsigner-verbose-keystore android.keystore demo.apk接下來jarsigner會提示輸入密鑰庫的口令和證書別名的口令,全部輸入后,即可完成簽名。 Android加密算法有DES(對稱)、3DES(對稱)、RSA(非對稱)、MD5、RC2/RC4(對稱)、IDEA、AES、BLOWFISH等,而Web服務(wù)(HTTP層),三種手段WS-Security、SSL、數(shù)字簽名。 Android采用的SQLite目前采用明文存儲數(shù)據(jù);安全涉及加密、讀寫、搜索等。 讀寫權(quán)限示例: android:name=".provider.AttachmentPr ovider"android:authorities="com.android.email.attachmentprovider" android:multiprocess="true" android:grantUriPermissions="true“ android:readPermission="com.android.email.permission.READ_ATTACHMENT"/> 數(shù)據(jù)庫安全--搜索例: android:readPermission="android.permission.READ_SMS" android:authorities="com.android.mms.SuggestionsProvider"> android:pathPrefix="/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH"> android:pathPrefix="/search_suggest_shortcut"android:readPermission="android.permission.GLOBAL_SEARCH"/> Android在權(quán)限管理上應(yīng)用了Linux的ACL(Access Control List)權(quán)限機制,而非早期Unix采用的UGO權(quán)限機制。 在系統(tǒng)運行時,最外層安全保護是由Linux系統(tǒng)提供的,其中system.img所在的分區(qū)是只讀的,不允許用戶寫入,而data.img所在的分區(qū)是可讀寫的,用于存放用戶數(shù)據(jù)。 分區(qū)的用戶權(quán)限在init.rc中定義。 單獨文件訪問權(quán)限控制分群組、用戶、權(quán)限,權(quán)限分可讀、可寫、可執(zhí)行,命令:chownchgrpchmod。 隨著智能手機的超速發(fā)展,Android智能手機操作系統(tǒng)越來越被人們所關(guān)注及使用,數(shù)據(jù)安全性已經(jīng)成為使用者的關(guān)心問題,本文通過對Android系統(tǒng)的各種安全機制進行了闡述,并針對不同的安全機制提供其解決方案,希望能為開發(fā)者提高Android系統(tǒng)安全性提供一點幫助。 [1]陳益強.簡析Android系統(tǒng)的安全性能[A].信息系統(tǒng)工程,2011(9). [2]雷靈光.Android系統(tǒng)代碼簽名驗證機制的實現(xiàn)及安全性分析[A].信息網(wǎng)絡(luò)安全,2012(8). [3]符易陽,周丹平.Android安全機制分析[J].信息網(wǎng)絡(luò)安全,2011(9).2.應(yīng)用權(quán)限的設(shè)置
3.權(quán)限驗證
三、數(shù)字證書實現(xiàn)
1.Keytool生成數(shù)字證書
2.實現(xiàn)Jarsigner進行數(shù)字簽名
四、網(wǎng)絡(luò)及數(shù)據(jù)安全
1.網(wǎng)絡(luò)數(shù)據(jù)加密算法
2.數(shù)據(jù)安全
五、文件訪問控制
1.分區(qū)層面
2.單獨文件
六、結(jié)語