譯者:知道創宇404實驗室翻譯組
原作者:Jungwon Lim, Yonghwi Jin?, Mansour Alharthi, Xiaokuan Zhang, Jinho Jung, Rajat Gupta, Kuilin Li, Daehee Jang?, Taesoo Kim

摘要 Web瀏覽器是每個人日常生活中不可或缺的一部分。它們經常用于注重安全性和隱私敏感的事情,銀行交易和檢查醫療記錄時都會用到。不幸的是,現代Web瀏覽器過于復雜,難免會有漏洞(例如,Chrome中有2500萬行代碼),它們作為網絡空間接口的作用使它們容易受到攻擊。因此,Web瀏覽器自然成為展示攻擊者先進漏洞利用技術和瀏覽器供應商最先進防御措施的舞臺。可以說,Web瀏覽器是學習最新安全問題和技術的絕佳之地,但由于其快速變化的特性和復雜的代碼庫,對于大多數安全研究人員來說, Web瀏覽器仍然如魔法一般不好捉摸。

為了彌補這一差距,本文將通過研究流行的安全漏洞類型、它們的漏洞利用技術和部署的防御措施, 來系統化講述現代Web瀏覽器的安全環境。具體來講,我們首先介紹了一個統一的架構,展示四大Web瀏覽器的安全設計。其次,我們分享了近10年有關瀏覽器漏洞縱向研究的見解。第三,我們提出了應對計劃及其有效性的時間表和背景。第四,我們分享了我們在2020年 Pwn2Own 比賽中使用的全鏈漏洞利用的經驗教訓。我們相信,這種系統化的關鍵點梳理可以揭示如何推進改善現代網絡瀏覽器的現狀,更重要的是,如何在未來創建安全不易攻破的軟件。

I. 序

Web瀏覽器在現代互聯網連接生活方式中發揮著不可或缺的作用。我們依靠網絡瀏覽器來支付抵押貸款、安排疫苗接種并與世界各地的人們聯系。換句話說,網絡瀏覽器成為網絡空間的守門人,它們的不安全性對我們社會的安全、公平和隱私構成嚴重威脅。不幸的是,網絡瀏覽器一直是網絡攻擊中最具吸引力、最有價值的目標——2021年[58],50%的0-day漏洞都是對web瀏覽器的攻擊,這威脅到互聯網上的每一個人[103], [141], [195], [196], [211], [230], [231]。

因此,希望使用新型漏洞利用技術入侵的攻擊者與希望通過最先進的應對方案保護用戶安全的瀏覽器供應商自然把現代Web瀏覽器當做戰場。瀏覽器供應商確實是通過以下方式推進現代安全實踐的重要參與者: 1. 不僅開源當前架構和代碼,還開源設計過程本身[45]、[52]、[210]; 2. 引入漏洞賞金獎勵以鼓勵發現0-day漏洞[116]、[176]; 3. 通過在云上開發和運行最先進的模糊測試器[109],[111],主動發現可利用的漏洞

不幸的是,詳細的安全設計決策和針對新漏洞利用的新緩解措施的見解通常不是那么容易做到,Web瀏覽器社區中已經見識到了難度。一部分原因是它們復雜的架構、快速變化的實現方法和龐大的代碼庫,但主要是因為同時清晰且客觀地系統化所有主要Web瀏覽器的知識并非易事。每個瀏覽器供應商的專家都試圖提供他們對安全設計和決策的看法,例如 Chrome[44]、IE[51]、Firefox[54]。之前在2017年發表的行業報告[90]、[226]主要側重于以一種臨時的、實時的的方式描述個別技術和防御措施,而沒有發展學術觀點或提供有助于為社區設想未來方向的見解和教訓。

本文大膽嘗試將現代Web瀏覽器的安全環境系統化梳理。我們首先提供了四種主要網絡瀏覽器在安全方面的統一模型,并通過使用提供的模型比較和對比它們的安全決策。其次,基于該模型,我們分析了過去10年在每個開源瀏覽器中發現的安全漏洞,并展示了它們與新應對方案的開發、漏洞賞金計劃和已知的漏洞利用技術的關系。第三,根據我們的研究,我們分享我們的見解和經驗教訓,以激勵正在塑造網絡瀏覽器未來的研究人員和開發人員。我們希望這樣的嘗試可以幫助他們全面了解每個供應商的方法,從而增強他們的安全設計,以最大限度地減少安全影響和攻擊面。

挑戰: 三個獨特的特點使得將網絡瀏覽器安全知識系統化變得具有挑戰性。 1. 研究對象不斷在變化: 瀏覽器供應商做出決策非常快速(例如,每周更新),他們的開發速度比人類構建的任何其他軟件都要快得多。為了推斷出有見地的經驗教訓,我們努力專注于Web瀏覽器中的基本設計問題和方法。 2. 海量的研究量: 現代網絡瀏覽器是用幾百萬行代碼構建的,例如,Chrome由2500萬行代碼組成 [16]。除了項目規模之外,有關Web瀏覽器的信息(例如0-day漏洞利用和緩解措施)分散在整個Internet中,無法提供安全形勢的整體總結和概述。在本文中,我們將精力集中在四種主要的網絡瀏覽器上,即Chrome、Firefox、Safari和Edge,并研究眾多公共資源以解決它們的安全問題:issue跟蹤器[43]、[48]、CVE報告 [2]、[4]、[5]、[7]、[9]、[11]、[12]、[14]、[55]、代碼庫 [30]、[45]、[52]、[60],以及來自供應商的技術報告 [49]、[58]、[65]、[67]、[79]、[86]、[152]、[161]、[163]、[170]、[171]、[204]、[208]、[230]、[231]。 3. 單獨的規范: 同樣重要的是,要就其安全問題提供客觀的觀點;每個瀏覽器在做出決策時都有自己的規范和要求(例如,發布截止日期),專注于基本問題是至關重要的。為了解決這個問題,我們提供了一個統一的架構,可以在概念上比較和對比每個瀏覽器的設計,而不會影響它們的實現細節。

貢獻: 本文做出以下貢獻: - 提供現代瀏覽器架構在沙盒方案方面的結構的詳細比較; - 對瀏覽器漏洞進行為期10年的縱向研究; - 通過詳細分析對瀏覽器漏洞進行分類; - 研究瀏覽器上最先進的通用緩解措施; - 對真實世界的全鏈漏洞利用進行詳細研究。

非本文的目標。本研究的主要重點是網絡瀏覽器安全,涉及其自身漏洞的安全性。我們不考慮其他與Web相關的安全問題,例如Web或Web服務器安全問題,例如跨站點腳本(XSS)、SQL注入等。請注意,盡管通用跨站點腳本(UXSS)[166]聽起來類似于XSS,它通常源于瀏覽器的實現和設計中的問題,因此被認為是網絡瀏覽器安全(§III-E)。

II. 現代瀏覽器架構

本節提供了每個Web瀏覽器的統一模型,可以客觀地比較它們的方法。

A. 概述

現代網絡瀏覽器采用最小權限原則,將操作系統進程作為保護域。通過使用進程域,可以使用三種類型的進程來描述每個Web瀏覽器,即瀏覽器(browser)進程(標記為綠色)、渲染器(renderer)進程(標記為洋紅色magenta, 實際上在圖中偏紫的那部分)和特定任務的進程(標記為黃色),如圖1所示。

圖1: 四大瀏覽器的內部架構。所有瀏覽器都部署了一個沙箱(粉紅色區域)來限制渲染器,而詳細的沙箱方法因底層操作系統而異。瀏覽器之間存在細微但重要的差異。

瀏覽器進程: 當Web瀏覽器啟動時,瀏覽器進程以與用戶相同的特權級別(即更高的特權)運行,并將沙箱配置文件傳遞給操作系統以限制其他進程的特權(即較低的特權)。它管理所有子進程(例如渲染器),并且是唯一通過系統調用(和用戶界面)直接與用戶交互的進程。

渲染器進程: 此進程負責解析和渲染不受信任的Web內容。Web上不斷增長的數據類型導致渲染器進程包含各種各樣的組件,例如媒體解析器、DOM 和 JS 引擎。由于它們是瀏覽器bug的主要來源,因此它們被限制在限制性沙箱中(參見§II-C)。渲染器進程通常是按瀏覽器選項卡或每個網頁來生成的。每個渲染器的隔離策略因每個Web瀏覽器的安全策略或功能(例如,站點隔離)、運行時可用資源(例如,移動設備中的內存不足)甚至用戶配置而異。

其他進程: 現代瀏覽器的架構是高度模塊化的。這種模塊化設計使瀏覽器能夠根據進程的角色擁有不同的權限級別。與外部驅動程序交互的服務(例如,網絡或GPU進程)被隔離為一個單獨的進程,這為不需要此類訪問的進程(如渲染器進程)啟用了更嚴格的沙盒。Web瀏覽器通常也將擴展和插件放在不同的進程中。這可以保護具有更高權限級別的插件免受惡意Web內容的侵害,并保護瀏覽器在惡意插件的情況下不被劫持。

進程間通信(IPC): 由于這些進程不能直接訪問彼此的內存,它們總是通過操作系統提供的IPC通道進行通信,并且通信通常由瀏覽器(代理)進程進行調解。換句話說,瀏覽器進程作為一個關系監視器,限制從其他進程直接訪問重要數據或高權限操作(例如,cookie或系統調用)。由于這種多進程架構,攻擊總是從類似渲染進程這樣的低權限進程發起,攻擊者的目標是闖入以用戶權限運行的瀏覽器進程。同時,它可以從渲染器進程中的良性bug導致的崩潰中恢復,從而使瀏覽器對穩定性問題具有彈性。

同源政策(SOP): 實際上,網站由來自不同來源的大量內容組成,例如,將CDN用于常見的JavaScript庫,通過iframe嵌入外部站點,或啟用社交網絡中的點贊按鈕。網站的復雜性促成了每個Web瀏覽器的眾多安全策略和獨特功能。根據每個網站的來源[94],瀏覽器進程和渲染器進程限制允許網頁與哪些資源(例如cookie)進行交互,這就是同源策略(SOP)[94]。

B. 瀏覽器的差異

到目前為止討論的設計同樣適用于所有四種主流瀏覽器。然而,如圖1所示,一些實現細節會因瀏覽器的設計及其底層操作系統的不同而有所不同。例如,Chrome和Safari中的 GPU進程與渲染器進程是分開的,使用沙盒配置文件使它們能夠訪問3D API 平臺[67](參見 §II-C)。此外,Chrome、Firefox和Safari各自有一個單獨的進程來處理網絡服務,而Chrome網絡服務則置于沙箱之外。Chrome團隊目前正在實現其網絡服務的沙箱 [28]。

站點隔離: 沙盒機制的確可以保護瀏覽器;但是,隨著通用跨站腳本 (UXSS) 攻擊的出現,攻擊者可以竊取用戶數據而無需沙箱逃逸。為了處理此類攻擊,Chrome團隊提出了站點隔離[186]以進一步將不同的站點來源分離到不同的進程中。它為每個站點來源創建了一個專用進程,因此不同站點來源之間沒有隱式共享。站點隔離是解決UXSS的有效措施,它也有利于防止基于硬件的瞬態執行攻擊[137]、[147]。Firefox有一個類似的項目,名為Fission[175],它在Firefox_88_Beta[174]中發布。

JavaScript引擎: JavaScript引擎是現代瀏覽器的核心,它將JavaScript代碼轉換為機器代碼。主流瀏覽器使用即時編譯(Just-In-Time, JIT)[36][34][33]來加速代碼執行。此外,JIT編譯器對所有操作的結果和副作用(side-effects)進行建模,并運行各種分析過程以優化代碼。如果其中任何一個出錯,就會生成并執行具有內存損壞問題的本機代碼,這可能導致嚴重的安全隱患[26]、[121]。雖然每個引擎都有不同的實現,但它們使用相似的設計原則并具有共同的攻擊面(參考§III-D)。因此,攻擊者可以構建出跨不同引擎的通用攻擊原語,例如fakeobj和addrof原語[154]、[189]以及元素類型轉換 [153]、[190]。JavaScript引擎也在瀏覽器之外被使用(例如Node.js使用V8),放大了JavaScript引擎中安全漏洞的影響。我們在§VI-A中討論了由同類型的瀏覽器引擎引起的問題。

渲染引擎: 渲染引擎負責解釋資源和渲染網頁。四大瀏覽器中的每一個都有自己的渲染引擎:Safari使用WebKit; Chrome使用Blink(衍生自WebKit); Firefox使用 Gecko; Edge使用Blink(替換EdgeHTML)。Web標準[219]、[224]用作瀏覽器供應商實現其渲染引擎的基線規范和參考。由于Web標準不斷發展新功能,渲染引擎也發生了快速變化,即實現新功能或刪除已棄用的功能。由于不同的決策過程和實現策略,在不同瀏覽器的渲染引擎中實現的特性有很大的不同[42],攻擊面[228]因而也是不同的。我們將在§III中討論攻擊面。

