欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaScript高速緩存區(qū)攻擊的示例分析

本篇文章為大家展示了可行的 JavaScript 高速緩存區(qū)攻擊,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),納溪企業(yè)網(wǎng)站建設(shè),納溪品牌網(wǎng)站建設(shè),網(wǎng)站定制,納溪網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,納溪網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

##摘要

我們將展示首個(gè)完全運(yùn)行在瀏覽器里的針對(duì)微架構(gòu)的邊信道攻擊手段。與這個(gè)領(lǐng)域里的其它研究成果不同,這一手段不需要攻擊者在受害者的電腦上安裝任何的 應(yīng)用程序來(lái)展開攻擊,受害者只需要打開一個(gè)由攻擊者控制的惡意網(wǎng)頁(yè)。這種攻擊模型可伸縮性高,易行,貼近當(dāng)今的網(wǎng)絡(luò)環(huán)境,特別是由于絕大多數(shù)桌面瀏覽器連接到 Internet 因此幾乎無(wú)法防御。這種攻擊手段基于 Yarom 等人在 文[23] 提出的 LLC攻擊,可以讓攻擊者遠(yuǎn)程獲得屬于其它進(jìn)程、用戶甚至是虛擬機(jī)的信息, 只要它們和受害者的瀏覽器運(yùn)行在運(yùn)行在同一臺(tái)物理主機(jī)上。我們將闡述這種攻擊背后的基本原理,然后用一種高帶寬的隱藏通道驗(yàn)證它的效果,最后 用它打造了一個(gè)覆蓋整個(gè)系統(tǒng)的鼠標(biāo)和網(wǎng)絡(luò)活動(dòng)記錄器。抵御這種攻擊是可能的,但是所需的反制措施對(duì)瀏覽器和電腦的正常使用所產(chǎn)生的代價(jià)有點(diǎn)不實(shí)際。

##1 引言

邊信道分析是里一種非常強(qiáng)大的密碼分析攻擊。攻擊者通過分析安全設(shè)備內(nèi)部在進(jìn)行安全運(yùn)算時(shí)所產(chǎn)生的的物理信號(hào)(功率,輻射,熱量等)來(lái)取得秘密信息[15]。 據(jù)說在二戰(zhàn)中便有情報(bào)部門在使用,Kocher 等人在1996年首次在學(xué)術(shù)情境下討論了這個(gè)問題[14]。邊信道分析被證實(shí)可以用來(lái)侵入無(wú)數(shù)的現(xiàn)實(shí)世界中的系統(tǒng),從汽車報(bào)警器 到高安全性的密碼協(xié)處理器[8][18]。緩存攻擊(Cache Attack)是和個(gè)人電腦相關(guān)的一種邊信道攻擊,因?yàn)楦咚倬彌_區(qū)被不同的進(jìn)程和用戶使用而導(dǎo)致了信息的泄露[17][11]。

雖然邊信道攻擊的能力無(wú)可置疑,但是要實(shí)際應(yīng)用到系統(tǒng)上還是相對(duì)受限的。影響邊信道攻擊可行性的一個(gè)主要因素是對(duì)不確定的攻擊模型的假設(shè):除了基于網(wǎng)絡(luò)的 時(shí)序攻擊,大部分的邊信道攻擊都要求攻擊者非常接近受害者。緩存攻擊一般會(huì)假設(shè)攻擊者能夠在受害者的機(jī)器上執(zhí)行任意的二進(jìn)制的代碼。雖然這個(gè)假設(shè) 適用于像 Amazon 云計(jì)算平臺(tái)這樣的 IaaS 或者 PaaS 環(huán)境,但是對(duì)于其它環(huán)境就不那么貼切了。

在這篇報(bào)告里,我們用一種約束更少、更可行的攻擊者模型挑戰(zhàn)了這一限制性的安全假設(shè)。在我們的攻擊模型里,受害者只需要訪問一個(gè)網(wǎng)頁(yè),這個(gè)網(wǎng)頁(yè) 由攻擊者所擁有。我們會(huì)展示,即使在這么簡(jiǎn)單的攻擊者模型里,攻擊者依然能夠在可行的時(shí)間周期里,從被攻擊的系統(tǒng)中提取出有意義的信息。為了和這樣的 計(jì)算設(shè)定保持一致,我們把注意力集中在了跟蹤用戶行為而不是獲取密匙上。報(bào)告中的攻擊方式因此是高度可行的:對(duì)于攻擊者的假設(shè)和限定是 實(shí)際的;運(yùn)行的時(shí)間是實(shí)際的;給攻擊者帶來(lái)的好處也是實(shí)際的。據(jù)我們了解,這是首個(gè)可以輕松擴(kuò)展至上百萬(wàn)個(gè)目標(biāo)的邊信道攻擊方式。

我們假設(shè)攻擊中受害者使用的個(gè)人電腦配備有較新型號(hào)的的 Intel CPU ,并進(jìn)一步假設(shè)用戶用支持 HTML5 的瀏覽器訪問網(wǎng)頁(yè)。這覆蓋了絕大部分連接到 Internet 的 個(gè)人電腦,見 章節(jié)5.1 。用戶被強(qiáng)迫訪問一個(gè)頁(yè)面,這個(gè)頁(yè)面上有一個(gè)由攻擊者控制的元素比如廣告。攻擊代碼自己會(huì)執(zhí)行基于 JavaScript 的 緩存攻擊,見 章節(jié)2,持續(xù)地訪問被攻擊系統(tǒng)的 LLC 。因?yàn)樗械?CPU 內(nèi)核,用戶,進(jìn)程,保護(hù)環(huán)等共享同一個(gè)高速緩存區(qū),所以可為攻擊者提供被攻擊用戶和系統(tǒng)的詳細(xì)信息。

###1.1 現(xiàn)代 Intel CPU 的內(nèi)存架構(gòu) 現(xiàn)代的計(jì)算機(jī)系統(tǒng)通常會(huì)采用一個(gè)高速的中央處理器(CPU)和一個(gè)容量大但是速度較慢的隨機(jī)存取器(RAM)。為了克服這兩個(gè)模塊的性能鴻溝,現(xiàn)代的計(jì)算機(jī)系統(tǒng)會(huì)采用 高速緩存 - 一種容量小但是速度更快的內(nèi)存結(jié)構(gòu),里面保存了 RAM 中最近被 CPU 訪問過的子集。高速緩存通常會(huì)采用** 分層** 設(shè)計(jì),即在 CPURAM 之間 分層放置一些列逐漸變大和變慢的內(nèi)存結(jié)構(gòu)。圖1 取自 文[22],展示了 Intel Ivy Bridge 的緩存結(jié)構(gòu),包括:較小的 level 1(L1) cache,大一些的** level 2 (L2) cache **,最下方是最大的 level 3 (L3) cache并和 RAM 相連。Intel 目前代號(hào)為 Haswell 的新一代 CPU 采用了另一種嵌入式的 DRAM(eDRAM) 設(shè)計(jì),所以不在本文討論范圍內(nèi)。如果 CPU 需要訪問的數(shù)據(jù)當(dāng)前不在緩存里,會(huì)觸發(fā)一個(gè) 未命中,當(dāng)前緩存里的一項(xiàng)必須被 **淘汰 **來(lái)給新元素騰出空間。

JavaScript高速緩存區(qū)攻擊的示例分析圖1:Intel Ivy Bridge

