簡(jiǎn)介
Rowhammer表明,基于非物理硬件的攻擊可能具有破壞性。在最近的一篇論文中,Cai等人提出,可以在基于MLC NAND閃存的SSD上執(zhí)行類(lèi)似的攻擊,并且具有潛在的破壞性。在本文中,我們將討論在SSD上成功地進(jìn)行全系統(tǒng)的本地權(quán)限提升的攻擊的要求,并展示基于文件系統(tǒng)的攻擊方法,我們將對(duì)此進(jìn)行演示。 特別地,我們展示了攻擊者可以通過(guò)使用單元與單元之間的干擾獲得攻擊原語(yǔ),因此需要在OS層進(jìn)行精心的設(shè)計(jì)。
前言
在開(kāi)發(fā)軟件時(shí),通常會(huì)抽象出硬件,并將諸如資源隔離等安全保護(hù)視為理所當(dāng)然。 簡(jiǎn)而言之,現(xiàn)代軟件編程幾乎不需要知道底層硬件的復(fù)雜性。
Rowhammer 把硬件的內(nèi)部運(yùn)作引入到我們的注意力中。 Rowhammer利用內(nèi)存管理更深層次的缺陷來(lái)破壞敏感的內(nèi)存區(qū)域。最近的工作表明,這樣一個(gè)非顯而易見(jiàn)的復(fù)雜漏洞可以被利用來(lái)通過(guò)Javascript注入錯(cuò)誤[8],實(shí)現(xiàn)手機(jī)上的權(quán)限升級(jí)[22]或者破壞共同托管的虛擬機(jī)。
但是,DRAM并不是唯一擁有敏感數(shù)據(jù)的地方,這些敏感數(shù)據(jù)對(duì)在軟件中實(shí)施正確的安全保護(hù)是必不可少的。通過(guò)文件系統(tǒng)組織的持久性存儲(chǔ),根據(jù)存儲(chǔ)在磁盤(pán)上的元數(shù)據(jù)授予對(duì)數(shù)據(jù)的訪問(wèn)權(quán)限。在現(xiàn)代計(jì)算機(jī)中,閃存已經(jīng)在很大程度上取代了旋轉(zhuǎn)磁盤(pán)作為主要的永久性存儲(chǔ)介質(zhì)。
Cai等人最近發(fā)表的論文中提出在固態(tài)硬盤(pán)上可能出現(xiàn)類(lèi)似rowhammer的攻擊,但不會(huì)出現(xiàn)實(shí)際的攻擊,我們從系統(tǒng)角度研究這類(lèi)攻擊SSD的可行性。 特別是,我們表明,在對(duì)閃存設(shè)備行為和文件系統(tǒng)使用的真實(shí)假設(shè)下,利用閃存弱點(diǎn)來(lái)升級(jí)本地權(quán)限是可能的(雖然很具有挑戰(zhàn)性)。 我們演示的攻擊不是”全系統(tǒng)”,因?yàn)槲覀儍H僅演示了文件系統(tǒng)層的攻擊,并假定底層閃存介質(zhì)的損壞是可能的。 但是,我們還描述了這種攻擊如何擴(kuò)展到全系統(tǒng)攻擊,我們打算在未來(lái)的工作中展示這種攻擊。
更準(zhǔn)確地說(shuō),我們利用對(duì)SSD(包括ECC)中現(xiàn)有可靠性機(jī)制的了解,證明攻擊者從MLC NAND閃存的缺陷中獲得的attack primitive是粗粒度的損壞:不像在rowhammer中,攻擊者可以翻轉(zhuǎn)單個(gè)bit,在這種攻擊的情況下,攻擊者只能破壞一個(gè)數(shù)據(jù)塊。然后我們證明,這個(gè)較弱的attack primitive(與翻轉(zhuǎn)單個(gè)位相比,這為攻擊者提供了更高級(jí)別的控制)足以導(dǎo)致提升本地權(quán)限的攻擊。
模型:我們假設(shè)被攻擊系統(tǒng)在基于MLC NAND閃存的SSD上運(yùn)行文件系統(tǒng),并假設(shè)攻擊者不具有特權(quán),即被攻擊系統(tǒng)的非root訪問(wèn)。該訪問(wèn)使攻擊者可以通過(guò)文件系統(tǒng)對(duì)系統(tǒng)存儲(chǔ)器進(jìn)行受控寫(xiě)入訪問(wèn)。一個(gè)典型的場(chǎng)景是非特權(quán)用戶(hù)的登錄shell。我們不討論對(duì)被攻擊統(tǒng)的物理訪問(wèn)。
貢獻(xiàn):本文的主要貢獻(xiàn)如下:
(1)我們首次詳細(xì)介紹了如何進(jìn)行完整系統(tǒng)地,基于閃存缺陷的、提升本地特權(quán)的攻擊。
(2)我們將此攻擊在文件系統(tǒng)級(jí)別進(jìn)行了實(shí)施并演示。
(3)我們討論了該攻擊的泛化和限制。
背景介紹
2.1基于硬件的攻擊
表1展示了基于硬件攻擊的分類(lèi)。首先,我們區(qū)分兩個(gè)主要類(lèi)別:物理和非物理攻擊。對(duì)于物理攻擊,需要直接訪問(wèn)系統(tǒng)的硬件。這種攻擊的例子是探測(cè)電壓電平或刮掉硅芯片上的鍍層來(lái)對(duì)其邏輯進(jìn)行逆向工程。少數(shù)相關(guān)的例子使用冷卻劑噴霧和冷啟動(dòng)來(lái)從系統(tǒng)的記憶庫(kù)中泄露敏感信息。另一方面,非物理攻擊仍然利用系統(tǒng)的硬件,但不需要直接訪問(wèn),因此可能更強(qiáng)大。例如,定時(shí)旁路攻擊可以針對(duì)云中的服務(wù)器遠(yuǎn)程執(zhí)行。
在正交層面上,我們區(qū)分危害系統(tǒng)機(jī)密性和完整性的攻擊。危害機(jī)密性的攻擊通常需要讀取原語(yǔ)來(lái)公開(kāi)敏感信息,例如高速緩存旁道攻擊中的關(guān)鍵材料。另一方面,對(duì)系統(tǒng)完整性的攻擊需要寫(xiě)入原語(yǔ)來(lái)主動(dòng)修改和破壞系統(tǒng)的各個(gè)方面以改變其行為。一個(gè)非常突出的例子是drammer [22],它使用rowhammer [10,19]內(nèi)存寫(xiě)入原語(yǔ)在Android上執(zhí)行特權(quán)升級(jí)攻擊 。
本文中顯示的攻擊屬于同一類(lèi)非物理硬件完整性攻擊。
2.2 閃存的缺陷
MLC NAND閃存表現(xiàn)出與介質(zhì)和器件特性相關(guān)的可靠性問(wèn)題。首先,MLC NAND Flash上的重復(fù)編程擦除(P / E)周期會(huì)加重器件的負(fù)載并逐漸使其可靠性變差[23]。其次,單元間干擾(CCI)是閃存頁(yè)面寫(xiě)入期間發(fā)生的另一個(gè)不利影響,并影響NAND器件的可靠性。由于存儲(chǔ)器陣列中相鄰單元之間的電容耦合[12],施加于當(dāng)前正在編程的頁(yè)面單元的編程電壓對(duì)相鄰頁(yè)面單元造成干擾。第三,由于只讀操作的反復(fù)執(zhí)行而導(dǎo)致的閾值電壓不穩(wěn)定,從而造成干擾,導(dǎo)致位錯(cuò)誤數(shù)量的顯著增加[21]。第四,最近的研究已經(jīng)表明,在部分編程的MLC NAND塊中,在頁(yè)面編程完成之前,會(huì)進(jìn)行大量的讀取,剩下的頁(yè)面的誤碼率會(huì)顯著增加[14]。
攻擊者可以利用CCI來(lái)更改被攻擊者閃存頁(yè)面中的信息。這可以通過(guò)使用對(duì)被攻擊的閃存頁(yè)面產(chǎn)生最大干擾的特殊數(shù)據(jù)模式對(duì)相鄰的被攻擊者頁(yè)面進(jìn)行編程來(lái)實(shí)現(xiàn)。由于CCI的性質(zhì),只有少數(shù)單元可以進(jìn)行狀態(tài)轉(zhuǎn)換。 具體而言,CCI可以導(dǎo)致單元狀態(tài)僅轉(zhuǎn)換到較大的閾值電壓。使用CCI,攻擊者可以寫(xiě)入具有最大干擾模式的攻擊閃存頁(yè),以概率的方式對(duì)相鄰受害者頁(yè)面的所有或不同字段的單元進(jìn)行不受控制的隨機(jī)修改。
2.3 閃存可靠性的方法
在閃存控制器級(jí)別,使用兩種機(jī)制來(lái)提高可靠性:擾碼和糾錯(cuò)碼(ECC)。由于某些位模式更可能導(dǎo)致錯(cuò)誤,因此數(shù)據(jù)不會(huì)按原樣寫(xiě)入,而是由擾碼器編碼以減少錯(cuò)誤的方式寫(xiě)入[20]。 通常情況下,數(shù)據(jù)可以通過(guò)與塊地址相關(guān)的位模式簡(jiǎn)單異或。關(guān)于ECC,寫(xiě)入閃存頁(yè)的數(shù)據(jù)被編碼:將冗余位添加到用戶(hù)數(shù)據(jù)中,以確保從閃存讀取的二進(jìn)制序列中存在的錯(cuò)誤可通過(guò)解碼進(jìn)行糾正。閃存存儲(chǔ)系統(tǒng)中使用的編碼字長(zhǎng)度通常在512B到2KB之間。雖然兩種使用最廣泛的編碼是Bose-Chaudhuri-Hocquenghem(BCH)編碼和低密度奇偶校驗(yàn)(LDPC)編碼,但編碼設(shè)計(jì)的確切細(xì)節(jié)是制造商決定的。
全系統(tǒng)攻擊
利用閃存缺陷的本地權(quán)限提升的全系統(tǒng)攻擊需要解決存儲(chǔ)層次結(jié)構(gòu)上不同層面的多重挑戰(zhàn)。即從最低層到最高層:
(1)閃存芯片:?jiǎn)卧g干擾。
(2)閃存控制器:擾碼器和ECC。
(3)SSD控制器:磨損均衡和塊放置算法。
(4)操作系統(tǒng):文件系統(tǒng)緩存和錯(cuò)誤檢測(cè)。
(5)用戶(hù):權(quán)限提升。
第1層是攻擊的基礎(chǔ)。正如第2節(jié)所述,以前的工作表明可以在具有特定訪問(wèn)模式的閃存頁(yè)中引起位翻轉(zhuǎn),特別是使用單元間干擾。
Flash社區(qū)早已知道并研究了NAND錯(cuò)誤,并且在SSD可靠性問(wèn)題的背景下,制造商設(shè)計(jì)了閃存和SSD控制器,以降低在實(shí)際使用中發(fā)生此類(lèi)錯(cuò)誤的概率。 實(shí)質(zhì)上,第2層和第3層旨在向操作系統(tǒng)提供沒(méi)有可靠性問(wèn)題的塊設(shè)備的抽象,并以存儲(chǔ)設(shè)備的尋址粒度完美隔離訪問(wèn)。通常在系統(tǒng)安全性方面,這種抽象可能顯示出漏洞。接下來(lái)我們解釋攻擊者可能從這個(gè)漏洞抽象中得到什么攻擊原語(yǔ)。
剩下的挑戰(zhàn)(第4層到第5層)主要在于找到一個(gè)基于文件系統(tǒng)的攻擊矢量,它利用了這個(gè)弱攻擊原語(yǔ),這是本文的主要貢獻(xiàn)。 這種攻擊的總體思路是破壞文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),并準(zhǔn)備新的文件系統(tǒng)并選擇結(jié)構(gòu),這可能導(dǎo)致權(quán)限的提升(在這種情況下,創(chuàng)建SUID根目錄的 shell二進(jìn)制文件)。
我們已經(jīng)探索了多種可能性,并在第4節(jié)中介紹了我們發(fā)現(xiàn)的最佳攻擊方案(就成功概率而言)。
3.1 Attack primitives
系統(tǒng)中ECC編碼/解碼的存在決定了攻擊者所期望的最好的情況是對(duì)flash頁(yè)面/塊的不受控制的隨機(jī)修改。為了理解這一點(diǎn),讓我們考慮一下不同的解碼方法,即通過(guò)將原始位錯(cuò)誤注入閃存頁(yè)面可能會(huì)導(dǎo)致攻擊行為。我們將假設(shè)用戶(hù)數(shù)據(jù)已經(jīng)使用BCH編碼進(jìn)行保護(hù),BCH編碼能夠利用它的碼字(C1)糾正t bit出錯(cuò)。T的值通常非常高(例如,t = 50)。 在引入錯(cuò)誤時(shí),可能會(huì)引發(fā)三種可能的事件:
(1)解碼成功。如果引入的錯(cuò)誤數(shù)小于或等于t,解碼一定成功。
(2)檢測(cè)到解碼失敗。如果注入錯(cuò)誤的數(shù)量嚴(yán)格大于t并且得到的二進(jìn)制向量不在另一個(gè)碼字的解碼半徑內(nèi),則會(huì)發(fā)生此情況。通常,讀取失敗將由系統(tǒng)報(bào)告,系統(tǒng)將處理該失敗操作。
(3)未檢測(cè)到解碼失敗。 當(dāng)注入錯(cuò)誤的數(shù)量嚴(yán)格大于t并且所得到的矢量落入另一個(gè)碼字(C2)的解碼半徑內(nèi)時(shí),會(huì)發(fā)生此情況。如果發(fā)生此情況,則不會(huì)報(bào)告讀取失敗并將損壞的數(shù)據(jù)返回給用戶(hù),就像讀取成功一樣。
圖1說(shuō)明了三種不同類(lèi)型的解碼事件。顯然,成功的攻擊只能利用未檢測(cè)到的解碼失敗的事件。因此,攻擊者必須注入足夠的錯(cuò)誤以將原始回讀模式推入不正確碼字的解碼半徑。 以這種方式,有可能導(dǎo)致真正的數(shù)據(jù)損壞,但是將這種損壞的模式控制到bit級(jí)是不可能的。可以誘發(fā)的損壞模式的集合由可通過(guò)經(jīng)由CCI機(jī)制或以其他方式翻轉(zhuǎn)寫(xiě)入模式中的比特而可達(dá)到的錯(cuò)誤代碼字的數(shù)量來(lái)確定。為了描述和總結(jié)這一點(diǎn),從最強(qiáng)到最弱的可能攻擊原語(yǔ)可能是:
(1)P1:在可控de 位置翻轉(zhuǎn)單個(gè)bit
(2)P2:在塊內(nèi)不可控制地翻轉(zhuǎn)單個(gè)bit
(3)P3:對(duì)塊進(jìn)行無(wú)控制的隨機(jī)修改(高位翻轉(zhuǎn),導(dǎo)致無(wú)法檢測(cè)的解碼失?。?/p>
(4)P4:損壞一個(gè)塊(讀取該塊時(shí)出錯(cuò))
對(duì)于DRAM的rowhammer 是可以實(shí)現(xiàn)P1或P2的,但,由于閃存具備強(qiáng)大的ECC保護(hù), P1和P2在這里不太可能實(shí)現(xiàn)。P4極不可能用于提升權(quán)限的攻擊。 我們將攻擊集中在P3上,這是唯一可能成功實(shí)現(xiàn)的攻擊。
在實(shí)施攻擊時(shí),F(xiàn)TL操作(如磨損均衡和垃圾回收(GC)引起的閃存頁(yè)面的寫(xiě)入)以及塊放置算法必須考慮在內(nèi)。傳統(tǒng)地,F(xiàn)TL執(zhí)行磨損均衡是試圖使所有的塊具有相同的P/E值[5]。由于磨損均衡通常是不經(jīng)常的操作,因此攻擊者可以通過(guò)多次重復(fù)攻擊來(lái)緩解磨損均衡對(duì)攻擊造成的潛在干擾。另一方面,F(xiàn)TL 的GC寫(xiě)入操作在穩(wěn)定的寫(xiě)入工作負(fù)載下可能是用戶(hù)寫(xiě)入數(shù)據(jù)的多倍[1,3],因此占總閃存頁(yè)寫(xiě)入的很大一部分。為了避免GC寫(xiě)入操作對(duì)攻擊造成干擾,攻擊者可以等待足夠的時(shí)間(通常為幾十秒),以便GC操作在攻擊開(kāi)始之前以及完成。這是可能成功的,因?yàn)镾SD通常在閑置時(shí)準(zhǔn)備大量空閑以維持用戶(hù)寫(xiě)入的突發(fā)。
為了在閃存芯片級(jí)別最大化并行性,SSD通常使用塊放置算法,其將到來(lái)的寫(xiě)入操作動(dòng)態(tài)地映射到不同的Flash芯片(例如,以循環(huán)方式)。 這些塊放置算法可以阻止攻擊者的攻擊,因?yàn)閷?xiě)入被攻擊頁(yè)面后立即發(fā)生攻擊頁(yè)面寫(xiě)入,可能不會(huì)發(fā)生在與被攻擊頁(yè)面相同的閃存塊中。為了緩解這一障礙,攻擊者應(yīng)該重復(fù)寫(xiě)入攻擊者頁(yè)面足夠多的時(shí)間,最終使其寫(xiě)入到與被攻擊者頁(yè)面相同的閃存塊中。
3.2 測(cè)試平臺(tái)
我們的測(cè)試平臺(tái),如圖2所示,包含:帶有FPGA和DRAM的PCIe閃存開(kāi)發(fā)板,通用CPU和MLC NAND閃存芯片。NAND閃存的編程,數(shù)據(jù)擾碼器和糾錯(cuò)碼(ECC)都在FPGA中完全實(shí)現(xiàn)。FTL運(yùn)行在FPGA和CPU上。開(kāi)發(fā)板連接到運(yùn)行RHEL 6.7的x86-64服務(wù)器上。我們可以完全控制在開(kāi)發(fā)板上運(yùn)行的硬件和軟件堆棧,以及與設(shè)備通信的Linux設(shè)備驅(qū)動(dòng)程序。
在我們的測(cè)試平臺(tái)中使用的MLC NAND芯片在可靠性方面的研究已經(jīng)在之前的工作中有介紹到[14,15,16]。在這項(xiàng)工作的背景下,測(cè)試平臺(tái)已被用于驗(yàn)證我們對(duì)MLC NAND閃存行為的理解
文件系統(tǒng)層攻擊
我們現(xiàn)在詳細(xì)描述攻擊中與文件系統(tǒng)相關(guān)的部分(第4層到第5層)。演示本地權(quán)限提升的視頻:https://www.youtube.com/watch?v=Mnzp1p9Nvw0。成功的攻擊需要滿足以下約束條件:
(1)R1:目標(biāo)塊的數(shù)據(jù)損壞應(yīng)該不會(huì)(或以很低的概率)導(dǎo)致致命的文件系統(tǒng)錯(cuò)誤,從而阻止攻擊并需要管理員干預(yù)。
(2)R2:攻擊目標(biāo)應(yīng)該是經(jīng)常寫(xiě)的塊(為了獲得更大的成功機(jī)會(huì))。理想情況下,寫(xiě)入應(yīng)該由攻擊者觸發(fā)。這是為了允許對(duì)攻擊的第1層到第3層的文件系統(tǒng)攻擊進(jìn)行計(jì)時(shí)。
(3)R3:目標(biāo)塊的數(shù)據(jù)損壞應(yīng)該具有足夠的可能性來(lái)創(chuàng)建可利用的條件。
(4)R4:新緩存應(yīng)該被刷新以強(qiáng)制操作系統(tǒng)訪問(wèn)閃存盤(pán)中的損壞數(shù)據(jù)。
4.1 環(huán)境搭建
我們使用ext3文件系統(tǒng)在Linux上實(shí)施了攻擊,并使用默認(rèn)的安裝選項(xiàng)進(jìn)行安裝。文件系統(tǒng)不需要是根文件系統(tǒng)。我們將在第5節(jié)討論這些假設(shè)在多大程度上可以放寬和推廣。
4.2 攻擊
考慮到攻擊的限制,我們選擇了indirect block作為被攻擊的塊。
ext3 的indirect block是一個(gè)包含數(shù)據(jù)塊指針的文件系統(tǒng)塊大小區(qū)域,每個(gè)大小為4個(gè)字節(jié)。 因此,在4K塊大小的文件系統(tǒng)中,indirect block包含1024個(gè)數(shù)據(jù)塊指針(數(shù)據(jù)塊包含文件內(nèi)容)。 一旦文件大小超過(guò)12個(gè)塊,就會(huì)(通過(guò)內(nèi)核文件系統(tǒng)驅(qū)動(dòng)程序)寫(xiě)入一個(gè)indirect block:因此這個(gè)寫(xiě)入非常容易為攻擊者提供提供觸發(fā)機(jī)會(huì)。
如果攻擊的較低層(第1層到第3層)成功,則indirect block被破壞,對(duì)于indirect block中的1024個(gè)數(shù)據(jù)指針中的每一個(gè),有三種可能的結(jié)果。
(1)32位數(shù)據(jù)指針可指向文件系統(tǒng)內(nèi)部的一個(gè)”interesting block”(例如,inode table,root ssh私鑰文件,root使用的重要二進(jìn)制文件):這是唯一可利用的條件。
(2)32位數(shù)據(jù)指針可指向文件系統(tǒng)內(nèi)的”uninteresting block “,例如已經(jīng)屬于攻擊用戶(hù)的文件中的數(shù)據(jù)塊。
(3)32位數(shù)據(jù)指針可指向文件系統(tǒng)外部的塊(即:塊號(hào)≥文件系統(tǒng)上的塊數(shù))。 在這種情況下,攻擊是不可利用的。 但是,幸運(yùn)的是,文件系統(tǒng)內(nèi)核驅(qū)動(dòng)程序只會(huì)為相應(yīng)的數(shù)據(jù)訪問(wèn)返回一個(gè)錯(cuò)誤:后續(xù)使用相同indirect block的訪問(wèn)仍然可以成功。 如果1024個(gè)損壞塊中的任何一個(gè)指向一個(gè)interesting block的塊,驅(qū)動(dòng)程序的這種行為對(duì)攻擊是有效的,這大大增加了攻擊的成功概率。
假設(shè)被損壞的指針指向一個(gè)inode表(可利用的條件)。 然后,攻擊者可以通過(guò)簡(jiǎn)單地寫(xiě)入攻擊文件(受攻擊者控制)來(lái)創(chuàng)建(或修改)一個(gè) root 用戶(hù)所有的inode。 然后,攻擊者將這個(gè)inode的數(shù)據(jù)塊指針指向一個(gè)shell的數(shù)據(jù)塊,最后通過(guò)執(zhí)行攻擊文件(現(xiàn)在是一個(gè)SUID-root shell,這需要SUID-root shell對(duì)應(yīng)的inod從緩存中刷新)來(lái)提升權(quán)限,如圖3所示。
我們已經(jīng)證明了R1是符合要求的,因?yàn)殡S機(jī)地破壞indirect block不會(huì)導(dǎo)致致命的錯(cuò)誤。 R2也是符合的,因?yàn)楣粽哂|發(fā)indirect block指針的寫(xiě)入(通過(guò)簡(jiǎn)單地向文件中寫(xiě)入足夠的字節(jié))。我們現(xiàn)在表明,R3約束(創(chuàng)造充分可利用的條件的概率)也得到了滿足。
單個(gè)數(shù)據(jù)指針指向interesting block的概率是p1:
并且任何1/4的塊大小的攻擊指針指向interesting block的概率是p2:
假設(shè)只有inode表對(duì)于攻擊者而言是”有趣的”,并且具有4 KB塊大小的100 GB文件系統(tǒng),每個(gè)inode(缺省值為/etc/mke2fs.conf)16384字節(jié)的inode比率為:
因此,假設(shè)攻擊者在indirect inode成功地使一個(gè)數(shù)據(jù)塊崩潰,權(quán)限提升攻擊將將有9%的概率會(huì)成功。 因此,我們認(rèn)為R3比較符合。
最后,我們展示緩存可以被攻擊者刷新(R4)。攻擊者需要在兩個(gè)不同的時(shí)間刷新緩存:為了覆蓋inode表內(nèi)容,并執(zhí)行新創(chuàng)建的SUID-root shell。在第一種情況下,應(yīng)從緩存中剔除出的緩存數(shù)據(jù)是indirect block,在第二種情況下,是inode。攻擊者自然可以采取兩種策略:被動(dòng)或主動(dòng)攻擊。被動(dòng)地,攻擊者可以等待文件系統(tǒng)被重新安裝(例如,在重新啟動(dòng)時(shí)),或者系統(tǒng)上的并發(fā)活動(dòng)導(dǎo)致足夠的內(nèi)存壓力,以從緩存中驅(qū)逐間接塊以及隨后的inode。主動(dòng)攻擊者觸發(fā)的路由包括創(chuàng)建內(nèi)存壓力:攻擊者只是使用程序分配足夠的內(nèi)存,從而鼓勵(lì)操作系統(tǒng)從緩存中逐出文件系統(tǒng)元數(shù)據(jù)。這是我們?cè)谘菔局胁捎玫姆椒ā?(這種方法的有效性可能會(huì)因VFS和頁(yè)面緩存設(shè)置的不同而不同,但在我們的攻擊中,RHEL 6.7的默認(rèn)設(shè)置是驅(qū)逐有效的)。
4.3 細(xì)節(jié)探索
我們現(xiàn)在討論在實(shí)際過(guò)程中出現(xiàn)的一些細(xì)節(jié),但不是攻擊的核心。
首先,從上面的描述可以看出,攻擊者需要知道一個(gè)root shell的數(shù)據(jù)塊號(hào)。 盡管可以通過(guò)從inode表讀取(通過(guò)被攻擊文件)并識(shí)別shell(例如通過(guò)時(shí)間戳或文件大?。﹣?lái)查找,但這是不太可能的,因?yàn)閕node表的可讀部分不太可能包含root shell。 一個(gè)更簡(jiǎn)單的替代方案是攻擊者首先通過(guò)在目標(biāo)文件中創(chuàng)建一個(gè)shell的副本,從而讓文件系統(tǒng)創(chuàng)建并設(shè)置數(shù)據(jù)塊指針,然后設(shè)置SUID位并通過(guò)直接寫(xiě)入inode table的方式使文件為root所有。
其次,攻擊者需要能夠識(shí)別破壞是否成功,即indirect block指針指向inode table的某處而不是其他地方。 實(shí)際上,由于inode表的結(jié)構(gòu),這很容易實(shí)現(xiàn)(例如,具有默認(rèn)權(quán)限的常規(guī)文件的標(biāo)記每256個(gè)字節(jié)重復(fù)一次)。
第三,攻擊者可以覆蓋現(xiàn)有的inode或?qū)⒁獎(jiǎng)?chuàng)建的文件的inode。 如果攻擊者對(duì)其可以創(chuàng)建的文件數(shù)量沒(méi)有限制(這通常是大多數(shù)Linux發(fā)行版的默認(rèn)設(shè)置),我們可以假設(shè)我們始終處于前一種情況。 然后,攻擊者不停創(chuàng)建文件,直到文件系統(tǒng)用完inode(所有inode表已滿),然后在文件系統(tǒng)中搜索(例如,使用find)一個(gè)SUIDroot文件并執(zhí)行它:這是在我們的演示中完成的一個(gè)攻擊方式。 在攻擊者可以創(chuàng)建的文件數(shù)量上有限制的情況下,雖然我們還沒(méi)有嘗試過(guò),攻擊仍然是可能的(通過(guò)刪除文件,等待inode重新分配給其他用戶(hù)并創(chuàng)建新文件,直到目標(biāo)inode被分配給攻擊者)。
最后,攻擊者可能無(wú)法通過(guò)文件系統(tǒng)訪問(wèn)現(xiàn)有的inode(例如,它位于攻擊者無(wú)法訪問(wèn)的子目錄中)。在實(shí)踐中,這僅僅意味著interesting block的數(shù)量低于等式3中計(jì)算的塊數(shù)。
4.4 Improved attack using double indirect blocks
針對(duì)double indirect block的破壞而非indirect block的破壞可以執(zhí)行非常類(lèi)似的攻擊。 盡管這種攻擊稍微難以解釋?zhuān)晒Φ目赡苄愿吆投腋`活(對(duì)整個(gè)文件系統(tǒng)具有完全的讀寫(xiě)能力:請(qǐng)注意,這仍然會(huì)通過(guò)創(chuàng)建SUID-root文件來(lái)提升權(quán)限)。
double indirect block中的每個(gè)4字節(jié)指針都指向一個(gè)indirect block。 因此,破壞double indirect block可能導(dǎo)致攻擊者完全控制indirect block的內(nèi)容。 通過(guò)選擇indirect block中的指針,攻擊者可以讀寫(xiě)文件系統(tǒng)中的任意位置。
這里的可利用條件是double indirect block中的一個(gè)指針指向攻擊者擁有的塊。 例如,攻擊者可以在文件系統(tǒng)上創(chuàng)建一個(gè)非常大的文件(跨越多個(gè)塊),以增加某個(gè)受損指針受到攻擊的可能性。 一旦發(fā)生破壞,攻擊者可以通過(guò)用文件系統(tǒng)超級(jí)塊的地址(固定塊號(hào)和可識(shí)別的格式)填充大文件來(lái)驗(yàn)證他們是否擁有indirect block。 然后,攻擊者可以通過(guò)讀寫(xiě)目標(biāo)文件來(lái)修改大文件的內(nèi)容以訪問(wèn)文件系統(tǒng)上的任何塊:通過(guò)寫(xiě)入大文件來(lái)控制寫(xiě)或讀訪問(wèn)的位置(控制indirect block內(nèi)容),通過(guò)訪問(wèn)目標(biāo)文件來(lái)控制訪問(wèn)內(nèi)容。
假設(shè)攻擊者可以在一個(gè)塊大小為4 KB的ext3文件系統(tǒng)中創(chuàng)建一個(gè)100 GB的文件(這是合理的假設(shè)),這種改進(jìn)使攻擊的成功概率為99.7%(通過(guò)使用公式2獲得)。 這是因?yàn)閕nteresting block的數(shù)量大大增加。
討論
5.1 其他文件系統(tǒng)
盡管第4節(jié)中描述的攻擊的很多部分可以被推廣,但仍然依賴(lài)于使用indirect block的文件系統(tǒng),如ext3,ext2和某些版本的Unix文件系統(tǒng)(UFS1)。ext4文件系統(tǒng)使用擴(kuò)展(還要NTFS),從本質(zhì)上將數(shù)據(jù)塊描述為一個(gè)元組(起始文件塊,起始磁盤(pán)塊,塊數(shù))。 盡管在ext4中可能有一個(gè)”extent block”(超過(guò)3個(gè)extents,ext4開(kāi)始在inode之外的新的塊中存儲(chǔ)extents,從而啟動(dòng)樹(shù)結(jié)構(gòu)),但我們相信攻擊的成功的概率會(huì)很低,因?yàn)閑xtents的結(jié)構(gòu)更大(即,ext4解析器不會(huì)捕獲到隨機(jī)破壞的可能性很小):ext4通常使用48位的塊編號(hào)空間,而不是ext3的32位)。 因此,這種攻擊對(duì)其他文件系統(tǒng)是否仍然可行還有待觀察。
5.2 元數(shù)據(jù)checksums
另外,某些文件系統(tǒng)(如ZFS和ext4(但不包括ext3))可以選擇使用元數(shù)據(jù)校驗(yàn)和。 顯然,文件系統(tǒng)元數(shù)據(jù)校驗(yàn)和,無(wú)論它們是否使用加密哈希,都可以通過(guò)內(nèi)核文件系統(tǒng)驅(qū)動(dòng)程序檢測(cè)到文件系統(tǒng)元數(shù)據(jù)(例如,inode或范圍)已被損壞從而顯著降低攻擊的成功概率。
最后,我們?cè)趇ndirect block損壞后運(yùn)行e2fsck(一種檢查(和更正)ext3文件系統(tǒng)元數(shù)據(jù)的工具)。如預(yù)期的那樣,e2fsck成功檢測(cè)到文件系統(tǒng)元數(shù)據(jù)已損壞,這將使得管理員檢測(cè)到此攻擊。 當(dāng)然,e2fsck很少運(yùn)行,為了阻止攻擊,它需要在攻擊者獲得root權(quán)限并能夠糾正文件系統(tǒng)元數(shù)據(jù)之前運(yùn)行。
5.3 其他攻擊
任何直接或間接訪問(wèn)SSD的程序(廣義上講)都可能成為在SSD上進(jìn)行的非物理的完整性攻擊的目標(biāo)。 在本文中,我們考慮了文件系統(tǒng),但其他攻擊媒介也可能存在。
不幸的是,由于攻擊者獲得的P3的限制以及攻擊的其他限制(R1至R4),我們無(wú)法找到另一個(gè)真實(shí)世界的很可能會(huì)被用于特權(quán)升級(jí)的程序。 然而,我們不能排除這種可能性的存在,需要在這方面進(jìn)行進(jìn)一步的研究。
最后,作為一個(gè)類(lèi)似于rowhammer 和Gruss [8]等人的工作。值得考慮的是本文中提出的攻擊是否也可以通過(guò)瀏覽器和javascript被遠(yuǎn)程利用。 由于瀏覽器確實(shí)允許通過(guò)Web內(nèi)容的本地緩存、Cookie或使用HTML5存儲(chǔ)API來(lái)對(duì)文件系統(tǒng)(盡管是間接的)進(jìn)行寫(xiě)入和讀取,因此將此處介紹的攻擊媒介擴(kuò)展到遠(yuǎn)程攻擊可能是可行的。
5.4 加密和完整性
磁盤(pán)加密(如dm-crypt)的使用應(yīng)該可以從根本上防止這里提出的攻擊。 更準(zhǔn)確地說(shuō),磁盤(pán)加密不會(huì)阻止攻擊在第4層到第5層進(jìn)行(因?yàn)楣粽哒诟采w將被操作系統(tǒng)透明加密/解密的元數(shù)據(jù))。但是,這將使得攻擊者不可能從第1層到第3層的缺陷來(lái)獲得P3。事實(shí)上,正如第3節(jié)所述,為了繞過(guò)ECC,擾碼器的組合和Flash頁(yè)面只能在在一個(gè)方向上編程的限制來(lái)獲取P3,攻擊者需要控制寫(xiě)入磁盤(pán)的數(shù)據(jù)。 但是,通過(guò)使用磁盤(pán)加密,攻擊者很難在不知道加密密鑰的情況下這樣做。
如前所述,元數(shù)據(jù)完整性會(huì)阻止我們提供的文件系統(tǒng)攻擊。我們注意到,除ZFS外,目前的文件系統(tǒng)加密解決方案由于性能方面的考慮,通常不會(huì)實(shí)現(xiàn)(加密的)文件內(nèi)容的完整性。
總結(jié)
在本文中,我們提出并解決了需要處理的問(wèn)題,以便利用現(xiàn)實(shí)世界場(chǎng)景中的閃存缺陷。 最重要的是,我們展示了基于閃存缺陷的利用場(chǎng)景,利用其破壞文件系統(tǒng)元數(shù)據(jù)的能力。結(jié)合這兩個(gè)方面形成了一個(gè)完整系統(tǒng)的攻擊方法,理論的成功率在實(shí)踐中是足夠合理的;
在未來(lái)的工作中,我們計(jì)劃解決克服ECC的步驟,以完成我們的全系統(tǒng)攻擊的實(shí)施。
-
閃存
+關(guān)注
關(guān)注
16文章
1778瀏覽量
114820 -
SSD
+關(guān)注
關(guān)注
20文章
2851瀏覽量
117253
原文標(biāo)題:怎樣攻擊固態(tài)硬盤(pán)并破壞系統(tǒng)
文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論