Service組件暴露 - exported屬性
一、android:exported
該屬性用來標示,其他應用的組件是否可以喚醒Service或者和這個Service進行交互
1. true
表示可以
2. false
【1】表示不可以,只有同一個應用的組件或者有着同樣user ID的應用可以啓動這個Service或者綁定這個Service
【2】關於user ID的參考鏈接
http://yelinsen.iteye.com/blog/977683
3. 默認值
【1】 根據當前Service是否有intent filter標籤來定
- 沒有intent filter - 默認值爲false
沒有任何的filter意味着這個Service只有在詳細的描述了它的class name後纔會被喚起,這表示當前Service只能在應用內部使用,因爲其它應用程序並不知道這個class的存在,所以在這種情況下,它的默認值是false
- 有intent filter - 默認值爲true
如果Service裏面至少有一個filter的話,意味着該Service可以被外部應用使用,這個時候它的默認值是true
4. 權限控制
【1】不只有exported這個屬性可以指定Service是否暴露給其它應用,也可以使用permission來限制外部實體喚醒當前Service
【2】android:permission
指定喚醒Service或與Service交互所需要的權限名稱
5. 參考鏈接
http://blog.csdn.net/watermusicyes/article/details/46460347
二、觸發條件
1. 定位AndroidManifest.xml文件中的Service組件
【1】對應的特徵:<service
2. exported屬性的判斷
【1】android:permission 如果設置權限控制,就認爲不存在安全風險
【2】exported屬性設置爲true
顯示設置 android:exported="true"
默認值爲true,也就是具有intent filter標籤,對應的特徵:<intent-filter
三、漏洞原理
【1】導出的Service組件可以被第三方APP任意調用,導致敏感信息泄露,並可能受到權限提升、拒絕服務等***風險
【2】詳細的原理&POC
http://www.droidsec.cn/android-service-security/
http://drops.wooyun.org/tips/4907
四、修復建議
【1】如果應用的Service組件不必要導出,或者組件配置了intent filter標籤,建議顯示設置組件的“android:exported”屬性爲false
【2】如果組件必須要提供給外部應用使用,建議對組件進行權限控制
轉自:
http://blog.csdn.net/u013107656/article/details/51891152