Intel 的緩存微架構(gòu)是 **嵌套的 **- 所有一級(jí)緩存里的數(shù)據(jù)必須同時(shí)存在二級(jí)和三級(jí)緩存里。倒過來(lái),如果某個(gè)元素在三級(jí)緩存里被淘汰,那它也會(huì)立刻被 從二級(jí)和一級(jí)緩存里移走。需要注意的是 AMD 緩存微架構(gòu)的設(shè)計(jì)是非嵌套的,所以本文描述的方法并不能立刻應(yīng)用到該平臺(tái)上。

本文重點(diǎn)關(guān)注第三級(jí)緩存,通常也被稱為 LLC。由于 LLC 較大,CPU 訪問內(nèi)存的時(shí)候如果把整個(gè) LLC 的內(nèi)容都搜索一遍效率會(huì)很低。 為了避免這個(gè)問題,LLC 通常被分成不同的 ,每一組都對(duì)應(yīng)者內(nèi)存空間的一個(gè)固定的子集。每個(gè)組包含若干緩存線。例如,Intel Haswell 系列中的 Core i7-3720QM 處理器擁有 8192 = 2^13 個(gè)組,每個(gè)組有 12 條 64 = 2^6 字節(jié)的緩存線,共同組成 8192 x 12 x 64 = 6 MB 的高速緩存。 CPU 如果要檢查一個(gè)給定的物理地址是否在三級(jí)緩存里,會(huì)先計(jì)算出組,然后只檢查組內(nèi)的緩存線。結(jié)果就是,某個(gè)物理地址的緩存未命中,會(huì)導(dǎo)致同一個(gè)組的 為數(shù)不多的緩存線中的一條被淘汰,這個(gè)事實(shí)會(huì)被我們的攻擊反復(fù)運(yùn)用。由64比特長(zhǎng)度的物理地址到13比特長(zhǎng)度的組索引的映射方法已經(jīng)被 Hund 等人在2013年 通過逆向工程得出來(lái)[12]。在表示物理地址的64個(gè)比特位里,5到0被忽略,16到6被直接用來(lái)作為組索引的低11位,63到17散列后得到組索引的高2位。 LLC 被所有的內(nèi)核、線程、進(jìn)程、用戶,乃至運(yùn)行在同一塊 CPU 芯片上的虛擬機(jī)所共享,而不論特權(quán)環(huán)或其它類似的保護(hù)措施。

現(xiàn)代的個(gè)人電腦采用了一種 虛擬內(nèi)存機(jī)制,在這種機(jī)制里,用戶進(jìn)程一般無(wú)法直接得到或訪問系統(tǒng)的物理內(nèi)存。取而代之的是,進(jìn)程會(huì)被分配不同的虛擬內(nèi)存頁(yè)。 如果某個(gè)虛擬內(nèi)存頁(yè)被當(dāng)前執(zhí)行的進(jìn)程訪問,操作系統(tǒng)會(huì)在物理內(nèi)存里動(dòng)態(tài)地分配一個(gè)頁(yè)框。CPU 的內(nèi)存管理單元(MMU)負(fù)責(zé)把不同進(jìn)程對(duì)虛擬內(nèi)存地址的訪問 映射到物理內(nèi)存。Intel 處理器的頁(yè)和頁(yè)框大小一般是4KB,并且頁(yè)和頁(yè)框的是按照頁(yè)對(duì)齊的 - 每頁(yè)的開始地址是頁(yè)大小的倍數(shù)。這意味著,任何虛擬地址 的低12位和對(duì)應(yīng)的虛擬地址是一一對(duì)應(yīng)的,這一事實(shí)也在我們的攻擊中用到。

###1.2 緩存攻擊 緩存攻擊是針對(duì)微架構(gòu)的攻擊手段中一個(gè)典型的代表, Aciamez 在他的出色的調(diào)查中將這類攻擊定義為利用 “信任架構(gòu)邊界下方的底層處理器結(jié)構(gòu)” 從不同的安全系統(tǒng)中 獲取秘密信息。緩存攻擊基于這樣的事實(shí):盡管在上層有諸多像沙箱、虛擬內(nèi)存、特權(quán)環(huán),宿主這樣的保障機(jī)制,安全和不安全進(jìn)程通過高速緩存區(qū)的共用可以互相影響。 攻擊者構(gòu)造一個(gè)“間諜”進(jìn)程后可以通過被共用的緩存來(lái)測(cè)量和干擾其它安全進(jìn)程的內(nèi)部狀態(tài)。Hu 在1992年的首次發(fā)現(xiàn)[11],在隨后的一些研究成果里顯示了邊信道攻擊可被用來(lái)獲取 AES密匙[17][4],RSA密匙[19],甚至可以允許一臺(tái)虛擬機(jī)侵入宿主上的其它機(jī)器。

我們的攻擊建立在 填充+探測(cè)模型的基礎(chǔ)上,這個(gè)方法由 Osvik 在[17]中首次描述,不過是針對(duì)一級(jí)緩存的。之后由 Yarom 等人在[23]中擴(kuò)展到啟用了 較大內(nèi)存頁(yè)系統(tǒng)的 LLC。我們把這個(gè)方法擴(kuò)展了一下支持更加常見的 4K 的頁(yè)大小??偟膩?lái)說,填充+探測(cè)有四個(gè)步驟。第一步,攻擊者建立一個(gè) 或多個(gè)** 移除集**。移除集是內(nèi)存中的一系列地址,這些地址被訪問的時(shí)候會(huì)占據(jù)受害者進(jìn)程使用的一條緩存線。第二步,攻擊者通過訪問移除集填充整個(gè)組。 這會(huì)強(qiáng)制受害者的代碼或指令被從組中淘汰,并使組進(jìn)入一個(gè)已知的狀態(tài)。第三步,攻擊者觸發(fā)或只是等待受害者執(zhí)行和可能使用組。最后,攻擊者通過再次訪問移除集來(lái)探測(cè)組。如果訪問的延遲比較低,意味著攻擊者的指令或數(shù)據(jù)還在緩存里。否則,較高的訪問延遲意味著受害者的代碼用到了組,因此攻擊者可以了解受害者的內(nèi)部狀態(tài)。 實(shí)際的時(shí)間測(cè)量是用非特權(quán)的匯編指令RDTSC進(jìn)行的,這個(gè)指令可以得到處理器非常準(zhǔn)確的周期數(shù)。再次遍歷鏈表還有第二個(gè)目的,那就是強(qiáng)制組進(jìn)入 受攻擊者控制的狀態(tài),為下一輪的測(cè)量做好準(zhǔn)備。

###1.3 Web 運(yùn)行環(huán)境 JavaScript 是一種擁有動(dòng)態(tài)類型,基于對(duì)象的運(yùn)行時(shí)求值的腳本語(yǔ)言,它支撐著現(xiàn)代互聯(lián)網(wǎng)的客戶端。JavaScript 代碼以源碼的形式傳到瀏覽器端,由瀏覽器 即時(shí)編譯(JIT)機(jī)制來(lái)編譯和優(yōu)化。不同瀏覽器廠商之間的激烈競(jìng)爭(zhēng)使不斷改進(jìn) JavaScript 性能備受關(guān)注。結(jié)果就是,在某些場(chǎng)景下,JavaScript 執(zhí)行的效率已經(jīng) 可以和機(jī)器語(yǔ)言相媲美。

