Skip to main content

不少警政單位,不能說的單位詢問OSSLab:無系統密碼,是否有機會破解檔案系統(Bitlocker,APFS)加密.
這邊來講若沒有得分析Page file ,或記憶體暫存檔案.  基本上是無解 (暴力破解沒機會)

這影片為利用DMA攻擊的記憶體數位鑑識技術!
上面影片一個 Thunderbolt port 做DMA attack ,便可以未經授權Dump整個系統記憶體.
主要原理請參考這
https://media.blackhat.com/us-13/US-13-Sevinsky-Funderbolt-Adventures-in-Thunderbolt-DMA-Attacks-Slides.pdf

舊硬體設備是這樣的
1.Thunderbolt to pci-e 轉換器
thunderbolt 端接上被攻擊的電腦
pci-e 卡端接如下介面卡
2.USB 3380 – Broadcom usb to pci-e soc.
(目前唯一一般用途是 usb 3.0 to pci-e storage 跟開發測試使用 )

都接好後 usb 接到執行攻擊端電腦.執行漏洞 攻擊端就可以開始Dump memory .
再從dump memory取得所需要的密碼.
上面使用USB3380-EVB這塊硬體,但這做不到超過 64-bit 定位 memory access
國外資安專家Ulf Frisk、 Ramtin Amin改良跟開發了後做出  名為PCIeScreamer PCIe to USB3的FPGA設備 

這類設備再配上thunderbolt to pci-e 就可對內建thuberbolt 筆記型電腦做記憶體分析
 

PCIe Screamer R02卡購買連結與細部介紹.
http://shop.lambdaconcept.com/home/32-pciescreamerR02.html

FPGA code
https://github.com/enjoy-digital/pcie_injector

以下文章翻譯自
http://blog.frizk.net/2018/03/memory-process-file-system.html
沒有硬體狀況下 同樣可以做實驗跑2018-01或2018-02補丁修補的Windows 7 x64

這邊介紹 PCILeech的記憶體體進程轉成文件系統方法。
可將記憶體轉儲中的進程及其虛擬記憶體應該在不到一秒的時間內映射為文件和文件夾。

如果您使用受支持的PCILeech DMA攻擊設備設備件以實時模式運行它,那還可以寫入記憶體!
目標系統就算有反取證或反作弊功能, 都無法阻止!

使用PCILeech的記憶體進程文件系統來瀏覽記憶體轉儲文件中的Windows進程。

酷!那麼我該如何嘗試呢?
檢查並下載  Github上的PCILeech。PCILeech是開源的,完全免費!您將在Github上找到源代碼和預編譯的二進製文件。

它是如何工作的?
它通過解析記憶體中的頁表來工作,CPU使用它來將進程的虛擬記憶體轉換為物理記憶體。由於頁表與硬件有關,這意味著如果已知名為PageDirectoryBase或PML4或CR3的進程頁表的基址,則記憶體進程文件系統能夠映射在x64硬件上運行的所有64位操作系統的進程。

如果部分頁表或其他進程記憶體在記憶體中不存在,則可能已將其換出到磁盤上的交換中,對該部分記憶體的分析將失敗。

如果分析Windows記憶體轉儲,將執行額外的分析來識別正在運行的進程,模塊以及它們所屬的記憶體區域。

什麼是功能和限制?
– 當前僅在Windows上運行PCILeech時支持記憶體進程文件系統。
– 僅在64位元操作系統,無32位,無ARM。
– 記憶體轉儲文件為只讀模式,如果在實時系統上使用PCILeech FPGA,則為讀寫模式。
– 僅在Windows記憶體轉儲中自動識別進程。
– 在Windows記憶體轉儲中自動識別EPROCESS,PEB和DLL地址。
– 從虛擬機(如VirtualBox)獲取的記憶體轉儲可能會失敗。
– 可能因各種其他原因而失敗。

通過手動指定一個有效的CR3值(PageDirectoryBase / PML4)來查看Linux內核。

在法庭上安全呢?
記憶體換出到磁盤對於記憶體進程文件 –>不保證所有內容都將被映射。

