滲透測試中的冷卻啟動攻擊和其他取證技術(shù)
這是一個(gè)星期四的晚上,快樂時(shí)光即將開始。你會盡快走出辦公室。你整天都忙于準(zhǔn)備一份報(bào)告,第二天早上還需繼續(xù),因此你將電腦鎖屏。這足夠安全,是嗎?因?yàn)槟闶褂昧烁邚?qiáng)度密碼,并全盤加密,Ophcrack或者可引導(dǎo)的linux發(fā)行版例如kali不起作用。你自認(rèn)為安全了,其實(shí)你錯(cuò)了。為了得到重要材料,攻擊者越來越無所不用其極,這包括使用取證領(lǐng)域的最新技術(shù)。
計(jì)算機(jī)中存在一個(gè)單獨(dú)的區(qū)塊:活動內(nèi)存,任何一個(gè)攻擊者都愿意把手伸到這個(gè)存儲有敏感信息完全未加密的區(qū)塊。系統(tǒng)為了方便調(diào)用,在內(nèi)存中存儲了多種有價(jià)值信息;全盤加密機(jī)制也必須在內(nèi)存的某個(gè)地方存儲密鑰。同樣,Wi-fi密鑰也是如此存儲的。Windows在內(nèi)存中存有注冊表鍵值,系統(tǒng)和SAM hive。許多剪貼板內(nèi)容和應(yīng)用程序密碼也在存儲于內(nèi)存中。即問題在于,內(nèi)存存儲了系統(tǒng)在某時(shí)刻需要的大量有價(jià)值信息。攻擊者要獲得它,需要使用一些同樣的取證技術(shù)。本文有助于向滲透測試工具包中增加這些技術(shù)。
設(shè)置環(huán)境
信息轉(zhuǎn)儲可以很容易的構(gòu)建系統(tǒng)全貌。近年來,內(nèi)存捕獲價(jià)值已經(jīng)得到取證專家的高度重視,但卻并未獲得滲透測試人員的足夠重視。這有眾多原因。取證調(diào)查人員使用專業(yè)軟件捕獲內(nèi)存,同時(shí)記錄進(jìn)設(shè)備中。他們使用這些捕獲信息,尋找惡意軟件或隱藏進(jìn)程。滲透測試人員將會對哈希值、文件、運(yùn)行進(jìn)程更感興趣。如果已經(jīng)擁有系統(tǒng)的訪問權(quán)限,他們很大可能不再需要內(nèi)存捕獲來得到這些信息。
但是,在一些情境下,內(nèi)存捕獲對滲透測試人員作用極大。設(shè)想如下場景:在一個(gè)內(nèi)部行動中,測試人員獲得了接觸機(jī)器的權(quán)限。客戶滿信心認(rèn)為測試人員不可能利用這些機(jī)器獲得對系統(tǒng)的訪問。這些機(jī)器使用了全盤加密,擁有阻止從Ophcrack和下載hash的功能。運(yùn)行中的機(jī)器全部處于鎖定狀態(tài)。客戶不知道的是,測試人員擁有豐富的技術(shù)經(jīng)驗(yàn),能夠抓取運(yùn)行系統(tǒng)內(nèi)存中的內(nèi)容。需要強(qiáng)調(diào)的是有兩種技術(shù)可以用于這樣的情景:冷啟動攻擊和火線接口攻擊。
冷啟動攻擊
2008年年初,普林斯頓大學(xué)電子前沿基金會和溫瑞爾系統(tǒng)公司的研究人員聯(lián)合發(fā)表了一篇題為《鮮為人知的秘密:對密鑰的冷啟動攻擊》的文章,該文詳解了從運(yùn)行系統(tǒng)獲取內(nèi)存信息的一種新型攻擊方式。該類攻擊基于數(shù)據(jù)遺留。人們的普遍看法是機(jī)器一旦斷電,內(nèi)存中的數(shù)據(jù)就會立刻丟失;即按開電源開關(guān),所有數(shù)據(jù)在剎那間消失。
然而,研究人員指出真相并非如此。事實(shí)上,數(shù)據(jù)從內(nèi)存中丟失需要一定的時(shí)間。斷開一臺機(jī)器的電源一到兩秒,大部分?jǐn)?shù)據(jù)會完好無損。該效果可通過冷卻內(nèi)存延長。研究人員借助一種老式社交游戲,倒置一灌壓縮空氣,做了測試。冷卻內(nèi)存確實(shí)可以使數(shù)據(jù)保持很多秒,甚至好幾分鐘。這促使研究人員開發(fā)一系列工具,用來從即將關(guān)閉電源的機(jī)器內(nèi)存中提取信息,然后再次啟動系統(tǒng)。
使用這種方法捕獲內(nèi)存,存在小錯(cuò)誤的幾率會相對較高,這就是它被取證組織大量摒棄的原因。但是,滲透測試人員并不需要內(nèi)存的法律上的取證鏡像。如果密鑰或SAM數(shù)據(jù)庫完好無損,即使內(nèi)存有2%的破壞也是可以接受的。即使有點(diǎn)難,這種方法對內(nèi)部滲透測試人員來說,也是一個(gè)合適的攻擊向量。
The Lest We Remember團(tuán)隊(duì)創(chuàng)造了大量用于攻擊的工具,可以在普林斯頓網(wǎng)站https://citp.princeton.edu/research/memory/code/下載到。主要工具是一個(gè)USB/PXE鏡像工具,可以下載到源碼。研究團(tuán)隊(duì)制作了許多makefiles文件使編譯更容易,他們也在源碼中打包了優(yōu)秀的文檔。32位的提取器應(yīng)該在32位虛擬機(jī)或32位物理機(jī)器上編譯,64位的提取器同樣需要在64位虛擬機(jī)或物理機(jī)器上編譯。需要為目標(biāo)機(jī)器使用合適的提取器,如果32位提取器在64位機(jī)器上使用,它將不能抓取全部的內(nèi)存空間,因?yàn)?2位提取器不能完全訪問到64位的內(nèi)存地址空間。
Makefile編譯的結(jié)果是一個(gè)命名為scraper.bin的文件,其實(shí)是一個(gè)可以拷貝到USB設(shè)備的可引導(dǎo)啟動的鏡像工具。該USB同時(shí)需要用于存儲內(nèi)存鏡像,建議使用大存儲量的USB設(shè)備;因?yàn)楫?dāng)前主流系統(tǒng)使用4G到8G的內(nèi)存,所以建議使用至少16GB容量的USB設(shè)備。以root用戶權(quán)限,使用dd工具把scraper文件拷貝到USB設(shè)備,命令中sdb是硬盤驅(qū)動器的掛載點(diǎn):
sudo dd if=scraper.bin of=/dev/sdb
這個(gè)時(shí)候,為目標(biāo)系統(tǒng)準(zhǔn)備好USB設(shè)備。理想情況下,滲透測試人員準(zhǔn)備好一個(gè)32位的8G和一個(gè)64位的16G可以在內(nèi)部環(huán)境使用的USB設(shè)備,同時(shí)備好一罐壓縮空氣。目標(biāo)機(jī)器必須是一個(gè)運(yùn)行中,且鎖定的系統(tǒng),有無用戶登錄無關(guān)緊要。同時(shí),目標(biāo)必須被全盤加密,否則啟動Kali或Ophcrack,只需少量工作,就可以獲得出色效果。
一旦合適的目標(biāo)被定位后,滲透測試人員(從客戶處獲得了適當(dāng)?shù)氖跈?quán))應(yīng)該打開機(jī)箱,露出內(nèi)存。同時(shí),他們需要插入U(xiǎn)SB設(shè)備。一切準(zhǔn)備就緒后,滲透測試人員可以倒置灌裝壓縮空氣并噴射覆蓋,以冷卻內(nèi)存。由于這會導(dǎo)致在芯片上成霜,小心使用軟管澆內(nèi)存,不要碰到主板其他部分。圖1顯示了已經(jīng)被冷凍用于攻擊的筆記本內(nèi)存。