C. 沙盒方案的差異

沙盒會限制程序執行,以防其偏離預期任務。然而,用于構建沙盒環境的底層技術和架構在操作系統之間存在顯著差異。為了檢查沙盒實現的內部結構,我們進行了如下操作,并在表I中總結了我們的發現。 1. 審核瀏覽器的源代碼 2. 監控沙盒API的行為 3. 分析預定義的沙盒策略文件(例如, Safari瀏覽器的配置)。

表I. 沙盒對比(Chrome, Firefox, Edge, Safari; on Windows, Linux, MacOS)

對沙盒原語進行分類: 在表I中,我們根據作用將沙盒原語分為三類: 1. 權限削減, 使用DAC/MAC等平臺的權限系統對沙盒進程應用更多受限制的權限; 2. 域分離, 為沙盒進程分配一個分離的資源空間; 3. 減少攻擊面, 限制對系統服務、內核或設備驅動程序的訪問。

瀏覽器的特定特征: 瀏覽器供應商根據給定的約束(如,可用內存)使用不同的原語。例如,站點隔離通過在受感染的渲染器和特權網頁[107]、[108]之間設置一個原始的、進程級的安全邊界來防止RCE漏洞轉化為UXSS或沙盒逃逸。

特定于操作系統的行為: 我們還比較了不同操作系統(即Windows、Linux和macOS)的沙盒功能。

  • Windows: 通過使用安全令牌(security token)來限制每個進程[117]。與基于功能的模型(capability-based model)類似,獲得某個令牌級別的進程可以訪問具有適當安全描述符級別的特權資源。例如,渲染器進程以低完整性令牌級別(low integrity token level)運行,代理進程以中等完整性令牌級別(medium integrity token level)運行,因此在默認情況下,從渲染器進程到代理進程的任何寫入訪問都將受到限制。

    然而,細粒度的訪問控制沒有統一的協議。為了解決這個問題,Chrome和Firefox使用自己的IPC機制和資源相關功能的二進制級代碼補丁以支持細粒度規則集[117]。微軟在Windows 8中引入了AppContainer,通過添加"附加到進程令牌"的功能概念,對資源實施更細粒度的訪問控制。Edge創建了一個基于AppContainer[89]的沙箱。從默認拒絕策略(deny-by-default)開始,Edge為所需的系統資源創建了一組功能。Chrome也在試驗基于AppContainer的沙箱[28]。瀏覽器還利用各種功能來應對沙盒逃逸。例如,備用桌面和備用窗口站(alternate window station)可用于應對基于UI的攻擊,例如Shatter[180];引入"鎖定默認DACL"[24]和"隨機限制SID"[38]以執行更加嚴格的DACL,因此受感染的沙盒進程無法訪問其他沙盒進程。

  • Linux: 與Windows不同,Linux沙箱主要基于seccomp、chroot和namespace。首先,seccomp是基于eBPF語言的標準系統調用過濾器。由于默認的seccomp配置過于嚴格,瀏覽器會定義自己的過濾規則。例如,Chrome將其自定義的seccomp規則應用于除代理進程(broker process)之外的所有進程,并且每個進程的詳細規則各不相同。其次,為了限制文件訪問,基于Linux的瀏覽器沙箱會利用chroot監禁。一旦使用chroot限制了進程,就無法訪問文件系統的更高層次結構。例如,Firefox將chroot監禁應用于所有渲染器,并且僅允許它們根據從代理進程獲得的文件描述符訪問特定文件。此外,瀏覽器使用namespace[74]為各種資源(例如用戶、網絡和IPC)創建單獨的空間。例如,創建和加入用戶命名空間使沙盒進程能夠位于單獨的UID和GID中,從而有效地禁用對其他未沙盒進程的訪問。

  • macOS: 雖然Windows和Linux支持各種類型的沙箱原語,但macOS支持專門格式化的沙箱配置文件(.sb)[75]來描述給定進程的沙箱策略。通常,該文件提供允許訪問的絕對文件路徑的允許列表,并默認阻止所有其他文件訪問。該配置文件還定義了訪問其他資源(如網絡和共享內存)的能力,并支持基于系統調用的過濾,如Linux的seccomp,盡管它僅部署在Safari上。

移動平臺: 由于基于進程的沙箱使用大量內存,因此移動平臺會在沙箱策略中引入細微差異,或者根據可用資源禁用它們。例如,在Android上,只有當設備有足夠的內存(>1.9GB)并且用戶需要在網站上輸入密碼時,才會啟用Chrome中的站點隔離[77]。在iOS上,Safari使用與macOS不同的沙盒規則,因為不同的系統服務和IOKit驅動程序是暴露在移動設備上的。由于這些差異,一些漏洞利用可能僅適用于移動平臺[152]。

D. 瀏覽器漏洞利用

瀏覽器利用的目標是竊取其用戶的敏感數據或安裝惡意軟件以采取進一步行動。攻擊者可以執行UXSS之類的攻擊直接竊取數據,或者先執行代碼,然后嘗試沙箱逃逸。攻擊者可能會試圖通過攻擊內核來獲得系統特權沙箱逃逸,這超出了本文的范圍。幸虧有各種應對方案(參見§III,§IV),攻擊者需要將多個bug(例如,利用4個bug組合直到沙盒逃逸[134])鏈接在一起以獲得任意執行。即使在控制流被劫持之后,由于渲染器進程在沙箱內運行,攻擊者需要在代理進程中找到另一組bug以進行沙箱逃逸。根據武器庫中可用的漏洞,攻擊者經常試圖利用系統服務、驅動程序或內核中的錯誤而不是代理進程來突破沙箱[155]。

III. 瀏覽器漏洞和應對措施

在本節中,我們首先對過去十年中公開報告的瀏覽器漏洞進行統計研究,以推斷趨勢,然后介紹主要的漏洞類型(例如JavaScript引擎錯誤)及其供應商發布的相應應對措施。

圖2. 瀏覽器利用場景和漏洞分類。我們主要關注瀏覽器安全相關問題,省略了基本的軟件攻擊/防御技術,如ROP、NX和ASLR。"Exploit example"箭頭描繪了§V中描述的利用路徑。

A. 瀏覽器漏洞趨勢

數據采集: 我們研究了四種主要瀏覽器的公開CVE和漏洞報告:
1. 來自“瀏覽器供應商[53]的定期更新的安全公告
2. 供應商[43][48]發布的公共問題跟蹤
3. 開放源代碼存儲庫有將bug修復提交到已發布漏洞的常規做法[30][45][60][52]
4. 國家漏洞數據庫(NVD)[55]中的CVE報告
5. 現實世界中使用的安全漏洞利用,例如Pwn2Own[61]中使用的bug,以及Google Project Zero報告[49]、[58]。表II總結了我們數據收集工作的成果。

表II. (1)NVD數據庫中的CVE總數55收集到的bug數量. 對于開源瀏覽器,我們從供應商的bug跟蹤器中收集了額外的的漏洞信息[48][43]. 對于這些瀏覽器, 我們忽略了機密漏洞和與bug跟蹤器問題無關的漏洞。 對于閉源瀏覽器,我們使用NVD[55]作為CVE數據的唯一來源. (3)和(4)是用于收集被利用漏洞數據的來源.

錯誤和代碼庫大小: 圖3顯示了所有瀏覽器中,特別是從2010年之后,安全漏洞的急劇增加。我們認為這種漏洞的增加與不斷增長的瀏覽器代碼庫有關,因為新功能不斷添加。此外,2010年之后漏洞挖掘技術的進步發揮了相當大的作用,我們在§VI-C中強調了這一點。

圖3. 左y軸: 安全漏洞數量; 右y軸: 兩個開源瀏覽器(Firefox和Chromium)的LoC. LoC是基于每年的首個主要版本更新. 注: LoC = Lines of Code

動態攻擊向量: 瀏覽器的龐大規模和不斷變化的特性使得攻擊向量不斷變化。對于開源瀏覽器Firefox和Chromium,我們將bug映射到它們各自的主機組件和bug類,如圖4所示。對于這兩種瀏覽器,我們使用開發人員分配的特質將bug映射到它們的主機瀏覽器組件,并使用關鍵字匹配漏洞描述以對其進行分類。

渲染器錯誤在Firefox和Chromium中都占主導地位,因為渲染器是瀏覽器的核心。自2016年以來,Chromium的URL欺騙漏洞的增加凸顯了在以前未探索的區域中查找漏洞的容易程度。一般來說,內存錯誤,特別是UAF錯誤,仍然是兩種瀏覽器最大的共同點。

另一個大體上的發現是這兩個瀏覽器多年來在兩個方面上的漏洞數量不同。例如,對于bug組件,Chromium最近有更多的DOM和HTML漏洞,但Firefox的DOM和HTML漏洞數量正在減少。對于bug類別,2019年Chromium中的大多數bug被歸類為UAF、OOB和URL欺騙漏洞,但Firefox多年來對bug分布的描述相對統一。因此,這種差異不僅直觀表現出不斷變化的攻擊向量,還表現了不同瀏覽器的安全漏洞分類策略的變化。

圖4. 將bug映射到Firefox和Chromium中的主機瀏覽器組件和漏洞類. 該圖突出了瀏覽器攻擊面逐年變化的性質. 每個圖中的數字都是按最小-最大比例縮放的.

瀏覽器針對bug的努力也可以在圖中體現。Chromium的站點隔離[39]、[186]作為對UXSS漏洞的應對措施,使得2017年實施站點隔離后上述漏洞明顯減少(圖4b)。某些漏洞類型仍然是bug的主要來源,例如DOM和HTML組件,我們將在§III-C中詳細說明。

內存安全的語言: 內存安全漏洞在瀏覽器中至關重要且占主導地位。例如,Chromium將超過70%的高嚴重性漏洞標記為內存安全問題,其中一半是UAF錯誤[50]。我們在圖5中展示了瀏覽器中內存安全漏洞的比率。如圖所示,盡管有應對措施[212][59],但過去十年內存安全漏洞仍然占主導地位。最近,有人努力使用內存安全語言(例如 Rust)重寫瀏覽器以減少內存安全漏洞。例如,Mozilla正在一個名為Oxidation[57]的項目中用Rust重寫Firefox的部分內容。直到2020年,Oxidation項目已經用Rust(編寫的等效模塊)替換了12%的Firefox組件。五個被替換的子組件屬于渲染器的媒體解析組件。我們也在圖5中畫出了渲染器的媒體解析組件中的內存安全漏洞數量。很明顯,自2015年 Oxidation項目開始以來,Firefox中的內存安全漏洞數量呈現出小幅但穩定的下降,其中在渲染器的媒體組件中的內存安全漏洞明顯減少。盡管瀏覽器供應商多次嘗試解決內存安全問題,但都沒有像Firefox的Oxidation那樣產生顯著效果。

圖5. Firefox和其他瀏覽器中內存安全漏洞與其他漏洞的數量。RM-Mem是Firefox渲染器中媒體解析組件中內存安全漏洞的數量,描述了從2015年開始用Rust部分重寫后的下降趨勢。

Lession 1: 使用內存安全語言可以有效減少內存安全漏洞。
如圖5所示,在Firefox中使用Rust有效地減少了內存安全漏洞。盡管需要付出很多努力,但它是一種基本的方法,也是最有可能消除內存安全漏洞的方法。我們建議其他瀏覽器供應商遵循此最佳方法,并逐步將其瀏覽器轉換為內存安全的語言。

漏洞賞金計劃: 谷歌等主流瀏覽器廠商為那些幫助他們修復漏洞的安全錯誤報告提供獎勵[116]。在大多數情況下,這些賞金考慮了多種因素,例如漏洞類型、可利用性以及報告者所做的額外有意義的工作。更高的賞金更能激勵研究員和白帽去發掘漏洞。我們在圖6中將每年的平均支付金額與Chromium中每年的漏洞數量相關聯。我們特別展示了內存安全、UXSS和URL欺騙漏洞,因為它們與支付金額的關聯模式很有意思。

圖6. 平均支付金額(上圖)與Chromium中每年的漏洞數量(下圖)之間的相關性. 紅色區域是所有類別的平均賞金金額. 超過紅色區域的漏洞類別表示比平均水平有更高的賞金.

