轉載請參考from 信安科研人
目的
研究瀏覽器安全的目的是怎樣讓瀏覽器更安全
概述
一、攻擊面分析

整體上分為三個大部分主體,一個是瀏覽器,一個是用戶本機,一個是web服務器,
瀏覽器是中間者,作為用戶與web服務器的通信媒介,
1、資訊流中的威脅
資訊流大體上可以分為四個程序,用戶與瀏覽器有兩個,瀏覽器與web服務器有兩個,
瀏覽器與用戶本機之間:
- 不受限制的訪問
瀏覽器與web服務器之間:
- cookie等隱私資訊泄露
- 不安全的代碼運行
2、瀏覽器本體的結構威脅
- 直接訪問系統資源
- 事件驅動的DOM操作
- JS解釋器缺陷
- 各種多媒體資源決議缺陷
- 資料不安全存盤
- 第三方擴展和插件
- XML決議器缺陷
二、安全機制
1、沙箱
- 沙箱是一種隔離物件/執行緒/行程的機制,控制對系統各種資源的訪問,
- 需要對檔案/目錄、注冊表、網路訪問、資源監控、執行緒/行程、句柄、剪切板、桌面、系統引數、系統訊息、系統鉤子、命名管道等進行訪問控制,
2、ASLR
地址隨機化,即同一代碼在不同次加載時具有不同的加載地址,
3、DEP
DEP(Data Execution Prevention)資料執行保護,以記憶體頁為單位,對于資料區的記憶體頁不設定可執行標志,阻止資料作為代碼執行,
4、GS
GS(Stack Cookies)堆疊完整性保護,保證被調函式回傳正確的呼叫函式
5、插件安全
對插件或擴展的安全控制機制,如沙箱、安裝警告、訪問控制等,
6、JIT保護
由于JIT引擎動態代碼生成的特征,DEP和ASLR機制不再適用,JIT引擎應具有的安全機制包括:
- 在同一行程內生成代碼
- 具有地址空間變化能力
- 有效區分代碼和資料
7、URL黑名單
惡意URL放入黑名單以阻止訪問從而維護本機和瀏覽器安全,
三、安全機制繞過
ROP代碼重用攻擊繞過DEP,任意地址讀寫繞過ASLR,
瀏覽器設計的安全
一、同源策略
本質:web頁面A中的腳本被允許訪問web頁面B中的資料,當且僅當web頁面A與web頁面B同源,
“源”:URL機制、主機名、埠三要素共同決定,
應用:源A的cookie對于源B不可見;源A的腳本不可以讀取或者設定源B的屬性
二、插件與擴展
本質:為瀏覽器提供額外的功能,
風險:
- 插件代碼本身就是惡意的——在插件或擴展提供前進行代碼審計
- 為瀏覽器引入新的脆弱性——用沙箱是個可能的方法
- 降低瀏覽器安全機制的防護能力——比如減弱DEP或者ASLR
- 插件可能被靜默激活或與用戶互動——必須考慮插件和擴展到管理
瀏覽器實作的安全
一、渲染引擎安全
渲染引擎記憶體操作導致的安全問題,如溢位漏洞、指標重用漏洞等,
詳例請見:
CVE-2012-1876、CVE-2014-1772
簡述:
記憶體操作安全一直是軟體安全關注的焦點,瀏覽器中的記憶體操作繁雜多樣,記憶體操作類漏洞是瀏覽器漏洞的最重要組成,由于實作錯誤不可避免,所以安全機制側重利用緩解,
二、JS引擎安全
JS引擎機制——V8 JIT(JUST IN TIME):

JIT技術:

漏洞型別:
JIT熱函式翻譯模塊:整型溢位
JIT優化模塊:整型溢位,邊界錯誤等
實體:
CVE-2021-21220
熱函式翻譯模塊漏洞:
- 該漏洞位于JS編譯器 Turbofan 當中的 Instruction Selector 階段
- 在處理 ChangeInt32ToInt64 的指令選擇時,對于本應該有符號擴展卻錯誤使用無符號擴展,導致了整數溢位
安全加固:
- 代碼基址對齊隨機化——在生成代碼的開始插入任意個NOP或者INT 3指令,防止特定指
令的地址被預測 - 指令對齊隨機化——在不同基本塊之間插入任意個NOP指令,防止指令被預測
- 常量盲化——用戶可控的數值在編譯時與一個隨機值“XOR”進行混淆,在運行時生成兩條指令完成解混淆
- 常量折疊——在指令運算元的數值只能為偶數(比如用<<1轉化)
- 記憶體頁保護——如果生成的代碼不需要修改,可以將記憶體設定為“可執行”
- 附加隨機化——在ASLR的基礎上,對可執行記憶體的分配地址進行隨機化指定
- 保護頁——在可執行記憶體前分配保護頁,防止跨頁記憶體破壞
瀏覽器運行的安全
一、運行架構安全
架構安全的基礎是沙箱,沙箱的架構,以chrome為例,如下:

Broker行程就是瀏覽器行程
- 為每個target行程指明策略
- 創建新的target行程
- 提供沙箱策略引擎服務與沙箱攔截管理服務
- 向target行程提供沙箱IPC服務
- 代表target行程實施策略允許動作
Target行程通常是渲染行程
- 所有需要被保護的代碼
- 沙箱IPC客戶端
- 沙箱策略引擎客戶端
- 沙箱攔截
因此,針對沙箱的安全性,有以下的
攻擊方式:

詳例見CVE-2014-1705和CVE-2020-0986
二、系統架構安全
渲染時需要用到GPU加速,一個瀏覽器實體使用單個GPU行程渲染多個renderer行程:

左邊時render行程,中間SHM共享記憶體,交由GPU行程內的模塊分配GPU資源,
1、側信道攻擊
GPU側信道攻擊
前提:一個GPU行程內所有背景關系共享一個GPU地址空間(共享記憶體、GPU顯存),
攻擊方式:很久很久以前,網頁的WebGL代碼可直接越界訪問、分配GPU記憶體讀取其他頁面釋放后未清0的資料,從而竊取其他頁面資訊,
GPU記憶體側信道攻擊
OpenGL / cuda提供介面可以獲取實時GPU顯存剩余量,從而獲取瀏覽器的顯存分配事件,可以根據記憶體分配事件trace,推斷:
- 用戶正在輸入賬號還是密碼(渲染不同文本框)
- 敲擊鍵盤的時間間隔(渲染字符)
- etc.
2、處理器側信道
(1)利用cache
Prime階段:攻擊者通過大量訪存操作,使用特定資料集完成Cache填充
Trigger階段:目標程式進行訪存操作,將目標資料填充進Cache
Probe階段:攻擊者訪問用于填充Cache的特定資料集,根據時間差異確定目標數
據,

初始狀態為空,prime階段按照自定義的資料集填入cache,接著目標程式訪問記憶體將對應的資料填入cache,最后攻擊者訪問用于填充Cache的特定資料集,根據時間差異確定目標數
據,
(2)spectre攻擊
Spectre攻擊利用了cpu的預測執行導致了提前把私有資料放到了cpu快取中,但是因
為保護機制并沒有寫入資料的能力,同時我們并沒有直接讀取cpu快取中資料的權
限,不過可以通過計算訪問陣列的時間上做判斷獲取到下標中的之前放入的私有數
據,
(3)Meltdown攻擊
破壞了位于用戶和作業系統之間的基本隔離,此攻擊允許程式訪問記憶體,因此其他
程式以及作業系統的敏感資訊會被竊取,這個漏洞“熔化”了由硬體來實作的安全
邊界,允許低權限用戶級別的應用程式“越界”訪問系統級的記憶體,從而造成資料
泄露,
參考文獻
《軟體安全原理》—— 霍瑋
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401555.html
標籤:其他
上一篇:sql注入--布爾盲注
下一篇:Java-如何防范CSRF攻擊