圖1 為冷啟動攻擊冷卻內(nèi)存
內(nèi)存冷卻足夠后,滲透測試人員需要盡可能快地切斷并恢復(fù)供電。在桌面計(jì)算機(jī)上,這相對簡單,按reset電源鍵就可實(shí)現(xiàn)。但是大部分的筆記本并沒有reset按鍵,進(jìn)行這樣快速的重置電源操作本質(zhì)上很困難。最好的辦法是快速替換電池,并按電源鍵。上述兩種機(jī)器環(huán)境,越是快速恢復(fù)供電,內(nèi)存鏡像就越完好。
當(dāng)滲透測試人員從USB啟動機(jī)器,scraper工具會自動復(fù)制內(nèi)存鏡像至USB設(shè)備。圖2的屏幕截圖顯示了scraper工具在工作。

圖2 Scraper工具
根據(jù)內(nèi)存大小和USB端口速率,捕獲過程需要一會兒,對大容量內(nèi)存則需要數(shù)小時(shí)。Scraper程序完全復(fù)制內(nèi)存后,它將立即重新啟動系統(tǒng)。滲透測試人員只需移除USB設(shè)備并插回編譯scraper的機(jī)器。在源碼中有一個(gè)叫做USBdump的工具,它只是簡單地使用如下命令:
sudo ./usbdump /dev/sdb > memdump.img
把USB設(shè)備上的每個(gè)字節(jié)拷貝至滲透測試人員的機(jī)器。再次,根據(jù)內(nèi)存捕獲鏡像的大小,這可能需要數(shù)小時(shí)。最終結(jié)果是內(nèi)存鏡像的完全拷貝文件,包含目標(biāo)機(jī)器的一個(gè)字節(jié)一個(gè)字節(jié)的捕獲鏡像,同時(shí)有望使錯(cuò)誤最少。
火線接口攻擊
電氣和電子工程師協(xié)會的1394接口,是初始設(shè)計(jì)用于取代SCSI的一個(gè)高速通信接口,更因?yàn)樘O果公司以火線命名實(shí)現(xiàn)而知名。火線的主要部分是它的高速數(shù)據(jù)傳輸速率,這也是它大量應(yīng)用于音視頻傳輸?shù)脑颉;鹁€接口高速率的一個(gè)主要特征是,它可以完全繞過CPU,通過直接內(nèi)存訪問DMA的方式訪問內(nèi)存。這對從相機(jī)下載數(shù)小時(shí)連續(xù)鏡頭的視頻編輯者來說是一個(gè)好消息,對于滲透測試人員同樣如此。
火線接口的直接內(nèi)存訪問使具有目標(biāo)機(jī)器物理接觸能力的滲透測試人員,可以通過重寫包含訪問控制功能的內(nèi)存部分,繞過操作系統(tǒng)的密碼保護(hù)機(jī)制。DMA同樣可以讓滲透測試人員下載小于4GB內(nèi)存鏡像。即使火線接口僅能訪問少于4GB的內(nèi)存且能使用反病毒軟件保護(hù)DMA,這類型的訪問還是揭示了IEEE1394標(biāo)準(zhǔn)中重大的安全缺陷。由于火線接口的熱插拔功能,即使目標(biāo)機(jī)器在鎖定情況下,攻擊同樣能夠進(jìn)行。此外,雖然大部分操作系統(tǒng)試圖對知名火線接口設(shè)備如iPods進(jìn)行DMA授權(quán)限制,但是欺騙設(shè)備很容易。
由于攻擊主要針對火線接口,對同一總線下的任何設(shè)備同樣有效;這些包括ExpressCard,PC Card和所有蘋果新產(chǎn)品都可以使用的雷電端口。
Carsten Maartmann-Moe已經(jīng)開發(fā)了一個(gè)叫做Inception的工具,可以輕松利用火線接口。該工具可在http://www.breaknenter.org/projects/inception/找到。Inception必須從一個(gè)Linux桌面運(yùn)行。這種情況下,Linux系統(tǒng)不能是一個(gè)虛擬機(jī),因?yàn)樘摂M機(jī)不能實(shí)現(xiàn)火線接口傳輸(出于安全原因)。另外,滲透測試人員需要Python3和Freddie Witherden的1394包。最后,攻擊和目標(biāo)機(jī)器都需要具備一個(gè)火線接口,EC,雷電或者PC card接口。
Inception安裝準(zhǔn)備就緒后,滲透測試人員僅需通過一個(gè)火線接口電纜,簡單的連接攻擊和目標(biāo)機(jī)器,并在root權(quán)限模式下運(yùn)行命令
incept
Incept將會訪問內(nèi)存中負(fù)責(zé)訪問控制的部分并“修補(bǔ)”它們,使我們可以無密碼訪問機(jī)器。當(dāng)然,目標(biāo)機(jī)器內(nèi)存含有豐富的信息,滲透測試人員可以使用
incept –d
命令轉(zhuǎn)儲小于4GB的內(nèi)存鏡像。
內(nèi)存轉(zhuǎn)儲分析
轉(zhuǎn)儲內(nèi)存鏡像是一會事,分析數(shù)據(jù)則是一個(gè)更難的阻礙。幸運(yùn)地是,一系列專注于此目的的工具可以獲得。在思路上,很少工具是設(shè)計(jì)用于滲透測試的。許多是取證分析工具用于尋找運(yùn)行的進(jìn)程,惡意軟件和隱藏的數(shù)據(jù)。內(nèi)存取證仍然是一個(gè)相對嶄新的領(lǐng)域,尤其是64位環(huán)境下的分析。許多出色的工具仍然局限于法律取證使用。這就是說,大量可執(zhí)行的任務(wù)可以向客戶揭示風(fēng)險(xiǎn)。
Lest We Remember團(tuán)隊(duì)也創(chuàng)建了一個(gè)分析工具,用于捕獲內(nèi)存鏡像。他們論文的主題是密鑰可以從內(nèi)存中恢復(fù);他們的工具命名為AESKeyFind,用于在捕獲的內(nèi)存鏡像中搜索AES密鑰次序表并恢復(fù)密鑰。該工具可從下載Scraper程序的同一站點(diǎn)下載。最后,該工具攜帶一個(gè)易于編譯的makefile文件。該工具編譯后,可以用命令
./aeskeyfind –v memoryimage.raw
運(yùn)行,在內(nèi)存鏡像文件中執(zhí)行搜索AES密鑰并在顯示屏上打印它們。AESKeyFind將搜索128位和256位的密鑰,即使鏡像不完全或存在錯(cuò)誤,該工具也可能恢復(fù)密鑰。例如,圖3顯示了從一個(gè)包含大量錯(cuò)誤的鏡像文件中恢復(fù)AES密鑰。