JavaScript 語(yǔ)言的核心功能是由 ECMA 產(chǎn)業(yè)協(xié)會(huì)在 ECMA-262 標(biāo)準(zhǔn)中定義的。語(yǔ)言標(biāo)準(zhǔn)由萬(wàn)維網(wǎng)協(xié)會(huì)(W3C)定義的一系 API 所補(bǔ)充,因此適合開發(fā) Web 內(nèi)容。 JavaScript API 的集合是不斷演進(jìn)的,瀏覽器廠商依照自己的開發(fā)計(jì)劃不斷增加新的 API 支持。我們的工作中用到兩個(gè)具體的API: 第一個(gè)是類型數(shù)組的定義9,通過它可以高效地訪問非結(jié)構(gòu)化的二進(jìn)制數(shù)組。 第二個(gè)是高精度時(shí)間API16,讓應(yīng)用程序可以進(jìn)行毫秒以下時(shí)間的測(cè)量。 如 章節(jié)5.1 所示,大部分當(dāng)今主流的瀏覽器都同時(shí)支持這兩個(gè)API。

JavaScript 代碼運(yùn)行在高度沙箱化的環(huán)境里 - 用 JavaScript 交付的代碼對(duì)系統(tǒng)的訪問非常受限。例如,JavaScript 代碼如果沒有用戶的允許不能打開和讀取文件。 JavaScript 代碼不能執(zhí)行機(jī)器語(yǔ)言或者加載本地的代碼庫(kù)。 最值得注意的是,JavaScript 代碼沒有指針的概念,所以你連一個(gè) JavaScript 變量虛擬地址都沒法知道。

###1.4 我們的工作 我們的目的是構(gòu)造一個(gè)可以通過 Web 部署的 LLC 攻擊。這個(gè)過程是充滿挑戰(zhàn)的,因?yàn)?JavaScript 代碼沒法加載共享庫(kù)或者執(zhí)行本機(jī)語(yǔ)言的程序, 并且由于無(wú)法直接調(diào)用專用的匯編指令而被迫調(diào)用腳本語(yǔ)言的函數(shù)進(jìn)行時(shí)間的測(cè)量。盡管有這些挑戰(zhàn),我們還是成功地把緩存攻擊擴(kuò)展到了基于 Web 環(huán)境:

  • 我們展示了一種用來(lái)在 LLC 上的建立 非典型移除集 特別方法。與[23]不同,我們的方法不要求系統(tǒng)配置成支持較大的內(nèi)存頁(yè),所以能夠很快的 應(yīng)用到廣泛的桌面和服務(wù)器系統(tǒng)。我們展示了該方法雖然是使用 JavaScript 實(shí)現(xiàn)的,但是依然可以在實(shí)際的時(shí)間周期里完成。

  • 我們展示了一種 功能完善的用無(wú)需特權(quán)的 JavaScript 發(fā)動(dòng) LLC 攻擊 的方法。我們用隱藏通道的方式,評(píng)估了它的性能,包括在同一個(gè)機(jī)器、不同進(jìn)程之間 和在虛擬機(jī)與它的主機(jī)之間。基于 JavaScript 的通道與[23]中用機(jī)器語(yǔ)言實(shí)現(xiàn)的方法類似,都可以達(dá)到每秒幾百 kb 的速度。

  • 我們展示了怎么利用基于緩存的方法來(lái)有效地跟蹤用戶行為。緩存攻擊的這一應(yīng)用與我們的攻擊模型更相關(guān),這與密碼分析在其它成果中的應(yīng)用不同。

  • 最后,我們分析了針對(duì)攻擊可能的反制措施和整個(gè)系統(tǒng)的代價(jià)。

文檔結(jié)構(gòu): 第二章,攻擊方法不同階段的設(shè)計(jì)與實(shí)現(xiàn)。 第三章,基于攻擊方法建立起來(lái)的隱藏通道,這個(gè)通道也被用來(lái)驗(yàn)證方法的性能。 第四章,緩存攻擊如何被用來(lái)跟蹤用戶在瀏覽器內(nèi)外的行為。 第五章,總結(jié),提出反制措施和仍未解決的研究挑戰(zhàn)。

##2 攻擊方法

正如前文所訴,一次成功的 填充+探測(cè) 攻擊包含幾個(gè)步驟:為一個(gè)或多個(gè)相關(guān)組建立移除集,填充緩存,觸發(fā)受害者的操作,最后再次探測(cè)組。 雖然填充和探測(cè)實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是要找到對(duì)應(yīng)于某個(gè)系統(tǒng)操作的組并且為它建立移除集就不那么容易了。在本章里,我們描述了這幾個(gè)步驟用 JavaScript 如何實(shí)現(xiàn)。

###2.1 建立一個(gè)移除集 ####2.1.1 設(shè)計(jì) 正如[23]寫到,填充+探測(cè)攻擊方法的第一步是為某個(gè)與被攻擊進(jìn)程共享的組建立一個(gè)移除集。這個(gè)移除集包含一系列的變量,而且這些變量都被 CPU 映射到相同的 組里。根據(jù) 文[20] 的建議,使用鏈表可以避免 CPU 的內(nèi)存預(yù)讀和流水線優(yōu)化。我們首先展示如何為任意一個(gè)組建立一個(gè)移除集,然后解決尋找與受害者共享組的問題。

文[17]指出,一級(jí)緩存是依據(jù)虛擬地址的低位的比特來(lái)決定組分配的。假設(shè)攻擊者知道變量的虛擬地址,那么在基于一級(jí)緩存的攻擊模型里建立移除集很容易。 但是,LLC 里變量的組分配是依照物理內(nèi)存的地址進(jìn)行的,而且一般情況下,非特權(quán)進(jìn)程無(wú)法知道。文[23]的作者為了規(guī)避這個(gè)問題,假設(shè)系統(tǒng)用的是 頁(yè)較大的模型,在這個(gè)模型里,物理地址和虛擬地址的低21位是相同的,并通過迭代算法來(lái)獲得組索引的高位。

在我們所考慮的攻擊模型里,系統(tǒng)運(yùn)行在 4K 的頁(yè)大小模型下,物理地址和虛擬地址只有最低的12位是相同的。然而更大的難題是,JavaScript沒有指針的概念, 所以即使是自己定義的變量,虛擬地址也是不知道的。

從64位物理地址到13位的組索引的映射關(guān)系已經(jīng)被 Hund 等人研究過[12]。他們發(fā)現(xiàn),當(dāng)訪問物理內(nèi)存里一段連續(xù)的、8MB大小的 “淘汰緩沖區(qū)” 時(shí)會(huì)讓三級(jí)緩存里的所有組 都失效。雖然我們?cè)谟脩魬B(tài)下沒有辦法分配這樣的一個(gè)“淘汰緩沖區(qū)” (實(shí)際上,文章[12]是通過內(nèi)核模式的驅(qū)動(dòng)實(shí)現(xiàn)的),我們用 JavaScript 在 虛擬內(nèi)存里分配了一個(gè) 8MB 大小的數(shù)組(這其實(shí)是由系統(tǒng)分配的隨機(jī)、不連續(xù)的 4K 大小物理內(nèi)存頁(yè)的集合),然后測(cè)量遍歷這個(gè)緩沖區(qū)在全系統(tǒng)造成的影響。 我們發(fā)現(xiàn)在迭代訪問了這個(gè)淘汰緩沖區(qū)后如果立即訪問內(nèi)存中其它不相關(guān)的變量,訪問的延遲會(huì)顯著的增加。 另外一個(gè)發(fā)現(xiàn)是,即使不訪問整個(gè)緩沖區(qū)而是每隔64字節(jié)去訪問它,這個(gè)現(xiàn)象依然存在。但是,我們所訪問的 131K 個(gè)偏移值到8192個(gè)可能的組的映射關(guān)系 并沒有立刻清晰起來(lái),因?yàn)槲覀儾恢谰彌_區(qū)里各個(gè)頁(yè)在物理內(nèi)存中的地址。

