Android安全機制介紹及實踐
Android框架基礎(chǔ)
上圖是我們熟知的Android系統(tǒng)架構(gòu)圖,分層的結(jié)構(gòu)有利于權(quán)限的分級管理,對系統(tǒng)安全提供了一定的保障。Android系統(tǒng)采用分層的架構(gòu),由底層到上層依次為Linux內(nèi)核層、HAL層、Native Lib及Runtime lib層、JNI層、framework層和應(yīng)用程序?qū)咏M成。Android應(yīng)用程序組件是Android應(yīng)用程序的基本組成單元,組件類型有Activity、Service、Broadcast Receiver、Content Provider等。Android內(nèi)核本質(zhì)上是增強版的LInux內(nèi)核,低內(nèi)存管理LMK(Low Memory Killer)、匿名共享內(nèi)存(Ashmem),Binder通信機制等。這些內(nèi)核增強使得Android在繼承LInux內(nèi)核安全機制的同時,進一步提升了內(nèi)存管理、進程通信等方面的安全性。
上圖是Android系統(tǒng)啟動流程圖,具體說明如下:Android系統(tǒng)運行于Linux內(nèi)核之上,init進程是用戶空間啟動的第一個進程,職責主要為fork出系統(tǒng)關(guān)鍵進(Daemons)、servicemanager、zygote等;提供屬性服務(wù)管理系統(tǒng)屬性等。Zygote由init進程根據(jù)init.rc文件配置項創(chuàng)建,Zygote是一個虛擬機進程,同時也是一個虛擬機孵化器。負責虛擬機初始化、預(yù)置庫的加載及初始化等。每當系統(tǒng)要求執(zhí)行一個Android應(yīng)用程序時,Zygote就會創(chuàng)建一個進程來執(zhí)行該應(yīng)用程序。SystemSever是Zygote第一個子進程,由Zygote進程孵化出來,作為Android框架的核心,主要負責Android系統(tǒng)初始化并啟動其他服務(wù)運行于該進程空間。
Android 安全機制
目前Android系統(tǒng)智能終端設(shè)備占據(jù)了全球智能終端設(shè)備的大部分份額,隨之而來安全問題也越來越多,安全問題是Android開發(fā)中一個重要的課題。從技術(shù)架構(gòu)角度來看,Android安全模型基于強健的Linux操作系統(tǒng)內(nèi)核安全性,通過進程沙箱機制、獨特的內(nèi)存管理與安全高效的進程通信機制、應(yīng)用程序簽名機制、應(yīng)用權(quán)限管理機制等進一步提升系統(tǒng)安全性。
Android系統(tǒng)安全機制主要包括以下幾方面:
1. 代碼安全機制。
2. 進程沙箱機制。
3. 應(yīng)用權(quán)限機制。
4. 應(yīng)用簽名機制。
5. 文件訪問控制機制。
6. 其他安全機制。
代碼安全機制
java不同于C/C++,java是解釋性語言,存在代碼被反編譯的隱患;Android引入了代碼混淆技術(shù)默認混淆器為proguard, proguard還可用來壓縮、優(yōu)化java字節(jié)碼,刪除無用的類、字段、方法、屬性、注釋等。配置方法 在Android.mk中設(shè)置 LOCAL_PROGUARD_FLAG_FILES := proguard.flags include $(BUILD_PACKAGE) 原則 SDK API相關(guān)的不要混淆、native方法不要混淆、model不要混淆其他不需要混淆的類及方法?;煜Z法
-keepclasscom.android.launcher3.CellLayout{ publicfloatgetBackgroundAlpha(); publicvoidsetBackgroundAlpha(float); } -keepclasscom.android.launcher3.DragLayer$LayoutParams{ publicvoidsetWidth(int); publicintgetWidth(); publicvoidsetHeight(int); publicintgetHeight(); publicvoidsetX(int); publicintgetX(); publicvoidsetY(int); publicintgetY(); }
混淆之后代碼反編譯后得到的class文件
進程沙箱隔離機制
Android將linux多用戶隔離機制應(yīng)用到應(yīng)用程序隔離,一個用戶標識(UID)識別一個給定用戶,應(yīng)用程序權(quán)限不同允許或者限制了應(yīng)用程序?qū)υO(shè)備資源的訪問。應(yīng)用權(quán)限的設(shè)置共享用戶ID即共用一個進程 Android源代碼樹攜帶的系統(tǒng)證書括“media”、“platform”、“shared”、 “testkey”等,其中“media”證書用于多媒體、下載場景中;“platform”證書用于系統(tǒng)場景中;“shared”證書用于啟動器、電話簿場景中;“testkey”證書用于開發(fā)場景中,這些證書位于build/target/product/security目錄下;目前支持的“sharedUserId”屬性包括“android.uid.system”、 “com.android.uid.test”、“android.uid.calendar” 、“android.media”、“com.android.framework.externalsharedpermstestapp”、“android.uid.shared”、“android.uid.phone”等。常用的包括“android.uid.system”、“android.media”、“android.uid.shared”等。
應(yīng)用權(quán)限機制
權(quán)限主要用來對應(yīng)用的操作增加限制,防止惡意應(yīng)用進行非法操作給用戶造成敏感數(shù)據(jù)泄漏和設(shè)備被非法控制,防止惡意收費等。權(quán)限級別如下:Normal權(quán)限、 Dangerous權(quán)限 、signatureOrSystem權(quán)限 、Signature權(quán)限 。框架層權(quán)限定義位置
frameworks/base/core/res/ AndroidManifest.xml
android:permissionGroup="android.permission-group.STORAGE" android:label="@string/permlab_mediaStorageWrite" android:description="@string/permdesc_mediaStorageWrite" android:protectionLevel="signature|system"/>
設(shè)置應(yīng)用權(quán)限
權(quán)限驗證Android提供了多個方法可用于驗證調(diào)用方是否具有相應(yīng)的權(quán)限。如果調(diào)用方擁有相應(yīng)的權(quán)限,則權(quán)限驗證的返回值為PackageManager. PERMISSION_GRANTED否則返回PackageManager.PERMISSION_DENIED。
示例代碼
if(permission!=null){ if(mContext.checkCallingOrSelfPermission(permission) !=PackageManager.PERMISSION_GRANTED){ returnWindowManagerGlobal.ADD_PERMISSION_DENIED; } }
數(shù)據(jù)庫安全
Android采用的SQLite目前采用明文存儲數(shù)據(jù);安全涉及加密、讀寫、搜索等。權(quán)限設(shè)置android:permission android:readPermission android:writePermission
android:authorities="contacts;com.android.contacts" android:label="@string/provider_label" android:multiprocess="false" android:exported="true" android:readPermission="android.permission.READ_CONTACTS" android:writePermission="android.permission.WRITE_CONTACTS">
應(yīng)用簽名機制
Android簽名機制其實是對APK包完整性和發(fā)布機構(gòu)唯一性的一種校驗機制。只有同一包名且采用同一數(shù)字證書的應(yīng)用才被認為是同一個應(yīng)用;數(shù)字證書的最大用途是應(yīng)用升級和設(shè)置應(yīng)用間通信的權(quán)限;
文件訪問控制機制
Android在權(quán)限管理上應(yīng)用了Linux的ACL(Access Control List)權(quán)限機制。
分區(qū)層面
在系統(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。
其他安全機制
網(wǎng)絡(luò)安全 加密算法(敏感數(shù)據(jù)) DES(對稱)、3DES(對稱)、RSA(非對稱)、MD5、RC2/RC4(對稱)、IDEA、AES、BLOWFISH等 Web服務(wù)(HTTP層) 三種手段WS-Security、SSL、數(shù)字簽名。目前ksoap不支持WS-Security TCP層 SSL、TSL 數(shù)據(jù)鏈路層 WAPI
SEAndroid
SE Android(Security-Enhanced Android)是Android與SE Linux的結(jié)合,由美國NSA在2012年推出的Android os的安全強化套件,以支持在Android平臺上使用的SE Linux。DAC和MACDAC(Discretionary Access Control)自主訪問控制 進程理論上所擁有的權(quán)限與執(zhí)行它的用戶的權(quán)限相同。比如,以root用戶啟動Browser,那么Browser就有root用戶的權(quán)限,在Linux系統(tǒng)上能干任何事情。
MAC(Mandatory Access Control)強制訪問控制 即任何進程想在SELinux系統(tǒng)中干任何事情,都必須先在安全策略配置文件中賦予權(quán)限。凡是沒有出現(xiàn)在安全策略配置文件中的權(quán)限,進程就沒有該權(quán)限。
說明:在MAC訪問控制下,有root權(quán)限并不能讀寫訪問任何文件;任何進程訪問特定的資源都需要遵循一定的控制策略。
開啟selinux后的文件上下文
開啟selinx后的進程上下文
分析工具
調(diào)試工具logcat 、adb 、 dumpsyslogcat
logcat[options][filterspecs]#打印log
選項介紹
-b查看日志類型,比如radio,main,events等,默認為main -c清空日志 -s#設(shè)置過濾器 logcat-scallMode:V#tag為callMode,級別為V的log -f#輸出到文件 -v #設(shè)置log的打印格式, 是下面的一種:brief process tag thread raw time threadtime long logformat形式如下: -vprocess#D(4816)volumestatechangedfor/mnt/usbhost3(unmounted->removed)(MountService) -vbrief#I/SystemServer(4816):EnteredtheAndroidsystemserver!.... -g#得到環(huán)形緩沖區(qū)的大小并退出 130|root@mars-200:/#logcat-g /dev/log/main:ringbufferis256Kb(255Kbconsumed),maxentryis5120b,maxpayloadis4076b /dev/log/system:ringbufferis256Kb(111Kbconsumed),maxentryis5120b,maxpayloadis4076b
adb常用命令
adb devices adb shell adb install / uninstall adb pull/push adb shell service list
dumpsys介紹
dumpsys工具用于顯示Android系統(tǒng)詳細信息,dumpsys是強大的系統(tǒng)分析工具,可以查看設(shè)備信息、進程內(nèi)存使用信息、應(yīng)用程序包信息、服務(wù)信息、權(quán)限設(shè)置信息、電源管理狀態(tài)信息及activity信息。工具格式:dumpsys [option]
dumpsys|grepDUMP獲取dump支持的命令; dumpsysactivity:顯示activity的相關(guān)信息,包括任務(wù)棧等; dumpsyswindow:顯示鍵盤,窗口和它們的關(guān)系; dumpsysdiskstats:磁盤相關(guān)信息
安全問題相關(guān)實踐
Android逆向工程
在學(xué)習Android開發(fā)的過程你,你往往會去借鑒別人的應(yīng)用是怎么開發(fā)的,那些漂亮的動畫和精致的布局可能會讓你愛不釋手,作為一個開發(fā)者,你可能會很想知道這些效果界面是怎么去實現(xiàn)的,這時,你便可以對改應(yīng)用的APK進行反編譯查看。
反編譯的目的不是去搞破壞,主要目的是為了促進開發(fā)者學(xué)習,借鑒好的代碼,提升自我開發(fā)水平。
反編譯工具dex2jar apktool jd-gui
步驟如下:
1.將apk文件重命名為.zip文件后解壓縮提取classes.dex
2.通過dex2jar工具將classes.dex文件轉(zhuǎn)成jar包./d2j-dex2jar.sh classes.dex
3.apktool還原apk資源文件./apktool.sh -d test.apk
su權(quán)限管控
可將相關(guān)權(quán)限加入Android運行時權(quán)限管控,根據(jù)簽名、配置文件等控制使用
編輯:黃飛
-
Android
+關(guān)注
關(guān)注
12文章
3973瀏覽量
130265 -
電源管理
+關(guān)注
關(guān)注
117文章
6437瀏覽量
146129 -
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213837 -
網(wǎng)絡(luò)安全
+關(guān)注
關(guān)注
11文章
3343瀏覽量
61483 -
虛擬機
+關(guān)注
關(guān)注
1文章
966瀏覽量
29371
原文標題:Android安全機制介紹及實踐
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
安全管家 Android 1.8.58
Android介紹
[資料分享]+《Android軟件安全與逆向分析》
你的應(yīng)用程序如何保持安全性?
ARM Cortex-M堆棧機制介紹
用戶友好的Android隱私監(jiān)管機制

基于Android安全總結(jié)與分析
谷歌推出Android P版本,改進現(xiàn)有的生物識別身份驗證機制
詳細解答Android消息機制

Android系統(tǒng)電源的管理和省電機制的詳細資料說明

評論