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