解決這個(gè)問題一個(gè)不太靠譜的做法是,給定一個(gè)任意的“受害者”在內(nèi)存中的地址,通過暴力手段從 131K 個(gè)偏移值中找到12個(gè)與這個(gè)地址共享組的地址。要完成這點(diǎn), 我們可以從 131K 個(gè)偏移量中選取幾個(gè)作為子集,在迭代了所有的偏移量后再測(cè)量下訪問的延遲有沒有變化。如果延遲增加了,意味著含有12個(gè)地址的子集與 受害者地址共享相同的組。如果延遲沒有變化,那子集里的12個(gè)地址中的任何一個(gè)都不在組里,這樣受害者地址就還在緩存里。把這個(gè)過程重復(fù)8192遍,每次用 一個(gè)不同的受害者地址,我們就可以識(shí)別每個(gè)組并且建立自己的數(shù)據(jù)結(jié)構(gòu)。

受此啟發(fā)而立刻寫出來(lái)的程序會(huì)運(yùn)行非常長(zhǎng)的時(shí)間。幸運(yùn)的是, Intel MMU 的頁(yè)幀大小(章節(jié)1.1)非常有幫助,因?yàn)樘摂M地址是頁(yè)對(duì)齊的,每個(gè)虛擬地址的 低12位和每個(gè)物理地址的低12位是一致的。據(jù) Hund 等人所稱,12個(gè)比特中的6個(gè)被用來(lái)唯一決定組索引。因此,淘汰緩沖區(qū)中的一個(gè)偏移會(huì)和其它 8K 個(gè)偏移 共享12到6位,而不是所有 131K 個(gè)。此外,只要找到一個(gè)組就能立刻知道其它的63個(gè)在相同頁(yè)幀里的組的位置。再加上 JavaScript 分配大的數(shù)據(jù)緩存區(qū)的時(shí)是 和頁(yè)幀的邊界對(duì)齊的,所以可以用算法1中的貪心算法。

算法1Profiling a cache set Let S be the set of unmapped pages, and address x be an arbitrary page-aligned address in memory

    1. Repeat k times:
    (a) Iteratively access all members of S
    (b) Measure t1 , the time it takes to access x
    (c) Select a random page s from S and remove it
    (d) Iteratively access all members of S\s
    (e) Measure t2 , the time it takes to access x
    (f) If removing page s caused the memory access to speed up          considerably (i.e., t1 ? t2 > thres),
    then this page is part of the same set as x. Place it back into      S.
    (g) If removing page s did not cause memory access to speed up       considerably,
    then this address is not part of the same set as x.
    2. If |S| = 12, return S. Otherwise report failure.

通過多次運(yùn)行 算法1,我們可以逐漸的建立一個(gè)移除集并覆蓋大部分的緩存,除了那些被 JavaScript 運(yùn)行時(shí)本身所使用的。我們注意到, 與[23]中的算法建立的淘汰緩沖區(qū)不同,我們的移除集是非典型的 - 因?yàn)?JavaScript 沒有指針的概念,所以如果我們發(fā)現(xiàn)了一個(gè)移除集 我們并沒有辦法知道它對(duì)應(yīng)著 CPU 高速緩存的哪個(gè)組。此外,在相同的機(jī)器上每次運(yùn)行這個(gè)算法都會(huì)得到不同的映射。這也許是因?yàn)橛昧藗鹘y(tǒng)的 4K 頁(yè)大小 而不是 2MB 的頁(yè)大小的原因,這個(gè)問題即使不用 JavaScript 用機(jī)器語(yǔ)言也存在。

####2.1.2 驗(yàn)證 我們用 JavaScript 實(shí)現(xiàn)了 算法1 并且在安裝了 Ivy Bridge, Sandy Bridge,Haswell 系列 CPU 的機(jī)器上進(jìn)行驗(yàn)證,機(jī)器上裝有 Safari 和 Firefox 對(duì)應(yīng)運(yùn)行在 Mac OS Yosemite 和 Ubuntu 14.04 LTS 操作系統(tǒng)上。系統(tǒng)并沒有被配置使用大的頁(yè)而是用默認(rèn)的 4K 頁(yè)大小。列表1 顯示了實(shí)現(xiàn) 算法1.d 和 算法1.e 的代碼,展示了 JavaScript 下怎么遍歷鏈表和測(cè)量時(shí)間。算法如果要運(yùn)行在 Chrome 和 Internet Explorer 下,需要額外的幾個(gè)步驟,在 章節(jié)5.1 中。

列表1

     // Invalidate the cache set
     var currentEntry = startAddress;
    do {
        currentEntry = probeView.getUint32(currentEntry);
    } while (currentEntry != startAddress);
    
    // Measure access time
    var startTime = window.performance.now();
    currentEntry = primeView.getUint32(variableToAccess);
    
    var endTime = window.performance.now();

JavaScript高速緩存區(qū)攻擊的示例分析 圖2 性能分析算法的累積表現(xiàn)

圖2顯示了性能分析的結(jié)果,運(yùn)行在 Intel i7-3720QM CPU 上, 裝有 Firefox 35.0.1 和 Mac OS 10.10.2 。我們很高興地發(fā)現(xiàn)在30秒內(nèi)就 映射了超過25%的組,1分鐘內(nèi)就達(dá)到了50%。這個(gè)算法想要并行運(yùn)行是非常簡(jiǎn)單的,因?yàn)榇蟛糠值膱?zhí)行時(shí)間花在了數(shù)據(jù)結(jié)構(gòu)的維護(hù)上,只有一小部分花在讓緩存失效和 測(cè)量上。整個(gè)算法用不到500行 JavaScript 代碼就可以完成。

JavaScript高速緩存區(qū)攻擊的示例分析 圖3 Haswell 上兩種方法訪問延遲的概率分布

為了驗(yàn)證我們的算法能夠辨別不同的組,我們?cè)O(shè)計(jì)了一個(gè)實(shí)驗(yàn)來(lái)比較一個(gè)變量被 flush 前后的訪問延遲。圖3 顯示了兩種方式訪問變量的概率分布函數(shù)。 灰色的代表用我們的方式從緩存中 flush 出去的變量的訪問時(shí)間;而黑色是駐留在緩存里的變量的訪問時(shí)間。時(shí)間的測(cè)量用到 JavaScript 的高精度計(jì)時(shí)器, 所以還包括了 JavaScript 運(yùn)行時(shí)的延遲。兩者的不同是顯而易見的。圖4 顯示的是在較早版本的 Sandy Bridge CPU 上捕捉到的結(jié)果,該型號(hào)每個(gè)組有16個(gè)條目。