支付金額會影響為各個類別發現的漏洞數量(圖6)。平均賞金金額高于總體平均金額的錯誤類別(例如,2014-2016年的UXSS和2017-2020年的Mem錯誤)的數量似乎在這些年有所增加。然而,這種相關性也有例外:某個類別的漏洞數量的增加不會帶來更高的賞金金額。該圖進一步強調了研究人員在挖洞時除了尋求更高回報外的其他重要因素,例如 1) 尋求探索未知攻擊向量(URL欺騙)的好處; 2) 瞄準具有更高影響的漏洞(UXSS在2016的增多); 3)避開具有有效應對措施的漏洞類別(2017年發布的站點隔離和2018年減少的UXSS錯誤)。

Lession 2: 更高的賞金會激發更多的漏洞報告。
瀏覽器廠商嘗試增加漏洞賞金計劃的覆蓋面和預算,這收獲了更多的漏洞報告。因此,增加漏洞賞金支出可以有效地吸引安全研究人員的興趣并減少攻擊面。

漏洞嚴重性評級的分歧: 通用漏洞評分系統(CVSS)[46]是作為漏洞嚴重性評估的免費和開源標準而開發的。 National Vulnerability Database[55]使用CVSS標準為每個發布的CVE編號提供漏洞嚴重性基礎評分。同樣,Firefox和Chromium在其bug跟蹤器[43][48]和安全建議[53]中提供了對漏洞嚴重性的評估,使用的是他們自己的漏洞評級系統。表III比較了NVD的CVSS-V3與Firefox和Chromium的漏洞嚴重性評估。本研究的目的是衡量使用NVD的CVSS-V3分數作為瀏覽器中漏洞嚴重程度的統一度量的有效性。

表III. NVD分配的CVSS-V3分數與供應商的漏洞嚴重程度分數之間的比較. 錯誤等級為: 低、中、高和嚴重. 表中省略了年久而無法獲得CVSS-V3分數的bug. 最后一列是用于此比較的漏洞總數, 以及分配了不同漏洞等級的漏洞數. 該表在兩個維度上強調了漏洞評級的差異: 1) CVSS分數與供應商分數中分類為低的漏洞數量(加粗); 2) 供應商之間評級為嚴重的漏洞(下劃線).

在表中,我們注意到評級系統(供應商與NVD)之間存在差異。NVD對Firefox一半以上的漏洞進行了不同嚴重程度的評分,而它在Chromium的bug評分上也僅有58%與Chromium一致。雖然我們預計兩個評級系統之間不會完全一致,但評分的巨大差距令人驚訝。這些差異也發生在供應商之間。查看這兩種瀏覽器中嚴重漏洞的數量,我們可以看到,與Chromium相比,Firefox將其bug評為"嚴重"的百分比要高得多。我們的分析結果,與之前對使用CVSS分數作為bug分類和優先級的指標的擔憂相一致[132][205][156]。

瀏覽器漏洞: 被實際攻擊中的瀏覽器漏洞值得更多關注,因為從攻擊者的角度來看,它們表明了已確定的攻擊向量。為了研究此類漏洞,我們從僅獲取高度可利用漏洞的可靠來源收集信息。對于在野使用的漏洞,我們參考Google定期更新的Project Zero報告,該報告跟蹤自2014年以來所有公開的0day漏洞利用案例[58]。我們還收集了Pwn2Own[40]中利用的漏洞,這是一場由Zero Day Initiative[61]贊助的real-world黑客競賽。我們根據漏洞類別和目標瀏覽器組件,在圖7中突出顯示過去十年中最常被利用的漏洞。

圖7. 被利用的瀏覽器組件和錯誤類別的趨勢. 數據包括來自所有瀏覽器的錯誤. 線上是累積的數量. JavaScript引擎和UAF錯誤分別主導了被利用的bug組件和漏洞類型。

如圖7所示,對于瀏覽器組件,DOM漏洞占主導地位,直到2017年被JS引擎漏洞取代。盡管如此,DOM漏洞在今天仍然存在,并且即使在添加了許多緩解措施后仍顯示出緩慢而穩定的增長。對于漏洞類型,盡管采取了所有應對措施,實際利用中UAF漏洞等內存安全bug仍然比其他漏洞類型更多。一個有趣的發現是關于出現的漏洞類別和組件的對應趨勢。對于圖中的大多數線條,我們看到早些年的增長相當陡峭,但之后增長放緩(JavaScript引擎漏洞除外)。這種趨勢直觀呈現了: 攻擊者為尋找和探索新的攻擊技術而付出的努力,以及供應商為消除和應對新漏洞而采取的反應性對策。

本節中包含的漏洞類型: 基于圖7所示的bug趨勢,在本節中,我們主要討論bug的趨勢類型,即:
1. 解析器bug (§III-B)
2. DOM bug (§III-C)
3. JavaScript引擎漏洞 (§III-D)
4. SOP繞過和UXSS漏洞 (§III-E)

B. 解析器漏洞

解析器經常遭受內存損壞問題;瀏覽器中的解析器也不例外。在Web瀏覽器中,大多數解析器漏洞都出現在媒體解析器或網絡協議解析器中。如圖4a所示,渲染器(媒體)占據很大份額。這些漏洞更容易在渲染器進程中被利用,因為它們可用于破壞 JS 對象并創建更強大的漏洞利用原語。

當前狀態: 在強化堆分配器(§IV-B)之后,這種利用變得更加困難或不可行,主要是因為堆上JS對象的劃分。不過,像ClusterFuzz[111]這樣的大規模模糊器也發現了許多解析器漏洞。瀏覽器供應商正在研究沙盒化網絡代碼,并使用Rust[57]等內存安全語言重寫瀏覽器代碼。結果,這些漏洞變少且難以利用。盡管如此,在解析數據時仍然存在多個第三方庫的依賴關系,因此需要對安全更新進行嚴格控制。

C. DOM漏洞

DOM漏洞是攻擊者的熱門目標;根據圖7,2014年大多數被利用的漏洞是DOM漏洞。由于其中大多數是UAF漏洞,因此已部署了應對措施以降低它們的可利用性,例如堆隔離與延遲釋放(§IV-B)。

當前狀態: 雖然fuzzer還在繼續識別新的DOM漏洞[111]、[129]、[227],如圖7所示,但由于利用DOM漏洞的難度增加,最近已知的在野全鏈漏洞利用傾向于使用其他組件中的漏洞。

Lession 3: UAF應對措施可有效減少DOM漏洞利用。
由于DOM錯誤主要依賴于UAF問題,因此它們大多已通過UAF應對措施得到處理。依賴指針類型混淆的常規利用技術已經變得不可行,因為堆按對象類型隔離,并且沒有公開的替代技術。 因此,利用DOM漏洞不再是破壞渲染器的首選方法。

D. JS引擎錯誤

在最近的瀏覽器漏洞利用中,JS引擎漏洞是瀏覽器漏洞利用最流行的目標之一,尤其是優化相關的漏洞。至少34%的被利用漏洞(圖7)使用JS引擎漏洞來破壞渲染器進程,這通常是全鏈瀏覽器漏洞利用的第一步。JS引擎漏洞可用于生成強大的漏洞利用原語,例如addrof(泄露任何JS對象的地址)和fakeobj(將任意地址作為對象訪問)。

如§II-B中所述,JS引擎中的JIT編譯器使用推測優化(speculative optimization)。這些優化機制中的漏洞比傳統的內存安全漏洞(例如釋放后重用或緩沖區溢出)更為嚴重,因為它們難以處理,但為攻擊者提供了強大的利用原語。從高層次上看,JS引擎的bug主要可以分為四類: - JIT分析漏洞:JIT編譯器的分析過程或模型中的漏洞。此類漏洞具有最高的可利用性和影響。 - JIT代碼變異/生成漏洞:操作JIT graphs或生成代碼過程中的漏洞。 - 非JIT副作用漏洞(Non-JIT side-effect bugs):JavaScript內置函數中的副作用漏洞,主要與快速路徑(fast-path)相關。 - 非JIT傳統內存損壞漏洞:不屬于上述類別的其他內存損壞漏洞

我們檢查了圖7中的45個被利用的漏洞;有13個JIT分析漏洞、9個非JIT副作用漏洞和11個傳統內存損壞漏洞,但沒有JIT代碼突變/生成漏洞。我們懷疑這是因為此漏洞很難利用。JIT編譯器中的大多數漏洞都是邏輯漏洞。由于它是一個編譯器基礎設施,邏輯漏洞可以被放大為JIT編譯代碼中的內存安全漏洞。因此,很難對JIT錯誤做出一般性的緩解。在這里,我們介紹了三大類防御:原語消除覆蓋保護基于jit的代碼重用緩解

  • 原語消除(Primitive elimination): 原語消除技術旨在防止攻擊者 1.將漏洞轉換為利用原語; 2.將利用原語升級為更強大的原語(例如, 為了構造可靠和穩定的讀/寫原語, 攻擊者可以利用addrof和fakeobj原語來偽造一個帶有完全受控的后備存儲指針的ArrayBuffer對象, 這就是原語的升級)。

    a. 對象形狀認證(Object shape authentication): 這種類型的應對旨在防止攻擊者使用fakeobj原語偽造有效對象。例如,在JavaScriptCore中,StructureID Randomization使用7個隨機熵位對StructureID進行編碼,這使得攻擊者很難猜測[121]、[204]。由于StructureID表示JS對象的類型和形狀,猜測StructureID錯誤會導致形狀無效,訪問它最終會導致進程崩潰[221]。

    b. 地址空間隔離(Address space isolation): 此類應對措施隔離不同對象,以防止對象被偽造或覆蓋。 GigaCage[83]是一個4GB的虛擬內存區域,將不同的對象分成不同的堆(或HeapKinds)。關鍵思想是防止跨不同堆的內存訪問,并使用堆基地址的相對偏移量來定位GigaCaged對象,而不是使用絕對地址。因此,即使指針已損壞,它也不能指向其原始堆之外的任何內容。PACCage[121]用于保護TypedArray的后備存儲緩沖區指針,并在GigaCage之上使用指針驗證碼(PAC)進一步增強安全性。Chrome V8 Heap Sandbox [119]是實驗性的,其目標類似于GigaCage,但它嘗試使用單獨的指針表來保護外部指針,之后攻擊者無法為外部指針創建任意值。

  • 覆蓋保護(Overwrite protection): 覆蓋保護是防止攻擊者引入任意可執行代碼的標準保護機制,可以看作是瀏覽器漏洞利用上下文中的最后一道防線。它們主要包括四種機制: W ⊕ X [106]、強化JIT映射 [139]、快速權限切換[128]、[139]和進程外JIT[164]。

    a. W ⊕ X: W ⊕ X 是一個重要的安全原則,它強制內存要么可執行但不可寫,要么可寫但不可執行。這種應對比傳統的shellcode注入攻擊更出色,并為許多其他保護技術提供了基礎[62]、[232]。令人驚訝的是,由于性能原因,JIT代碼頁通常不受這種基本緩解的影響,并被映射為rwx [106]。

    b. 僅執行內存(Execute only memory): ARMv8設備上的iOS 10獲得了對僅執行內存(XOM)[139]的硬件支持,使JIT編譯的代碼能夠將秘密數據作為即時值包含在內。Safari利用XOM向攻擊者隱藏可寫可執行映射的地址,方法是引入一個僅執行的jit_memcpy函數,該函數內部具有JIT映射的基地址。這使得任意讀/寫不足以覆蓋JIT代碼頁,并迫使攻擊者采取替代路徑,例如劫持控制流來調用jit_memcpy。

    c. 快速權限切換: APRR & MPK: 引入對快速權限切換的硬件支持,以減少使用mprotect()切換頁面權限的開銷。自ARMv8設備上的iOS 11以來,APRR[139]被部署以通過將頁面權限(r,w,x)映射到指示線程的實際頁面權限的八個專用寄存器來啟用每線程權限。類似地,英特爾MPK[128]每頁添加一個單獨的4位整數,以實施兩個額外的保護:禁用訪問和禁用寫入。因此,JIT區域將始終為r-x,并且僅允許來自專用數據復制線程的寫入操作,通過調用解鎖函數將權限更改為 rw- 僅適用于目標線程。

    d. 進程外JIT: 在Windows上,Arbitrary Code Guard (ACG)等緩解措施可確保進程只能將簽名代碼映射到其內存中。但是,瀏覽器出于性能目的大量使用JIT編譯器,這會在內容進程中生成未簽名的本機代碼。引入了進程外JIT[164]以啟用帶有JIT編譯器的ACG。因此,JIT功能被轉移到一個單獨的進程中,該進程在它自己的沙箱中運行,它負責編譯JS代碼并將其映射到進程中。因此,內容進程將永遠不被允許映射或修改其自己的JIT代碼頁。

  • 基于JIT的代碼重用緩解措施(JIT-based code-reuse mitigations): JIT Spray [158]是一種將大量攻擊者控制的JIT代碼(標記為可執行文件)注入內存中可預測的地址以繞過ASLR/DEP的技術,類似于Heap spray [95]。為了緩解JIT Spray,瀏覽器對JIT代碼設置了大小限制,并切換到具有高熵ASLR的64位平臺,這使得JIT spray不可行。不過,如果攻擊者知道它們的地址,則可以利用JIT code gadgets。這種攻擊稱為基于JIT的代碼重用攻擊(JCRA)。在這里,我們簡要總結了此類攻擊的應對措施。

    a. 受控字節消除(Controlled bytes elimination): JCRA有一個基本假設,即通過控制立即操作數和特定操作碼,攻擊者可以控制在堆內存中生成的JITed代碼。因此,應對措施是要消除攻擊者控制字節的可預測性,例如混淆大常量[71]、[144]、置換立即操作數和局部變量的寄存器分配[144]、[222]以及在函數的調用幀中混雜指令[144]、[222]。

    b. 內部隨機化(Internal randomization): 攻擊者還可以利用指令彼此的相對位置或與基地址的可預測偏移量。一些應對措施旨在使JIT代碼布局多樣化,包括:隨機化不同指令對之間的相對偏移量[126]、[144]、[225],以及在第一個代碼單元之前隨機插入空閑空間 [106],[144]。

