文/趙連瑩
保護(hù)待機(jī)狀態(tài)下的內(nèi)存數(shù)據(jù)
文/趙連瑩
留在計(jì)算機(jī)內(nèi)存中的敏感數(shù)據(jù),在系統(tǒng)處于待機(jī)狀態(tài)(ACPI S3)時(shí)極易通過(guò)旁路攻擊(side-channel attacks)被竊取。這類敏感數(shù)據(jù)包括但不限于全盤加密秘鑰(如TrueCrypt) 以及正在被查看的保密文件 (盡管它們?cè)诖疟P上已加密) 。當(dāng)計(jì)算機(jī)被偷盜或丟失以及機(jī)主被威脅時(shí),由于攻擊者得到幾乎不受限制的物理便利,他有條件利用系統(tǒng)DMA 漏洞直接訪問(wèn)內(nèi)存數(shù)據(jù)或者冷起動(dòng)內(nèi)存映像攻擊 (cold boot attack) 等旁路攻擊來(lái)竊取數(shù)據(jù)。
應(yīng)對(duì)這類威脅的一個(gè)挑戰(zhàn)是由于計(jì)算機(jī)不能直接運(yùn)行加密指令,系統(tǒng)內(nèi)存中無(wú)論待機(jī)中或系統(tǒng)蘇醒時(shí)敏感數(shù)據(jù)已經(jīng)明文存在,操作系統(tǒng)提供的重新鑒權(quán)保護(hù)無(wú)法奏效。一些解決方案選擇將秘鑰暫存在CPU寄存器等特殊位置以躲避攻擊,但一方面這種方案只能處理極少量的敏感數(shù)據(jù)(如只針對(duì)數(shù)個(gè)字節(jié)大小的加密秘鑰) ,另一方面在系統(tǒng)蘇醒時(shí)或者不對(duì)用戶重新鑒權(quán) (被攻擊者直接獲取) 或者鑒權(quán)受限于用戶密碼的有限的entropy (可被字典攻擊)。另一些產(chǎn)品如BitLocker雖然可以解決這個(gè)問(wèn)題但是是通過(guò)強(qiáng)制計(jì)算機(jī)進(jìn)入休眠狀態(tài) (hibernation, 即ACPI S4) 來(lái)實(shí)現(xiàn),由于硬盤性能的瓶頸嚴(yán)重影響可用性,即使SSD通常也要接近十秒左右。
鑒于待機(jī)狀態(tài)的普遍性,我們提出data-in-sleep的概念,來(lái)區(qū)分于data-atrest,data-in-transit以及data-in-use等已經(jīng)被廣泛關(guān)注的問(wèn)題。我們解決data-insleep問(wèn)題的兩個(gè)原則是:一是在整個(gè)待機(jī)期間沒(méi)有敏感數(shù)據(jù)以明文形式暴露于內(nèi)存中;二是當(dāng)系統(tǒng)蘇醒時(shí)對(duì)用戶的重新鑒權(quán)必須可以承受字典攻擊且不可繞開(kāi)。
基于這兩個(gè)原則,我們?cè)O(shè)計(jì)并實(shí)現(xiàn)了Hypnoguard,以保護(hù)data-in-sleep為目的的工具。它利用現(xiàn)代CPU的AES-NI硬件加速指令集、多核并行處理以及合適的AES工作模式,在進(jìn)入待機(jī)前實(shí)現(xiàn)高速的完全內(nèi)存加密 (對(duì)于8GB內(nèi)存加密或解密只需要一秒左右) 。而在系統(tǒng)蘇醒時(shí),我們整合CPU的可信計(jì)算運(yùn)行環(huán)境(如Intel TXT)和TPM安全芯片來(lái)達(dá)到綁定系統(tǒng)硬件平臺(tái)的用戶重鑒權(quán)。Hypnoguard的核心特性即這種不可繞開(kāi)的系統(tǒng)硬件平臺(tái)綁定:正確的軟硬件運(yùn)行環(huán)境決定正確的秘鑰被釋放(而不是完全取決于相對(duì)較弱的用戶密碼),錯(cuò)誤的環(huán)境(即繞開(kāi)Hypnoguard)無(wú)論密碼猜測(cè)正確與否都無(wú)法得到正確秘鑰。
在系統(tǒng)部署時(shí),一對(duì)公鑰和私鑰被生成(足夠的長(zhǎng)度),其中公鑰被明文保存在公共區(qū)域。而私鑰直接被封存(Seal)在TPM的NVRAM中,綁定于正確的Hypnoguard運(yùn)行環(huán)境以及用戶密碼。每次待機(jī)前,一個(gè)足夠強(qiáng)的隨機(jī)對(duì)稱秘鑰(如128bit以上,只一次性使用) 被用來(lái)加密整個(gè)內(nèi)存。而后此對(duì)稱秘鑰立即被上述公鑰加密存放于公共區(qū)域。系統(tǒng)進(jìn)入待機(jī)。
至此,整個(gè)系統(tǒng)內(nèi)存為加密狀態(tài),攻擊者無(wú)法直接竊取。由于我們選擇的秘鑰長(zhǎng)度適當(dāng)(和用戶的密碼強(qiáng)度無(wú)關(guān)),繞過(guò)Hypnoguard進(jìn)行字典攻擊通常是不現(xiàn)實(shí)的。如果他進(jìn)入正確的Hypnoguard環(huán)境,雖然此時(shí)的保護(hù)只取決于用戶密碼,但猜測(cè)密碼會(huì)以很高概率觸發(fā)對(duì)TPM中的私鑰的永久性刪除。我們可以配置特定的策略(如錯(cuò)誤次數(shù)) 來(lái)決定對(duì)刪除秘鑰的觸發(fā);也可以設(shè)置一定范圍的密碼為刪除密碼 (deletion passwords) ,既可用于提高攻擊者觸發(fā)刪除的概率也可用于用戶在被脅迫時(shí)提供給攻擊者。
在系統(tǒng)從待機(jī)狀態(tài)恢復(fù)時(shí),Hypnoguard進(jìn)入TXT環(huán)境,并提示用戶輸入密碼。此密碼和當(dāng)前正確的軟硬件環(huán)境一起用于釋放上述私鑰。私鑰解密對(duì)稱秘鑰后立即被從臨時(shí)內(nèi)存中刪除。隨即,對(duì)稱秘鑰解密整個(gè)內(nèi)存并將控制權(quán)交回操作系統(tǒng)。恢復(fù)時(shí)的用戶密碼輸入可以取代操作系統(tǒng)的用戶密碼輸入來(lái)完全保持現(xiàn)有的用戶體驗(yàn):待機(jī)時(shí)無(wú)需密碼,喚醒時(shí)輸入一次。這種優(yōu)勢(shì)得益于公鑰系統(tǒng)的引入,即進(jìn)入待機(jī)時(shí)無(wú)需密碼和TXT環(huán)境釋放秘鑰 (使用公鑰即可),而只在喚醒時(shí)需要。
在此項(xiàng)目中,我們開(kāi)創(chuàng)性地解決了一些技術(shù)問(wèn)題,如系統(tǒng)喚醒狀態(tài)下的顯示和輸入(一直存在但未被解決的問(wèn)題);同時(shí)也依據(jù)Hypnoguard的特定需求提出了改進(jìn)版的AES GCM解密過(guò)程。
(責(zé)編:楊潔)
現(xiàn)就讀于Concordia University (加拿大) 。畢業(yè)于天津大學(xué)并獲得通信與信息系統(tǒng)碩士學(xué)位。此前的工作領(lǐng)域包括嵌入式系統(tǒng)軟硬件以及大型主機(jī)(Mainframes),在業(yè)內(nèi)從事相關(guān)工作6年 (IBM China) 。當(dāng)前主要研究方向?yàn)樾畔⑾到y(tǒng)安全,包括硬件/系統(tǒng)相關(guān)的安全問(wèn)題,基于密碼的鑒權(quán),可信計(jì)算等。并發(fā)表多篇文章于ACM CCS, NDSS, NSPW以及IEEE TIFS。
論文鏈接: Hypnoguard: Protecting Secrets across Sleep-wake Cycles
http://dl.acm.org/citation.cfm?id=2978372