天天看點

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

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

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

正常情況:

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

私有元件能被啟動情況:

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

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

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

privateactivity.class

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

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

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

那麼,攻擊者就可以通過着麼一條指令去實施攻擊:

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

那麼應用就會崩潰。

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

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

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

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

首先,這個app存在一個私有元件versionupdateactivity:

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

這個私有元件是用來判斷是否更新的,如果有,會根據intent中的url連結去下載下傳相應的更新apk包。

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

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

該元件在實作過程中,通過擷取到的intent,經過一系列檢查,進入pushclickedresult函數中。

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

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

1、首先擷取intent中activity

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

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

4、然後啟動activity

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

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

攻擊私有元件versionupdateactivity的poc如下:

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

這個指令會打開versionupdateactivity,如果存在更新,那麼點選更新,下載下傳的将是url對應的内容。

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

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

對于這樣的安全風險,阿裡聚安全建議:

1、對于不必要對外導出的元件,請設定exported=false。

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

<a href="https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.bk6d6s&amp;articleid=545">android安全開發之安全使用https</a>

<a href="https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.bk6d6s&amp;articleid=457">android安全開發之通用簽名風險</a>

<a href="https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.bk6d6s&amp;articleid=383">android安全開發之zip檔案目錄周遊</a>

<a href="https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.bk6d6s&amp;articleid=352">android安全開發之provider元件安全</a>

<a href="https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.bk6d6s&amp;articleid=321">android安全開發之淺談密鑰寫死</a>

<a href="https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.bk6d6s&amp;articleid=265">android安全開發之淺談網頁打開app</a>

<a href="https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.bk6d6s&amp;articleid=209">android應用安全開發之淺談加密算法的坑</a>

繼續閱讀