當前狀態: 雖然有一些試驗可以防止某些類型的漏洞(§IV-D),但很難涵蓋所有這些漏洞。因此,JS引擎中的應對措施側重于消除攻擊原語。最近,Edge團隊添加了一個名為Super Duper Secure Mode(SDSM)[17]、[19]的新安全功能,它基本上禁用了JIT編譯。用戶可以選擇在訪問頻率較低的網站上禁用JIT。雖然要犧牲一些性能,但它是減少攻擊面的好方法。盡管已經引入了多種應對措施,JCRA仍然是有用的[87]、[106],因為供應商沒有投入很多資源來實施或維護應對措施。

Lesson 4: 應對JS引擎漏洞很困難。
JavaScript引擎漏洞,尤其是JIT編譯器漏洞,非常強大,因為攻擊者可以發出存在內存損壞問題的代碼。因為處理邏輯漏洞通常很難,許多應對措施目的是防止利用原語升級。因此,供應商經常部署打破利用路徑的緩解措施,并不斷增強它們以防止未來的攻擊。

E. SOP-Bypass 和 UXSS 漏洞

同源策略(SOP)[94]由Web瀏覽器強制執行,以保持不同源之間的安全邊界。SOP繞過漏洞可用于在不同程度上破壞SOP,從泄漏一比特到竊取整頁數據。UXSS漏洞是最強大的SOP繞過漏洞類型,可用于促進跨域JavaScript代碼執行。在UXSS攻擊中,攻擊者可以通過利用Web瀏覽器[13]、[14]或第三方擴展[31]、[35]中的漏洞將腳本注入任何受影響的上下文,達到與在目標網站利用XSS漏洞相同的效果。

當前狀態: 站點隔離[39]、[186]是針對UXSS攻擊的最重要的應對措施之一。站點隔離在進程級別強制執行SOP,這使得大多數現有的UXSS漏洞無法利用。2017年后逐步應用站點隔離后,報告的UXSS漏洞數量明顯減少,如圖6所示。但第三方擴展中的UXSS漏洞仍然存在;在流行的擴展[31]、[35]中發現了多個UXSS漏洞,這些漏洞使攻擊者能夠繞過站點隔離并竊取用戶的憑據。

Lession 5: UXSS漏洞主要通過站點隔離來緩解。
站點隔離是針對UXSS漏洞的有效緩解措施。然而,只有Chrome和Firefox部署了站點隔離,因為它需要大量的工程工作(附錄 D)。

F. 總結

由于威脅研究和改進的補丁部署,1-day漏洞利用的影響減小,并且在野0-day漏洞利用一旦被捕獲就會迅速修補。然而,供應商的進攻性研究仍然遠遠不足。盡管供應商正在努力,但他們在這場軍備競賽中始終落后。供應商的緩解措施大多是被動的,這意味著它們是在每一波攻擊之后很久才行動。當攻擊面最終關閉時,攻擊者已經想出了更好的利用方式。這是一項艱巨的任務,但供應商應該更加主動,并在考慮安全隱患的情況下實施新功能,例如,在部署新功能之前研究潛在的新攻擊。

IV. 瀏覽器中的更多安全措施

在本節中,我們將介紹瀏覽器供應商實施的更通用的應對措施,這些措施未在前幾節中介紹。我們對過去十年在四種主流瀏覽器中實施的應對措施以及它們的應用和停用日期進行了縱向研究,見表IV。在本節中,我們將詳細討論其中的部分。

表IV: 瀏覽器中的應對措施

A. 沙箱

沙箱對瀏覽器安全至關重要,因為它限制了渲染器進程中漏洞的影響,其中包含各種容易出問題的組件。除了像UXSS這樣的情況,攻擊者需要利用內核、系統服務或瀏覽器進程的漏洞來逃離渲染器沙箱。因此,它顯著提高了攻擊的門檻,因為攻擊者需要破解利用這兩個組件(渲染器和沙箱)才能進行全鏈0-day攻擊。

Win32k鎖定: 由于大多數Windows內核漏洞都存在于Win32k系統調用中,因此Microsoft引入了系統調用禁用策略---2012年針對Windows的Win32k鎖定[130]。Windows應用程序的開發人員可以完全阻止對Win32k系統調用表的訪問,從而顯著減少攻擊面。Edge、Chrome和Firefox已經采用這種機制來保護瀏覽器。因此,從渲染器進程中實現沙箱逃逸變得更加復雜。

基于Hypervisor的沙盒: Windows Defender應用程序防護(WDAG)[161]由微軟引入,用于隔離企業場景中不受信任的網站或資源(例如文件)。WDAG使用Hyper-V在硬件層創建新的Windows實例,其中包括單獨的內核副本和最低限度的Windows平臺服務,以確保Edge瀏覽器正常運行。WDAG在Edge中實施,以防止可以繞過瀏覽器沙箱的高級攻擊。使用WDAG,攻擊者需要逃離沙盒和Hyper-V虛擬機。

B. 強化分配器

出于性能和安全原因,瀏覽器對許多對象使用專門的堆分配器[96],[150]。這些分配器使用特定的設計,通過限制攻擊原語來幫助減少損害。

堆隔離(Isolated heap): 堆隔離是一種有效的防御措施,可以防止UAF攻擊升級為類型混淆攻擊。通過基于: 1)類型; 2)安全風險級別(例如嵌入v-table指針); 3)JavaScript可達性(例如ArrayBuffer)來隔離對象,堆隔離有效地提高了UAF漏洞利用的門檻。隔離可防止攻擊者使用具有不同布局的對象重新聲明已釋放的對象,這在瀏覽器UAF利用中是經典操作。

現代瀏覽器在JavaScript可達對象(JavaScript-reachable objects)和其他對象之間實現了基本級別的堆分離[83]、[85]、[100]、[123]。但是,仍然有可能通過 UAF在同一堆中但其他類型的對象之間造成類型混淆。為了防止這種攻擊,Safari[73]和Firefox[98]為特定類別中的每種類型引入了單獨的堆,這提供了更細粒度的隔離。因此,沒有公開的、通用的利用方法來利用所有瀏覽器中的UAF漏洞。

延遲釋放(Delayed free): 另一種應對措施,延遲釋放,有效地增加了利用UAF漏洞的難度,但這種方法不能限制垂懸指針的回收。瀏覽器使用各種垃圾回收(GC)算法來釋放沒有引用的堆上對象。GC算法的一些變體額外掃描棧和堆[96]、[150]區域以查找可能被忽略的引用,這被稱為保守掃描(conservative scanning)[80]或延遲釋放[123]。值得注意的是,Firefox放棄了這一策略,轉而支持exact rooting,并編寫了一個靜態分析工具來查找堆棧中引用的不安全使用[99]、[167]。Chrome也有一個類似的工具[15],但它只在特定區域強制執行。然而,延遲釋放引入了側通道原語,可被用于擊潰ASLR機制,因為它無法通過設計[41]、[81]、[104]、[123]來區分指向堆的指針和用戶控制的整數。

堆元數據保護(Heap metadata protection): 堆元數據保護是一種檢查堆塊的元數據部分以防止堆損壞和堆中的靜默漏洞傳播的方法。例如,堆分配器可能會在危險數據結構之前放置一個隨機值[151]以檢測堆漏洞。Chrome中的PartitionAlloc刪除了內聯元數據并放置了保護頁面以防止線性堆溢出覆蓋元數據[85]。在元數據保護方面也有一些操作系統級別的努力[148]、[151]。

堆上的其他緩解措施:Firefox 中的Frame poisoning會釋放地址指向不可訪問內存頁面的內存塊[98]。類似地,在Edge中,這是通過在釋放堆塊時填充零來完成的[228]。Chrome中的GWP-ASan[115]在保護頁面之前/之后隨機放置一小部分分配的對象,并在釋放塊時釋放整個頁面以檢測在野的堆錯誤。

C. 控制流完整性

由于攻擊者經常操縱指令指針的值來實現代碼執行,因此強制控制流完整性以防止他們劫持控制流,從而使攻擊更加困難。編譯器基礎設施、操作系統和硬件支持提供了這一類別中的大多數緩解措施,例如通過引入canary value[165]來保護虛擬函數表,并允許通過檢查目標地址來列出間接分支[159]、[177]。

正在進行的工作是防止任意內存寫入修改攻擊者可執行的代碼區域(§III-D)。基于硬件支持,瀏覽器可以在不顯著降低性能的情況下應用額外的應對措施,例如在ARM64 [149]上使用PAC添加指針完整性檢查,還有使用Intel MPK[118]對JIT編譯的代碼添加額外的W ⊕ X保護和APRR[198]。

D. 側信道

瀏覽器也容易受到側信道攻擊。迄今為止的研究表明,瀏覽器中的敏感信息可以通過以下方式推斷: 1. 微架構狀態[137]、[147]、[157]、[179]、[197]; 2. GPU[142]、[178]; 3. 浮點時序通道 [64]; 4. 特定于瀏覽器的測信道[201]、[216]-[218] 研究人員引入了防御機制[84]、[138]、[194]、[202]來保護瀏覽器免受側信道攻擊,例如DeterFox[84]和FuzzyFox[138]。此外,瀏覽器供應商已經實施的防御[97]、[114]、[127],可分為以下兩類:

降低定時器的分辨率: 由于大多數攻擊依賴于精確計時,為了阻礙對微小計時差異的檢測,瀏覽器供應商降低了精確計時器的分辨率(例如,performance.now())并引入了隨機抖動來防止分辨率恢復[22],[66],[168]。在Spectre[137]和Meltdown[147]的發現之后,供應商進一步降低了計時器的精度[86]、[171]、[209]。由于SharedArrayBuffer可用于創建高分辨率計時器,因此在Spectre[137]發現后不久,SharedArrayBuffer在所有現代瀏覽器中都被禁用[88]。

防止資源共享: 另一種應對技術是防止受害者和攻擊者之間的資源共享。站點隔離[39]、[186] (§II-B)有效地處理了基于Javascript的瞬態執行。引入了Cross-Origin-Opener-Policy(COOP)和Cross-Origin-Embedder-Policy(COEP)[131]來建立跨域隔離環境。COOP允許網站在頂級document中包含響應頭,確保跨域文檔不與自身共享相同的瀏覽上下文組,從而防止直接DOM訪問。COEP阻止頁面加載任何未明確授予該頁面權限的跨域資源。這些都是使用HTTP頭強制執行的,并且它們在Chrome 83、Firefox 79和Edge 83[92]、[93]中提供,而截至2021年11月,Safari還不支持它們。

在引入站點隔離和COOP/COEP之后,Chrome和Firefox重新啟用了SharedArrayBuffer[27]、[172]的使用。然而,一項研究表明,重新引入SharedArrayBuffer使隱蔽通道容量分別增加了2,000倍和800,000倍[187]。最近的兩篇論文[63]、[135]表明,盡管Chrome中存在站點隔離,攻擊者仍然可以獲取跨域的敏感信息。

E. 其他應對措施

UAF緩解: 為了從根本上解決垃圾回收或其他安全措施未涵蓋的UAF問題,Chrome團隊引入了一個名為MiraclePtr[184]、[185]的術語,它代表一組可以在C/C++中包裝原始指針的算法,這樣它們就不能通過UAF被利用。MiraclePtr預計將很快投入使用[79]。

提高內存安全性: Chrome團隊已經探索了他們的C++代碼庫的改進,通過限制特定語言特性的使用(例如,C++異常[112])和圍繞整數運算引入包裝類[212],可以消除或減少特定類型的漏洞。

