1. 程式人生 > >Android靜態安全檢測 -> Activity元件暴露

Android靜態安全檢測 -> Activity元件暴露

Activity元件暴露 - exported屬性

一、android:exported

該屬性用來標示,當前Activity是否可以被另一個Application的元件啟動

1. true

表示允許被啟動

2. false

【1】表示不允許被啟動,這個Activity只會被當前Application或者擁有同樣user ID的Application的元件呼叫

【2】關於user ID的參考連結

3. 預設值

【1】根據Activity中是否有intent filter標籤來定

  -  沒有intent filter - 預設值為false

沒有任何的filter意味著這個Activity只有在詳細的描述了它的class name後才能被喚醒,這意味著這個Activity只能在應用內部使用,因為其它應用程式並不知道這個class的存在,所以在這種情況下,它的預設值是false

  -  有intent filter - 預設值為true

如果Activity裡面至少有一個filter的話,意味著這個Activity可以被其它應用從外部喚起,這個時候它的預設值是true

4. 許可權控制

【1】不只有exported這個屬性可以指定Activity是否暴露給其它應用,也可以使用permission來限制外部實體喚醒當前Activity

【2】android:permission  指定啟動該Activity所需要的許可權名稱

5. 參考連結

二、觸發條件

1. 定位AndroidManifest.xml檔案中的Activity元件

【1】對應的特徵:
<activity

2. exported屬性的判斷

【1】android:permission 如果設定許可權控制,就認為不存在安全風險

【2】exported屬性設定為true

顯示設定android:exported="true"

預設值為true,也就是具有intent filter標籤,對應的特徵:<intent-filter

3.主Activity(MainActivity)

【1】應用程式需要包含至少一個Activity元件來支援MAIN操作和LAUNCHER種類,即為主Activity

  對應的特徵

【2】暴露的Activity元件不包括主Activity

三、漏洞原理

【1】匯出的Activity元件可以被第三方APP任意呼叫,導致敏感資訊洩露,並可能受到繞過認證、惡意程式碼注入等攻擊風險

【2】詳細的原理&POC

四、修復建議

【1】如果應用的Activity元件不必要匯出,或者元件配置了intent filter標籤,建議顯示設定元件的“android:exported”屬性為false

【2】如果元件必須要提供給外部應用使用,建議對元件進行許可權控制