精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

英特爾嘗試在CPU級別干掉緩沖區(qū)溢出

責(zé)任編輯:editor005

作者:Venvoo

2016-06-14 16:27:42

摘自:安全牛

當(dāng)運行函數(shù)返回時,處理器不會跳回到軟件的某個合法部分,而是跳回到你定義的重寫堆棧部分,也即你的惡意載荷。

英特爾正在推廣一項很靈活的技術(shù)。該技術(shù)可以在處理器層面上阻擋惡意軟件感染,其相關(guān)細節(jié)已經(jīng)在上周四發(fā)表。實際上是這樣:英特爾稱之為控制流強制技術(shù) (Control-flow Enforcement Technology, CET) 嘗試阻撓會使用面向返回編程 (Return-orientated programming, ROP) 和面向跳轉(zhuǎn)編程 (Jump-orientated programming, JOP) 的漏洞利用代碼。

CET通過引入一個影子堆棧來工作。影子堆棧僅包括返回地址,它存儲在系統(tǒng)RAM中,并受到CPU的內(nèi)存管理模塊保護。當(dāng)子程序受到調(diào)用時,返回地址隱藏在線程的棧當(dāng)中,通常而言,它也會在影子堆棧中。當(dāng)處理器返回一個指令時,會確保在線程堆棧上的返回地址與影子堆棧中的地址匹配。

如果并不匹配,系統(tǒng)將拋出一個異常,讓操作系統(tǒng)能夠捕捉并停止執(zhí)行。因此,如果漏洞利用代碼開始篡改堆棧,將惡意指令串在一起,在系統(tǒng)上安裝惡意軟件或用其它方式攻擊系統(tǒng),這類篡改將會被檢測到,并且可以在造成任何傷害之前制止它們。

影子堆棧必須在頁表上具有新的影子堆棧集的內(nèi)存上存儲。如果軟件嘗試通過訪問影子堆棧實現(xiàn)惡意企圖,比如利用MOV指令,就會被內(nèi)存管理單元和操作系統(tǒng)提出的一個頁面錯誤警告所制止。如果軟件在影子堆棧沒有被標(biāo)記為影子堆棧的情況下嘗試使用控制流指令,比如RET,頁表同樣會提出一個錯誤警告。

運行中線程使用的影子堆棧指針 (Shadow stack pointer, SSP) 存儲在任務(wù)狀態(tài)段中。有各種各樣的控制寄存器能夠?qū)μ貦?quán)ring 0到ring 2(非用戶狀態(tài)ring)和中斷獲取SSPs。如果想要了解這項技術(shù)的細節(jié),可以參考這篇PDF文檔。

這種技術(shù)阻止的到底是什么?

你經(jīng)常能做到這樣的事情:找到某個軟件中的內(nèi)存緩沖區(qū),并在數(shù)組中注入更多的數(shù)據(jù),從而讓多出的字節(jié)溢出到其它變量和指針的位置上。最終你將粉碎堆棧上的返回地址,并讓它指向某個有效的惡意代碼。當(dāng)運行函數(shù)返回時,處理器不會跳回到軟件的某個合法部分,而是跳回到你定義的重寫堆棧部分,也即你的惡意載荷。

只要通過互聯(lián)網(wǎng)進行傳播,你就可以在其他人的系統(tǒng)上實現(xiàn)執(zhí)行任意代碼。他們的盒子現(xiàn)在變成了你的盒子。

然后,操作系統(tǒng)和處理器開始實施機制防止上述情況。那個堆棧存儲在內(nèi)存頁表上的方式是數(shù)據(jù),而不是可執(zhí)行代碼。因此,很容易在發(fā)生破壞之前解決這類攻擊:如果處理器開始嘗試執(zhí)行在非可執(zhí)行區(qū)域存儲的代碼,也即數(shù)據(jù)棧,系統(tǒng)將返回一個異常。這就是非可執(zhí)行 (No execute, NX) 在頁表中的作用。英特爾,AMD和ARM等廠商對該技術(shù)的稱呼并不完全一樣。

然后就是有意思的部分了:面向返回編程 (Return-orientated programming, ROP)。本質(zhì)上來講,你仍舊能夠覆蓋堆棧,用自己選擇的值進行填充,但你的目的變成了創(chuàng)造一個全部指向運行中程序有用指令塊的序列。對處理器而言,它仍舊在執(zhí)行正常的代碼,沒有拋出異常。