通過選取一些列的組,并且不斷的測(cè)量它們的訪問延遲,攻擊者可以獲得緩存實(shí)時(shí)活動(dòng)非常詳細(xì)的圖。我們把這種視覺呈現(xiàn)稱作 “內(nèi)存譜圖”,因?yàn)樗雌饋?lái)很像聲音的譜圖。

JavaScript高速緩存區(qū)攻擊的示例分析 圖4 Sandy Bridge 上兩種方法訪問延遲的概率分布 JavaScript高速緩存區(qū)攻擊的示例分析 圖5 內(nèi)存譜圖示例 圖5顯示的是每隔400ms抓取一次的內(nèi)存譜圖。其中X軸對(duì)應(yīng)時(shí)間,Y軸對(duì)應(yīng)不同的組。例子中的時(shí)間分辨率是250微秒,檢測(cè)了一共128個(gè)組。每個(gè)點(diǎn)的密度 代表了這個(gè)組在這個(gè)時(shí)間的訪問延遲。黑色代表延遲較低,意味從上次測(cè)量到現(xiàn)在沒有其它進(jìn)程訪問過這個(gè)組。白色意味著攻擊者的數(shù)據(jù)在上次測(cè)量之后被淘汰了。

細(xì)看這個(gè)內(nèi)存譜圖可以得到幾個(gè)顯而易見的事實(shí)。首先,雖然沒用機(jī)器語(yǔ)言指令而是用了 JavaScript 的計(jì)時(shí)器,測(cè)量的抖動(dòng)很小,活躍和不活躍的組 很容易被區(qū)分。圖中有幾條明顯的垂直的線,意味著同一時(shí)間間隔里有多個(gè)相鄰的組被訪問。因?yàn)檫B續(xù)的組對(duì)應(yīng)的物理內(nèi)存的地址也是連續(xù)的,所以我們 相信這個(gè)信號(hào)代表著一個(gè)超過 64 字節(jié)的匯編指令。還有一些聚在一起的組被同時(shí)訪問。我們推斷這代表著變量的訪問。最后,橫著的白線預(yù)示著一個(gè)變量 被不斷地訪問。這個(gè)變量可能是屬于測(cè)量代碼的或?qū)儆诋?dāng)前的 JavaScript 運(yùn)行時(shí)。從一個(gè)沒有任何特權(quán)的網(wǎng)頁(yè)能得到這么多信息真是太了不起了。

###2.2 在緩存里識(shí)別意思的區(qū)域 移除集讓攻擊者能夠監(jiān)控任意一個(gè)組的活動(dòng)。因?yàn)槲覀兊玫降囊瞥欠堑湫偷?,因此攻擊者必須想辦法把分析過的組和受害者的數(shù)據(jù)或是代碼的地址 關(guān)聯(lián)起來(lái)。這個(gè)學(xué)習(xí)/分類的問題已經(jīng)由 Zhang 和 Yarom 分別在 文章[25] 和 文章[23] 里提出了,他們采用了不同的諸如 SVM 的機(jī)器學(xué)習(xí)的算法試圖從 緩存延遲的測(cè)量數(shù)據(jù)里找到規(guī)律。

為了有效地展開學(xué)習(xí)過程,攻擊者需要誘導(dǎo)受害者做一些操作,然后檢查哪些組被這個(gè)操作訪問到,詳見 算法2。

    Let Si be the data structure matched to eviction set i
    1. For each set i:
        (a) Iteratively access all members of Si to prime the cache set
        (b) Measure the time it takes to iteratively access all members of Si
        (c) Perform an interesting operation
        (d) Measure once more the time it takes to iteratively access all members of Si
        (e) If performing the interesting operation caused the access time to slow down considerably, then the operation was
        associated with cache set i.

因?yàn)?JavaScript 受到一系列的權(quán)限限制,實(shí)現(xiàn)步驟(c)是很有挑戰(zhàn)的。與之形成對(duì)比的是 Apecechea 等人能夠用一個(gè)空的 sysenter調(diào)用來(lái)觸發(fā)一次細(xì)小的內(nèi)核操作。為了實(shí)現(xiàn)這個(gè)步驟,我們必須調(diào)查 JavaScript 的運(yùn)行時(shí)來(lái)發(fā)現(xiàn)有哪些函數(shù)會(huì)觸發(fā)有意思的行為,例如文件訪問,網(wǎng)絡(luò)訪問,內(nèi)存分配等等。 我們還對(duì)那些運(yùn)行時(shí)間相對(duì)較短,不會(huì)產(chǎn)生遺留的函數(shù)感興趣。因?yàn)檫z留可能導(dǎo)致垃圾回收,進(jìn)而影響步驟(d)的測(cè)量。Ho 等人在 文章[10] 中已經(jīng)找到了這樣的 幾個(gè)函數(shù)。另外一種方式是誘導(dǎo)用戶代替攻擊者執(zhí)行一個(gè)特定的操作(比如在鍵盤上按一個(gè)鍵)。這個(gè)例子里的學(xué)習(xí)過程可能是結(jié)構(gòu)化的(攻擊者知道受害者 將要執(zhí)行的時(shí)機(jī)),也可能是非結(jié)構(gòu)化的(攻擊者只能假設(shè)系統(tǒng)一段時(shí)間內(nèi)的響應(yīng)緩慢是由受害者的操作導(dǎo)致的)。這兩種方法都被使用,詳見 章節(jié)4。

因?yàn)槲覀兊某绦驎?huì)一直檢測(cè)到由 JavaScript 運(yùn)行時(shí)產(chǎn)生的活動(dòng),比如高性能的計(jì)時(shí)器的代碼,瀏覽器其它那些與當(dāng)前執(zhí)行調(diào)用無(wú)關(guān)的模塊的代碼,實(shí)際上我們 通過調(diào)用兩個(gè)相似的函數(shù)并** 對(duì)比** 它們兩次活動(dòng)性能分析的結(jié)果,以此來(lái)尋找相關(guān)的組。

##3 基于高速緩存區(qū)的隱藏信道之 JavaScript 實(shí)現(xiàn)

###3.1 動(dòng)機(jī) 正如 文章[23] 所示,LLC 訪問模式可被用來(lái)建立一個(gè)高帶寬的隱藏信道,有效的用來(lái)在同一臺(tái)宿主上的兩個(gè)虛擬機(jī)之間滲透敏感的信息。在我們的攻擊模型里, 攻擊者雖然不在同一臺(tái)宿主上的虛擬機(jī)里,而是在一個(gè)網(wǎng)頁(yè)中,隱藏信道的動(dòng)機(jī)不一樣,但是也很有意思。

經(jīng)由動(dòng)機(jī),我們假設(shè)某個(gè)安全部門在追蹤犯罪大師 Bob 的蹤跡。該部門通過釣魚項(xiàng)目在 Bob 的個(gè)人電腦上裝了一個(gè)被稱作 APT( Advanced Persistent Threat ) 的 軟件。APT 被設(shè)計(jì)用來(lái)記錄 Bob 的犯罪記錄并發(fā)送到部門的秘密服務(wù)器上。然而 Bob 非常的警覺,他使用了啟用了強(qiáng)制信息流跟蹤 (Information Flow Tracking ) [24] 的操作系統(tǒng)。操作系統(tǒng)的這一功能阻止了 APT 在訪問了可能含有用戶隱私數(shù)據(jù)的文件后再連上網(wǎng)絡(luò)。

