最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Linux內(nèi)核學(xué)習(xí)--漏洞安全/虛擬內(nèi)存

2022-11-05 15:37 作者:后端攻城獅哇  | 我要投稿

一、CPU熔斷/幽靈漏洞解決方案

1、側(cè)信道攻擊

是密碼學(xué)常見暴力攻擊技術(shù)(針對加密電子設(shè)備在運行過程當(dāng)中的時間消耗、功率消耗或電磁輻射之類側(cè)信道信息泄露而對加密設(shè)備進(jìn)行攻擊的方法)。

有一段實現(xiàn)高速緩存?zhèn)刃诺拦魝未a,也是熔斷漏洞攻擊的偽代碼。set_signal();


高速緩存?zhèn)刃诺拦糁衅平鈹?shù)據(jù)的流程如下:

2、CPU熔斷漏洞分析

A、亂序執(zhí)行、異常處理、地址空間

亂序執(zhí)行: 目前CPU為提高性能,實現(xiàn)亂序技術(shù)。算法核心實現(xiàn)一個叫寄存器重命名的硬件單元來消除寄存器數(shù)據(jù)流之間的依賴關(guān)系,從而實現(xiàn)指令的并行執(zhí)行。亂序執(zhí)行的流水線有兩個作用:一是消除指令之間的寄存器讀后寫(WAR)相關(guān)和寫后(WAW)相關(guān);二是當(dāng)指令執(zhí)行發(fā)生例外或者轉(zhuǎn)移指令猜測錯誤而取消后面的指令時,可用來保證現(xiàn)場的精確。

從CPU角度看,指令順序發(fā)車,亂序超車,順序歸隊。

異常處理: CPU在執(zhí)行過程當(dāng)中可能會產(chǎn)生異常,但是處理器是支持亂序執(zhí)行的,若異常指令后面的指令都已經(jīng)執(zhí)行,那么此時如何處理?

地址空間: 分頁機(jī)制保證每個進(jìn)程的地址空間的隔離性。分頁機(jī)制也實現(xiàn)從虛擬地址到物理地址的轉(zhuǎn)換,這個通過需要查詢頁表,頁表可以是多級頁表。每個進(jìn)程都有自己的虛擬地址空間, 并且映射的物理地址是不一樣的, 所以每一個進(jìn)程都有自己的頁表。

3、 解決方案: KPTI技術(shù)

KPTI基本思想: 把每個進(jìn)程使用的一張頁表分隔成兩張->內(nèi)核頁表和用戶頁表。

ARM64的KPTI方案大致和x86_64的KPTI方案相似,主要體現(xiàn)上有所不同:

  1. 新增一個CONFIG_UNMAP_KERNEL_AT_EL0宏來打開KPTI方案,編譯內(nèi)核時需要打開這個選項同并重新編譯內(nèi)核。

  2. 原來內(nèi)核空間的TLB設(shè)置為全局類型的TLB,現(xiàn)在把每人內(nèi)核頁表設(shè)置成進(jìn)程獨有類型的TLB,即為內(nèi)核頁表也分配ASID。

4、CPU“幽靈”漏洞

它和熔斷漏洞相似,都利用高性能處理器的一些副作用進(jìn)行高級緩存?zhèn)刃诺拦簟PU“幽靈"漏洞有兩個變體: 變體1 (繞過邊界檢查漏洞),變體2 (分支預(yù)測注入漏洞)。

一般處理器會實現(xiàn)動態(tài)分支預(yù)測的硬件單元, ARM的Cortex-A系列的處理器實現(xiàn)全局歷史緩沖區(qū)(GHB),支持目標(biāo)緩沖器(BTB) 和返回棧緩沖器單元(RSB)。

  1. 分支方向的預(yù)測:計數(shù)器用來表示跳轉(zhuǎn)的結(jié)果,標(biāo)記用來索引該表,它是指令PC值的一部分。

  2. 直接跳轉(zhuǎn)的預(yù)測

  3. 間接跳轉(zhuǎn)的預(yù)測

新增內(nèi)存屏障指令/內(nèi)核的array_index_nospec()函數(shù)/gcc的修復(fù)方案。

二、PAS/mm_ struct詳解

malloc()是用戶態(tài)常用的分配內(nèi)存接口的函數(shù),mmap()是用戶態(tài)常用的用于建立文件映射或匿名映射的函數(shù)。

進(jìn)程地址空間在內(nèi)核中使用struct vm_area_struct數(shù)據(jù)結(jié)構(gòu)描述, 簡稱VMA,也被稱為進(jìn)程地址空間或進(jìn)程線性區(qū)。

1、進(jìn)程地址空間PAS (Process Address Space)

指進(jìn)程可尋址的虛擬地址空間。內(nèi)存區(qū)域包含:代碼段映射、數(shù)據(jù)段映射、用戶進(jìn)程的棧、MMAP映射區(qū)域、堆映射區(qū)域。

2、內(nèi)存描述符(struct mm_struct)

Linux內(nèi)核需要管理每個進(jìn)程所有的內(nèi)存區(qū)域以及它們對應(yīng)的頁表映射,所以必須抽象出一個數(shù)據(jù)結(jié)構(gòu),此數(shù)據(jù)結(jié)構(gòu)就是struct mm_ struct。 進(jìn)程的進(jìn)程控制塊(PCB) 數(shù)據(jù)結(jié)構(gòu)struct task_struct中有一個指針mm指向這個mm_struct數(shù)據(jù)結(jié)構(gòu)。

三、VMA/malloc系統(tǒng)調(diào)用

每個VMA都要連接到mm_struct中的鏈表和紅黑樹中,主要方便查找,mmap形成一個單向鏈表,進(jìn)程中所有的VMA都鏈接到這個鏈表中,鏈表頭是mm_ struct->mmap; mm_rb是紅黑樹的根節(jié)點,每個進(jìn)程有一棵VMA的紅黑樹。

malloc函數(shù)是C語 言中內(nèi)存分配函數(shù)(系統(tǒng)調(diào)用),mmap/munmap接口函數(shù)是用戶空間最常用的兩個系統(tǒng)調(diào)用接口。是在用戶程序中分配內(nèi)存、讀寫大文件、鏈接動態(tài)庫文件,還是多進(jìn)程間共享內(nèi)存。


Linux內(nèi)核學(xué)習(xí):漏洞安全與虛擬內(nèi)存 篇 (源碼講解)


Linux內(nèi)核學(xué)習(xí)--漏洞安全/虛擬內(nèi)存的評論 (共 條)

分享到微博請遵守國家法律
西和县| 宽甸| 和政县| 秀山| 哈密市| 涞源县| 涟源市| 同德县| 澜沧| 宜君县| 贺兰县| 嘉峪关市| 富宁县| 永平县| 明星| 昆明市| 邵东县| 青冈县| 曲水县| 收藏| 嘉峪关市| 开封市| 庆元县| 阿拉善右旗| 梁平县| 洞口县| 察哈| 三原县| 潼南县| 衡南县| 鄯善县| 永嘉县| 广平县| 芒康县| 确山县| 宁河县| 丰顺县| 敖汉旗| 安宁市| 蒲城县| 获嘉县|