成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析A-CFI技術(shù):如何利用硬件防御ROP

安全 黑客攻防
控制流完整性(Control Flow Integrity, CFI)是由加州大學(xué)和微軟公司于2005年提出的一種防御控制流劫持攻擊的安全機制。通過監(jiān)視程序運行過程中的控制流轉(zhuǎn)移過程,使其始終處于原有控制流圖所限定的合法范圍內(nèi)。

0x00 前言

隨著漏洞緩解技術(shù)的不斷發(fā)展,常用的一些漏洞利用手段如ROP變得越來越困難,來自ENDGAME的Cody Pierce發(fā)表了一篇[博客],稱ROP的末日已經(jīng)來臨,新的漏洞緩解技術(shù)將有效應(yīng)對未知的漏洞威脅,并宣布他們實現(xiàn)了一種全新利用硬件輔助的控制流完整性的防御機制——HA-CFI。

不過這種論調(diào)向來是要打自己臉的,因為總有新的漏洞利用方式出爐,永遠(yuǎn)不能低估黑客的想象力。比如Flash推出的一系列漏洞緩解機制中仍然存在漏洞,這就很尷尬了(CVE-2016-4249,詳情可參考古河在HitCon上的演講)。

知己知彼,百戰(zhàn)不殆。只有充分了解新的漏洞緩解機制,才能有更好的思路去繞過,才能對未來發(fā)展新的防御機制更有啟發(fā)。

0x01 控制流完整性

控制流完整性(Control Flow Integrity, CFI)是由加州大學(xué)和微軟公司于2005年提出的一種防御控制流劫持攻擊的安全機制。通過監(jiān)視程序運行過程中的控制流轉(zhuǎn)移過程,使其始終處于原有控制流圖所限定的合法范圍內(nèi)。

具體的做法是分析程序的控制流圖,重點關(guān)注間接轉(zhuǎn)移指令,如間接跳轉(zhuǎn)、間接調(diào)用和函數(shù)返回等指令,獲取相應(yīng)的白名單。在程序運行過程中對間接轉(zhuǎn)移指令的目標(biāo)進(jìn)行檢查核對,而攻擊者對控制流的劫持會導(dǎo)致目標(biāo)不在白名單中,此時CFI可迅速進(jìn)行阻斷,保證系統(tǒng)安全。

一般來說,控制流完整性可分為細(xì)粒度和粗粒度兩種實現(xiàn)方式。細(xì)粒度CFI嚴(yán)格檢查每一個間接轉(zhuǎn)移指令的轉(zhuǎn)移目標(biāo),但會嚴(yán)重影響程序的執(zhí)行效率;粗粒度CFI將一組或相近類型的目標(biāo)歸到一起進(jìn)行檢查,可在一定程度上降低開銷,但會使安全性降低。

0x02 基于硬件的CFI

早期一些CFI思路是基于二進(jìn)制插樁的,最簡單粗暴的方式是在每條控制流轉(zhuǎn)移指令前插入檢驗代碼,判斷目標(biāo)地址的合法性。但這種方式的開銷實在太大,難以在實際中部署。因此研究人員提出的一些改進(jìn)方法均在效率上進(jìn)行了妥協(xié),放寬了檢查條件。實質(zhì)上都是粗粒度的CFI,實際效果會打折扣,可被攻擊者利用繞過。

既然CFI受制于效率,那么是否可以引入硬件機制來提高效率呢?畢竟相比二進(jìn)制插樁的方式,硬件的開銷幾乎是可以忽略的,但前提是我們必須找到可行的實施方案。這就需要對處理器平臺上的一些技術(shù)細(xì)節(jié)有所了解。

Intel為了讓用戶能夠更好的對應(yīng)用程序的性能進(jìn)行優(yōu)化,提供了一系列輔助調(diào)試的硬件支持,這里著重介紹LBR(Last Branch Record)、BTS(Branch Trace Store)和PMU(Performance Monitoring Unit),早期的一些研究都是在這些基礎(chǔ)上開展的。

LBR