在這種情況下,只要 Bob 能被誘導(dǎo)訪問一個(gè)由安全部門控制的網(wǎng)頁(yè),這個(gè)部門就可以立刻采用基于 JavaScript 的高速緩存區(qū)攻擊。APT 可以利用基于高速緩存區(qū) 的邊信道和惡意網(wǎng)站通信,這樣就不用通過網(wǎng)絡(luò)傳輸用戶的隱私數(shù)據(jù),進(jìn)而不會(huì)觸發(fā)操作系統(tǒng)的信息流跟蹤功能。

這個(gè)研究案例受到了來(lái)自某個(gè)安全部門的 “RF retro-reflector” 設(shè)計(jì)的啟發(fā),在這個(gè)設(shè)計(jì)里一臺(tái)諸如麥克風(fēng)的收集器,并不會(huì)把接收到的信號(hào)直接發(fā)送出去, 而是把接受的信號(hào)調(diào)制到由一個(gè)外部 ”收集設(shè)備“ 發(fā)送給它的 “照射信號(hào)” 上去。

####3.1.1 設(shè)計(jì) 隱藏信道的設(shè)計(jì)有兩個(gè)需求:第一,保持發(fā)送端的簡(jiǎn)單,我們尤其不想讓它執(zhí)行 章節(jié)2.1 中的移除集算法。第二,因?yàn)榻邮斩说囊瞥欠堑湫偷模?它應(yīng)該足夠簡(jiǎn)單,這樣接收端就可以搜索到發(fā)送端的信號(hào)調(diào)制到了哪一個(gè)組。

為了滿足這些需求,我們的發(fā)射器/ APT 在自己的內(nèi)存中分配了 4K 大小的數(shù)組,并且不斷地把收集到的數(shù)據(jù)轉(zhuǎn)換成對(duì)與這個(gè)數(shù)組的內(nèi)存訪問的模式。這個(gè) 4K 大小 的數(shù)組覆蓋了緩存的 64 個(gè)組,這樣 APT 在每個(gè)時(shí)間周期里就能傳送 64比特 的數(shù)據(jù)。為了能保證內(nèi)存訪問能夠被接收端定位,相同的訪問模式被重復(fù) 運(yùn)用到數(shù)組的幾個(gè)拷貝上。 因此,高速緩沖區(qū)的大部分都會(huì)被執(zhí)行到,與之形成對(duì)比的是 文章[23] 中的方法使用了典型的移除集,因此只會(huì)激活兩條緩存線。

接收端的代碼會(huì)對(duì)操作系統(tǒng)的內(nèi)存做一個(gè)性能分析,然后搜索含有被 APT 調(diào)制后的數(shù)據(jù)所在的頁(yè)框。真正的數(shù)據(jù)會(huì)被從內(nèi)存訪問的模式里解調(diào)出來(lái)然后傳回服務(wù)器, 整個(gè)過程都不會(huì)違背操作系統(tǒng)對(duì)信息流跟蹤的保護(hù)。

####3.1.2 評(píng)估 我們的攻擊模型假設(shè)發(fā)送端使用(相對(duì)較快的)機(jī)器語(yǔ)言編寫,而接收端是用 JavaScript 編寫。所以,我們假設(shè)整個(gè)系統(tǒng)性能的限制因素是惡意網(wǎng)站的 采樣速度。

為了評(píng)估隱藏信道的帶寬,我們寫了一個(gè)小程序用預(yù)先設(shè)定好的模式來(lái)遍歷系統(tǒng)的內(nèi)存(即含有單詞"Usenix"的比特圖)。 接下來(lái),我們用 JavaScript 高速緩存攻擊來(lái)嘗試尋找這一訪問模式,并測(cè)量 JavaScript 代碼所能達(dá)到的最大的頻率。

JavaScript高速緩存區(qū)攻擊的示例分析 圖6 主機(jī)到主機(jī)的隱藏信道

圖6 顯示的內(nèi)存譜圖捕捉到了這一隱藏信道的執(zhí)行。隱藏信道的理論帶寬通過測(cè)量大約是 320kbps,這和 文章[23] 中用機(jī)器語(yǔ)言實(shí)現(xiàn)的跨虛擬機(jī)的隱藏信道 1.2Mbps 的帶寬比較吻合。

JavaScript高速緩存區(qū)攻擊的示例分析 圖7 主機(jī)到虛擬機(jī)的隱藏信道 圖7 中的內(nèi)存譜圖比較相似,但并不是由運(yùn)行在相同主機(jī)上的接收端代碼得到的,而是在一臺(tái)虛擬機(jī)上得到的(Firefox 34 瀏覽器,Ubuntu 14.01 系統(tǒng), VMWare Fusion 7.1.0 )。盡管在這個(gè)場(chǎng)景下的高峰頻率只能到大約 8kbps,但是一個(gè)虛擬機(jī)中的網(wǎng)頁(yè)竟然能夠探測(cè)到底層的硬件,這著實(shí)讓人驚訝。

##4 利用高速緩存區(qū)攻擊跟蹤用戶行為

絕大多數(shù)關(guān)于高速緩存區(qū)攻擊的研究都假設(shè)攻擊者和受害者位于云計(jì)算供應(yīng)商數(shù)據(jù)中心里的同一臺(tái)機(jī)器上。這樣的機(jī)器一般不會(huì)配置成接收交互式的輸入, 所以該領(lǐng)域的大部分研究都聚焦于如何獲得加密鑰匙或其它保密的狀態(tài)信息,譬如隨機(jī)數(shù)生成器的狀態(tài)[26]。 本文將研究怎么利用高速緩存區(qū)攻擊來(lái)跟蹤用戶的行為 ,這和我們的攻擊模型更相關(guān)。我們注意到 文章[20] 已經(jīng)嘗試了利用 CPU 的一級(jí)緩存對(duì)系統(tǒng)負(fù)載進(jìn)行細(xì)粒度的度量,以此跟蹤按鍵事件的方法。

本案例將演示一個(gè)惡意網(wǎng)站怎么用高速緩存區(qū)攻擊去跟蹤用戶的活動(dòng)。在接下來(lái)展示的的攻擊里,我們會(huì)假設(shè)用戶在一個(gè)背景標(biāo)簽頁(yè)或窗口里打開 了一個(gè)惡意網(wǎng)站的頁(yè)面,并且在另一個(gè)標(biāo)簽頁(yè)或是另外一個(gè)完全沒有互聯(lián)網(wǎng)連接的應(yīng)用里執(zhí)行了一些敏感的操作。

我們選擇了把焦點(diǎn)集中在鼠標(biāo)操作和網(wǎng)絡(luò)活動(dòng)上,因?yàn)椴僮飨到y(tǒng)負(fù)責(zé)處理它們的代碼沒有辦法被忽略不計(jì)。所以,我們期待這些操作會(huì)在高速緩存區(qū)留下比較大的腳印。 而且正如下文所述,它們也很容易被 JavaScript 處處受限的安全模型所觸發(fā)。

###4.1 設(shè)計(jì) 兩種攻擊的結(jié)構(gòu)比較類似。首先,進(jìn)行性能分析,攻擊者用 JavaScript 探測(cè)每一個(gè)組。接著,在訓(xùn)練階段,待檢測(cè)的活動(dòng)(網(wǎng)絡(luò)活動(dòng)或鼠標(biāo)操作)被觸發(fā), 伴隨著對(duì)高速緩存區(qū)的高精度的采樣。在訓(xùn)練階段一方面通過測(cè)量腳本直接觸發(fā)網(wǎng)絡(luò)活動(dòng)(執(zhí)行一個(gè)網(wǎng)絡(luò)請(qǐng)求),另一方面是不停地在網(wǎng)頁(yè)上搖晃鼠標(biāo)。

