這是一個星期四的晚上,快樂時光即將開始。你會盡快走出辦公室。你整天都忙於準備一份報告,第二天早上還需繼續,因此你將電腦鎖屏。這足夠安全,是嗎?因為你使用了高強度密碼,並全盤加密,Ophcrack或者可引導的linux發行版例如kali不起作用。你自認為安全了,其實你錯了。為了得到重要材料,攻擊者越來越無所不用其極,這包括使用取證領域的最新技術。
計算機中存在一個單獨的區塊:活動記憶體,任何一個攻擊者都願意把手伸到這個儲存有敏感資訊完全未加密的區塊。系統為了方便呼叫,在記憶體中儲存了多種有價值資訊;全盤加密機制也必須在記憶體的某個地方儲存金鑰。同樣,Wi-fi金鑰也是如此儲存的。Windows在記憶體中存有登錄檔鍵值,系統和SAM hive。許多剪貼簿內容和應用程式密碼也在儲存於記憶體中。即問題在於,記憶體儲存了系統在某時刻需要的大量有價值資訊。攻擊者要獲得它,需要使用一些同樣的取證技術。本文有助於向滲透測試工具包中增加這些技術。
設定環境
資訊轉儲可以很容易的構建系統全貌。近年來,記憶體捕獲價值已經得到取證專家的高度重視,但卻並未獲得滲透測試人員的足夠重視。這有眾多原因。取證調查人員使用專業軟體捕獲記憶體,同時記錄進裝置中。他們使用這些捕獲資訊,尋找惡意軟體或隱藏程式。滲透測試人員將會對雜湊值、檔案、執行程式更感興趣。如果已經擁有系統的訪問許可權,他們很大可能不再需要記憶體捕獲來得到這些資訊。
但是,在一些情境下,記憶體捕獲對滲透測試人員作用極大。設想如下場景:在一個內部行動中,測試人員獲得了接觸機器的許可權。客戶滿信心認為測試人員不可能利用這些機器獲得對系統的訪問。這些機器使用了全盤加密,擁有阻止從Ophcrack和下載hash的功能。執行中的機器全部處於鎖定狀態。客戶不知道的是,測試人員擁有豐富的技術經驗,能夠抓取執行系統記憶體中的內容。需要強調的是有兩種技術可以用於這樣的情景:冷啟動攻擊和火線介面攻擊。
冷啟動攻擊
2008年年初,普林斯頓大學電子前沿基金會和溫瑞爾系統公司的研究人員聯合發表了一篇題為《鮮為人知的祕密:對金鑰的冷啟動攻擊》的文章,該文詳解了從執行系統獲取記憶體資訊的一種新型攻擊方式。該類攻擊基於資料遺留。人們的普遍看法是機器一旦斷電,記憶體中的資料就會立刻丟失;即按開電源開關,所有資料在剎那間消失。
然而,研究人員指出真相併非如此。事實上,資料從記憶體中丟失需要一定的時間。斷開一臺機器的電源一到兩秒,大部分資料會完好無損。該效果可通過冷卻記憶體延長。研究人員藉助一種老式社交遊戲,倒置一灌壓縮空氣,做了測試。冷卻記憶體確實可以使資料保持很多秒,甚至好幾分鐘。這促使研究人員開發一系列工具,用來從即將關閉電源的機器記憶體中提取資訊,然後再次啟動系統。
使用這種方法捕獲記憶體,存在小錯誤的機率會相對較高,這就是它被取證組織大量摒棄的原因。但是,滲透測試人員並不需要記憶體的法律上的取證映象。如果金鑰或SAM資料庫完好無損,即使記憶體有2%的破壞也是可以接受的。即使有點難,這種方法對內部滲透測試人員來說,也是一個合適的攻擊向量。
The Lest We Remember團隊創造了大量用於攻擊的工具,可以在普林斯頓網站https://citp.princeton.edu/research/memory/code/下載到。主要工具是一個USB/PXE映象工具,可以下載到原始碼。研究團隊製作了許多makefiles檔案使編譯更容易,他們也在原始碼中打包了優秀的文件。32位的提取器應該在32位虛擬機器或32位物理機器上編譯,64位的提取器同樣需要在64位虛擬機器或物理機器上編譯。需要為目標機器使用合適的提取器,如果32位提取器在64位機器上使用,它將不能抓取全部的記憶體空間,因為32位提取器不能完全訪問到64位的記憶體地址空間。
Makefile編譯的結果是一個命名為scraper.bin的檔案,其實是一個可以拷貝到USB裝置的可引導啟動的映象工具。該USB同時需要用於儲存記憶體映象,建議使用大儲存量的USB裝置;因為當前主流系統使用4G到8G的記憶體,所以建議使用至少16GB容量的USB裝置。以root使用者許可權,使用dd工具把scraper檔案拷貝到USB裝置,命令中sdb是硬碟驅動器的掛載點:
1 |
sudo dd if=scraper.bin of=/dev/sdb |
這個時候,為目標系統準備好USB裝置。理想情況下,滲透測試人員準備好一個32位的8G和一個64位的16G可以在內部環境使用的USB裝置,同時備好一罐壓縮空氣。目標機器必須是一個執行中,且鎖定的系統,有無使用者登入無關緊要。同時,目標必須被全盤加密,否則啟動Kali或Ophcrack,只需少量工作,就可以獲得出色效果。
一旦合適的目標被定位後,滲透測試人員(從客戶處獲得了適當的授權)應該開啟機箱,露出記憶體。同時,他們需要插入USB裝置。一切準備就緒後,滲透測試人員可以倒置灌裝壓縮空氣並噴射覆蓋,以冷卻記憶體。由於這會導致在晶片上成霜,小心使用軟管澆記憶體,不要碰到主機板其他部分。圖1顯示了已經被冷凍用於攻擊的筆記本記憶體。
圖1 為冷啟動攻擊冷卻記憶體
記憶體冷卻足夠後,滲透測試人員需要儘可能快地切斷並恢復供電。在桌面計算機上,這相對簡單,按reset電源鍵就可實現。但是大部分的筆記本並沒有reset按鍵,進行這樣快速的重置電源操作本質上很困難。最好的辦法是快速替換電池,並按電源鍵。上述兩種機器環境,越是快速恢復供電,記憶體映象就越完好。
當滲透測試人員從USB啟動機器,scraper工具會自動複製記憶體映象至USB裝置。圖2的螢幕截圖顯示了scraper工具在工作。
圖2 Scraper工具
根據記憶體大小和USB埠速率,捕獲過程需要一會兒,對大容量記憶體則需要數小時。Scraper程式完全複製記憶體後,它將立即重新啟動系統。滲透測試人員只需移除USB裝置並插回編譯scraper的機器。在原始碼中有一個叫做USBdump的工具,它只是簡單地使用如下命令:
1 |
sudo ./usbdump /dev/sdb > memdump.img |
把USB裝置上的每個位元組拷貝至滲透測試人員的機器。再次,根據記憶體捕獲映象的大小,這可能需要數小時。最終結果是記憶體映象的完全拷貝檔案,包含目標機器的一個位元組一個位元組的捕獲映象,同時有望使錯誤最少。
火線介面攻擊
電氣和電子工程師協會的1394介面,是初始設計用於取代SCSI的一個高速通訊介面,更因為蘋果公司以火線命名實現而知名。火線的主要部分是它的高速資料傳輸速率,這也是它大量應用於音視訊傳輸的原因。火線介面高速率的一個主要特徵是,它可以完全繞過CPU,通過直接記憶體訪問DMA的方式訪問記憶體。這對從相機下載數小時連續鏡頭的視訊編輯者來說是一個好訊息,對於滲透測試人員同樣如此。
火線介面的直接記憶體訪問使具有目標機器物理接觸能力的滲透測試人員,可以通過重寫包含訪問控制功能的記憶體部分,繞過作業系統的密碼保護機制。DMA同樣可以讓滲透測試人員下載小於4GB記憶體映象。即使火線介面僅能訪問少於4GB的記憶體且能使用反病毒軟體保護DMA,這型別的訪問還是揭示了IEEE1394標準中重大的安全缺陷。由於火線介面的熱插拔功能,即使目標機器在鎖定情況下,攻擊同樣能夠進行。此外,雖然大部分作業系統試圖對知名火線介面裝置如iPods進行DMA授許可權制,但是欺騙裝置很容易。
由於攻擊主要針對火線介面,對同一匯流排下的任何裝置同樣有效;這些包括ExpressCard,PC Card和所有蘋果新產品都可以使用的雷電埠。
Carsten Maartmann-Moe已經開發了一個叫做Inception的工具,可以輕鬆利用火線介面。該工具可在http://www.breaknenter.org/projects/inception/找到。Inception必須從一個Linux桌面執行。這種情況下,Linux系統不能是一個虛擬機器,因為虛擬機器不能實現火線介面傳輸(出於安全原因)。另外,滲透測試人員需要Python3和Freddie Witherden的1394包。最後,攻擊和目標機器都需要具備一個火線介面,EC,雷電或者PC card介面。
Inception安裝準備就緒後,滲透測試人員僅需通過一個火線介面電纜,簡單的連線攻擊和目標機器,並在root許可權模式下執行命令
1 |
incept |
Incept將會訪問記憶體中負責訪問控制的部分並“修補”它們,使我們可以無密碼訪問機器。當然,目標機器記憶體含有豐富的資訊,滲透測試人員可以使用
1 |
incept –d |
命令轉儲小於4GB的記憶體映象。
記憶體轉儲分析
轉儲記憶體映象是一會事,分析資料則是一個更難的阻礙。幸運地是,一系列專注於此目的的工具可以獲得。在思路上,很少工具是設計用於滲透測試的。許多是取證分析工具用於尋找執行的程式,惡意軟體和隱藏的資料。記憶體取證仍然是一個相對嶄新的領域,尤其是64位環境下的分析。許多出色的工具仍然侷限於法律取證使用。這就是說,大量可執行的任務可以向客戶揭示風險。
Lest We Remember團隊也建立了一個分析工具,用於捕獲記憶體映象。他們論文的主題是金鑰可以從記憶體中恢復;他們的工具命名為AESKeyFind,用於在捕獲的記憶體映象中搜尋AES金鑰次序表並恢復金鑰。該工具可從下載Scraper程式的同一站點下載。最後,該工具攜帶一個易於編譯的makefile檔案。該工具編譯後,可以用命令
1 |
./aeskeyfind –v memoryimage.raw |
執行,在記憶體映象檔案中執行搜尋AES金鑰並在螢幕上列印它們。AESKeyFind將搜尋128位和256位的金鑰,即使映象不完全或存在錯誤,該工具也可能恢復金鑰。例如,圖3顯示了從一個包含大量錯誤的映象檔案中恢復AES金鑰。
圖3 在破損記憶體映象中找打AES金鑰
這些AES金鑰序列可以被大量不同的應用使用。它們可能是用於全盤加密,VPN,無線網路的主要金鑰。如果它們被恢復,接下來的步驟就是破譯。
另一個有用的工具是Volatility,一個開源的記憶體取證分析框架。Volatility擁有眾多模組可以讓滲透測試人員抽取執行程式中有用資訊和目標機器設定。如果記憶體映象完好,滲透測試人員甚至能夠抽取出Windows的hashes。
首先是識別出記憶體映象的架構,這樣Volatility才知道到哪個位置找,該項工作由imageinfo模組完成。圖4顯示了imageinfo模組被呼叫,且記憶體配置檔案結果被Volatility識別。
圖4 Imageinfo模組識別出映象架構
使用這些資訊,滲透測試人員可以用額外的模組識別出SAM和來自注冊表的系統hives檔案。由於在機器使用時,windows在活動記憶體中儲存登錄檔資訊;Volatility的hivelist模組可以用於識別記憶體中的每個登錄檔位置。圖5顯示了hivelist模組正在被imageinfo模組識別出的配置檔案呼叫。
圖5 hivelist模組顯示SAM和System Hives地址
在32位系統中,Volatility有一個hashdump模組,當給出SAM和System hives地址時,能夠自動抽取密碼hash。遺憾的是,這個模組當前在64位系統中不能工作,所以限制了它的用途。就是說,Volatility是開源的,沒有理由不能實現64位模組。另外,一旦SAM和System hives地址確定,一個技術性可能是從映象檔案中抽取它們並使用其他工具抽取密碼hashes。
小結
微軟公司的安全響應中心有10個不變的安全法則。第3號法則是,如果一個壞傢伙不受限制地訪問你的機器,這已經不是你的機器了。許多客戶認為,全盤加密和強密碼彌補了攻擊者對機器的任何物理直接訪問。他們沒有考慮到活動記憶體的危險。活動記憶體中儲存了足夠多的資訊,滲透測試人員可以從其中獲得重要資訊或對內部網路的訪問權。這從來沒有被認為是問題,因為對外部攻擊者來說不存在事實方式獲得記憶體映象。但是,特定環境下冷卻啟動和火線介面攻擊,不但使獲得記憶體訪問,而且使獲得金鑰的突破訪問成為可能。
引用
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.