Android安全開發之啟動私有組件漏洞淺談

0x00 私有組件淺談

android應用中,如果某個組件對外導出,那麼這個組件就是一個攻擊面。很有可能就存在很多問題,因為攻擊者可以以各種方式對該組件進行測試攻擊。但是開發者不一定所有的安全問題都能考慮全面。

對於這樣的問題,最方便的修復方式就是在確定不影響業務的情況下,將這個存在問題的組件不對外導出變成私有組件。這樣做的確很有效,私有組件也很安全。但是,如果存在某個私有組件能被導出組件啟動的話,那麼這個私有組件其實就不再是私有了。如果攻擊者可以通過控制導出的組件對私有組件進行控制,那麼攻擊者的攻擊面就大大的擴大了。如果不對這種情況進行關注很可能帶來一系列安全問題。

正常情況:

私有組件能被啟動情況:

0x01 啟動私有組件原理分析

存在一個私有組件A,和一個對外導出組件B。如果B能夠根據對外傳入的Intent中的內容打開私有組件A,同時啟動私有組件A的Intent的內容來自啟動導出組件B的Intent的內容,那麼攻擊者就可以通過對外導出組件B,去控制私有導出組件A。這就可能會造成嚴重的安全風險。

下面用一個簡單例子來說明如果能夠啟動私有組件,能引起的一些安全問題。

PrivateActivity.class

很明顯,PrivateActivity是存在問題的,因為從Intent中直接獲取值之後,沒有做任何異常處理。如果PrivateActivity是私有的一個Activity,並且開發工程師能保證傳入到該Activity的Intent一定有值的話,那麼其實是無法造成威脅的。但是如果存在另外一個MainActivity,如下:

那麼,攻擊者就可以通過著么一條命令去實施攻擊:

那麼應用就會崩潰。

這裡只是一個簡單的demo,用來說明存在問題。如果PrivateAcitivty裡面存在很重要的邏輯業務處理的話,那麼惡意攻擊者可以通過控制MainActivity去控制PrivateActivity,進而控制PrivateActivity裡面的邏輯走向,極有可能造成嚴重危害。

除了以上這種情況之外,還有一種情況,就是Intent Scheme URL,如果處理不當的話,也極有可能通過解析Uri的這個導出的組件去攻擊啟動其他私有組件。本質都是一樣的,這裡就不討論這種情況了。

0x03 啟動私有組件案例分析

這裡以某個app7.5.0版本為例,分析它因為可以啟動私有組件導致的嚴重問題。(目前該app已經沒有再使用有問題的組件,有問題的SDK也早已經修復了這個問題)

首先,這個app存在一個私有組件VersionUpdateActivity:

這個私有組件是用來判斷是否更新的,如果有,會根據Intent中的url鏈接去下載相應的更新apk包。

另外,該apk存在另外一個對外導出的組件。

該組件在實現過程中,通過獲取到的Intent,經過一系列檢查,進入pushClickedResult函數中。

在pushClickedResult函數中,主要做了以下幾個操作:

1、首先獲取intent中activity

2、然後將這個值作為將要啟動的activity的classname

3、將intent傳入將要啟動的activity

4、然後啟動activity

那麼很明顯了,攻擊者可以通過控制XGPushActivity進而控制這個應用的所有私有activity。

攻擊私有組件VersionUpdateActivity的POC如下:

這個命令會打開VersionUpdateActivity,如果存在更新,那麼點擊更新,下載的將是url對應的內容。

0x04 阿里聚安全對開發者的建議

首先,阿里聚安全已經能夠檢測到這樣的問題了。對於上面案例分析中的app,阿里聚安全掃描器掃描到的結果如下:

對於這樣的安全風險,阿里聚安全建議:

1、對於不必要對外導出的組件,請設置exported=false。

2、如果該組件因為各種原因,需要導出,那麼請檢查該組件能不能根據該組件的intent去啟動其他私有組件。如果能,請根據業務嚴格控制過濾和校驗intent中的內容,同時被啟動的私有組件需要做好各種安全防範。

阿里聚安全 | Android安全開發系列文章

Android安全開發之安全使用HTTPS

Android安全開發之通用簽名風險

Android安全開發之ZIP文件目錄遍歷

Android安全開發之Provider組件安全

Android安全開發之淺談密鑰硬編碼

Android安全開發之淺談網頁打開APP

Android應用安全開發之淺談加密演算法的坑

-------------------------------------------------------------------

* 作者:舟海、呆狐@阿里聚安全

更多阿里安全類技術文章,請持續關注阿里聚安全的安全專欄或阿里聚安全官方博客


推薦閱讀:

禁用位置共享也無效,iOS版天氣應用AccuWeather仍可發送用戶位置數據
《超級馬里奧酷跑》火爆全球 中國的玩家可別隨便安裝
IPAPatch: 免越獄調試、修改第三方App
315調查:建行等多家國有銀行手機轉賬現高危漏洞,用戶資金或被非法竊取

TAG:Android开发 | Android | 移动安全 |