Android安全之Intent Scheme Url***

0X01 前言

Intent scheme url是一種用於在web頁面中啓動終端app activity的特殊URL,在針對intent scheme URL***大爆發之前,很多android的瀏覽器都支持intent scheme url。

Intent scheme url的引入雖然帶來了一定的便捷性,但從另外一方面看,給惡意***頁面通過intent-based***終端上已安裝應用提供了便利,儘管瀏覽器app已經採取了一定的安全策略來減少這一類風險,但顯然是不夠的。

2014年3月,一篇關於intent scheme url***的文章:

Whitepaper – Attacking Android browsers via intent scheme URLs

詳細介紹了相關的***手法,之後國內的漏洞收集平臺上開始被這一類型漏洞刷屏。

  

0X02 Intent scheme url解析

一個intent scheme url的使用示例:

wKiom1hOclDydn9kAAA4xm6ep0I767.png-wh_50


如果瀏覽器支持intent scheme url,在加載了改web頁面後,將根據url生成一個intent,並嘗試通過intent打來指定的activity。此過程中瀏覽器的需要完成的工作可以拆分爲3步:

 

Step1:

根據url生成對應的intent object,此過程通過以下代碼完成:

Intent intent = Intent.parseUri(url);

intent scheme url的內容可以根據一下語法規則設置的比較完善:

intent:

   HOST/URI-path // Optional host

   #Intent;

      package=[string];

      action=[string];

      category=[string];

      component=[string];

      scheme=[string];

   end;

 

Step2:

intent過濾,安全起見,很多瀏覽器對step1中的intent object進行過濾,以抵禦intent-based***,不用的瀏覽器,過濾規則各不相同。

 

Step3:

組件調用,最後一步就是使用step2過濾後的intent調用指定的組件,瀏覽器中一般使用Context#startActivityIfNeeded() 或者 Context#startActivity()方法實現。

下面是各大瀏覽器對Intent scheme URL的支持情況 :

wKioL1hOclDyzkYeAABzYJPL0-w052.png-wh_50

 

0X03***場景 

主要由兩種***場景。

類型1:瀏覽器***

因爲intent是瀏覽器依據url生成並以瀏覽器自己的身份發送的,因此***者惡意頁面中的intent scheme url不僅可以調起導出組件,還可以調起私有組件。

 

類型2:終端上安裝的任意APP

intent-based***一般是通過終端上安裝的惡意app來實現的,但通過瀏覽器加載包含特定intent scheme url的惡意頁面,可以實現對終端上安裝的任意app遠程intent-based***的效果。在2013年東京的Pwn2Own上比賽上,次***方式被應用於攻陷三星Samsung Galaxy S4。

 

 

0X04 ***案例

以下介紹三個瀏覽器的intent scheme url***案例,***主要源於這些瀏覽器在step2(也就是intent過濾過程)中存在缺陷。

 

Opera mobile for Android cookie theft

Opera瀏覽器中缺少intent過濾步驟,一次可以通過惡意頁面中的intent scheme url調起瀏覽器的任意activity,包括私有的activity,通過如下***代碼可以獲取到Opera瀏覽器的cookie:

wKiom1hOclHBxU31AAAZvtNeVV4205.jpg-wh_50


"com.admarvel.android.ads.AdMarvelActivity"是Opera瀏覽器的私有組件,"url=file:///data/data/com.opera.browser/app_opera/cookies"是Opera瀏覽器cookie文件的存放位置。

 

Chrome for Android UXSS (Universal XSS)

Chrome的UXSS漏洞利用相對複雜,這裏先介紹一下Intent Selector。Intent Selector機制提供一種main intent不匹配的情況下可以設置替補的方案。如下的intent scheme url:

wKioL1hOclTC3AAGAAANuz9rrH4489.jpg-wh_50


其中“SEL”是selector intent的標識。

在chrome中包含以下代碼:

1Intent intent = Intent.parseUri(uri);

2intent.addCategory("android.intent.category.BROWSABLE");

3intent.setComponent(null);

4context.startActivityIfNeeded(intent, -1);

第二行添加了BROWSABLE category(目標Activity允許本身通過 Web 瀏覽器啓動,以顯示鏈接引用的數據,以此過濾/防止一些不該被調起的組件被調起),第三行將組建設置爲null,用以抵禦intent-based***,但如果使用selector intent可以完美的bypass以上限制。

以下是android chrome上的一個UXSS***的POC:

wKioL1hOclWCeZyhAAA7BItBPXw120.jpg-wh_50

 

Old stock browser cookie theft

Android stock browser (com.android.browser)的問題類似於android chrome,同樣是在step2中對intent的過濾問題,最終***者可以盜取瀏覽器的cookie。此漏洞可能只存在於Android 4.3以下的設備,之後的版本中不一定預裝stock browser。

 

 

0X05 總結

有效抵禦intent scheme url***的方法主要是在step2中對intent做嚴格的安全限制:

// convert intent scheme URL to intent object

Intent intent = Intent.parseUri(uri);

// forbid launching activities without BROWSABLE category

intent.addCategory("android.intent.category.BROWSABLE");

// forbid explicit call

intent.setComponent(null);

// forbid intent with selector intent

intent.setSelector(null);

 // start the activity by the intent

context.startActivityIfNeeded(intent, -1);

 

 

0X06 參考

http://www.mbsd.jp/Whitepaper/IntentScheme.pdf

  

騰訊御安全爲開發者推出了安全保護服務,其中漏洞掃描、應用加固、SO加固均達到業內領先水平,能夠幫助企業軟件發現潛在漏洞風險、防逆向、防篡改、防二次打包。有需求的團隊可以登錄御安全官網試用。

 

(騰訊御安全原創,轉載請註明來源)

 


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