文/趙連瑩
非法數(shù)據(jù)篡改是多年以來(lái)困擾用戶的問(wèn)題,從單純的惡意刪除和破壞到近年引起公眾關(guān)注的勒索軟件(Ransomware)。不同于操作系統(tǒng)和應(yīng)用軟件,用戶數(shù)據(jù)常常具有非金錢可衡量的價(jià)值或不可重現(xiàn)性?,F(xiàn)有的相關(guān)應(yīng)對(duì)技術(shù)(主要針對(duì)勒索軟件)大多基于已知惡意程序的特性,如二進(jìn)制特征或行為規(guī)律,無(wú)法第一時(shí)間應(yīng)對(duì)非已知惡意程序。更重要的是,這些技術(shù)幾乎都需要操作系統(tǒng)是可靠的,而可以破壞操作系統(tǒng)的惡意程序(如Rootkit)沒有被考慮進(jìn)去。
我們提出將防御重點(diǎn)從檢測(cè)或消除此類惡意程序轉(zhuǎn)移到直接數(shù)據(jù)保護(hù)上,從而做到和惡意程序種類或版本無(wú)關(guān)。可信計(jì)算環(huán)境(TEE)是多數(shù)當(dāng)代處理器都具有的安全特性,我們同時(shí)結(jié)合某些存儲(chǔ)設(shè)備也具有的類似安全特性,設(shè)計(jì)并實(shí)現(xiàn)了一種可編程的數(shù)據(jù)寫保護(hù)工具,Inuksuk?;驹硎牵簩⒂脩糁付ǖ氖鼙Wo(hù)文件通過(guò)存儲(chǔ)設(shè)備TEE 置于常態(tài)寫保護(hù)模式,而用戶程序日常的寫入操作產(chǎn)生的數(shù)據(jù)則通過(guò)處理器TEE 環(huán)境以新版本的形式寫入存儲(chǔ)設(shè)備。
高權(quán)限惡意程序的特點(diǎn)是可以侵染計(jì)算機(jī)上的任何軟件。因此這里需要的寫保護(hù)不能依賴包括操作系統(tǒng)在內(nèi)的軟件來(lái)實(shí)現(xiàn)。SED(Self-Encrypting Drive)可以看做普通的硬盤(機(jī)械或SSD)和一個(gè)特殊硬件加解密引擎的整合產(chǎn)品。它可以內(nèi)部設(shè)置一個(gè)密鑰,所有進(jìn)入硬盤的數(shù)據(jù)都被實(shí)時(shí)加密,同時(shí)離開到主機(jī)的數(shù)據(jù)被解密;此密鑰不會(huì)暴露到這個(gè)加密引擎之外。它還可以對(duì)指定區(qū)域的數(shù)據(jù)實(shí)施密碼保護(hù)的訪問(wèn)控制,比如沒有密碼的情況下只能讀或者無(wú)法訪問(wèn)。Inuksuk 主要依靠這種訪問(wèn)控制來(lái)實(shí)現(xiàn)只讀(寫保護(hù))。
那么此密碼的存儲(chǔ)便成為關(guān)鍵:如果由軟件保護(hù),高權(quán)限惡意程序便可借由篡改軟件獲取密碼來(lái)實(shí)現(xiàn)訪問(wèn)被保護(hù)的文件(如對(duì)他們加密并索要贖金)。TEE 通??梢詫⒅付〝?shù)據(jù)(如此處的密碼)以密碼學(xué)的方式“封存”,即:只有預(yù)設(shè)的程序被加載時(shí)才能解密數(shù)據(jù),即使預(yù)設(shè)程序只有一個(gè)比特被篡改,密碼也無(wú)法被取出。此預(yù)設(shè)程序即Inuksuk。至此,由SED 實(shí)施硬件級(jí)別的寫保護(hù),由主機(jī)TEE 負(fù)責(zé)保護(hù)SED的密碼。用戶無(wú)需記住任何密碼。整個(gè)Inuksuk 構(gòu)架如圖1 所示。
圖1 Inuksuk 架構(gòu)
由于主機(jī)TEE 需要和SED 進(jìn)行可信的I/O 操作,故我們選用具有系統(tǒng)權(quán)限的Intel TXT 或AMD SVM。密碼被封存在TPM 芯片中。
我們的保護(hù)目標(biāo)是從Inuksuk 安裝起已經(jīng)存在的被保護(hù)數(shù)據(jù)的完整性(由寫保護(hù)實(shí)現(xiàn))以及對(duì)后續(xù)修改以多版本形式保存(由TEE 內(nèi)預(yù)定邏輯實(shí)現(xiàn))。這樣,一旦用戶發(fā)現(xiàn)被勒索軟件感染,在SED 上有之前的文件歷史可以直接將SED 盤裝載到其他電腦讀出。如果高權(quán)限惡意程序嘗試直接在TEE 外修改被保護(hù)文件,操作將被SED 硬件忽略(沒有密碼)。為了保證用戶程序的操作不受影響,Inuksuk 的實(shí)現(xiàn)將原始被保護(hù)文件留在原處(供讀寫)而在SED 上生成一個(gè)備份。Inuksuk 的Updater 按照用戶配置在特定時(shí)間比較原始文件相對(duì)于SED上文件的修改,在TEE 內(nèi)將修改以新版本形式寫入SED。
隨著時(shí)間的推移SED 的空間會(huì)減少,我們利用配置好的自動(dòng)版本刪除來(lái)釋放空間,如只保留一年以內(nèi)的版本。如果用戶需要?jiǎng)h除文件(而不是版本),我們?cè)赥EE 內(nèi)開發(fā)了一個(gè)簡(jiǎn)易的Browser,供用戶批量選擇并刪除任意文件,如圖2 所示。
圖2 簡(jiǎn)易Browser
值得一提的是,TXT/SVM (TEE)的運(yùn)行會(huì)覆蓋當(dāng)前操作系統(tǒng)的狀態(tài),我們使用Flicker 在操作系統(tǒng)和TEE 之間切換。Flicker 只支持32-bit 的Windows 7,我們將Flicker 移植到目前常用的Windows 10 64-bit,使得它在其他場(chǎng)景下的應(yīng)用(多為64-bit 系統(tǒng))成為可能。