改進JIT編譯器: 已有許多努力用于保護JIT編譯器內部的危險優化操作。例如,許多漏洞利用邊界檢查消除(bounds check elimination)[192]來消除"看似多余"的邊界檢查。為了處理這種情況,Chrome團隊引入了一個補丁,將此類檢查標記為"中止(aborting)",而不是簡單地刪除它們[133]。因此,攻擊者最多只能觸發一個SIGTRAP。此外,為了使標準JS函數的字節碼生成更不容易出錯,Chrome團隊制作了一種特定領域的語言Torque[113],它取代了現有的C++實現并減少了很多LoC。

Lession 6:在應對方面的協作努力是有益的。
當一個供應商部署應對措施時,其他供應商可能會效仿。在表IV中,我們看到眾多應對措施已被多個瀏覽器采用。如果在一個瀏覽器中發現漏洞,供應商可以快速與其他供應商共享信息,他們可以一起使用集體知識構建更好的解決措施。在Spectre/Meltdown攻擊[137]、[147]的情況下,瀏覽器供應商共同制定了減輕直接威脅的計劃[86]、[171]、[209],這是協作努力的一個很好的例子。

V. 案例研究: 全鏈利用

由于現代瀏覽器具有不同的安全功能,因此瀏覽器利用通常需要鏈接多個攻擊以最終執行惡意操作。結合所有這些步驟通常被稱為全鏈利用(full-chain exploitation)。作為全鏈瀏覽器利用的代表性案例研究,我們分析了2020年Pwn2Own競賽中針對Safari[134]的成功攻擊,即圖2所示的漏洞利用示例。

這種攻擊滲透到渲染器進程,從JIT編譯器優化漏洞[37]開始:當滿足有關代理對象的特殊條件時,Safari JavaScript渲染器中的DFG編譯器錯誤地模擬了"in"運算符的副作用。這個漏洞允許攻擊者構建標準addrof/fakeobj原語,從而產生任意內存讀/寫,并最終產生任意代碼執行。為了使用fakeobj構造一個有效的對象,攻擊者利用一種眾所周知的技術[221]繞過對象形狀認證(object shape authentication, §III-D中的結構ID隨機化)。在偽造一個JavaScript對象后,他們使用已知技術[183]繞過地址空間隔離(第III-D節中的Gigacage)并在渲染器進程中獲得任意讀/寫原語。

一旦渲染器進程受到破壞,沙盒逃逸就是下一步,并且更具挑戰性。在這次攻擊中,攻擊者巧妙地將多個邏輯/內存漏洞拼接在一起以逃出沙盒。攻擊者首先額外從CVMServer XPC服務(內置OpenGL框架的一部分)獲得任意代碼執行,該服務雖然是沙盒,但具有創建符號鏈接的能力,而渲染器進程不具備這種能力。此外,Safari中有一個IPC方法,didFailProvisionalLoad(),如果提供了指向應用程序文件夾的符號鏈接,它可以啟動任意應用程序。通過組合它們,攻擊者可以通過Safari啟動任意應用程序。至此,沙箱被成功攻破,因為他們可以在渲染器沙箱之外執行任意應用程序,類似于啟動Safari的用戶。

我們總結的Pwn2Own示例是具體但有影響力的。基于此,我們以更通用的方式描述全鏈瀏覽器利用。首先,要找到渲染器中的漏洞,可以利用模糊測試技術[122]、[125]、[182]或手動審核瀏覽器源代碼。發現可利用的錯誤將是最具挑戰性的步驟之一。發現此類漏洞后,下一步是在渲染器進程上下文中實現任意代碼執行原語。然而,控制渲染器只是一個開始,因為渲染器受到沙盒機制的限制。為了突破沙盒,攻擊者通常針對瀏覽器進程、操作系統內核或IPC協議中的缺陷。與攻擊渲染器不同,沙盒逃逸通常需要針對多個系統組件鏈接高級邏輯漏洞。一旦沙盒逃逸,攻擊者就可以執行與瀏覽器同等安全級別的任意程序,實現全鏈攻擊。

VI. 討論

在本節中,我們將討論與瀏覽器安全相關的幾個方面。附錄中有更多討論。

A. 補丁間隙問題

由于存在公共存儲庫和問題跟蹤器,開源瀏覽器中的補丁可以先公開,早于新版本完成發布并提供給最終用戶,從而使攻擊者能夠評估補丁的可利用性。例如,iOS Safari由于1.5個月的補丁間隙而被利用[193]。為了縮小間隙,Chrome引入了每兩周一次的安全更新,并將發布周期從六周縮短到四周[78]。Firefox在發布[173]、[193]之前阻止將安全修復推送到存儲庫,并建議不要在補丁提交中包含漏洞信息[173]。

B. 瀏覽器引擎的同質性

許多"次級瀏覽器"使用與領先瀏覽器相同的瀏覽器引擎(例如,Chrome V8)。因此,一個瀏覽器引擎中的漏洞可能會影響公用引擎的其他瀏覽器。在最受歡迎的15款瀏覽器 [206]中,有11款基于Chrome的引擎(包括Microsoft Edge[136]),如表V所示。當新版本的Chrome發布并修復bug時,它不會立即應用于次級瀏覽器,次級瀏覽器融合它們之前存在一個時間間隔。

表V: 瀏覽器引擎的同質性。一些瀏覽器提供多個引擎以確保網頁的兼容性,或順應特定平臺要求(例如iOS上的WebKit)[69]。

根據次級瀏覽器的發布歷史,在應用發布的安全補丁之前存在時間間隔,這為攻擊者提供了一個攻擊窗口。例如,一個WebKit漏洞在被報告給WebKit錯誤跟蹤器[29]數月后還可以在PlayStation固件上被利用。這也是Android中的一個問題,其中應用程序附帶捆綁的渲染引擎,例如,在向Chromium[7]報告大約一個月后,三星瀏覽器(Samsung Internet)[6]上報告了一個UXSS漏洞。Apple通過強制所有應用程序使用操作系統提供的WebKit庫并拒絕其App Store[69]中的不合規應用程序來解決iOS中的這個問題。

此外,渲染器和JavaScript引擎等Web瀏覽器組件的使用進一步擴展到使用Electron和Android WebView等框架的應用程序。此外,Node.js[56]和Deno[47]使用Google的V8引擎在瀏覽器上下文之外啟用JavaScript(例如,用于實現Web服務器)。因此,瀏覽器引擎的漏洞和漏洞利用不僅會影響瀏覽器本身,對更好的防御機制以避免災難性后果的需求也擴大了。

Lession 7: 瀏覽器引擎的同質性造成了嚴重的問題;需要更好的修補方法。由于瀏覽器引擎的同質性,一個瀏覽器引擎中的漏洞會影響其他許多瀏覽器和應用程序。我們建議領先的瀏覽器(如Chrome)將其JavaScript引擎作為共享庫提供給其他應用程序使用,以便通過無線更新更容易地部署補丁,而不是手動集成補丁。

C. 漏洞發現工具

人們已經做出許多努力來開發用于發現瀏覽器引擎錯誤的最新的工具,這些工具主要可以分為兩類:模糊測試靜態分析

模糊測試(Fuzzing): Fuzzing是發現bug的最有效策略之一,自2012年以來一直有被應用于發現瀏覽器bug。我們在表VI(附錄)中總結了過去十年中有關瀏覽器fuzzer的論文,其中包括他們在Chrome中發現的bug統計信息、Firefox、Safari和Edge(基于ChakraCore和V8),以及它們的關鍵技術。這些模糊器在兩種經典模式之間進行選擇:突變模糊測試(mutational fuzzing,例如,Montage[143])和生成模糊測試(generational fuzzing,例如,CodeAlchemist[122])。一些模糊器,如Lang-Fuzz[125]和DIE[182],利用了兩種模式的混合以及覆蓋反饋(coverage feedback)。構建像DIE[182]和LangFuzz[125]這樣的句法和語義感知輸入對于產生更多的崩潰很有用。一些關于模糊瀏覽器的產業性的努力在發現復雜的瀏覽器漏洞方面非常有效。例如,ClusterFuzz[111]在超過25,000個核心[109]上運行,并在Chrome中發現了超過29,000個漏洞[110]。

靜態分析(Static analysis): 最近,在以fuzzing為主導的瀏覽器漏洞挖掘領域出現了另一項工作。SYS[82]是首個用于在瀏覽器代碼中查找錯誤的"靜態/符號"工具,靜態分析可以通過將瀏覽器的巨大代碼庫分解成小塊來擴展它們。具體來說,SYS使用靜態檢查器來查找潛在的漏洞位置,然后使用它們的可擴展符號執行(extensible symbolic execution)來分析這些漏洞位置。因此,SYS在通過靜態分析發現瀏覽器bug領域為未來的工作指明了一個很好的方向。

Lession 8:自動化漏洞挖掘很棒,但仍需要改進。
業界最先進的模糊器在捕獲瀏覽器中的漏洞方面做得很好。然而,盡管它們的性能很好,但這些工具仍然無法替代手動審計,而手動審計仍然是發現復雜邏輯漏洞的主要方法。因此,學術界和行業內都需要更先進的漏洞挖掘技術。

D. 主動應對措施

大多數現有的緩解措施都是被動的,這意味著它們是在發現漏洞后實施的,這還不夠好。如果可以在攻擊發生之前采取措施(主動方法),那將是理想的,這可以擊敗未知威脅。例如,站點隔離[186]最初旨在使用進程外iframe緩解UXSS攻擊,但它也有助于擊敗Spectre/Meltdown攻擊,這是研究人員在站點隔離項目開始很久后發現的。這是應對未知威脅的主動方法的一個很好的例子。

在應對漏洞利用的游戲中,防御者永遠無法擊敗攻擊者,因為防御者的行為對攻擊者是透明的。供應商可以通過秘密部署新的應對措施來改變這種情況,例如,在安全瀏覽基礎設施的沙箱中。這還可以通過收集極有可能是惡意的樣本來幫助檢測在野漏洞并修補錯誤。此外,供應商可以嘗試更積極的應對措施,這些措施可能會影響此類環境中的用戶體驗。例如,如果在發布公告之前就將StructureID隨機化(§III-D)部署在安全瀏覽沙箱中,則大多數涉及fakeobj原語的JIT漏洞都會被檢測到。

VII. 結論

在本文中,我們呈現了第一個瀏覽器安全 SoK。我們首先提供了一個統一的模型來研究四大瀏覽器的安全設計,并提出了一個為期10年的瀏覽器漏洞縱向研究來研究趨勢。然后我們介紹突出的漏洞類型,并提出最先進的應對措施。我們還詳細研究了Pwn2Own 2020的真實世界全鏈漏洞利用。本文闡明了瀏覽器安全領域,并提出了一些關鍵要點,可以啟發研究人員和瀏覽器供應商了解未來提高瀏覽器安全性的方向。


附錄

A. 漏洞挖掘工具

我們在表VI中總結了過去十年中有關瀏覽器模糊器的論文。

表VI: 瀏覽器引擎模糊器的比較

Fuzzer Year C+E? FF S E? G M SM SN Cov OS 關鍵技術
SoFi [124] 2021 1 5 1 18 × × 使用細粒度的程序分析和修復策略來生成語義上有效的輸入
Token-Level Fuzzing [191] 2021 16 3 4 6 × × × × 通過更改或替換整個單詞在token-level應用突變
Favocado [91] 2021 8 NA 5 NA × × 根據語義信息生成測試用例,并跟蹤狀態突變
DIE [182] 2020 4 NA 16 28 保留有益的特性和條件,被稱為aspects across mutation
FREEDOM [227] 2020 4 5 13 NA 使用定制的IR(FD-IR)來描述HTML文檔和定義突變
Montage [143] 2020 1 0 2 34 × × 將JS AST轉換為序列以訓練神經網絡語言模型(Neural Network Language Models)
Nautilus [70] 2019 NA NA NA 2 × × 將基于語法的輸入生成與覆蓋反饋(coverage feedback)相結合
Deity [145] 2019 NA NA 1 1 × 使用以前已知的bug和PoC生成基于語法的JS代碼
Superion [220] 2019 NA NA 16 3 × × 使用基于樹和字典的變異對語法感知(grammar-aware)測試輸入進行修剪
CodeAlchemist [122] 2019 2 NA 10 7 × × 使用約束標記代碼塊,定義何時與其他代碼塊組合
LangFuzz [125] 2012 11 20 NA NA × × 生成語法感知測試輸入,并利用以前已知的錯誤程序
G: Generational 生成(模糊測試樣本)
M: Mutational 變異(模糊測試樣本)
SM: Semantic Aware (語義感知)
SN: Syntactic Aware (語法/詞法感知)
Cov: Coverage Feedback 代碼覆蓋率反饋
OS: Open Source 開源
C: Chrome
FF: Firefox
E?: : 基于V8引擎的Edge
E? : 基于ChakraCore引擎的Edge