圖3 在破損內(nèi)存鏡像中找打AES密鑰
這些AES密鑰序列可以被大量不同的應(yīng)用使用。它們可能是用于全盤加密,VPN,無線網(wǎng)絡(luò)的主要密鑰。如果它們被恢復(fù),接下來的步驟就是破譯。
另一個(gè)有用的工具是Volatility,一個(gè)開源的內(nèi)存取證分析框架。Volatility擁有眾多模塊可以讓滲透測試人員抽取運(yùn)行進(jìn)程中有用信息和目標(biāo)機(jī)器設(shè)置。如果內(nèi)存鏡像完好,滲透測試人員甚至能夠抽取出Windows的hashes。
首先是識別出內(nèi)存鏡像的架構(gòu),這樣Volatility才知道到哪個(gè)位置找,該項(xiàng)工作由imageinfo模塊完成。圖4顯示了imageinfo模塊被調(diào)用,且內(nèi)存配置文件結(jié)果被Volatility識別。

圖4 Imageinfo模塊識別出鏡像架構(gòu)
使用這些信息,滲透測試人員可以用額外的模塊識別出SAM和來自注冊表的系統(tǒng)hives文件。由于在機(jī)器使用時(shí),windows在活動內(nèi)存中存儲注冊表信息;Volatility的hivelist模塊可以用于識別內(nèi)存中的每個(gè)注冊表位置。圖5顯示了hivelist模塊正在被imageinfo模塊識別出的配置文件調(diào)用。