儘管如此,用戶模式惡意軟件無法隱藏記憶體進程文件系統。由於記憶體進程文件系統分析CPU使用的頁表,因此必須保留在記憶體中,而且沒有被混淆。

但是,記憶體進程文件系統使用一些技巧來過濾看起來像無效的頁表。這意味著目前運行內核特權的惡意軟件可能會從記憶體進程文件系統中隱藏

獲取記憶體轉儲

如果您有PCILeech的FPGA 記憶體取證設備,這是首選的採集記憶體方法。將PCILeech FPGA設備插入目標計算機。然後確定物理記憶體地址空間的大小。這可能略大於計算機中的RAM數量。通過運行命令“pcileech.exe probe”執行此操作。這將產生類似於下面的輸出。這裡最大地址0x21E5FFFFF很重要。

使用PCILeech FPGA設備(圖像中的PCIeScreamer)枚舉目標系統記憶體。
現在我們可以轉儲記憶體。使用“pcileech.exe轉儲-v -force -max 0x21E5FFFFF -out my_dump.raw”轉儲。-force選項告訴PCILeech在遇到不可讀的記憶體時不會中止,例如3-4 GB之間的記憶體空間或使用Vt-d保護的記憶體。
 
 

MoonSols DumpIt是一款易於運行的軟件。然而,它可能會在更新的Windows 10計算機上創建記憶體轉儲損壞,因此建議在Windows 10上使用

WinPMEM。WinPMEM是一種軟件記憶體轉儲實用程序,它是Github上Google Rekall記憶體取證項目的一部分。你會在這裡找到一個簽名的WinPMEM 。從管理員提升的命令提示符執行“winpmem-2.1.post4.exe –format raw -o dump-pmem.raw.aff4”。WinPMEM將轉儲到.aff4卷。在7-Zip中打開此卷並解壓縮名為PhysicalMemory的記憶體轉儲。

閱讀和寫作記憶
讀取和寫入虛擬記憶體可以通過兩種方式完成。打開包含整個進程虛擬記憶體的進程目錄中的vmem文件,或打開包含單獨虛擬記憶體映射的vmemd目錄中的文件。記憶體映射在映射文件中找到。

記事本進程的記憶體映射,vmem記憶體文件和vmemd目錄。

如果將PCILeech FPGA與基於硬件的目標一起使用,則虛擬記憶體文件將是可寫的。請注意,寫入可能會在多個進程之間共享的相應物理記憶體!例如,在一個進程中寫入ntdll.dll的更改可能會寫入到所有進程的ntdll.dll中。

查看Ubuntu WSL中hexedit中的notepad.exe虛擬記憶體。

在讀取或寫入內核地址時,例如0xFFFFF801’10000000,請在您最喜愛的十六進制編輯器中打開vmem文件,然後導航到切割前四個F時看到的地址。在上面的例子中,這是0xF801’1000000。最上面的16位是所謂的符號擴展,所以這沒關係。它仍然是同一個地址。這是因為Windows不支持大於63位的文件大小(文件大小變為負值)。

在內核記憶體中查看記事本EPROCESS結構。請注意,我們在系統進程(PID 4)中查看它,並從地址中跳過前四(4)個FFFF。

特殊文件
virt2phys文件是一個特殊的永久可寫文件。第一個64位值包含虛擬地址,第二個64位值是相應的物理地址。無論何時寫入新的虛擬地址,物理地址都會更新。

記事本0x7FF660160000虛擬地址映射到物理地址0x14C40D000。

win-process文件包含屬於進程的EPROCESS內核結構的地址。由於EPROCESS結構駐留在內核記憶體中,因此必須在系統(PID 4)進程虛擬記憶體中查找此結構。

win-peb文件包含駐留在進程記憶體中的PEB(進程環境塊)的地址。win-entry包含進程入口點,win-modules模塊(.dlls)在PEB Ldr列表中。

pml4文件包含PML4的物理地址,也就是CR3寄存器,即記體體頁面目錄庫。

評論,建議和想法非常受歡迎。源代碼和二進制發行版中的PCILeech可在Github上找到。同時查看Twitter的更新信息和公告。

Thx Chang

Author Thx Chang

More posts by Thx Chang