qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          滲透測試中的冷卻啟動攻擊和其他取證技術

           這是一個星期四的晚上,快樂時光即將開始。你會盡快走出辦公室。你整天都忙于準備一份報告,第二天早上還需繼續,因此你將電腦鎖屏。這足夠安全,是嗎?因為你使用了高強度密碼,并全盤加密,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是硬盤驅動器的掛載點:
            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的工具,它只是簡單地使用如下命令:
            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權限模式下運行命令
            incept
            Incept將會訪問內存中負責訪問控制的部分并“修補”它們,使我們可以無密碼訪問機器。當然,目標機器內存含有豐富的信息,滲透測試人員可以使用
            incept –d
            命令轉儲小于4GB的內存鏡像。
            內存轉儲分析
            轉儲內存鏡像是一會事,分析數據則是一個更難的阻礙。幸運地是,一系列專注于此目的的工具可以獲得。在思路上,很少工具是設計用于滲透測試的。許多是取證分析工具用于尋找運行的進程,惡意軟件和隱藏的數據。內存取證仍然是一個相對嶄新的領域,尤其是64位環境下的分析。許多出色的工具仍然局限于法律取證使用。這就是說,大量可執行的任務可以向客戶揭示風險。
            Lest We Remember團隊也創建了一個分析工具,用于捕獲內存鏡像。他們論文的主題是密鑰可以從內存中恢復;他們的工具命名為AESKeyFind,用于在捕獲的內存鏡像中搜索AES密鑰次序表并恢復密鑰。該工具可從下載Scraper程序的同一站點下載。最后,該工具攜帶一個易于編譯的makefile文件。該工具編譯后,可以用命令
            ./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號法則是,如果一個壞家伙不受限制地訪問你的機器,這已經不是你的機器了。許多客戶認為,全盤加密和強密碼彌補了攻擊者對機器的任何物理直接訪問。他們沒有考慮到活動內存的危險。活動內存中存儲了足夠多的信息,滲透測試人員可以從其中獲得重要信息或對內部網絡的訪問權。這從來沒有被認為是問題,因為對外部攻擊者來說不存在事實方式獲得內存鏡像。但是,特定環境下冷卻啟動和火線接口攻擊,不但使獲得內存訪問,而且使獲得密鑰的突破訪問成為可能。

          posted on 2014-01-20 10:06 順其自然EVO 閱讀(494) 評論(0)  編輯  收藏 所屬分類: 安全性測試

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 湟源县| 光山县| 依兰县| 仙游县| 怀宁县| 天祝| 江阴市| 永胜县| 长岭县| 闸北区| 寻乌县| 获嘉县| 宁乡县| 田阳县| 阜新| 香格里拉县| 蓝田县| 渝北区| 襄樊市| 武安市| 永仁县| 肥西县| 高尔夫| 钟山县| 锡林郭勒盟| 中阳县| 甘德县| 临朐县| 托里县| 南漳县| 福泉市| 新巴尔虎右旗| 达日县| 镇沅| 兰西县| 友谊县| 濮阳市| 古田县| 乐平市| 永嘉县| 阳曲县|