圖5 hivelist模塊顯示SAM和System Hives地址
在32位系統(tǒng)中,Volatility有一個(gè)hashdump模塊,當(dāng)給出SAM和System hives地址時(shí),能夠自動抽取密碼hash。遺憾的是,這個(gè)模塊當(dāng)前在64位系統(tǒng)中不能工作,所以限制了它的用途。就是說,Volatility是開源的,沒有理由不能實(shí)現(xiàn)64位模塊。另外,一旦SAM和System hives地址確定,一個(gè)技術(shù)性可能是從鏡像文件中抽取它們并使用其他工具抽取密碼hashes。
小結(jié)
微軟公司的安全響應(yīng)中心有10個(gè)不變的安全法則。第3號法則是,如果一個(gè)壞家伙不受限制地訪問你的機(jī)器,這已經(jīng)不是你的機(jī)器了。許多客戶認(rèn)為,全盤加密和強(qiáng)密碼彌補(bǔ)了攻擊者對機(jī)器的任何物理直接訪問。他們沒有考慮到活動內(nèi)存的危險(xiǎn)。活動內(nèi)存中存儲了足夠多的信息,滲透測試人員可以從其中獲得重要信息或?qū)?nèi)部網(wǎng)絡(luò)的訪問權(quán)。這從來沒有被認(rèn)為是問題,因?yàn)閷ν獠抗粽邅碚f不存在事實(shí)方式獲得內(nèi)存鏡像。但是,特定環(huán)境下冷卻啟動和火線接口攻擊,不但使獲得內(nèi)存訪問,而且使獲得密鑰的突破訪問成為可能。
引用
1. Dieterle,D.(2011).Memory Forensics:How to Pull Passwords from Memory Dump. Cyber Arms – Computer Security.Retrieved 2013-11-18.
2. Halderman,J.Alex;Schoen,Seth;Heninger,Nadia;Clarkson,William;Paul,William;Calandrino,Joseph A;Feldman,Ariel J.;Appelbaum,Jacob et al.(2008-02-21).Lest We Remember: Cold Boot Attacks on Encryption Keys. Princeton University. Retrieved 2013-11-18.
3. Maartmann-Moe(Last update 2013).Inception.
Available at http://www.breaknenter.org/projects/inception/. Accessed 2013-11-18.
來源聲明:本文來自Jonathan Fallone的文章《Using Cold Boot Attacks and Other Forensic Techniques in Penetration Tests》,由IDF實(shí)驗(yàn)室成伯敬翻譯。