亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        操作系統(tǒng)和虛擬化安全知識(shí)

        2023-05-30 11:57:00闞哲
        關(guān)鍵詞:控制流堆棧內(nèi)核

        闞哲

        控制流限制

        正交防線是調(diào)節(jié)操作系統(tǒng)的控制流。通過(guò)確保攻擊者無(wú)法將控制權(quán)轉(zhuǎn)移到他們選擇的代碼上,即使不刪除內(nèi)存錯(cuò)誤,也會(huì)使利用內(nèi)存錯(cuò)誤變得更加困難。最好的例子被稱為控制流完整性(CFI),現(xiàn)在許多編譯器工具鏈(如LLVM和微軟的VisualStudio),于2017年以ControlFlowGuard的名義并入Windows內(nèi)核。

        從概念上講,CFI非常簡(jiǎn)單:確保代碼中的控制流始終遵循靜態(tài)控制流圖。例如,一個(gè)函數(shù)的返回指令應(yīng)該只允許返回到它的調(diào)用站點(diǎn),而使用C中的函數(shù)指針或C++中的虛函數(shù)的間接調(diào)用應(yīng)該只能夠定位它應(yīng)該能夠調(diào)用的合法函數(shù)的入口點(diǎn)。為了實(shí)現(xiàn)這種保護(hù),可以標(biāo)記間接控制轉(zhuǎn)移指令的所有合法目標(biāo)(返回、間接調(diào)用和間接跳轉(zhuǎn)),并將這些標(biāo)簽添加到特定于此指令的集合。在運(yùn)行時(shí),檢查指令即將進(jìn)行的控制轉(zhuǎn)移是否為集合中的目標(biāo)。否則,CFI會(huì)發(fā)出警報(bào)。

        與ASLR一樣,CFI有多種“口味”,從粗粒度到細(xì)粒度,從上下文敏感到上下文不敏感。就像在ASLR中一樣,今天的大多數(shù)實(shí)現(xiàn)只采用最簡(jiǎn)單、最粗粒度的保護(hù)。粗粒度CFI意味著為了性能而稍微放寬規(guī)則。例如,它不是將函數(shù)的返回指令限制為可能調(diào)用此函數(shù)的僅目標(biāo)合法調(diào)用站點(diǎn),而是可以針對(duì)任何調(diào)用站點(diǎn)。雖然不如細(xì)粒度CFI安全,但它仍然極大地限制了攻擊者的回旋余地,并且可以更快地在運(yùn)行時(shí)檢查。

        在現(xiàn)代機(jī)器上,某些形式的CFI甚至(或?qū)⒁┑玫接布闹С?。例如,英特爾控制流?qiáng)制技術(shù)(CET)支持影子堆棧和間接分支跟蹤,以幫助強(qiáng)制實(shí)施退貨和前向控制傳輸?shù)耐暾裕ㄒ苑浅4至6鹊姆绞剑RM也不甘示弱,它提供了指針身份驗(yàn)證,以防止對(duì)指針值進(jìn)行非法修改———主要是通過(guò)使用指針的上位來(lái)存儲(chǔ)指針身份驗(yàn)證代碼(PAC),其功能類似于加密指針值上的簽名(除非獲得正確的PAC,否則指針無(wú)效)。

        遺憾的是,CFI只能通過(guò)破壞返回地址、函數(shù)指針和跳轉(zhuǎn)目標(biāo)等控制數(shù)據(jù)來(lái)幫助抵御改變控制流的攻擊,但對(duì)非控制數(shù)據(jù)攻擊卻無(wú)能為力。例如,它無(wú)法阻止覆蓋當(dāng)前進(jìn)程的權(quán)限級(jí)別并將其設(shè)置為“root”的內(nèi)存損壞(例如通過(guò)將有效用戶ID設(shè)置為root用戶的ID)。但是,如果對(duì)控制流的限制在實(shí)踐中如此成功,您可能想知道數(shù)據(jù)流是否也可以進(jìn)行類似的限制。事實(shí)上,它們確實(shí)如此,這被稱為數(shù)據(jù)流完整性(DFI)。在DFI中,靜態(tài)地確定每個(gè)加載指令(即從內(nèi)存中讀取的指令)存儲(chǔ)指令可能合法地產(chǎn)生了數(shù)據(jù),并且標(biāo)記這些指令并將這些標(biāo)簽保存在一組中。在運(yùn)行時(shí),對(duì)于內(nèi)存中的每個(gè)字節(jié),記住該位置最后一個(gè)存儲(chǔ)的標(biāo)簽。當(dāng)遇到加載指令時(shí),會(huì)檢查該地址的最后一個(gè)存儲(chǔ)是否在合法存儲(chǔ)集中,如果不是,會(huì)發(fā)出警報(bào)。與CFI不同,DFI在實(shí)踐中并未被廣泛采用,可能是因?yàn)槠滹@著的性能開(kāi)銷。

        信息隱藏

        大多數(shù)當(dāng)前操作系統(tǒng)的主要防線之一是隱藏攻擊者可能感興趣的任何內(nèi)容。具體來(lái)說(shuō),通過(guò)隨機(jī)化所有相關(guān)內(nèi)存區(qū)域(在代碼、堆、全局?jǐn)?shù)據(jù)和堆棧中)的位置,攻擊者將不知道在哪里轉(zhuǎn)移控制流,也無(wú)法發(fā)現(xiàn)哪個(gè)地址包含敏感數(shù)據(jù)等。術(shù)語(yǔ)地址空間布局隨機(jī)化(ASLR)是在PaX安全補(bǔ)丁發(fā)布時(shí)創(chuàng)造的,該補(bǔ)丁在2001年為L(zhǎng)inux內(nèi)核實(shí)現(xiàn)了這種隨機(jī)化。很快,類似的努力出現(xiàn)在其他操作系統(tǒng)中,第一個(gè)默認(rèn)啟用ASLR的主流操作系統(tǒng)是2003年的OpenBSD和2005年的Linux。Windows和MacOS在2007年緊隨其后。然而,這些早期的實(shí)現(xiàn)只是隨機(jī)化了用戶程序中的地址空間,隨機(jī)化直到大約10年后才到達(dá)主要操作系統(tǒng)的內(nèi)核。

        如今,大多數(shù)實(shí)現(xiàn)都采用粗粒度隨機(jī)化:它們隨機(jī)化代碼、堆或堆棧的基本位置,但在這些區(qū)域中,每個(gè)元素都與基本元素處于固定偏移量。這很簡(jiǎn)單,而且非???,然而,一旦攻擊者設(shè)法通過(guò)信息泄漏獲得哪怕一個(gè)代碼指針,他們就會(huì)知道每條指令的地址。對(duì)于堆、堆棧等,也是如此,因此,毫不奇怪,這些信息泄漏是當(dāng)今攻擊者高度重視的目標(biāo)。

        更細(xì)粒度的隨機(jī)化也是可能的。例如,可以在頁(yè)面級(jí)別或功能級(jí)別進(jìn)行隨機(jī)化。如果在內(nèi)存區(qū)域中打亂函數(shù)的順序,即使知道內(nèi)核代碼的基礎(chǔ)對(duì)于攻擊者來(lái)說(shuō)也是不夠的。事實(shí)上,我們可以更細(xì)粒度地洗牌基本塊、指令(可能帶有從不執(zhí)行或無(wú)效的垃圾指令)甚至寄存器分配。許多細(xì)粒度隨機(jī)化技術(shù)都是以空間和時(shí)間開(kāi)銷為代價(jià)的,例如,由于局部性和碎片化減少。

        除了代碼之外,還可以對(duì)數(shù)據(jù)進(jìn)行細(xì)粒度隨機(jī)化。例如,研究表明,堆棧上的堆分配、全局變量甚至變量都可以分散在內(nèi)存中。當(dāng)然,這樣做會(huì)產(chǎn)生性能和內(nèi)存方面的成本。

        考慮到KASLR,尤其是粗粒度的KASLR,作為抵御內(nèi)存錯(cuò)誤攻擊的第一道防線,這不會(huì)離目標(biāo)太遠(yuǎn)。不幸的是,它也是一個(gè)非常薄弱的防御,許多出版物表明,通過(guò)從內(nèi)存、側(cè)信道等泄漏數(shù)據(jù)和(或)代碼指針,KASLR可以相當(dāng)容易地被破解。

        保護(hù)環(huán)

        Multics引入的最具革命性的想法之一是保護(hù)環(huán)的概念———一種特權(quán)的分層,其中內(nèi)環(huán)(環(huán)0)是最有特權(quán)的,并且外環(huán)的特權(quán)最低。因此,不受信任的用戶進(jìn)程在外環(huán)中執(zhí)行,而直接與硬件交互的受信任和特權(quán)內(nèi)核在環(huán)0中執(zhí)行,其他環(huán)可用于或多或少特權(quán)的系統(tǒng)進(jìn)程。

        保護(hù)環(huán)通常采用硬件支持,這是當(dāng)今大多數(shù)通用處理器提供的功能,盡管保護(hù)環(huán)的數(shù)量可能有所不同。例如,霍尼韋爾6180支持多達(dá)8個(gè)環(huán),英特爾的x86支持4個(gè),ARMv7支持3個(gè)(加上TrustZone的額外1個(gè))和PowerPC的2個(gè)。但是,故事變得有點(diǎn)混亂,因?yàn)橐恍┈F(xiàn)代處理器也引入了更多不同的處理器模式;大多數(shù)常規(guī)操作系統(tǒng)只使用2個(gè)環(huán):一個(gè)用于操作系統(tǒng),一個(gè)用于用戶進(jìn)程。

        每當(dāng)權(quán)限較低的代碼需要更多權(quán)限的函數(shù)時(shí),它就會(huì)“調(diào)用”下環(huán)以請(qǐng)求將此函數(shù)作為服務(wù)執(zhí)行。因此,只有受信任的特權(quán)代碼才能執(zhí)行最敏感的指令或操作最敏感的數(shù)據(jù)。除非具有較少權(quán)限的進(jìn)程誘騙更多特權(quán)的代碼執(zhí)行它不應(yīng)該做的事情(作為困惑的副手),否則環(huán)會(huì)提供強(qiáng)大的保護(hù)。Multics的最初想法是,環(huán)之間的轉(zhuǎn)換將通過(guò)實(shí)施嚴(yán)格控制和調(diào)解的特殊呼叫門(mén)進(jìn)行。例如,外環(huán)中的代碼不能調(diào)用內(nèi)環(huán)中的任何指令,而只能調(diào)用第一個(gè)調(diào)用的預(yù)定義入口點(diǎn)經(jīng)過(guò)審查,看它及其參數(shù)是否違反任何安全策略。

        雖然像x86這樣的處理器仍然支持呼叫門(mén),但很少有操作系統(tǒng)使用它們,因?yàn)樗鼈兿鄬?duì)較慢。相反,用戶進(jìn)程通過(guò)執(zhí)行操作系統(tǒng)處理的軟件中斷(陷阱),或更常見(jiàn)的是通過(guò)特殊的高效操作過(guò)渡到操作系統(tǒng)內(nèi)核(系統(tǒng)調(diào)用)。系統(tǒng)調(diào)用指令(如SYSCALL、SYSENTER、SVC、SCALL等,具體取決于體系結(jié)構(gòu))。許多操作系統(tǒng)將系統(tǒng)調(diào)用的參數(shù)放在一組預(yù)定義的寄存器中。與調(diào)用門(mén)一樣,陷阱和系統(tǒng)調(diào)用指令也確保在操作系統(tǒng)中的預(yù)定義地址繼續(xù)執(zhí)行,代碼在其中檢查參數(shù),然后調(diào)用相應(yīng)的系統(tǒng)調(diào)用函數(shù)。

        除了用戶進(jìn)程調(diào)用操作系統(tǒng)外,大多數(shù)操作系統(tǒng)還允許內(nèi)核調(diào)用用戶進(jìn)程。例如,基于UNIX的系統(tǒng)支持操作系統(tǒng)用來(lái)通知用戶程序“有趣的事情”的信號(hào):錯(cuò)誤、過(guò)期的計(jì)時(shí)器、中斷、來(lái)自另一個(gè)的消息工藝等,如果用戶進(jìn)程為信號(hào)注冊(cè)了一個(gè)處理程序,操作系統(tǒng)將停止進(jìn)程的當(dāng)前執(zhí)行,將其所有處理器狀態(tài)存儲(chǔ)在進(jìn)程堆棧上,形成所謂的信號(hào),并在信號(hào)處理程序上繼續(xù)執(zhí)行。當(dāng)信號(hào)處理程序返回時(shí),進(jìn)程執(zhí)行sigreturn系統(tǒng)調(diào)用,使操作系統(tǒng)接管,還原堆棧上的處理器狀態(tài)并繼續(xù)執(zhí)行進(jìn)程。

        安全域(如操作系統(tǒng)內(nèi)核和用戶空間進(jìn)程)之間的邊界是檢查系統(tǒng)調(diào)用本身及其安全性參數(shù)的好地方。例如,在基于功能的操作系統(tǒng)中,內(nèi)核將驗(yàn)證功能,而在MINIX3等操作系統(tǒng)中,只允許特定進(jìn)程進(jìn)行特定調(diào)用,因此任何嘗試撥打不在預(yù)先批準(zhǔn)列表中的呼叫將被標(biāo)記為違規(guī)。同樣,基于Windows和UNIX的操作系統(tǒng)必須檢查許多系統(tǒng)調(diào)用的參數(shù)。例如,考慮常見(jiàn)的讀寫(xiě)系統(tǒng)調(diào)用,通過(guò)這些調(diào)用,用戶請(qǐng)求將數(shù)據(jù)從文件或套接字讀取到緩沖區(qū)中,或者從緩沖區(qū)分別到文件或套接字中。在執(zhí)行此操作之前,操作系統(tǒng)應(yīng)檢查要寫(xiě)入或讀取的內(nèi)存是否實(shí)際歸進(jìn)程所有。

        執(zhí)行系統(tǒng)調(diào)用后,操作系統(tǒng)將控制權(quán)返回給進(jìn)程,操作系統(tǒng)還必須注意不要返回危及系統(tǒng)安全性的結(jié)果。例如,如果一個(gè)進(jìn)程使用mmap系統(tǒng)調(diào)用請(qǐng)求操作系統(tǒng)將更多內(nèi)存映射到其地址空間,則操作系統(tǒng)應(yīng)確保它返回的內(nèi)存頁(yè)不再包含來(lái)自另一個(gè)進(jìn)程的敏感數(shù)據(jù)(如首先將每個(gè)字節(jié)初始化為零)。

        零初始化問(wèn)題可能非常微妙,如編譯器經(jīng)常在數(shù)據(jù)結(jié)構(gòu)中引入填充字節(jié)以對(duì)齊。由于這些填充字節(jié)在編程語(yǔ)言級(jí)別根本不可見(jiàn),因此編譯器可能認(rèn)為沒(méi)有理由將它們初始化為零。但是,當(dāng)操作系統(tǒng)返回此類數(shù)據(jù)結(jié)構(gòu)以響應(yīng)系統(tǒng)調(diào)用并且單元化填充包含來(lái)自內(nèi)核或其他進(jìn)程的敏感數(shù)據(jù)時(shí),就會(huì)發(fā)生安全違規(guī)。

        即使是UNIX系統(tǒng)中的信令子系統(tǒng)也是一個(gè)有趣的安全案例?;叵胍幌?,sigreturn采用堆棧上的任何處理器狀態(tài)并恢復(fù)該狀態(tài)。假設(shè)攻擊者能夠破壞進(jìn)程的堆棧并在堆棧上存儲(chǔ)虛假信號(hào)幀,如果攻擊者能夠觸發(fā)sigreturn,或可以設(shè)置整個(gè)處理器狀態(tài)(包括所有寄存器值),這樣在熟練的攻擊者手中就提供了一個(gè)強(qiáng)大的基元,被稱為sigreturn導(dǎo)向編程(SROP)。

        如前所述,為此,添加了看起來(lái)像底部額外戒指的東西。由于在x86處理器上,術(shù)語(yǔ)ring0已成為“操作系統(tǒng)內(nèi)核”的同義詞(以及“環(huán)”與“用戶進(jìn)程”的同義詞),因此這種新的虛擬機(jī)管理程序環(huán)通常稱為ring-1。它還指示其各自虛擬機(jī)中的操作系統(tǒng)可以繼續(xù)在本地執(zhí)行環(huán)0指令。嚴(yán)格來(lái)說(shuō),它的目的與原始戒指大不相同,雖然環(huán)-1這個(gè)名字已經(jīng)卡住了,但它可能有點(diǎn)像用詞不當(dāng)。

        為了完整起見(jiàn),應(yīng)該提到的事情可能會(huì)變得更加復(fù)雜,因?yàn)橐恍┈F(xiàn)代處理器仍然具有其他模式。例如,x86提供所謂的系統(tǒng)管理模式(SMM)。當(dāng)系統(tǒng)啟動(dòng)時(shí),固件控制硬件,并為操作系統(tǒng)接管系統(tǒng)做好準(zhǔn)備。但是,啟用SMM后,固件會(huì)在向CPU發(fā)送特定中斷時(shí)重新獲得控制權(quán)。例如,固件可以指示每當(dāng)按下電源按鈕時(shí)它都希望接收中斷,在這種情況下,常規(guī)執(zhí)行將停止,固件將接管。例如,可以保存處理器狀態(tài),執(zhí)行任何需要執(zhí)行的操作,然后恢復(fù)操作系統(tǒng)以進(jìn)行有序關(guān)閉。在某種程度上,SMM有時(shí)被視為比其他環(huán)(環(huán)-2)低的水平。

        英特爾甚至以英特爾管理引擎(ME)的形式增加了環(huán)-3。ME是一個(gè)完全自主的系統(tǒng),現(xiàn)在幾乎存在于英特爾的所有芯片組中。它在單獨(dú)的微處理器上運(yùn)行一個(gè)秘密且完全獨(dú)立的固件,并且始終處于活動(dòng)狀態(tài):在啟動(dòng)過(guò)程中,當(dāng)機(jī)器運(yùn)行時(shí),當(dāng)它處于睡眠狀態(tài)時(shí),即斷電。只要計(jì)算機(jī)連接到電源,就可以通過(guò)網(wǎng)絡(luò)與ME通信,如安裝更新。雖然非常強(qiáng)大,但它的功能在很大程度上是未知的,除了運(yùn)行自己的小型操作系統(tǒng),研究人員發(fā)現(xiàn)其中包含漏洞。主CPU附帶的附加處理器(無(wú)論是ME還是Apple的T2和Google的Titan芯片等相關(guān)處理器)都提出了一個(gè)有趣的點(diǎn)———在主CPU上運(yùn)行的操作系統(tǒng)是否能夠滿足當(dāng)今的安全要求?至少,這種趨勢(shì)似乎通過(guò)專用系統(tǒng)(硬件和軟件)來(lái)增強(qiáng)它的安全性。

        低端設(shè)備和物聯(lián)網(wǎng)

        上述許多功能都可以在大多數(shù)通用處理器體系結(jié)構(gòu)中找到。然而,在物聯(lián)網(wǎng)或一般的嵌入式系統(tǒng)中不一定如此,并且通常使用定制的操作系統(tǒng)。簡(jiǎn)單的微控制器通常沒(méi)有MMU,有時(shí)甚至沒(méi)有MPU、保護(hù)環(huán)或在常見(jiàn)操作系統(tǒng)中依賴的任何高級(jí)功能。系統(tǒng)通常很?。p少攻擊面),應(yīng)用程序受信任(并可能經(jīng)過(guò)驗(yàn)證)。然而,設(shè)備的嵌入式性質(zhì)使其很難檢查甚至測(cè)試其安全性,并且無(wú)論它們?cè)诎踩舾谢顒?dòng)中發(fā)揮作用的何處,安全性隔離/遏制和調(diào)解的手段應(yīng)由環(huán)境在外部強(qiáng)制執(zhí)行。更廣泛的物聯(lián)網(wǎng)問(wèn)題在網(wǎng)絡(luò)物理系統(tǒng)安全CyBOK知識(shí)領(lǐng)域得到解決。

        猜你喜歡
        控制流堆棧內(nèi)核
        萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
        強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        抵御控制流分析的Python 程序混淆算法
        工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
        電子科技(2021年2期)2021-01-08 02:25:58
        抵御控制流分析的程序混淆算法
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
        Linux內(nèi)核mmap保護(hù)機(jī)制研究
        嵌入式軟件堆棧溢出的動(dòng)態(tài)檢測(cè)方案設(shè)計(jì)*
        基于堆棧自編碼降維的武器裝備體系效能預(yù)測(cè)
        基于控制流隱藏的代碼迷惑
        久久精品成人免费观看97| 免费人成在线观看播放视频| 一区二区三区四区草逼福利视频| 日本乱码一区二区三区在线观看| 丰满人妻一区二区三区蜜桃| 久久天堂av综合合色| 国产av无码专区亚洲awww| 久久精品国产亚洲vr| 精品91精品91精品国产片| 风流少妇一区二区三区91| 东风日产车是不是国产的| 午夜视频在线观看视频在线播放| 一色桃子中文字幕人妻熟女作品| 国产高清在线精品一区| 老色鬼永久精品网站| 中文字幕亚洲精品高清| 日韩精品成人区中文字幕| 精品日产卡一卡二卡国色天香 | 久久久精品国产sm调教网站| 国产高级黄区18勿进一区二区| 国产一区二区丰满熟女人妻| 国产高潮精品一区二区三区av | 国产精品嫩草影院av| 久久久精品电影| 亚洲国产一区二区,毛片| 亚洲男人免费视频网站| 日韩人妻熟女中文字幕a美景之屋 国产suv精品一区二区四 | 美女不带套日出白浆免费视频| 日韩国产成人无码av毛片蜜柚| 久久无码一二三四| 国产精品一区一区三区| 国产三级精品三级在线专区| 亚洲av成人精品日韩在线播放| 国产伦精品一区二区三区| 国产精品爆乳在线播放| 国产精品狼人久久久影院| 麻神在线观看免费观看| 亚洲va无码手机在线电影| 精品亚洲欧美高清不卡高清| 国产丝袜长腿在线看片网站| 一本久道高清视频在线观看|