通過比較在訓(xùn)練階段緩存區(qū)在閑時(shí)和忙時(shí)的活動(dòng),攻擊者可以知道用戶操作會(huì)對(duì)應(yīng)激活哪部分的組,并且訓(xùn)練出一個(gè)關(guān)于組的分類器。最后, 在分類階段,攻擊者不停地監(jiān)視這些有意思的組從而掌握用戶的活動(dòng)。

我們用一個(gè)基本的非結(jié)構(gòu)化的訓(xùn)練過程,即假設(shè)訓(xùn)練過程中系統(tǒng)進(jìn)行的最集中的操作就是被測(cè)量的。為了利用這點(diǎn),我們計(jì)算了隨著時(shí)間的 每次測(cè)量的 Hamming 權(quán)重(等于在某個(gè)周期內(nèi)活躍組的個(gè)數(shù)),之后應(yīng)用 k-meas 算法對(duì)測(cè)量數(shù)據(jù)做聚類。 然后計(jì)算每個(gè)簇中每個(gè)組的平均訪問延遲,從而算出每個(gè)簇的中心。遇到未知的測(cè)量矢量,我們會(huì)計(jì)算這個(gè)矢量和各個(gè)中心的歐幾里得距離, 并把它歸到最近的那一類。

在分類階段,我們用命令行工具 wget 生成網(wǎng)絡(luò)流量,并且將鼠標(biāo)移動(dòng)到窗口以外。為了獲得網(wǎng)絡(luò)活動(dòng)的真實(shí)數(shù)據(jù),我們同時(shí)用 tcp-dump 來(lái)測(cè)量系統(tǒng)的流量,然后把 tcp-dump 記錄的時(shí)間戳和分類器所檢測(cè)到時(shí)間戳聯(lián)系起來(lái)。為了獲得鼠標(biāo)操作的真實(shí)數(shù)據(jù),我們寫了一個(gè)頁(yè)面記錄所有 鼠標(biāo)事件及其時(shí)間戳。需要強(qiáng)調(diào)的是,記錄鼠標(biāo)活動(dòng)的頁(yè)面并不在運(yùn)行著測(cè)量代碼的瀏覽器(Firefox),而是運(yùn)行在另一個(gè)瀏覽器里(Chrome)。

###4.2 驗(yàn)證 JavaScript高速緩存區(qū)攻擊的示例分析 圖8 檢測(cè)到的網(wǎng)絡(luò)活動(dòng) JavaScript高速緩存區(qū)攻擊的示例分析 圖9 檢測(cè)到的鼠標(biāo)活動(dòng)

活動(dòng)測(cè)量的結(jié)果見 圖8 和 圖9 。兩個(gè)圖片的頂端都顯示了高速緩存區(qū)一個(gè)子集的實(shí)時(shí)活動(dòng)。圖片的底端是分類器的輸出結(jié)果和外部收集的真實(shí)數(shù)據(jù)。 正如圖片展示的那樣,我們異常簡(jiǎn)單的分類器在識(shí)別鼠標(biāo)操作和網(wǎng)絡(luò)活動(dòng)方面非常有效。毫無(wú)疑問,使用更加 高級(jí)的訓(xùn)練和分類技巧可以進(jìn)一步提高攻擊的效果。需要強(qiáng)調(diào)的是,鼠標(biāo)操作的檢測(cè)器并不會(huì)檢測(cè)網(wǎng)絡(luò)活動(dòng),反之亦然。

分類器的測(cè)量頻率只有 500Hz。結(jié)果就是,它沒有辦法統(tǒng)計(jì)單個(gè)的包,而只能說明在一個(gè)階段里活躍還是不活躍。另一方面,檢測(cè)鼠標(biāo)活動(dòng)的代碼要比 記錄真實(shí)數(shù)據(jù)的代碼采集到的事件多。這是因?yàn)椤hrome 瀏覽器對(duì)鼠標(biāo)事件的頻率做了限制,大約是 60Hz。

Chen 等人在一篇著名的文章[5]中證明了對(duì)網(wǎng)絡(luò)活動(dòng)的監(jiān)測(cè)可以作為深度挖掘用戶行為的奠基石 。雖然 Chen 等人假設(shè)攻擊者可以在網(wǎng)絡(luò)層 監(jiān)控受害者所有流入和流出的數(shù)據(jù),但是這里所展示的技術(shù)本質(zhì)上可以讓惡意網(wǎng)站監(jiān)控用戶同時(shí)進(jìn)行的網(wǎng)絡(luò)操作。攻擊可以被更多的指標(biāo)增強(qiáng), 例如內(nèi)存分配(見文[13]),DOM 布局事件,磁盤寫操作等。

##5 結(jié)論

本文顯示了邊信道攻擊的范圍要比預(yù)期的大很多。本文提出的攻擊可針對(duì)互聯(lián)網(wǎng)上的大部分機(jī)器而不局限于某些特定的攻擊場(chǎng)景。如此眾多的系統(tǒng)突然間易受 邊信道攻擊意味著防止邊信道攻擊的算法和系統(tǒng)應(yīng)當(dāng)被廣泛使用,而不能只是在某些特定情況下。

###5.1 易被攻擊系統(tǒng)的普遍性 我們的攻擊需要一臺(tái)個(gè)人計(jì)算機(jī),并配有 Intel CPU,使用了 Sandy Bridge, Ivy Bridge, Haswell 或者 Broadwell 的微架構(gòu)。據(jù) IDC 的數(shù)據(jù)顯示,2011年 以后售出的個(gè)人計(jì)算機(jī)80%都滿足這一條件。更進(jìn)一步,假設(shè)用戶使用的瀏覽器支持 HTML5 高精度計(jì)時(shí)器和類型數(shù)組的規(guī)范。表1 列舉了各個(gè)瀏覽器廠商支持這些 API 的最早的版本和易被攻擊的版本占全球互聯(lián)網(wǎng)流量的比重,統(tǒng)計(jì)數(shù)據(jù)來(lái)自 StatCounter GlobalStatas 2015年一月份的報(bào)告。如表所示,目前市場(chǎng)上 80% 的瀏覽器 都無(wú)法抵御此類攻擊。

Browser brandHigh Resolution Time SupportTyped Arrays SupportWorldwide prevalence
Internet Explorer101111.77%
Safari861.86%
Chrome20750%
Firefox15417.67%
Opera1512.11.2%
Total--83.03%

攻擊能否取得效果取決于能不能用 JavaScript 高精度時(shí)間API 進(jìn)行精準(zhǔn)的測(cè)量。雖然 W3C 對(duì)這個(gè)API規(guī)范定義了高精度時(shí)間的單位是 “毫秒,并精確到千分之一”, 但是它并沒有給出該值的最高分辨率,實(shí)際上瀏覽器不同、操作系統(tǒng)不同這個(gè)值也會(huì)有所區(qū)別。舉個(gè)例子,我們?cè)跍y(cè)試過程中發(fā)現(xiàn) MacOS 上的 Safari 瀏覽器可以精確 到納秒,而 Windows 上的 IE 瀏覽器只能精確到 0.8 微秒。 另一方面, Chrome 瀏覽器在所有我們測(cè)試的操作系統(tǒng)上給出的分辨率都是 1 微秒。