LBR是Intel提供的一組用于記錄和追蹤程序最近的若干次跳轉(zhuǎn)信息的循環(huán)寄存器組,這些寄存器的數(shù)量與Intel處理器的微架構(gòu)相關(guān),在早幾年的Haswell架構(gòu)中有16個這樣的寄存器,也就是說可以記錄程序最近的16條跳轉(zhuǎn)指令的信息(包括從哪跳轉(zhuǎn)過來的,將要跳轉(zhuǎn)到哪去),而在最新的Skylake架構(gòu)中有32個。LBR寄存器的強大之處在于其定制性很強,能夠過濾掉一些不重要的跳轉(zhuǎn)指令,而保留需要重點關(guān)注的跳轉(zhuǎn)指令。

BTS

BTS是另一個用于記錄程序分支信息的功能單元,但與LBR不同的是,BTS不會將程序的跳轉(zhuǎn)指令信息存儲到寄存器中,而是將其存儲至CAR(cache-as-RAM)中或是系統(tǒng)的DRAM中,這里就沒有條數(shù)的限制了,只要空間足夠,BTS可以存儲大量跳轉(zhuǎn)指令的信息。

但另一方面,BTS的時間開銷要比LBR高出許多。

PMU

PMU是Intel引入的用于記錄處理器事件的功能單元。PMU事件有好幾百個,非常詳盡,包含了處理器在運行過程中可能遇到的所有情形,例如指令計數(shù)、浮點運算指令計數(shù)、L2緩存未命中的時鐘周期等。當(dāng)然其中也有一個在HA-CFI中非常有用的事件,分支預(yù)測失敗事件。

0x03 HA-CFI基本思路

如果大家對計算機體系結(jié)構(gòu)稍有了解就會知道,現(xiàn)代處理器都是采用流水線的方式執(zhí)行指令,而分支預(yù)測是保證其高效的一個非常重要的技術(shù)。

當(dāng)包含流水線技術(shù)的處理器處理分支指令時會遇到一個問題,根據(jù)判定條件的真/假的不同,有可能會產(chǎn)生轉(zhuǎn)跳,而這會打斷流水線中指令的處理,因為處理器無法確定該指令的下一條指令。流水線越長,處理器等待的時間便越長,因為它必須等待分支指令處理完畢,才能確定下一條進(jìn)入流水線的指令。分支預(yù)測就是預(yù)測一條可能的分支,讓處理器沿著這條分支流水執(zhí)行下去而不用等待。若預(yù)測成功,那么皆大歡喜,處理器繼續(xù)執(zhí)行下去即可;若預(yù)測失敗,處理器則需要回退到分支位置,重新沿著正確的分支方向執(zhí)行。

分支預(yù)測有許多種策略,如靜態(tài)預(yù)測和動態(tài)預(yù)測等,當(dāng)然學(xué)術(shù)界還有很多其他非常高端的方法。但無論采用何種方式進(jìn)行分支預(yù)測,攻擊者劫持指令流后,其目標(biāo)地址顯然不是處理器能夠預(yù)測到的,必然會產(chǎn)生一個分支預(yù)測失敗的PMU事件,這相當(dāng)于一個預(yù)警信息,接下來要做的就是從這類PMU事件中甄別出哪些是正常的分支預(yù)測失敗,哪些是由于攻擊者劫持指令流造成的分支預(yù)測失敗。

僅僅預(yù)警是不夠的,HA-CFI還希望能夠準(zhǔn)確定位指令流被劫持的位置,并及時進(jìn)行阻斷。此時PMU就幫不上什么忙了,因為PMU只負(fù)責(zé)報告處理器事件,而不記錄產(chǎn)生該事件的具體指令。當(dāng)某一時刻PMU報告一個分支預(yù)測失敗的事件時,此時的指令指針可能早已越過了跳轉(zhuǎn)指令,很難回溯定位發(fā)生分支預(yù)測失敗的指令位置。

因此,為了精確定位造成分支預(yù)測失敗的指令,還需要借助LBR的幫助。當(dāng)分支預(yù)測失敗的PMU事件觸發(fā)中斷服務(wù)程序(ISR, Interrupt Service Routines)時,ISR將從LBR中取出最新的若干條間接跳轉(zhuǎn)指令,其中必然包含造成分支預(yù)測失敗的間接跳轉(zhuǎn)指令。而且LBR中還記錄了更為詳細(xì)的信息,可方便ISR核對該間接跳轉(zhuǎn)指令的目標(biāo)地址是否在白名單中。若跳轉(zhuǎn)指令的目標(biāo)不在白名單之中,說明指令流可能遭到劫持,可及時阻斷。示意圖如下所示:

HA-CFI示意圖

此外,為了進(jìn)一步保證HA-CFI的效率,可以根據(jù)當(dāng)前進(jìn)程的重要性選擇性的開啟或關(guān)閉PMU,如當(dāng)前進(jìn)程為IE或Firefox瀏覽器時,開啟PMU;若當(dāng)前進(jìn)程為Calc.exe這樣不太容易遭受攻擊的進(jìn)程,則關(guān)閉PMU,如圖所示:

選擇性開啟PMU

0x04 效果與展望

Cody Pierce等人選取了多個經(jīng)典的CVE漏洞,與EMET進(jìn)行了比較:

實驗結(jié)果1

實驗結(jié)果2

可以肯定的是,隨著對抗的不斷升級,未來漏洞利用的門檻將越來越高,與防御機制斗法也將也成為常態(tài)。

除了剛才提到的微軟的EMET,Intel在今年6月發(fā)布了一份關(guān)于CET的技術(shù)前瞻:[Control-flow Enforcement Technology Preview],準(zhǔn)備從硬件層面入手防止ROP和JOP攻擊。通過引入一個shadow stack(類似的[想法]幾年前也有人提出),專門用于存儲返回地址,每當(dāng)發(fā)生函數(shù)調(diào)用時,除了向當(dāng)前線程棧內(nèi)壓入返回地址,還要向shadow stack中壓入返回地址。返回時需要檢查線程棧中的返回地址是否與shadow stack中一致,若不一致,說明線程棧可能遭到攻擊者破壞,程序中止。此外,shadow stack處于層層嚴(yán)密防護(hù)之中,普通代碼是無法修改shadow stack的,除非攻擊者能控制內(nèi)核,當(dāng)然這并非不可能,只是攻擊門檻變得很高了。

CET目前仍是一個前瞻性的技術(shù),距離真正實現(xiàn)還需要時間。即使實現(xiàn)了,也不意味著高枕無憂,HA-CFI也是如此,總有能繞過的方法,總有其未考慮到的情況,甚至可能它本身也存在著缺陷。

責(zé)任編輯:武曉燕 來源: 紅黑聯(lián)盟
相關(guān)推薦

2010-09-13 09:20:21

2013-12-11 09:51:33

2014-06-26 11:33:42

2017-03-14 15:37:28

2011-04-07 14:26:06

2010-09-27 08:46:53

2013-11-04 09:15:58

2023-07-26 17:13:38

2017-06-08 19:19:10

2016-09-29 22:54:55

2015-06-12 09:58:51

2010-04-08 16:11:39

Unix操作系統(tǒng)

2009-09-24 17:01:06

Javascript獲

2010-09-17 14:16:21

2017-03-06 14:44:49

Androidhook技術(shù)

2011-09-30 10:34:03

無線

2022-11-24 14:46:14

網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)

2015-09-22 09:43:31

2011-08-10 09:13:22

2015-11-09 15:58:03

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 奇米影视首页 | 免费性视频| 91精品在线看 | av网站在线播放 | 欧美成人一区二区三区 | 久久久久无码国产精品一区 | 日韩在线视频播放 | 欧美高清视频一区 | 国产一级视频在线观看 | 精品欧美一区二区三区免费观看 | 欧美一级大片免费看 | 91精品久久久久久久久久 | 三级黄色大片网站 | 色综合久久88色综合天天 | 男女午夜激情视频 | 日本色婷婷| 日本不卡一区 | 成人激情视频 | 欧美国产亚洲一区二区 | 人人做人人澡人人爽欧美 | 青青草综合网 | 天天爽夜夜操 | 国产欧美精品一区二区色综合 | 久久久九九 | 欧美精品影院 | 欧美在线亚洲 | 亚洲区视频 | 精品国产一区二区三区久久久蜜月 | 精品国产乱码久久久久久蜜柚 | 欧美日韩精品一区二区三区四区 | 欧美精品一区二区三区在线播放 | 精品一区二区三区在线观看 | 在线视频一区二区三区 | 欧美精品三区 | 狠狠的干| 久久高清精品 | 欧美精品成人一区二区三区四区 | 日韩中文字幕在线不卡 | 欧美一级视频免费看 | 精品色 | 久久综合一区二区三区 |