B. 瀏覽器隱私保護

網絡瀏覽中最令人擔憂的隱私泄露內容之一是用戶的IP地址。由于Web服務器可以輕松收集和存儲IP,因此可以根據網絡環境(例如NAT)以精細的粒度立即公開用戶的地理位置。Tor瀏覽器[213]使用洋蔥協議解決了這個問題,該協議使用Tor網絡中的多個隨機節點重新路由用戶的連接,并且每個節點不能同時知道用戶的身份(IP)和目的地。然而,通過觀察加密的網絡數據包序列[181]、[199],仍然可以通過網站指紋技術破壞隱私。另一種瀏覽器Brave[203]通過刪除網站中包含的所有廣告和廣告跟蹤器來阻止網站跟蹤用戶,但用戶的瀏覽歷史仍然可能被泄露[214]、[223]。

C. 插件和擴展

插件和擴展是通過提供多種功能來定制瀏覽器功能的小型軟件程序。Java和Flash等插件在網頁上下文中運行,而擴展程序將附加功能附加到瀏覽器。盡管它們有好處,但插件是瀏覽器不穩定的主要來源[8]、[9]。插件還使渲染器進程的沙箱化變得不切實際,因為插件是由第三方編寫的,瀏覽器供應商無法控制他們對操作系統的訪問。此外,擴展在瀏覽器中具有特殊權限,使它們成為攻擊者眼中有吸引力的目標[10]-[12]。

NPAPI插件。 NPAPI允許瀏覽器供應商開發具有通用接口的插件。當瀏覽器訪問具有未知內容類型的頁面時,它會搜索并加載可用插件來委派內容處理。因此,攻擊者可以通過為網頁分配特定的內容類型來觸發漏洞,從而欺騙瀏覽器加載具有漏洞的特定插件。利用NPAPI插件的攻擊在不同的瀏覽器和平臺上很普遍,特別是在Java、Flash和PDF[163]上。為了應對這個問題,瀏覽器將插件進程與瀏覽器的主進程分開,即進程外插件緩解(out-of-process plugin mitigation)[170]、[188]。但是,插件仍然可以用于瀏覽器利用,并被指責為性能下降、瀏覽器崩潰的原因。最后,所有瀏覽器都停止了對NPAPI插件的支持[169]。

D. 部署應對措施的難度

瀏覽器供應商很難部署應對措施,原因如下:

a. 兼容性: 第三方代碼(例如瀏覽器插件)依賴于瀏覽器代碼才能正常運行。在引入瀏覽器緩解措施時,可能會破壞瀏覽器供應商無法控制的第三方代碼。例如,當嘗試在Windows中為Chrome的Pepper Plugin API(PPAPI)引入Win32k鎖定時,在Windows 8.1及更低版本上應用補丁時存在穩定性問題,Chrome團隊無法追蹤[130],影響Flash、PDFium和Widevine等插件。因此,PPAPI Win32k鎖定僅針對Windows 10而非Windows 8/8.1啟用以避免穩定性問題。

b. 性能: 添加安全緩解措施的成本很高。為了減輕安全威脅,瀏覽器供應商有時會選擇以性能換取安全,反之亦然。例如,2018年初在所有現代瀏覽器中禁用SharedArrayBuffer(SAB)作為Spectre攻擊的對策,正如§IV-D中所討論的那樣,極大地危害了性能,因為SAB最初旨在實現worker之間的輕量級同步[76] .

c. 安全: 更多的代碼通常意味著更多的安全漏洞。通常,引入緩解措施或補丁會增加攻擊面。在為瀏覽器部署新補丁后,瀏覽器供應商通常會尋找漏洞報告以盡快解決新的安全問題。例如,Firefox單獨為主動應對措施中的安全漏洞推出了一類全新的漏洞獎勵[215]。

還原的緩解措施: 一些緩解措施被臨時部署以處理即時威脅,同時開發更好的緩解措施。例如,在上面提到的SAB案例中,在引入更強大的應對措施(即站點隔離和COOP/COEP)后不久,Chrome和Firefox重新啟用了SAB[27]、[172]。 盡管盡了所有努力來確保緩解措施是安全的、高性能的和兼容的,但有時緩解措施由于它們帶來的一些嚴重后果而不得不撤銷。例如,在表IV中,Chrome內置的XSS過濾器XSS Auditor[72]遭受了許多安全副作用,導致其在2019年退役[207]。


參考鏈接

