劉惠明 騰訊玄武實(shí)驗(yàn)室安全研究員
首先做沙箱方面的簡介,之后介紹我們研究的動(dòng)機(jī),在此基礎(chǔ)上我們會(huì)實(shí)現(xiàn)三步對沙箱的攻擊,首先是實(shí)現(xiàn)關(guān)掉瀏覽器頁面之后仍然能夠存在的。第二個(gè)即使重啟設(shè)備攻擊仍然是有效的,第三個(gè)甚至重裝系統(tǒng)攻擊仍然是有效的。
大家都用過瀏覽器,在瀏覽器上面打開一個(gè)頁面那個(gè)頁面和瀏覽器主進(jìn)程之間是不一樣的,如果它一樣,我只要攻擊了一個(gè)頁面,其他瀏覽器的很多內(nèi)容都能被我獲取到,為了規(guī)避這樣的情況,現(xiàn)在主流瀏覽器全部加上了一個(gè)(英),一個(gè)沙箱的機(jī)制,一個(gè)沙箱就是一個(gè)獨(dú)立的進(jìn)程,當(dāng)(英)沒有渲染和GS執(zhí)行的時(shí)候會(huì)在一個(gè)獨(dú)立的進(jìn)程里面進(jìn)行渲染,如果出現(xiàn)問題也不會(huì)影響其他的情況,它有幾個(gè)不同的限制,這邊列出的就是資源方面的限制,它本身獲取到的資源有限,IBC和內(nèi)核交互也有限制,在此之外,現(xiàn)在也有一些新的瀏覽器也加上了一個(gè)(英),一個(gè)頁面上可能有不同站點(diǎn)的頁面元素,每個(gè)站點(diǎn)元素在不同的進(jìn)程中存在,就算攻陷了其中一個(gè)頁面的進(jìn)程你也無法去把整個(gè)頁面其他來源的(英)拿到,它已經(jīng)在2018年5月份在(英)上面已經(jīng)生效了,而且是默認(rèn)開啟。
除此之我們要知道的是沙箱逃逸是非常困難的事情,現(xiàn)在想象一下手機(jī)上打開一個(gè)惡意頁面,可能你覺得是正常頁面,你連到了一個(gè)會(huì)場wifi中,隨便打開一個(gè)頁面它可能就在攻擊你,然后拿到你瀏覽器的執(zhí)行權(quán)限之后,僅僅能干的事情把自己本身的頁面能偷到,但是不能干其他的事情,就是因?yàn)樯诚涞南拗疲绻胱龈嗟氖虑?,需要把沙箱給突破,突破沙箱是非常困難的,因?yàn)樯诚溆泻芏嘈绿匦詴?huì)把很多東西都限制起來,一般情況下大家能夠開發(fā)的特性越多,那么你的漏洞會(huì)越多,沙箱不是這樣,沙箱特性越多,限制越多,攻擊越困難,越加越多的限制之后沙箱越來越攻擊困難,大家也可以了解從一個(gè)側(cè)面跟大家描述一下,因?yàn)榇蠹叶贾酪粋€(gè)東西的難度跟它的價(jià)值是有正關(guān)系的,可以清楚的看到(英),(英)上突破沙箱要50萬美元,一個(gè)漏洞是50萬美元,如果沒有沙箱逃逸只給7500美元,這就體現(xiàn)了沙箱逃逸本身漏洞的難度和價(jià)值所在,每年也會(huì)有沙箱逃逸漏洞存在,但是比較困難,我們能不能改變思路,在沙箱內(nèi)部攻擊而不直接打倒它,是不是也能獲取很多攻擊的結(jié)果?我們投入需要性價(jià)比,我拿一個(gè)50萬美元的漏洞去打一個(gè)受害者投入產(chǎn)出比是非常低的,如果沒有突破沙箱直接突破7500美元就可以達(dá)到,不打破沙箱可以做什么事情,這就是我們研究的東西,有很多之前的工作,在沙箱中不突破,可以干一些(英)橫向移動(dòng),端口掃描,做攻擊的人比較清楚,但是它本身也干不了更多的事情,只能在這個(gè)頁面當(dāng)中進(jìn)行,一旦關(guān)掉了惡意頁面所有攻擊全都失效,在頁面打開的情況下,我們可以通過一些頁面上展示的方法,就不一一展開了,當(dāng)(英)打開的時(shí)候保持攻擊持久化是可行的,但是完掉這個(gè)頁面之后,攻擊代碼是否還在手機(jī)或者是電腦里,一般情況下是不在了,之后我們的研究思路是什么?首先第一點(diǎn)想到的是就算關(guān)掉了瀏覽器頁面,發(fā)現(xiàn)這個(gè)頁面你把它關(guān)掉,關(guān)掉之后是不是惡意代碼能不能不讓它消失?這就是我們的目標(biāo),我們的目標(biāo)是把惡意代碼攻擊的思路站在攻擊者的角度,他們就想把惡意代碼保持的越久越好, 可以通過渲染器進(jìn)程的(英)拿到當(dāng)你關(guān)閉這個(gè)頁面之后,惡意代碼仍然在的攻擊方式,之后我們再使用(英)污染機(jī)制,即使打開一個(gè)惡意頁面把手機(jī)重啟了,惡意頁面還在,之后我們就提出了一個(gè)新的攻擊思路叫做(英),通過這樣的方式即使升級了瀏覽器,把這樣的方式裝上仍然能夠控制你的賬戶,相關(guān)細(xì)節(jié)就一筆帶過,會(huì)把主要思路給大家講一下。
渲染器進(jìn)程,我們的目標(biāo)就是關(guān)掉這個(gè)頁面之后依然存在,方式就是把退出的方式給(英)掉,我現(xiàn)在能夠在你的頁面中執(zhí)行任意代碼,這是我們的攻擊思路,試想一下這樣的場景,打開手機(jī)頁面,關(guān)掉,那個(gè)瀏覽器頁面還在,瀏覽器只是認(rèn)為我把它關(guān)掉之后這個(gè)頁面就不應(yīng)該顯示了,不顯示之后頁面還在后臺,是不是會(huì)被瀏覽器殺掉,如果不殺掉是不是就存在在你的后臺?關(guān)閉頁面有兩種方式,第一種是我告訴這個(gè)頁面我要關(guān)掉你了,你把自己殺掉。第二種當(dāng)我發(fā)現(xiàn)你沒殺掉自己之后,我會(huì)強(qiáng)制把你給做掉,如果沒有用第二種思路,僅僅告訴它自己關(guān)掉,豈不是就是一種攻擊思路,我們測試了一下發(fā)現(xiàn)在windows上(英)和安卓上的(英)都可以實(shí)現(xiàn)這樣的攻擊,現(xiàn)在安卓手機(jī)打開一個(gè)頁面,現(xiàn)在關(guān)掉頁面,那個(gè)頁面一直在后臺運(yùn)行著,這都是可以存在的,我們成功的在IE和Firefox,就是告訴這個(gè)頁面自己關(guān)掉,chrome如何關(guān)閉tab,我們研究一下chrome,chrome是通過兩種方式,首先會(huì)讓它自己殺自己,會(huì)返回我正在跑的狀態(tài),發(fā)現(xiàn)你還在運(yùn)行的時(shí)候,我們在第二個(gè)進(jìn)程里面會(huì)調(diào)(英),調(diào)到最后是(英),在(英)上面是要去殺它,在這樣的情況下,chrome在mac是不可以實(shí)現(xiàn)這樣的攻擊,在安卓上面是可以的,在安卓上面有一個(gè)特殊的機(jī)制,一般情況下大家理解打開一個(gè)頁面,本身這個(gè)頁面應(yīng)該是瀏覽器進(jìn)程產(chǎn)生的,但是在安卓上卻不是這樣的,安卓有一個(gè)特殊的機(jī)制叫做(英),發(fā)現(xiàn)沙箱進(jìn)程負(fù)進(jìn)程其實(shí)不是(英),負(fù)進(jìn)程是在(英)這個(gè)特殊的進(jìn)程,特殊進(jìn)程是(英)tab頁面,瀏覽器想殺它是殺不掉的,他們兩個(gè)權(quán)限是在一個(gè)層級,都是在應(yīng)用權(quán)限,其次他們倆也沒有上下級,這里是殺不掉,殺不掉當(dāng)然就出現(xiàn)了問題,(英)進(jìn)程無法把(英)進(jìn)程正確的殺掉,谷歌現(xiàn)在已經(jīng)修了,通過(英)的方式,把它給修掉了,也是一個(gè)相關(guān)的漏洞CVE,大家有興趣可以看一下,在整體的實(shí)現(xiàn)思路就是(英)API,API只要我自己不關(guān)閉就不殺掉,別人不殺我我就一直在,我的惡意頁面一直在我的后臺運(yùn)行。
我們就實(shí)現(xiàn)了第一種攻擊思路,在我關(guān)閉了頁面之后惡意代碼仍然存在,不僅關(guān)掉頁面,又把瀏覽器關(guān)掉了,甚至把我的設(shè)備都關(guān)掉了,是不是我惡意攻擊還能存在?我們繼續(xù)往下研究,發(fā)現(xiàn)通過cache是可以實(shí)現(xiàn)的,為什么使用cache,本身瀏覽器它是經(jīng)常會(huì)使用的,大家覺得我打開瀏覽器不多,但是你打開微信,打開支付寶上面點(diǎn)的每一個(gè)按鈕,每一個(gè)鏈接都是用瀏覽器渲染后臺的,現(xiàn)在相關(guān)的特性和速度大家覺得非常重要,cache是提升速度非常重要的方式,我把常用的方式cache到本地,就不用隨時(shí)到本地下載,現(xiàn)在cache用的非常多,每個(gè)瀏覽器都會(huì)把常用的資源和代碼cache,而這些cache會(huì)帶來一定的問題,首先它廣泛用于各大瀏覽器。其次可以保存很長的時(shí)間,最后它可以被污染,cache污染也是我在拿到瀏覽器tab頁面可以做的事情,研究之后針對HTTPcache,這只是其中的一個(gè)cache,為了方便講述,我們需要通過污染HTTPcache拿到一個(gè)持久權(quán),我們成功在windows,MAC都做了實(shí)驗(yàn),但安卓和其他限于時(shí)間,就沒有都做這個(gè)實(shí)驗(yàn),完全都是可以的。
這是我們的攻擊思路,攻擊者可以控制受害者打開一個(gè)頁面,或者是受害者打開攻擊頁面,會(huì)把這個(gè)頁面相關(guān)的cache污染代碼給注入進(jìn)去,之后我需要把這個(gè)頁面設(shè)計(jì)它跳轉(zhuǎn)到一個(gè)我要的頁面上,比如說谷歌的(英),之后用受害者打開這個(gè)頁面之后就會(huì)有cache的出發(fā),它為了速度快肯定要先看一下本地有沒有,發(fā)現(xiàn)本地有,我就不會(huì)在網(wǎng)上下載,就會(huì)加載污染cache,打開之后我就可以把我相關(guān)的代碼給觸發(fā)掉,好像聽起來很簡單,因?yàn)橛衏ache的存在,只要把它污染,之后每次打開瀏覽器,打開頁面都會(huì)產(chǎn)生這樣的結(jié)果,而我們攻擊的方式是污染新頁面的tab,每次打開新頁面就會(huì)觸發(fā)代碼,所有人都會(huì)打開一個(gè)新頁面有這個(gè)操作,我是能夠一直在你的瀏覽器當(dāng)中存在的。
我們看一下我們是怎么實(shí)現(xiàn)的,這是第一步,首先我要獲取你的遠(yuǎn)程代碼執(zhí)行權(quán)限,因?yàn)闉g覽器越來越重視性能,可能加很多提升方式,它漏洞的數(shù)量就不是特別少,幾乎每個(gè)月都有一個(gè)非常好的控制你手機(jī)瀏覽器的漏洞出現(xiàn),而這些漏洞能夠非常輕易的被攻擊者拿到,拿到你手機(jī)瀏覽器tab控制權(quán),拿到你瀏覽器頁面控制權(quán)之后,把相關(guān)cache的代碼給放進(jìn)去,我現(xiàn)在放到頁面上是一個(gè)測試的,轉(zhuǎn)入目標(biāo)頁面注入payload,我們注入的是(英)頁面,大家都要打開,每次打開都會(huì)觸發(fā),每次它打的時(shí)候我們就會(huì)(英)一下,受害者打開目標(biāo)頁面,每次打開瀏覽器,打開新頁面的時(shí)候,都會(huì)受害,手機(jī)重啟或者是瀏覽器重啟都是可以的,它還是一直存在,每次(英)能注意到,如果注入的是密碼GS,就完全注意不到了。
我們能存活多久?是有幾個(gè)字段控制存活長度,控制的方式比較方式,這邊不再具體講,我們測試了之后在有限的測試環(huán)境下兩天時(shí)間是完全可以的。
如何獲取更久的存活?因?yàn)檫@個(gè)cache是會(huì)過期的,根據(jù)每個(gè)頁面的屬性都不一樣,可能存儲(chǔ)幾天可能這個(gè)cache就該更新了,如何活的更久?如何讓我的惡意代碼,攻擊者,怎么讓更久的存活?像(英)存活更久的本地cache,(英)是一個(gè)網(wǎng)站為了提升訪問速度的思路,把常用的GS代碼,拉下來以后直接存到本地,下一次直接用,是沒有過期時(shí)間的,分析了前一萬個(gè)域名,發(fā)現(xiàn)四千個(gè)網(wǎng)站把(英)存在本地,只要把這個(gè)(英)里面的GS代碼污染,每次打開這些頁面都會(huì)觸發(fā)惡意代碼,這是在國內(nèi)講,不方便放國內(nèi)的廠商,一萬多個(gè)四千多個(gè)都有大家可以想象到,它不是一個(gè)漏洞,本身僅僅是為攻擊者打開一個(gè)持久化大門,能讓廠商說你不要用(英)嗎,也不行,是為了提升速度,為了提升速度帶來的麻煩我們要了解的。
在此之外,新的瀏覽器特性也注意到這些點(diǎn),也開了更多的特性,像Site Isolation在我們的攻擊當(dāng)中,過不了Site Isolation,有了Site Isolation之后,每一個(gè)頁面上的站點(diǎn)都會(huì)是一個(gè)進(jìn)程,互相之間是沒法污染的,一個(gè)攻擊者,比如說叫(英),它的GS是沒法污染到(英)GS的,即使你們在一個(gè)頁面中用(英)連接進(jìn)來也是沒辦法污染的,但是我們也把它給突破了,我們是怎么突破的,首先先看一下Site Isolation是在(英),去年上去的,它當(dāng)時(shí)是為了緩解(英)攻擊,當(dāng)時(shí)是一個(gè)幽靈漏洞,正好把我們的攻擊思路也給修掉了,它不同的頁面會(huì)在不同的進(jìn)程里,如何繞過它,我們在此基礎(chǔ)上研究了其他的cache,發(fā)現(xiàn)其中有一個(gè)特殊的cache叫做V8代碼cache,而這個(gè)代碼也是cache的一種,但是并不受(英)的影響,我們可以用它實(shí)現(xiàn)長久的攻擊,(英)它的核心函數(shù)在(英)里面,相關(guān)的攻擊策略跟剛才的有點(diǎn)類似,受害者打開頁面,攻擊者可以獲取頁面控制權(quán),之后打開一個(gè)被污染的頁面之后可以觸發(fā)代碼,其中會(huì)有很多比較多的(英)在里面,我們需要把其中的(英)給匹配上,因?yàn)楸旧磉@個(gè)(英)并不是說你給他任何一個(gè)東西都可以,他需要看的是正常(英),我們可以分析一下在第一次check的時(shí)候會(huì)有這么多的流程,在其中最主要的是標(biāo)黃這一點(diǎn),(英)它是一個(gè)比較重要的參數(shù),我們需要把這個(gè)東西給模擬出來,怎么拿到相關(guān)的參數(shù)模擬出來正確的check?渲染進(jìn)程通過自身獲?。ㄓⅲ?,之后通過這樣的思路,同樣的方式去(英)請求我們需要的(英),獲取之后就可以把其中的(英)找出來構(gòu)建出來正常的(英),過了這個(gè)check就會(huì)有額外的check,剛才是部署時(shí)候的check,也是跟剛才一樣,也會(huì)檢查一些參數(shù)是否匹配,而這些參數(shù)恰好我們也能拿到,比如說(英)我們可以看到是通過這樣的計(jì)算方式拿到的,這就不展開講,計(jì)算方法包括(英)我們都在tab的權(quán)限下獲取到的,之后我們可以通過比較公開的特征把它給繞過,check C也是一樣,這邊就不展開講,之后我們成功的在(英)兩個(gè)月前的最新版本實(shí)現(xiàn)了cache持久化,即使打開了(英)最新的特性,我仍然可以在你的頁面中長久的存在,打開惡意頁面重啟瀏覽器、手機(jī)都沒用,這是我們相關(guān)的攻擊思路,首先(英)它的函數(shù),構(gòu)建payload,構(gòu)建相關(guān)的payload,可以把這個(gè)cache寫進(jìn)去,通過一個(gè)(英)也是一樣的(英),讓大家清楚的看到我們攻擊成功了,注入進(jìn)去,V8的code cache是不受跨域污染,這個(gè)code cache是執(zhí)行權(quán)限的cache,是在頁面當(dāng)中需要執(zhí)行的片段,在cache持久化的防御方面,我們會(huì)發(fā)現(xiàn)它有很多的cache,檢查了很多次,我們一一把它突破,這是為什么?是因?yàn)楹诵哪軌蛟谖易约旱臋?quán)限當(dāng)中獲取所有的cache相關(guān)的知識,仍然能夠把cache過掉,我們現(xiàn)在就需要提出一些思路,本身是有(英)進(jìn)程來限制,而不是由你自己來限制,而(英)不能修改其他(英)的限制,同時(shí)跟剛才的思路一樣,我們在(英)進(jìn)程那邊得設(shè)置一些我tab不知道的東西去cache才能真正防御,否則加上之后在下面仍然能把你過掉,(英)加上(英),大家也不用擔(dān)心這是我們之前的例子,這是它的評估,在V8 cache這一方面可以實(shí)現(xiàn)在重啟手機(jī)之后仍然存在,如果重啟(英)到一個(gè)新的(英),直接升級了(英),重裝了(英)一個(gè)新的版本是可以的,是能夠突破攻擊的條件,目標(biāo)的URL把(英)給改了也可以繼續(xù)突破,在這樣的防御方案都是可以通過精巧的攻擊把它繞過的。
重裝瀏覽器把原來的刪掉再裝一個(gè)新的進(jìn)去,這樣是可以防范我們的攻擊,我們怎么能把這個(gè)攻擊也給做了?即使你把設(shè)備重啟,即使把瀏覽器重裝,還能攻擊呢,我就提出了一個(gè)克隆攻擊的思路,我們知道安卓webView本身是非常重要的組件,這個(gè)瀏覽器并不是獨(dú)立的瀏覽器,如果打開朋友圈的鏈接,一點(diǎn),并沒有跳到瀏覽器,直接在微信里打開,就是因?yàn)槲⑿胖苯佑昧讼到y(tǒng)webview,就可以在任何應(yīng)用當(dāng)中打開界面,而且能夠微信打開頁面之后被微信所配置,可以配置它各種方面的屬性,(英)它的安全機(jī)制首先在安卓7或者是7.1之前,都是和主app是共享一個(gè)進(jìn)程,微信打開一個(gè)惡意頁面,那個(gè)惡意頁面本身所在的進(jìn)程和你微信的進(jìn)程是一樣的,是不是覺得很危險(xiǎn)?但是安卓8.0之后打開一個(gè)頁面之后,那個(gè)頁面和你本身微信、支付寶本身的APP是隔離開的,通過(英)來緩解這樣的攻擊思路。
我們再說一下克隆攻擊是什么,如何在(英)得到一個(gè)持久化攻擊?首先我們需要從webView拿到應(yīng)用本身的東西,我就是想知道支付寶的數(shù)據(jù),其次還要保持控制,其次最好是遠(yuǎn)程的,隱蔽的,(英)是滿足了所有的條件,什么是克隆攻擊?說克隆大家都會(huì)覺得是生物學(xué)上的克隆,我通過一個(gè)細(xì)胞核就可以把一個(gè)生物完整的拷貝過來,對移動(dòng)設(shè)備,移動(dòng)設(shè)備最重要的是移動(dòng)應(yīng)用,怎么能夠克隆到所有的信息?本身是我們需要梳理的東西,現(xiàn)在說一下移動(dòng)應(yīng)用什么是它的細(xì)胞核,最關(guān)鍵的一點(diǎn)怎么把它拿過來,現(xiàn)在的應(yīng)用,大家現(xiàn)在用的微信、微博都是基于云端去考慮設(shè)備的,很多東西并不是存本地,肯定是存在云端,想要的就拉下來。
第二個(gè)長時(shí)間保持在線狀態(tài),每次登微博都上一次賬號,輸入一下賬戶密碼才行這肯定是不接受的,保持登錄狀態(tài)長久。第三點(diǎn)也是比較重要的,跟PC端為什么不一樣,因?yàn)橛檬謾C(jī)IP和位置經(jīng)常會(huì)變的,云端并不知道你到底是不是你自己了,馬上出差到美國,現(xiàn)在就在美國登錄了,異地登錄也是很容易之前PC端異地登錄了,在另外一個(gè)地方下線,現(xiàn)在下線大家的用戶體驗(yàn)非常差,稍微移動(dòng)一下或者是拿著手機(jī)跑到其他的地方就下線了。
首先我們在移動(dòng)應(yīng)用上需要的是長久存活的,我們就有這樣的想法,能不能通過某種方式把你的這些核心(英)給偷過來,這里面跟(英)有一些區(qū)別,左邊是受害者,右邊是攻擊者,受害者用了最新款的三星手機(jī),F(xiàn)acebook用也是最新款,受害者需要做的就是隨便掃一個(gè)二維碼,之后我們會(huì)發(fā)現(xiàn)攻擊者這邊有一些反應(yīng),攻擊者這邊是把受害者整個(gè)APP信息全部都拿過來了,是一模一樣的東西,而且受害者根本不知道,他覺得自己的賬戶很正常,實(shí)際上有一個(gè)遠(yuǎn)處的人在盯著你,當(dāng)我想發(fā)一個(gè)東西的時(shí)候,可以隨時(shí)在攻擊者的手機(jī)上發(fā)出去,他已經(jīng)把狀態(tài)直接發(fā)到他的賬戶上了,攻擊者可以拿到受害者應(yīng)用上面的所有東西,基于云端,只要拿到(英),云端申請,所有東西都在我這里,我想發(fā)什么都沒有問題。
怎么才能達(dá)到這樣的攻擊效果?首先怎么偷到?之前在安卓7.1之前,(英)和(英)是共享一個(gè)進(jìn)程,現(xiàn)在我們都知道我直接通過一類或者是N類的漏洞,而這個(gè)漏洞是(英),而webview并不是app自帶的,裝一個(gè)微信或者是支付寶并不自帶的瀏覽器,這個(gè)瀏覽器是你手機(jī)里面的,而手機(jī)里面瀏覽器的更新webview更新會(huì)非常慢,根據(jù)我們的調(diào)查,絕大數(shù)的手機(jī)webview都會(huì)有,拿到它的(英)是非常簡單的,在安卓7.1之前他們倆又是在同一個(gè)進(jìn)程里,訪問一個(gè)惡意鏈接,拿到你的控制權(quán),把你的(英)全部偷過來,剛才那個(gè)并不是Facebook的問題,是手機(jī)上webview組件的問題,它的組件更新到最新版本但還是有這樣的漏洞,導(dǎo)致我可以拿到那個(gè)手機(jī)上面所有跟Facebook這樣所有APP,并不是Facebook的問題。
在安卓8.0之后,大家用安卓覺得7.1之前也只占用戶量的一半左右,大多數(shù)人已經(jīng)升級到了8.0,甚至9.0,那么安卓O之后怎么攻擊?安卓O之后每一個(gè)webview的進(jìn)程都是獨(dú)立的,我獲取到頁面之后我是沒法獲取到應(yīng)用的(英),之后怎么辦?把這個(gè)APP和webview是有相關(guān)的墻在那兒擋著,自己不能訪問網(wǎng)絡(luò)、讀寫硬盤,我們可以通過一個(gè)誤配置的webview來實(shí)現(xiàn)克隆攻擊,手機(jī)瀏覽器頁面是有需求跟手機(jī)APP通信,現(xiàn)在在微信支付寶打開一個(gè)他們自身的鏈接,他們總不能讓你再登錄一次,他們倆之間肯定需要有信息交互,很多時(shí)候需要打開相關(guān)的配置,開關(guān),而這其中有兩個(gè)配置開關(guān)叫(英),這兩個(gè)開關(guān)能夠打開會(huì)怎么樣,會(huì)發(fā)現(xiàn)打開之后如果他們倆任何一個(gè)打開了,(英)都能夠允許通過(英)的方式獲取到這個(gè)APP中所有的文件,當(dāng)一個(gè)應(yīng)用打開開關(guān)之后,我們可以通過webview來實(shí)現(xiàn)同樣的攻擊效果,通過SD卡放一個(gè)(英)存到SD卡之后,之后再通過get的方式把它(英)給傳到云端,就直接獲取手機(jī)APP中的文件,如何讓一個(gè)APPwebview去漏的一個(gè)file,這個(gè)有點(diǎn)繞,對安卓不太熟悉會(huì)不太理解,我們今天講的內(nèi)容是沙箱,沙箱APP也有沙箱,不僅APP有沙箱,而且不同瀏覽器不同域之間也有相關(guān)的限制,我們從APP打開的頁面是APP的,是無法跨域到(英)域,無法通過(英)去獲取到(英),怎么才能能夠從APP域到(英)域,用一個(gè)UXSS漏洞也是不太合理的,最后我們發(fā)現(xiàn)可以使用(英),這個(gè)是每個(gè)APP自定義的鏈接形式,比如說打開了一個(gè)淘寶:/線,打開它,瀏覽器就會(huì)跳轉(zhuǎn)到淘寶,打開瀏覽器的頁面會(huì)跳轉(zhuǎn)到APP上,就是這樣的思路,本身我們在webview會(huì)有這樣的攻擊入口,通過(英)這個(gè)就不詳細(xì)展開了,這邊的效果,我點(diǎn)一個(gè)頁面,下載到SD卡之后,我再通過(英)讓它再加載SD卡的惡意文件,我需要一個(gè)跳板,首先下載下來一個(gè)文件,這個(gè)文件有惡意代碼,再通過(英)的方式把它給加載進(jìn)來,加載的方式是通過(英)加載的,現(xiàn)在就不存在(英)和APP之間的跨域關(guān)系,現(xiàn)在直接拿到應(yīng)用里面的(英),這個(gè)是我們攻擊的思路,受害者打開一個(gè)釣魚鏈接,是能夠直接把文件下載到SD卡,相關(guān)的(英)會(huì)不會(huì)觸發(fā),就會(huì)把英)發(fā)送到攻擊者服務(wù)器上,之后通過(英)去拿到所有的賬戶信息,任何沙箱都沒突破,任何沙箱也都沒有阻擋,但是已經(jīng)拿到了他的賬戶永久控制權(quán),現(xiàn)在他的APP(英)是不過期的,file,URL,并不是我想加載一個(gè)什么就可以加載,應(yīng)用也會(huì)想著去防御攻擊,大部分應(yīng)用防御是比較困難的,前面的防御幾乎是不可能的,可以通過(英)或者是(英)的方式把它繞過去,之后就可以實(shí)現(xiàn)在很多應(yīng)用上實(shí)現(xiàn)攻擊思路,這都是我們攻擊的流程中需要繞過的方法,通過這樣的方法幾乎能繞過幾乎所有的APP都可以繞過。
繞過防御,還有另外一點(diǎn)防御,有一些應(yīng)用會(huì)想到會(huì)不會(huì)把我的(英)給偷走在其他地方就可以登錄?那我需要跟你的設(shè)備綁定一下,我要綁定到設(shè)備的(英),只有你的設(shè)備(英)跟我登錄過的設(shè)備一樣,才能認(rèn)為你可以登錄上去,否則就是把你的(英)偷過來,這樣他們想到了防御,但是沒有想到是不是可以簡單的繞過,雖然有一些應(yīng)用會(huì)有防御措施,但是他把獲取到的(英)綁定信息也當(dāng)成文件存到了本地,之后仍然可以通過剛才提出的攻擊方式把這些文件也拷貝到,這就繞過了相關(guān)的防御,這是相關(guān)的攻擊思路。
這是我們對于漏洞的緩解和防御,我們可以通過把(英),不要接受任何的外部鏈接,把(英)安全的放在(英)來防御。
這是舉的國內(nèi)廠商的例子,200家有27個(gè)是可以非常簡單的獲取到,一些財(cái)經(jīng)應(yīng)用,購物應(yīng)用都會(huì)有這樣的問題,最后我們可以在不突破沙箱的情況下獲取到很多攻擊的方式,之前提到的能夠達(dá)到最終的(英),一直保持登錄。
這是我們的結(jié)論,很多攻擊仍然能夠在不突破沙箱的情況下完成,攻擊者可以偷掉很多受害者相關(guān)的賬號,克隆他們的賬戶實(shí)現(xiàn)非常長時(shí)間的攻擊,這句話跟瀏覽器安全或者是沙箱開發(fā)者說的,很多廠商也有這樣的疑惑,沙箱已經(jīng)嚴(yán)謹(jǐn)了,很好了,但是它是現(xiàn)在最好的選擇,肯定要加,不是說加上就完全沒事,仍然可以做很多事情,現(xiàn)在研究很多的沙箱機(jī)制能夠?qū)崿F(xiàn)更長的攻擊,這是我們今天實(shí)現(xiàn)的三種攻擊,都報(bào)給了廠商,也全部修補(bǔ)了,大家不用擔(dān)心。