Android安全之IntentSchemeUrl攻擊

0X01 前言

Intent scheme url是一種用于在web頁面中啟動(dòng)終端app activity的特殊URL,在針對(duì)intent scheme URL攻擊大爆發(fā)之前,很多android的瀏覽器都支持intent scheme url彤叉。

Intent scheme url的引入雖然帶來了一定的便捷性锅移,但從另外一方面看粟耻,給惡意攻擊頁面通過intent-based攻擊終端上已安裝應(yīng)用提供了便利试读,盡管瀏覽器app已經(jīng)采取了一定的安全策略來減少這一類風(fēng)險(xiǎn),但顯然是不夠的训裆。

2014年3月,一篇關(guān)于intent scheme url攻擊的文章:

Whitepaper – Attacking Android browsers via intent scheme URLs

詳細(xì)介紹了相關(guān)的攻擊手法蜀铲,之后國內(nèi)的漏洞收集平臺(tái)上開始被這一類型漏洞刷屏边琉。

0X02 Intent scheme url解析

一個(gè)intent scheme url的使用示例:

如果瀏覽器支持intent scheme url,在加載了改web頁面后记劝,將根據(jù)url生成一個(gè)intent变姨,并嘗試通過intent打來指定的activity。此過程中瀏覽器的需要完成的工作可以拆分為3步:

Step1:

根據(jù)url生成對(duì)應(yīng)的intent object隆夯,此過程通過以下代碼完成:

Intent intent = Intent.parseUri(url);

intent scheme url的內(nèi)容可以根據(jù)一下語法規(guī)則設(shè)置的比較完善:

intent:

HOST/URI-path // Optional host

#Intent;

package=[string];

action=[string];

category=[string];

component=[string];

scheme=[string];

end;

Step2:

intent過濾钳恕,安全起見,很多瀏覽器對(duì)step1中的intent object進(jìn)行過濾蹄衷,以抵御intent-based攻擊忧额,不用的瀏覽器,過濾規(guī)則各不相同愧口。

Step3:

組件調(diào)用睦番,最后一步就是使用step2過濾后的intent調(diào)用指定的組件,瀏覽器中一般使用Context#startActivityIfNeeded()?或者?Context#startActivity()方法實(shí)現(xiàn)耍属。

下面是各大瀏覽器對(duì)Intent scheme URL的支持情況?:

0X03攻擊場(chǎng)景

主要由兩種攻擊場(chǎng)景托嚣。

類型1:瀏覽器攻擊

因?yàn)閕ntent是瀏覽器依據(jù)url生成并以瀏覽器自己的身份發(fā)送的,因此攻擊者惡意頁面中的intent scheme url不僅可以調(diào)起導(dǎo)出組件厚骗,還可以調(diào)起私有組件示启。

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

intent-based攻擊一般是通過終端上安裝的惡意app來實(shí)現(xiàn)的,但通過瀏覽器加載包含特定intent scheme url的惡意頁面领舰,可以實(shí)現(xiàn)對(duì)終端上安裝的任意app遠(yuǎn)程intent-based攻擊的效果夫嗓。在2013年東京的Pwn2Own上比賽上,次攻擊方式被應(yīng)用于攻陷三星Samsung Galaxy S4冲秽。

0X04?攻擊案例

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

Opera mobile for Android cookie theft

Opera瀏覽器中缺少intent過濾步驟锉桑,一次可以通過惡意頁面中的intent scheme url調(diào)起瀏覽器的任意activity排霉,包括私有的activity,通過如下攻擊代碼可以獲取到Opera瀏覽器的cookie:

"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漏洞利用相對(duì)復(fù)雜,這里先介紹一下Intent Selector袖瞻。Intent Selector機(jī)制提供一種main intent不匹配的情況下可以設(shè)置替補(bǔ)的方案。如下的intent scheme url:

其中“SEL”是selector intent的標(biāo)識(shí)辙售。

在chrome中包含以下代碼:

1:Intent intent = Intent.parseUri(uri);

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

3:intent.setComponent(null);

4:context.startActivityIfNeeded(intent, -1);

第二行添加了BROWSABLE category(目標(biāo)Activity允許本身通過 Web 瀏覽器啟動(dòng),以顯示鏈接引用的數(shù)據(jù),以此過濾/防止一些不該被調(diào)起的組件被調(diào)起)飞涂,第三行將組建設(shè)置為null旦部,用以抵御intent-based攻擊,但如果使用selector intent可以完美的bypass以上限制较店。

以下是android chrome上的一個(gè)UXSS攻擊的POC:

Old stock browser cookie theft

Android stock browser (com.android.browser)的問題類似于android chrome士八,同樣是在step2中對(duì)intent的過濾問題,最終攻擊者可以盜取瀏覽器的cookie梁呈。此漏洞可能只存在于Android 4.3以下的設(shè)備婚度,之后的版本中不一定預(yù)裝stock browser。

0X05?總結(jié)

有效抵御intent scheme url攻擊的方法主要是在step2中對(duì)intent做嚴(yán)格的安全限制:

// 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

騰訊御安全為開發(fā)者推出了安全保護(hù)服務(wù)官卡,其中漏洞掃描蝗茁、應(yīng)用加固、SO加固均達(dá)到業(yè)內(nèi)領(lǐng)先水平寻咒,能夠幫助企業(yè)軟件發(fā)現(xiàn)潛在漏洞風(fēng)險(xiǎn)哮翘、防逆向、防篡改毛秘、防二次打包饭寺。有需求的團(tuán)隊(duì)可以登錄御安全官網(wǎng)試用,或聯(lián)系我們叫挟。

(騰訊御安全原創(chuàng)艰匙,轉(zhuǎn)載請(qǐng)注明來源)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抹恳,隨后出現(xiàn)的幾起案子员凝,更是在濱河造成了極大的恐慌,老刑警劉巖奋献,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绊序,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡秽荞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門抚官,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扬跋,“玉大人,你說我怎么就攤上這事凌节∏仗” “怎么了洒试?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)朴上。 經(jīng)常有香客問我垒棋,道長(zhǎng),這世上最難降的妖魔是什么痪宰? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任叼架,我火速辦了婚禮,結(jié)果婚禮上衣撬,老公的妹妹穿的比我還像新娘乖订。我一直安慰自己,他們只是感情好具练,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布乍构。 她就那樣靜靜地躺著,像睡著了一般扛点。 火紅的嫁衣襯著肌膚如雪哥遮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天陵究,我揣著相機(jī)與錄音眠饮,去河邊找鬼。 笑死畔乙,一個(gè)胖子當(dāng)著我的面吹牛君仆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牲距,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼返咱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了牍鞠?” 一聲冷哼從身側(cè)響起咖摹,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎难述,沒想到半個(gè)月后萤晴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胁后,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年店读,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀芯。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屯断,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殖演,我是刑警寧澤氧秘,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站趴久,受9級(jí)特大地震影響丸相,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彼棍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一灭忠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滥酥,春花似錦更舞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘦真,卻和暖如春刊头,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诸尽。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工原杂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人您机。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓穿肄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親际看。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咸产,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容