[1] CVE-2003-1048. Double free vulnerability in mshtml.dll.
[2] CVE-2006-5579. Access of previously freed memory in Internet Explorer 6.
[3] CVE-2011-3046. Universal XSS in Chromium with largest reward amount ($60k).
[4] CVE-2013-6632. Memory corruption leads to sandbox escape in Chrome browser.
[5] CVE-2016-4622. Remote code execution on WebKit.
[6] CVE-2017-17859. SOP Bypass on Samsung Internet referred as CVE-2017-5124 in Chromium Engine.
[7] CVE-2017-5124. SOP Bypass on Google Chrome.
[8] CVE-2019-5647. Insufficient Session Expiration in Chrome Plugin.
[9] CVE-2019-6481. Second-Factor Auth Bypass in Chrome Plugin.
[10] CVE-2020-15655. Bypass same-origin policy in Firefox extension.
[11] CVE-2020-6554. Use After Free in Chrome extension.
[12] CVE-2020-6809. Arbitrary read on local files in Firefox extension.
[13] CVE-2021-1879. UXSS in Webkit iOS 14.4.2 and iPadOS 14.4.2.
[14] CVE-2021-34506. Microsoft Edge (Chromium-based) Security Feature Bypass Vulnerability.
[15] gcmole. https://github.com/v8/v8/tree/master/tools/gcmole.
[16] Languages - Chromium (Google Chrome). https://www.openhub.net/p/chrome/analyses/latest/languages_summary.
[17] Microsoft unveils ‘Super Duper Secure Mode’ in latest version of Edge. https://portswigger.net/daily-swig/microsoft-unveils-super-duper-secure-mode-in-latest-version-of-edge.
[18] Restricted Tokens - Win32 apps. https://docs.microsoft.com/en-us/windows/win32/secauthz/restricted- tokens.
[19] Super Duper Secure Mode. https://microsoftedge.github.io/edgevr/posts/Super- Duper- Secure- Mode/.
[20] SELinux leaked file descriptor, 2010. https://bugzilla.redhat.com/show_ bug.cgi?id=581256.
[21] Add an option to mark JIT pages as non-writable. https://bugzilla.mozilla.org/show_bug.cgi?id=977805, 2014.
[22] Reduce resolution of performance.now to prevent timing attacks. https://bugs.chromium.org/p/chromium/issues/detail?id=506723, 2015.
[23] Add New Process Mitigation Policies for Win10+. https://bugs.chromium.org/p/chromium/issues/detail?id=504006, 2016.
[24] Security: Block GPU Process Opening Renderer Processes. https://bugs.chromium.org/p/chromium/issues/detail?id=596862, 2016.
[25] Enable new FORCE_MS_SIGNED mitigation, 2017. https://bugs.chromium.org/p/chromium/issues/detail?id=750886.
[26] Off-by-one causes JIT optimization error, 2017. https://bugs.chromium.org/p/chromium/issues/detail?id=762874.
[27] Re-enable sharedarraybuffer + atomics. https://bugs.chromium.org/p/chromium/issues/detail?id=821270, 2018.
[28] Sandbox the network service on Windows, 2018. https://bugs.chromium.org/p/chromium/issues/detail?id=841001.
[29] setAttributeNodeNS UAF Write-up. https://github.com/Cryptogenic/Exploit-Writeups/blob/master/WebKit/setAttributeNodeNS%20UAF%20Write-up.md, 2018.
[30] ChakraCore, The core part of the Chakra JavaScript engine that powers Microsoft Edge, 2019. https://github.com/microsoft/ChakraCore.
[31] Comply with new security requirements for Chrome, 2019. https://github.com/uBlockOrigin/uBlock-issues/issues/710.
[32] Enable ACG for jitless v8 in pdfium, 2019. https://bugs.chromium.org/p/chromium/issues/detail?id=961831.
[33] JavaScriptCore, The built-in JavaScript engine for WebKit, 2019. https://trac.webkit.org/wiki/JavaScriptCore.
[34] SpiderMonkey, JavaScript engine for Mozilla products, including Firefox, 2019. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey.
[35] UXSS bug found in Lastpass, 2019. https://blog.lastpass.com/2019/09/lastpass-bug-reported-resolved/.
[36] V8, Open source JavaScript and WebAssembly engine for Chrome and Node.js, 2019. https://v8.dev/.
[37] 2020. Incorrect JIT modeling in WebKit that leads to type confusion.
[38] Add support for random restricted SID. https://chromium-review.googlesource.com/c/chromium/src/+/2085751, 2020.
[39] The Chromium Projects. Site Isolation, 2020. https://www.chromium.org/Home/chromium-security/site-isolation.
[40] Zero Day Initiative - Pwn2Own Returns to Vancouver for 2020. https://www.zerodayinitiative.com/blog/2020/1/8/pwn2own-returns-to-vancouver-for-2020, 2020.
[41] Bypassing ASLR using Oilpan’s conservative garbage collector. https://bugs.chromium.org/p/chromium/issues/detail?id=1144662, 2021.
[42] Can I use... Support tables for HTML5, CSS3, etc. https://caniuse.com/, 2021.
[43] Chromium Bug Tracker, 2021. https://bugs.chromium.org/p/chromium/issues/list.
[44] Chromium Security - The Chromium Projects, 2021. https://www.chromium.org/Home/chromium- security.
[45] Chromium source code, 2021. https://chromium.googlesource.com/chromium/src.
[46] Common Vulnerability Scoring System SIG, 2021. https://www.first.org/cvss/.
[47] Deno - A modern runtime for JavaScript and TypeScript, 2021. https://deno.land/.
[48] Firefox Bugzilla, 2021. https://bugzilla.mozilla.org/home.
[49] Google’s Project Zero bug tracker, 2021. https://bugs.chromium.org/p/project- zero/issues/list?q=&can=1.
[50] Memory Safety in Chromium, 2021. https://www.chromium.org/Home/chromium- security/memory- safety.
[51] Modern security protection for vulnerable legacy apps, 2021. https://docs.microsoft.com/en-us/deployedge/microsoft-edge-security-iemode-safer-than-ie.
[52] Mozilla Firefox source code, 2021. https://hg.mozilla.org/.
[53] Mozilla Foundation Security Advisories, 2021. https://www.mozilla.org/en-US/security/advisories/.
[54] Mozilla Security Blog, 2021. https://blog.mozilla.org/security/.
[55] National Vulnerability Database, 2021. https://nvd.nist.gov/.
[56] Node.js, 2021. https://nodejs.org/en/.
[57] Oxidation, 2021. https://wiki.mozilla.org/Oxidation.
[58] Project Zero: 0day "In the Wild", 2021. https://googleprojectzero.blogspot.com/p/0day.html.
[59] Smart Pointer Guidelines in Firefox, 2021. https://firefox-source-docs.mozilla.org/dom/workersAndStorage/CodeStyle.html#plain- pointers.
[60] V8 source code, 2021. https://chromium.googlesource.com/v8/v8.
[61] Zero Day Initiative - Published advisories, 2021. https://www.zerodayinitiative.com/advisories/published/.
[62] Martín Abadi, Mihai Budiu, Ulfar Erlingsson, and Jay Ligatti. Control-flow integrity principles, implementations, and applications. TISSEC09.
[63] Ayush Agarwal, Sioli O’Connell, Jason Kim, Shaked Yehezkel, Daniel Genkin, Eyal Ronen, and Yuval Yarom. Spook.js: Attacking chrome strict site isolation via speculative execution. In SP22.
[64] Marc Andrysco, David Kohlbrenner, Keaton Mowery, Ranjit Jhala, Sorin Lerner, and Hovav Shacham. On subnormal floating point and abnormal timing. In SP15.
[65] Apple. Changeset 160983 in webkit. https://trac.webkit.org/changeset/160983/webkit, 2013.
[66] Apple. Changeset 186208 in webkit for trunk/source/webcore/page/performance.cpp. http://trac.webkit.org/changeset/186208/webkit/trunk/ Source/WebCore/page/Performance.cpp, 2015.
[67] Apple. Changeset 253098 in webkit. https://trac.webkit.org/changeset/253098/webkit, 2015.
[68] Apple. Allow Execution of JIT-compiled Code Entitlement, 2018. https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit.
[69] Apple. App Store Review Guidelines. https://developer.apple.com/app-store/review/guidelines/, 2020.
[70] Cornelius Aschermann, Tommaso Frassetto, Thorsten Holz, Patrick Jauernig, Ahmad-Reza Sadeghi, and Daniel Teuchert. Nautilus: Fishing for deep bugs with grammars. In NDSS19.
[71] Michalis Athanasakis, Elias Athanasopoulos, Michalis Polychronakis, Georgios Portokalidis, and Sotiris Ioannidis. The devil is in the constants: Bypassing defenses in browser jit engines. In NDSS15.
[72] Daniel Bates, Adam Barth, and Collin Jackson. Regular expressions considered harmful in client-side xss filters. In WWW10.
[73] Niklas Baumstark. Compressing Type Information in Modern C Programs using Type Isolation, 2019.
[74] Eric W Biederman and Linux Networx. Multiple instances of the global linux namespaces. In Proceedings of the Linux Symposium.
[75] Dionysus Blazakis. The apple sandbox. In Black Hat DC 11.
[76] blink-dev Google Groups. Intent to implement: Shared array buffers. https://groups.google.com/a/chromium.org/g/blink-dev/c/d-0ibJwCS24, 2015.
[77] Google Chromium Blog. Recent Site Isolation improvements. https://blog.chromium.org/2019/10/recent-site-isolation-improvements.html, 2019.
[78] Google Chromium Blog. Speeding up Chrome’s release cycle. https://blog.chromium.org/2021/03/speeding-up-release-cycle.html, 2021.
[79] Google Security Blog. An update on memory safety in chrome. https://security.googleblog.com/2021/09/an-update-on-memory-safety-in-chrome.html, 2021.
[80] Hans-Juergen Boehm and Mark Weiser. Garbage collection in an uncooperative environment. Software: Practice and Experience.
[81] E. Bosman, K. Razavi, H. Bos, and C. Giuffrida. Dedup est machina: Memory deduplication as an advanced exploitation vector. In SP16.
[82] FraserBrown,DeianStefan,andDawsonEngler.Sys:Astatic/symbolic tool for finding good bugs in good (browser) code. In USENIX Security 20.
[83] Sam Brown. Some brief notes on webkit heap hardening. https://labs.f-secure.com/archive/some-brief-notes-on-webkit-heap-hardening/, 2018.
[84] Yinzhi Cao, Zhanhao Chen, Song Li, and Shujiang Wu. Deterministic browser. In CCS17.
[85] R. Chris. Partitionalloc - a shallow dive and some rand, 2016. https://struct.github.io/.
[86] Chromium. Clamp performance.now() to 100us. https://chromium-review.googlesource.com/c/chromium/src/+/853505, 2018.
[87] Chromium. Security: Constant blinding bypass via Wasm, 2020.
[88] ComputerWorld. Browser makers build bulwarks to stump spectre attacks. https://www.computerworld.com/article/3246210/browser-makers-build-bulwarks-to-stump-spectre-attacks.html, 2018.
[89] Crispin Cowan. Strengthening the Microsoft Edge Sandbox, 2017.
[90] Cure53. Cure53 Browser Security White Paper. https://github.com/cure53/browser-sec-whitepaper, 2017.
[91] Sung Ta Dinh, Haehyun Cho, Kyle Martin, Adam Oest, Kyle Zeng, Alexandros Kapravelos, Gail-Joon Ahn, Tiffany Bao, Ruoyu Wang, Adam Doupé, et al. Favocado: Fuzzing the binding code of javascript engines using semantically correct test cases.
[92] MDN Web Docs. Cross-origin-embedder-policy. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy, 2021.
[93] MDN Web Docs. Cross-origin-opener-policy. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy, 2021.
[94] MDN Web Docs. Same-origin policy. https://developer.mozilla.org/en- US/docs/Web/Security/Same-origin_policy, 2021.
[95] eEye Digital Security. Microsoft Internet Information Services Remote Buffer Overflow, 2001.
[96] Filip Pizlo. Introducing Riptide: WebKit’s Retreating Wavefront Concurrent Garbage Collector. 2017.
[97] Filip Pizlo. What Spectre and Meltdown Mean For WebKit. 2018.
[98] Firefox. Always poison deallocated objects in the frame arena, 2009. https://bugzilla.mozilla.org/show_bug.cgi?id=497495.
[99] Firefox. Exact stack rooting, 2014. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/GC/Exact_Stack_Rooting.
[100] Firefox. [meta] store content-controlled buffers in a separate heap, 2014. https://bugzilla.mozilla.org/show_bug.cgi?id=1052575.
[101] Firefox. Implement win/osx sandboxing for new RDD process, 2018. https://bugzilla.mozilla.org/show_bug.cgi?id=1498624.
[102] Firefox. Enable Code Integrity Guard on RDD Process, 2019. https://bugzilla.mozilla.org/show_bug.cgi?id=1563774.
[103] Fortinet. Microsoft MSHTML Remote Code Execution Vulnerability Exploited in the Wild (CVE-2021-40444). https://www.fortinet.com/blog/threat-research/microsoft-mshtml-remote-code-execution-vulnerability-exploited-in-wild-cve-2021-40444, 2021.
[104] Ivan Fratric. Dude, where’s my heap? 2015.
[105] Pietro Frigo, Cristiano Giuffrida, Herbert Bos, and Kaveh Razavi. Grand pwning unit: Accelerating microarchitectural attacks with the gpu. In SP18.
[106] Robert Gawlik and Thorsten Holz. Sok: Make jit-spray great again. In WOOT18. [107] Guang Gong. Security: Pwn2Own mobile case, out-of-bound access in json stringifier. In Chromium Bug Tracker, 2015.
[108] Guang Gong. Pwn a nexus device with a single vulnerability. In CanSecWest, 2016.
[109] Google. Open sourcing clusterfuzz. https://security.googleblog.com/2019/02/open-sourcing-clusterfuzz.html.
[110] Google. Scalable fuzzing infrastructure. https://github.com/google/clusterfuzz.
[111] Google. Clusterfuzz. https://google.github.io/clusterfuzz/, 2015.
[112] Google. Google C
Style Guide, 2017.
[113] Google. Torque: Applying leverage to the CodeStubAssembler, 2018.
[114] Google. Chrome - Mitigating Side-Channel Attacks, 2019. https://www.chromium.org/Home/chromium-security/ssca.
[115] Google. GWP-ASan: Sampling heap memory error detection in-the-wild. https://sites.google.com/a/chromium.org/dev/Home/chromium-security/articles/gwp-asan, 2019.
[116] Google. Chrome Vulnerability Reward Program Rules. https://www. google.com/about/appsecurity/chrome-rewards/, 2021.
[117] Google. Chromium design docs - sandboxing. https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/design/sandbox.md, 2021.
[118] Google. wasm: Write-protection of generated code with PKEYs/PKU, 2021.
[119] Google Chrome Team. V8 Heap Sandbox - High-Level Design Doc. https://docs.google.com/document/d/1FM4fQmIhEqPG8uGp5o9A-mnPB5BOeScZYpkHjo0KKA8/, 2021.
[120] Samuel Groβ. Pwn2Own 2018: Safari + macOS, 2018. https://github.com/saelo/pwn2own2018.
[121] SamuelGroβandProjectZero.Jitsploitationii:Gettingread/write. https://googleprojectzero.blogspot.com/2020/09/jitsploitation-two.html, 2020.
[122] HyungSeok Han, DongHyeon Oh, and Sang Kil Cha. Codealchemist: Semantics-aware code generation to find vulnerabilities in javascript engines. In NDSS19.
[123] Abdul-Aziz Hariri, Brian Gorenc, and Simon Zuckerbraun. Abusing Silent Mitigations: Understanding weaknesses within Internet Explorer’s Isolated Heap and MemoryProtection. In Black Hat USA 15.
[124] Xiaoyu He, Xiaofei Xie, Yuekang Li, Jianwen Sun, Feng Li, Wei Zou, Yang Liu, Lei Yu, Jianhua Zhou, Wenchang Shi, and Wei Huo. Sofi: Reflection-augmented fuzzing for javascript engines. In CCS21.
[125] Christian Holler, Kim Herzig, and Andreas Zeller. Fuzzing with code fragments. In USENIX Security 12.
[126] Andrei Homescu, Stefan Brunthaler, Per Larsen, and Michael Franz. Librando: transparent code randomization for just-in-time compilers. In CCS13.
[127] Jann Horn. Mozilla Foundation Security Advisory 2018-01, 2018. https://www.mozilla.org/en-US/security/advisories/mfsa2018-01/.
[128] Intel. Intel? 64 and IA-32 Architectures Software Developer Manuals, 2021.
[129] Ivan Fratric. Domato - DOM fuzzer. https://github.com/googleprojectzero/domato, 2017.
[130] James Forshaw. Breaking the Chain. https://googleprojectzero.blogspot.com/2016/11/breaking-chain.html, 2016.
[131] Artur Janc, Charlie Reis, and Anne van Kesteren. Coop and coep explained. https://docs.google.com/document/d/1zDlfvfTJ_9e8Jdc8ehuV4zMEu9ySMCiTGMS9y0GU92k, 2020.
[132] Jeff Aboud. Why You Need to Stop Using CVSS for Vulnerability Prioritization. https://www.tenable.com/blog/why-you-need-to-stop-using-cvss-for-vulnerability-prioritization, 2020.
[133] Jeremy Fetiveau. Circumventing Chrome’s hardening of typer bugs. https://doar-e.github.io/blog/2019/05/09/circumventing-chromes-hardening-of-typer-bugs/.
[134] Yonghwi Jin, Jungwon Lim, Insu Yun, and Taesoo Kim. Compromising the macOS kernel through Safari by chaining six vulnerabilities. In Black Hat USA 20.
[135] Zihao Jin, Ziqiao Kong, Shuo Chen, and Haixin Duan. Timing-based browsing privacy vulnerabilities via site isolation. In SP22.
[136] Joe Belfiore and Windows Experience Blog. Microsoft Edge: Making the web better through more open source collaboration, 2018.
[137] Paul Kocher, Jann Horn, Anders Fogh, Daniel Genkin, Daniel Gruss, Werner Haas, Mike Hamburg, Moritz Lipp, Stefan Mangard, Thomas Prescher, et al. Spectre attacks: Exploiting speculative execution. In SP19.
[138] David Kohlbrenner and Hovav Shacham. Trusted browsers for uncertain times. In USENIX Security 16.
[139] Ivan Krstic. Behind the scenes of ios and mac security. In Black Hat USA 16.
[140] Ivan Krstic. App sandbox and the mac app store. In WWDC 2011, 2011. https://developer.apple.com/videos/play/wwdc2011/204/.
[141] The Citizen Lab. The Million Dollar Dissident: NSO Group’s iPhone Zero-Days used against a UAE Human Rights De- fender. https://citizenlab.ca/2016/08/million- dollar- dissident- iphone- zero-day-nso-group-uae/, 2016.
[142] Sangho Lee, Youngsok Kim, Jangwoo Kim, and Jong Kim. Stealing webpages rendered on your browser by exploiting gpu vulnerabilities. In SP14.
[143] Suyoung Lee, HyungSeok Han, Sang Kil Cha, and Sooel Son. Montage: A neural network language model-guided javascript engine fuzzer. In USENIX Security 20.
[144] Wilson Lian, Hovav Shacham, and Stefan Savage. A call to arms: Understanding the costs and benefits of jit spraying mitigations. In NDSS, 2017.
[145] Hongyang Lin, Junhu Zhu, Jianshan Peng, and Dixia Zhu. Deity: Finding deep rooted bugs in javascript engines. In ICCT19.
[146] Linux. Seccomp BPF (SECure COMPuting with filters). 2012.
[147] Moritz Lipp, Michael Schwarz, Daniel Gruss, Thomas Prescher, Werner Haas, Anders Fogh, Jann Horn, Stefan Mangard, Paul Kocher, Daniel Genkin, et al. Meltdown: Reading kernel memory from user space. In USENIX Security 18.
[148] LLVM Project. Scudo Hardened Allocator. https://llvm.org/docs/ ScudoHardenedAllocator.html, 2019.
[149] ARM LTD. ARMv8 architecture reference manual, for ARMv8-A architecture profile (ARM DDI 0487C.a). 2017.
[150] Mads Ager and Erik Corry and Vyacheslav Egorov and Kentaro Hara and Gustav Wibling and Ian Zerny. Oilpan: Tracing garbage collection for blink. 2013.
[151] Adrian Marinescu. Windows vista heap management enhancements: Security, reliability and performance. In Black Hat USA 06.
[152] Mark Brand and Sergei Glazunov and Project Zero. Analysis of CVE- 2020-16010: Chrome for Android ConvertToJavaBitmap Heap Buffer Overflow. https://googleprojectzero.github.io/0days-in-the-wild/0day- RCAs/2020/CVE-2020-16010.html, 2021.
[153] Mathias Bynens. Elements kinds in V8, 2017.
[154] Mathias Bynens. JavaScript engine fundamentals: Shapes and Inline Caches, 2018.
[155] Matt Molinyawe, Abdul-Aziz Hariri, Jasiel Spelman. $hell on Earth: From Browser to System Compromise. In Black Hat USA 16.
[156] McAfee Labs. Don’t Substitute CVSS for Risk: Scoring System Inflates Importance of CVE-2017-3735. https://www.mcafee.com/blogs/other- blogs/mcafee- labs/dont- substitute- cvss- for- risk- scoring- system- inflates-importance-of-cve-2017-3735/, 2017.
[157] Ross Mcilroy, Jaroslav Sevcik, Tobias Tebbi, Ben L Titzer, and Toon Verwaest. Spectre is here to stay: An analysis of side-channels and speculative execution. arXiv preprint arXiv:1902.05178, 2019.
[158] Microsoft. JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying. https://sites.google.com/site/bingsunsec/ WARPJIT.
[159] Microsoft. Control Flow Guard, 2015.
[160] Microsoft. Introducing windows defender application guard for microsoft edge. https://blogs.windows.com/msedgedev/2016/09/27/ application-guard-microsoft-edge/, 2016.
[161] Microsoft. Microsoft defender application guard overview. https://docs.microsoft.com/en- us/windows/security/threat- protection/ microsoft-defender-application-guard/md-app-guard-overview, 2021.
[162] Microsoft. Microsoft edge support for microsoft defender application guard. https://docs.microsoft.com/en- us/deployedge/microsoft- edge- security-windows-defender-application-guard, 2021.
[163]Microsoft Defender Security Research Team. Exploit kits remain a cybercrime staple against outdated software – 2016 threat landscape review series. https://www.microsoft.com/security/blog/2017/01/23/exploit-kits-remain-a-cybercrime-staple-against-outdated-software-2016-threat-landscape-review-series/, 2017.
[164] Matt Miller. Mitigating arbitrary native code execution in Mi- crosoft Edge, 2017. https://blogs.windows.com/msedgedev/2017/02/ 23/mitigating- arbitrary- native- code- execution/.
[165] Matthew R. Miller, Kenneth D. Johnson, and Timothy William Burrell. Using virtual table protections to prevent the exploitation of object corruption vulnerabilities.
[166] Max Moroz and Sergei Glazunov. Analysis of UXSS exploits and mitigations in Chromium. Technical report, 2019.
[167] Mozilla. Static Analysis for Rooting and Heap Write Hazards. https://firefox-source-docs.mozilla.org/js/HazardAnalysis/index.html.
[168] Mozilla. Spy in the sandbox - security issue related to high resolution time api. https://bugzilla.mozilla.org/show_bug.cgi?id=1167489, 2015.
[169] Mozilla. Plugin Roadmap for Firefox. 2016.
[170] Mozilla. Changes affecting Adobe Flash on Firefox for Mac. https://support.mozilla.org/en-US/kb/changes-affecting-adobe-flash-firefox-mac, 2018.
[171] Mozilla. Mitigations landing for new class of timing at- tack. https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/, 2018.
[172] Mozilla. Firefox 79 for developers. https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/79#javascript, 2020.
[173] Mozilla. Security Bug Approval Process. https://firefox-source-docs.mozilla.org/bug-mgmt/processes/security-approval.html, 2020.
[174] Mozilla. Introducing site isolation in firefox. https://blog.mozilla.org/security/2021/05/18/introducing-site-isolation-in-firefox/, 2021.
[175] Mozilla. Project fission - mozillawiki. https://wiki.mozilla.org/Project_Fission, 2021.
[176] Mozilla. Security Bug Bounty Program. https://www.mozilla.org/en-US/security/bug-bounty/, 2021.
[177] Paul Muntean, Matthias Neumayer, Zhiqiang Lin, Gang Tan, Jens Grossklags, and Claudia Eckert. Analyzing Control Flow Integrity with LLVM-CFI. In ACSAC19.
[178] Hoda Naghibijouybari, Ajaya Neupane, Zhiyun Qian, and Nael Abu- Ghazaleh. Rendered insecure: Gpu side channel attacks are practical. In CCS18.
[179] Yossef Oren, Vasileios P Kemerlis, Simha Sethumadhavan, and Ange- los D Keromytis. The spy in the sandbox: Practical cache attacks in javascript and their implications. In CCS15.
[180] Chris Paget. Exploiting design flaws in the Win32 API for privilege escalation. White Paper, 2002.
[181] Andriy Panchenko, Fabian Lanze, Jan Pennekamp, Thomas Engel, An- dreas Zinnen, Martin Henze, and Klaus Wehrle. Website fingerprinting at internet scale. In NDSS16.
[182] SoyeonPark,WenXu,InsuYun,DaeheeJang,andTaesooKim.Fuzzing javascript engines with aspect-preserving mutation. In SP20.
[183] phoenhex team. CVE-2018-4233 Exploit. https://github.com/phoenhex/files/blob/master/exploits/ios-11.3.1/, 2018.
[184] The Chromium Project. Miracleptr aka raw_ptr aka backuprefptr. https://chromium.googlesource.com/chromium/src/+/ddc017f9569973a731a574be4199d8400616f5a5/base/memory/raw_ptr.md, 2021.
[185] The Chromium Project. Miracleptr one pager. https: //docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_ MZ2GsrJNb_dbQ3ZBg, 2021.
[186] Charles Reis, Alexander Moshchuk, and Nasko Oskov. Site isolation: Process separation for web sites within the browser. In USENIX Security 19.
[187] Thomas Rokicki, Clémentine Maurice, and Pierre Laperdrix. Sok: In search of lost time: A review of javascript timers in browsers. In EuroSP21.
[188] Paul Sabanal and Mark Vincent Yason. Digging deep into the flash sandboxes.
[189] Saelo. Attacking JavaScript Engines: A case study of JavaScriptCore and CVE-2016-4622. http://www.phrack.org/issues/70/3.html, 2016.
[190] Saelo. Compile Your Own Type Confusions: Exploiting Logic Bugs in JavaScript JIT Engines. http://phrack.org/issues/70/9.html, 2019.
[191] Christopher Salls, Chani Jindal, Jake Corina, Christopher Kruegel, and Giovanni Vigna. Token-level fuzzing. In USENIX Security 21.
[192] Samuel Gro?. New Trends in Browser Exploitation: Attacking Client- Side JIT Compilers. In Black Hat USA 18.
[193] Samuel Gro? and Project Zero. JSC Exploits. https://googleprojectzero.blogspot.com/2019/08/jsc-exploits.html, 2019.
[194] Michael Schwarz, Moritz Lipp, and Daniel Gruss. Javascript zero: Real javascript and zero side-channel attacks. In NDSS18.
[195] SecureList. Chrome 0-day exploit CVE-2019-13720 used in Operation WizardOpium. https://securelist.com/chrome-0-day-exploit-cve-2019-13720-used-in-operation-wizardopium/94866/, 2019.
[196] SecureList. PuzzleMaker attacks with Chrome zero-day exploit chain. https://securelist.com/puzzlemaker- chrome- zero- day- exploit- chain/102771/, 2021.
[197] Anatoly Shusterman, Daniel Genkin, Ayush Agarwal, Yossi Oren, Sioli O’Connell, and Yuval Yarom. Prime + Probe 1, JavaScript 0: Overcoming Browser-based Side-Channel Defenses.
[198] siguza. APRR | Apple hardware secrets. https://siguza.github.io/APRR/, 2019.
[199] Payap Sirinam, Mohsen Imani, Marc Juarez, and Matthew Wright. Deep fingerprinting: Undermining website fingerprinting defenses with deep learning. CCS18.
[200] Stephen Smalley, Chris Vance, and Wayne Salamon. Implementing selinux as a linux security module. NAI Labs Report.
[201] Michael Smith, Craig Disselkoen, Shravan Narayan, Fraser Brown, and Deian Stefan. Browser history re: visited. In WOOT18.
[202] Peter Snyder, Cynthia Taylor, and Chris Kanich. Most websites don’t need to vibrate: A cost-benefit approach to improving browser security. In CCS17.
[203] Brave Software. Brave Browser: Secure, Fast & Private Web Browser with AdBlocker. https://brave.com, 2021.
[204] WebKit Source. Structureid randomization. https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/runtime/StructureIDTable.h, 2021.
[205] Spring, Jonathan and Hatleback, Eric and Householder, Allen D. and Manion, Art and Shick, Deana. Towards Improving CVSS. https: //resources.sei.cmu.edu/library/asset-view.cfm?assetid=538368, 2018.
[206] Statcounter Global Stats. Browser Market Share Worldwide, 2021. [207] Sven Morgenroth. Goodbye XSS Auditor. https://www.netsparker.com/blog/web-security/goodbye-xss-auditor/, 2019.
[208] Google Threat Analysis Group (TAG). How we protect users from 0-day attacks. https://blog.google/threat-analysis-group/how-we-protect-users-0-day-attacks/, 2021.
[209] Microsoft Edge Team. Mitigating speculative execution side-channel attacks in microsoft edge and internet explorer. https://blogs.windows.com/msedgedev/2018/01/03/speculative-execution-mitigations-microsoft-edge-internet-explorer/, 2018.
[210] The Chromium Team. The Chromium Project. http://www.chromium.org/Home, 2021.
[211] ArsTechnica.Firefox0-dayinthewildisbeingusedtoattackTorusers. https://arstechnica.com/information-technology/2016/11/firefox- 0day- used- against- tor- users- almost- identical- to- one- fbi- used- in- 2013/, 2016.
[212] The Chromium Team. Safer Usage Of C++, 2021.
[213] Inc. The Tor Project. Tor Project | Anonymity Online. https://www.torproject.org, 2021.
[214] Trishita Tiwari and Ari Trachtenberg. Alternative (ab) uses for HTTP Alternative Services. In WOOT19.
[215] Tom Ritter. Bug Bounty Program Updates: Adding (another) New Class of Bounties. https://blog.mozilla.org/attack-and-defense/2020/08/18/exploit-mitigation-bounty/, 2020.
[216] Tom Van Goethem, Wouter Joosen, and Nick Nikiforakis. The clock is still ticking: Timing attacks in the modern web. In CCS15.
[217] Tom Van Goethem, Christina P?pper, Wouter Joosen, and Mathy Vanhoef. Timeless timing attacks: Exploiting concurrency to leak secrets over remote connections. In USENIX Security 20.
[218] Pepe Vila and Boris K?pf. Loophole: Timing attacks on shared event loops in chrome. In USENIX Security 17.
[219] W3C. Standards - W3C. https://www.w3.org/standards/, 2021.
[220] Junjie Wang, Bihuan Chen, Lei Wei, and Yang Liu. Superion: Grammar- aware greybox fuzzing. In ICSE19.
[221] Yong Wang. Thinking outside the JIT Compiler: Understanding and bypassing StructureID Randomization with generic and old-school methods. In Black Hat USA 19.
[222] Tao Wei, Tielei Wang, Lei Duan, and Jing Luo. Secure dynamic code generation against spraying. In CCS10.
[223] WeLiveSecurity. Brave browser’s Tor mode exposed users’ dark web activity. https://www.welivesecurity.com/2021/02/22/brave-browser-tor-mode-exposed-dark-web-activity/, 2021.
[224] WHATWG. Web Hypertext Application Technology Working Group (WHATWG). https://whatwg.org/, 2021.
[225] Rui Wu, Ping Chen, Bing Mao, and Li Xie. Rim: A method to defend from jit spraying attack. In ARES12.
[226] X41. X41 Browser Security White Paper. https://browser-security.x41-dsec.de/X41-Browser-Security-White-Paper.pdf, 2017.
[227] Wen Xu, Soyeon Park, and Taesoo Kim. Freedom: Engineering a state-of-the-art dom fuzzer. In CCS20.
[228] Mark Vincent Yason. Understanding the Attack Surface and Attack Resilience of Project Spartan’s (Edge) New EdgeHTML Rendering Engine.
[229] Zhang Yunhai. Bypass control flow guard comprehensively. In Black Hat USA 15.
[230] Google Project Zero. A very deep dive into iOS Exploit chains found in the wild. https://googleprojectzero.blogspot.com/2019/08/a-very-deep-dive-into-ios-exploit.html, 2019.
[231] Google Project Zero. In-the-Wild Series: Chrome Exploits. https://googleprojectzero.blogspot.com/2021/01/in-wild-series-chrome-exploits.html, 2021.
[232] Chao Zhang, Tao Wei, Zhaofeng Chen, Lei Duan, Laszlo Szekeres, Stephen McCamant, Dawn Song, and Wei Zou. Practical control flow integrity and randomization for binary executables. In SP13.


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1818/