所以 圖3 中,單次緩存命中和緩存未命中的差別大概是 50 納秒,性能分析和測(cè)量的腳本在時(shí)間分辨率力度更細(xì)的操作系統(tǒng)上要稍加改動(dòng)。 在性能分析階段,我們沒有統(tǒng)計(jì)單次未命中的時(shí)間,而是重復(fù)讀取內(nèi)存來(lái)放大時(shí)間的差別。 在測(cè)量階段,我們雖然沒有辦法放大每次緩存未命中的時(shí)間,但是我們可以利用來(lái)自相同頁(yè)框的代碼通常會(huì)讓相鄰的組失效這一點(diǎn)。只要同一個(gè)頁(yè)框的64個(gè)組里有20個(gè) 產(chǎn)生了緩存未命中,我們的攻擊就可以在哪怕是毫秒級(jí)的分辨率上進(jìn)行。

我們提出的這種攻擊還可以很容易的運(yùn)用到手機(jī)、平板等移動(dòng)設(shè)備上。值得一提的是,安卓瀏覽器從 4.4 版本開始支持 高精度時(shí)間API 和 類型數(shù)組,但在 本文撰寫的時(shí)候 iOS Safari (8.1) 還不支持 高精度時(shí)間API。

###5.2 反制措施 本文描述的攻擊之所以可行,是因?yàn)樗奂藦奈⒓軜?gòu)這一層到最終的 JavaScript 運(yùn)行時(shí)設(shè)計(jì)和實(shí)現(xiàn)的的一些決定: 怎么把物理內(nèi)存的地址映射到組, 嵌套的高速緩存區(qū)架構(gòu),JavaScript 高速的內(nèi)存訪問和高精度計(jì)時(shí)器;最后是 JavaScript 的權(quán)限模型。這里的每一點(diǎn)上都可以采取一些緩解措施, 但是都會(huì)對(duì)系統(tǒng)的正常使用產(chǎn)生影響。

微架構(gòu)這層,修改物理內(nèi)存到緩存線的映射方式可以非常有效地阻止我們的攻擊,即不再用地址底12比特中的6個(gè)直接選擇一個(gè)組。類似的,換用非嵌套的 緩存微架構(gòu)而不是用嵌套的,會(huì)讓我們的代碼幾乎不肯能精確地一級(jí)緩存中淘汰某項(xiàng),使得測(cè)量更加困難。然而,這兩個(gè)設(shè)計(jì)決定當(dāng)初被選擇正是為了讓 CPU 的設(shè)計(jì) 和高速緩存的使用更高效,改變它們會(huì)讓其它很多的應(yīng)用性能受到影響。再說了,修改 CPU 微架構(gòu)可不是一件小事,因?yàn)樯?jí)已經(jīng)部署的硬件是肯定不行的。

JavaScript這層,似乎降低高精度計(jì)時(shí)器的分辨率就可以讓攻擊更難發(fā)動(dòng)。但是,高精度計(jì)時(shí)器的建立是為了解決 JavaScript 開發(fā)者的實(shí)際需要的, 這些應(yīng)用范圍可從音樂和游戲再到增強(qiáng)現(xiàn)實(shí)和遠(yuǎn)程醫(yī)療。

一個(gè)可能的權(quán)宜之計(jì)是限制應(yīng)用只有在獲得了用戶許可后才能訪問計(jì)時(shí)器(例如,通過顯示一個(gè)確認(rèn)窗口)或者通過第三方的認(rèn)可(例如下載自可信的 “app store”)。

一種有意思的方式是使用啟發(fā)式的性能分析來(lái)檢測(cè)和阻止此類攻擊。如 Wang 等人利用大量算法和按位指令的存在可以預(yù)示這密碼學(xué)應(yīng)用元素 [21] 的存在, 可以注意到我們的攻擊里各種測(cè)量步驟訪問內(nèi)存也會(huì)有一定的模式。因?yàn)楝F(xiàn)代的 JavaScript 的運(yùn)行時(shí),作為性能分析引導(dǎo)優(yōu)化的機(jī)制的一部分,已經(jīng)能夠 詳細(xì)的檢查代碼的運(yùn)行時(shí)性能。所以 JavaScript 運(yùn)行時(shí)應(yīng)該能夠在執(zhí)行時(shí)發(fā)現(xiàn)有性能分析行為的代碼并且相應(yīng)的修改返回結(jié)果 (例如,在高精度計(jì)時(shí)器里加上抖動(dòng),或者動(dòng)態(tài)的調(diào)整數(shù)組在內(nèi)存中的位置等)。

###5.3 結(jié)論 在這篇論文里,我們展示了如何有效地通過可疑網(wǎng)頁(yè)發(fā)起針對(duì)微架構(gòu)的邊信道攻擊,這種方式已被認(rèn)為是非常有效的。 與高速緩存區(qū)攻擊一般被用于密碼分析應(yīng)用不同,本文介紹了它怎么被用來(lái)有效地跟蹤用戶行為。 邊信道攻擊的范圍已被拓展,這意味著設(shè)計(jì)新的安全系統(tǒng)時(shí)一定要考慮到對(duì)邊信道攻擊的反制措施。

##致謝

我們很感謝激 Henry Wong 對(duì)于 Ivy Bridge 緩存淘汰策略的研究和 Burton Rosenberg 對(duì)于頁(yè)和頁(yè)框的講解。

上述內(nèi)容就是可行的 JavaScript 高速緩存區(qū)攻擊,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享題目:JavaScript高速緩存區(qū)攻擊的示例分析
當(dāng)前鏈接:http://aaarwkj.com/article24/godsje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站外貿(mào)建站、微信小程序、品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
蜜臀视频一区二区在线播放| 久久国产精品亚洲av四虎| 国产精品岛国片在线观看| 超薄丝袜美腿一二三区在线播放| 在线看日本一区二区| 人妻中文字幕日韩av| 日韩欧美一二区久久麻豆| 四虎影视国产精品久久| 中文字幕乱码av一区二区| 亚洲永久免费黄色av| 亚洲三级黄片在线观看| 国产偷自一区二区三区| 亚洲国产精品一区二区三区| 亚洲成人自拍视频在线观看| 国语对白精品视频在线| 欧美亚洲午夜精品久久久| 国产成人+亚洲欧洲综合| 粉嫩av北条麻妃电影| 欧美日韩国产激情高清| 濑亚美莉在线观看一区二区三区| 91国产在线视频免费观看| 国产成人三级视频网站| 欧美日韩国产91在线| 最新91精品手机国产在线| 东京热一精品无码av| 黄色片黄色片美女黄色片亚洲黄色片| 日本理伦片一区二区| 韩国三级网站在线观看视频| 亚洲午夜一区二区精品| 亚洲男人天堂免费观看| 六月丁香花五月婷婷| 国产精品不卡一不卡二| 亚洲少妇午夜福利视频| 亚洲永久免费黄色av| 精品欧美熟妇高潮喷水特黄| 国产视频一区2区三区| 亚洲综合日韩精品在线| 国产成人精品亚洲av无人区| 久久免费欧美日韩亚洲| 色呦呦中文字幕在线播放| 亚洲综合偷拍欧美一区日韩|