Android app漏洞挖掘初探(1)-android權限機制和默認場景配置

開始學習。

一 android權限機制

在android系統的安全模型中,應用程序在默認的情況下不可以執行任何對其他應用程序,系統或者用戶帶來負面影響的操作。如果應用需要執行某些操作,就需要聲明使用這個操作對應的權限。(在manifest文件中添加< uses-permission >標記)。
android 系統提供了一系列這樣的權限,具體可以查看android 權限。當然,app也可以自定義屬於自己的permission 或屬於開發者使用的同一個簽名的permission。定義一個permission 就是在menifest文件中添加一個permission標籤。如果權限控制不當,那麼就會導致各種越權等安全問題的發生。

使用權限 添加uses-permission

<usespermission android: name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="23"/>

爲了保證application的正常運行,需要系統授予app的權限聲明。這個權限是在用戶安裝應用的時候授予的。6.0後運行時進行權限處理。

android:name的值可以是其他app通過<permission>聲明的(用於兩個應用之間的交互),也可以是系統的權限名稱,例如讀取聯繫人權限、打開攝像頭權限等。

android:maxSdkVersion用來標註該權限所支持的最大api版本號,如果當從某個特定版本時,不需要該權限時就可以加上該限制。

自定義權限 Permission

<permission android:description="string resource"
android:icon="drawable resource'
android:label="string resource"
android:name="string"
android:permissionGroup="string'
android:protectionLevel= ["normal"|"dangerous"|"signature"|"signatureOrSystem"] />
android:description:對權限的描述,一般是兩句話,第一句話描述這個權限所針對的操作,第二句話告訴用戶授予app這個權限會帶來的後果。

android:label: 對權限的一個簡短描述。

android:permissionGroup: 權限所屬權限組的名稱。

android:protectionLevel: 權限的等級。

Normal, 表示權限是低風險的,不會對系統、用戶或其他應用程序造成危害。
Dangerous, 表示權限是高風險的,系統將可能要求用戶輸入相關信息,纔會授予此權限;
Signature, 表示只有當應用程序所用數字簽名與聲明引權限的應用程序所用數字簽名相同時,才能將權限授給它;
signatureOrSystem,與signature類似,只是增加了rom中自帶的app的聲明,是指系統image中APP和具有相同簽名
的APP可以訪問和共享此App,谷歌建議不要使用這個選項,因爲簽名就足夠了。

對於普通和危險級別的權限,我們稱之爲低級權限,應用申請即授予。其他兩級權限,我們稱之爲高級權限或系統權限。當應用試圖在沒有權限的情況下做受限操作,應用將被系統殺掉以警示。系統應用可以使用任何權限。權限的聲明者可無條件使用該權限。
相關漏洞:權限泄漏漏洞。

二 默認設置漏洞

AndroidManifest.xmI配置文件中默認設置相關問題

1. allowBackup默認設置風險

Android 2.1以上的系統可爲APP 提供應用程序數據的備份和恢復功能,該AndroidMainfest.xml。文件中的allowBackup 屬性值控制,其默認值爲true。當該屬性沒有顯式設置爲false 時,攻擊者可通
adb backupadb restore 對APP 的應用數據進行備份和恢復,從而可能獲取明文存儲的用戶敏感信息,如用戶的密碼、證件號、手機號、交易密碼、身份令牌、服務器通信記錄等。利用此類信息攻擊者可僞造用戶身份,盜取用戶賬戶資產,或者直接對服務器發起攻擊。
android:allowBackup如果不顯示設置,默認值爲true。應顯示設爲false;

android:restoreAnyVersion設置這個屬性表示應用程序準備嘗試恢復任何備份的數據集,即使備份比設備上當前安裝的應用程序
的版本要新。這個屬性設置爲true,即使是在版本不匹配而產生數據兼容性提示的時候,也會允許備份管理來恢復備份的數據,所以要謹慎使用。這個屬性的默認值是false。

2. Debuggable默認設置風險

這個屬性用於指定應用程序是否能夠被調試,即使是以用戶模式運行在設備上的時候。如果設置爲true,則能夠被調試,否則不能調試,默認值是false。
客戶端軟件AndroidManifest.xml 中的調試標記如果開啓,可被Java 調試工具例如jdb 進行調試,獲取和篡改用戶敏感信息,甚至分析並且修改代碼實現的業務邏輯,例如竊取用戶密碼,繞過驗證碼防護等。

3. 組件默認導出風險
請參考app漏洞挖掘初探(0)

WebView的默認設置問題

在Android開發中,經常會使用WebView來實現WEB頁面的展示,在Activiry中啓動自己的瀏覽器,或者簡單的展示一些在線內容等。WebView功能強大,應用廣泛,一方面它增強了APP的上網體驗,讓APP功能更多樣化,另一方面它也引入了很多的安全問題。在過去幾年WebView中被披露的重大漏洞包括了任意代碼執行漏洞、跨域、密碼明文保存等,這些安全問題可以直接導致用戶敏感信息泄露,移動終端被惡意攻擊者控制。

setAllowFileAccess()
setAllowContentAccess()
setAllowFileAccessFromFileURLs()
setAllowUniversalAccessFromFileURLs()

setSavePassword()

WebView默認開啓密碼保存功能mWebView.setSavePassword(true),如果該功能未關閉,在用戶輸入密碼時,會彈出提示框,詢問用戶是否保存密碼,如果選擇“是”,密碼會被明文保到/data/data/com.package.name/databases/webview.db ,如果手機被root之後,獲取root權限的APP就可以任意讀取私有目錄下的文件去獲取用戶的密碼,因此建議用戶密碼需要加密存儲

setAllowFileAccess()

在File域下,能夠執行任意的JavaScript代碼,
同源策略跨域訪問能夠對私有目錄文件進行訪問等。APP對嵌入的WebView**未對file/// 形式的URL做限制**,會導致隱私信息泄露,
針對IM類軟件會導致聊天信息、聯繫人等等重要信息泄露,針對瀏覽器類軟件,則更多的是cookie信息泄露。

JELLY_BEAN( Android 4.1) 以前的版本默認是setAllowFileAccessFromFileURLs(true),允許通過file域url中的Javascript讀取其他本地文件,在JELLY_BEAN及以後的版本中默認已被是禁止。但是有個例外,當setAllowUniversalAccessFromFileURLs()的值爲true時這個函數設置的值就不起作用了。在JELLY_BEAN以前的版本默認是setAllowUniversalAccessFromFileURLs(true),允許通過file域url中的Javascript訪問其他的源,包括其他的本地文件和http,https源的數據。在JELLY_BEAN及以後的版本中默認已被禁止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章