這樣理解它比較合適:這不是逐字逐句地按作者的原意讀一本書,而是選擇跳過其中的一些部分,這等于在原小說的基礎(chǔ)上進行二次創(chuàng)作。這正是ROP的工作方式:你用小程序地址填充堆棧,每個小程序都以RET及其類似指令為結(jié)尾。當(dāng)處理器跳到某個小程序時,它將執(zhí)行其中的指令,然后輪到RET,從堆棧中取出下一個返回地址,跳到其指向的下一個小程序。

以下是兩個小程序的例子:

pop %ebx

pop %eax

ret

mov %eax, (%ebx)

ret

第一個小程序從堆棧上取出兩個值,并在變量ebx和eax中存儲它們。別忘了,你控制著堆棧的內(nèi)容,因此能夠確保這些指令包含了你想要的數(shù)值。下一步,第二個小程序?qū)ax的數(shù)值填寫到ebx指向的內(nèi)存地址。將這些小程序連起來,你就能編輯當(dāng)前運行中線程所有能夠改變的內(nèi)存地址,這被稱為任意寫入,它在篡改應(yīng)用和服務(wù)器方面非常有效。

最后,你將可以把足夠多的小代碼區(qū)域和參數(shù)縫在一起,要求操作系統(tǒng)將一個非可執(zhí)行的內(nèi)存區(qū)域標(biāo)記為可執(zhí)行,并保證它裝滿了你的惡意載荷,并跳轉(zhuǎn)到它。因為你已經(jīng)將其標(biāo)記為可執(zhí)行,處理器運行它時不會遇到什么問題,你也就完成了任意代碼執(zhí)行攻擊。

事實上,ROP和JOP就是惡意軟件作者用來獲取受害計算機控制權(quán)的基本方法。

CET在這里的功能是,當(dāng)從某個子程序返回時,堆棧還沒有被惡意軟件所劫持。沒有ROP,漏洞利用就不會有效,也就不會有惡意軟件感染。

無法通過通常的程序代碼修改影子堆棧。當(dāng)然,如果你能以某種方式欺騙內(nèi)核,讓它解鎖影子堆棧,干涉它,讓它和你的ROP鏈條一致,然后重新啟用保護,就能夠繞過CET。

需要反饋

英特爾網(wǎng)絡(luò)安全專家Matthew Rosenquist說:“英特爾開發(fā)的控制流強制技術(shù)為未來利用中央處理器的固定硬件架構(gòu),建立控制,幫助防止并干預(yù)代碼重用攻擊提供了一個方向。”

“通過使用影子堆棧、指針和其它機制,CET建立的機制能夠防止有人濫用合法代碼。”

目前,CET處于預(yù)覽階段,還有許多工作尚待完成。該規(guī)范是在微軟的協(xié)助之下完成的,已經(jīng)開始在小范圍內(nèi)測試,獲取技術(shù)反饋。在CET的設(shè)計之下,可能會有一些沒有考慮到的部分可能被利用,回避保護機制。它是個非常復(fù)雜的系統(tǒng),和許多芯片級的特性相關(guān),比如特權(quán)級別、中斷、管理程序入口和出口。在這項技術(shù)真的落實到產(chǎn)品上之前還有一段路要走。

前幾年就已經(jīng)有一些計算機科學(xué)家提出了影子堆棧的概念。在這項技術(shù)成為主流之前,抵抗ROP漏洞利用的主要方式是ASLR,也即地址空間隨機化。這一操作系統(tǒng)級的特性會在程序的虛擬空間中隨機為程序的組件分配地址,比如它的庫和可執(zhí)行文件。由于代碼存儲的空間在每次程序開始執(zhí)行之前都會被隨機化,小程序的位置也會改變,因此精心準(zhǔn)備的ROP棧將不再有效:它指向的是錯誤的位置,會導(dǎo)致應(yīng)用或服務(wù)器崩潰。

ASLR并不是萬無一失。有時黑客能夠通過信息泄露漏洞獲取小程序的基地址,進而計算并確定其位置,實現(xiàn)跳轉(zhuǎn)。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2025 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號

  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 清水县| 洞口县| 上饶县| 新建县| 景泰县| 邳州市| 定结县| 景宁| 牟定县| 双牌县| 高唐县| 固安县| 建水县| 辽阳市| 东明县| 华宁县| 襄垣县| 江门市| 贞丰县| 疏附县| 临漳县| 昆山市| 吉林省| 原阳县| 聊城市| 黑河市| 阳曲县| 禄丰县| 莱西市| 精河县| 博兴县| 乌鲁木齐县| 德化县| 凌云县| 庐江县| 连平县| 太白县| 工布江达县| 游戏| 巴彦淖尔市| 霍山县|