【CTF大赛】陇剑杯-机密内存-解题过程分析
前言
機密內存這道題是隴劍杯中的壓軸題,題目中涉及到使用VMware加密功能進行加密的內存鏡像,難度極大。我在這里詳細的記錄一下解題思路和過程,如有錯誤或疏漏的地方還請大佬們在評論區指出。
題目初探
拿到題目,為三個文件,其中mem_secret-963a4663.vmem為常見內存鏡像文件,另外兩個文件格式未知。
使用volatility進行分析無法識別profile。
接著分析分析Encryption.bin01和Encryption.bin02文件,初步分析Encryption.bin01文件,無法發現任何端倪。
Encryption.bin02內可見字符較多,通過strings命令可以判斷出Encryption.bin02是使用Vmware加密后的vmx虛擬機配置文件
這里介紹一下虛擬機的配置文件vmx,改文件位于虛擬機實例的主目錄下,用于記錄虛擬機的配置——如虛擬機的內存、硬盤型號等,可以通過打開這個虛擬機文件以啟動虛擬機的操作系統,我們也通過編輯該文件實現某種對虛擬機的配置需求。
對于同一虛擬機,在使用虛擬機加密操作前的vmx文件與加密后vmx文件是有所不同的:
未加密的vmx文件是明文顯示的,顯示了這個虛擬機的顯示名稱,cpu配置,內存配置等等。下圖是為未加密的vmx文件。
在虛擬機——設置——選項——訪問控制處可以配置虛擬機加密,加密后的vmx內容如下圖所示,可以看到:之前以明文形式呈現的配置內容全部加密顯示,無法獲取這個虛擬機的配置詳細信息了,并且多了keySafe內容,就存在這里。如下圖:
加密后的配置只需要.encoding、displayName、encryption.keySafe和encryption.data字段的內容,.encoding為虛擬機配置文件的編碼,displayName為虛擬機的名稱,encryption.keySafe字段存儲了虛擬機密碼,格式為vmware:key/list/xxxxxxxxx ,encryption.data是原來明文數據加密過后的結果。
但是對Encryption.bin02和加密的vmx進行對比,在Encryption.bin02的結尾還有一段冗余數據:
分析這段數據,對比加密的虛擬機,通過lsiogic關鍵詞以及內容的偏移占用空間可以確定該內容為加密虛擬機的vmdk部分
此處題目中是lsilogic,但對照虛擬機我用的是winxp,不支持lsilogic,所以是ide,而且vmx和vmdk兩端數據直接有一段空行NUL數據
現已分析出Encryption.bin02為VMware虛擬機執行加密過后的配置文件,那么mem_secret-963a4663.vmem應該為運行狀態虛擬機的內存頁面文件,而結合常見虛擬機相關文件和文件大小可以大膽猜測Encryption.bin01為vmss文件
vmss文件用于儲存虛擬機在掛起狀態時的信息,為執行掛起操作后產生的文件(相當一個快照圖片)
進一步對Encryption.bin01文件進行格式分析,可以發現該文件與vmware加密狀態掛起的虛擬機vmss文件高度相似,遂判斷該賽題給出的文件為vmware加密文件組
根據上述分析,題目中所給的文件全部為使用虛擬機加密過后的文件,因此后續的思路就是:找到虛擬機的密碼,然后利用VMware加載虛擬機,將虛擬機加密功能關閉,就可以將所有文件還原成明文狀態,此時就可以得到未加密狀態的內存鏡像,再使用volatility進行分析即可。
恢復文件
在思路梳理完成之后就需要對題目的文件進行分離和修復,經過反復操作和對照發現,題目中出題人分別刪除了vmx和vmss中的部分通用關鍵信息,分別對vmx、vmdk和vmss文件進行還原操作:
分離和修復vmx文件
修復前:
修復后:
還原vmss文件
將Encryption.bin01文件重命名為mem_secret-963a4663.vmss,注意vmss文件的文件名一定要和vmem文件名對應,否則無法讀取掛起的狀態。
全部還原后的文件目錄結構如下:
打開虛擬機
要打開虛擬機,需要獲取打開的密碼,此題無任何提示信息,猜測密碼需要通過暴力破解的方式拿到,使用加密的vmx文件,利用pyvmx-cracker工具爆破虛擬機的密碼。
得到密碼為1q2w3e4r
成功打開掛起狀態的虛擬機
開機后發現無法打開,根據報錯提示判斷缺少vmdk虛擬磁盤文件,但是虛擬磁盤文件中包含一定的加密信息,此時我們已經獲得了加密虛擬機的密碼,因此可以自己創建一個新的虛擬機。
但是直接將這個vmdk加載到虛擬機是不行的,因為待加載的虛擬機使用了VMware加密,vmdk也會一起加密,在打開的時候會先對vmdk進行解密操作,分析未加密虛擬機的vmdk和已加密虛擬機vmdk作比較,發現使用Encryption.bin02的結尾還有一段冗余數據直接替換自己生成的vmdk加密磁盤頭部即可,后經過操作發現這段數據是VMware打開虛擬機時,對vmdk進行解密的密鑰串,關系到加密虛擬機的vmdk能否正常解密,這時候就是磁盤數據。
那么只要執行如下操作即可:創建一個新的虛擬機,創建的時候參數配置通過在Encryption.bin02的數據里捕風捉影(可以看出,出題人使用的都是默認配置),使用1q2w3e4r這個密碼對虛擬機進行加密,然后將加密過后的虛擬機的vmdk文件拿出來給原來題目中提取的虛擬機使用,但是使用前需要替換掉頭部的加密串信息。
分離和修復vmdk文件
修復前:
修復后:
此時虛擬機修復完成,已經可以成功將虛擬機移除解密,注意:虛擬機不能點開機,否則內存鏡像文件vmem將被刪除
解密移除完成后,當前目錄下的vmem文件即為未使用VMware加密的虛擬機內存鏡像文件,此時理論上講,已經可以使用volatility正常分析,嘗試使用volatility2分析發現仍然搜索不到profile,推測題目為Windows10的內存鏡像文件,遂使用Volatility3進行分析。
Volatility3是對Volatility2的重寫,它基于Python3編寫,對Windows 10的內存取證很友好,且速度比Volatility2快很多。對于用戶而言,新功能的重點包括:大幅提升性能,消除了對–profile的依賴,以便框架確定需要哪個符號表(配置文件)來匹配內存示例中的操作系統版本,在64位系統(例如Window的wow64)上正確評估32位代碼,自動評估內存中的代碼,以避免對分析人員進行盡可能多的手動逆向工程等。
python3 vol.py -f mem_secret-963a4663.vmem windows.info使用Volatility3可以看到操作系統版本是Windows10,且根據Major/Minor 15.18362可以確定具體的操作系統profile配置文件。在Volatility2 中使用–info看到具體對應的profile為Win10x86_18362,此后即可回歸到volatility2,手動指定profile即可解題。
題目解答
(1)取證人員首先對容器的基本信息進行核實,經過確定該容器的基本信息為__。(答案為32位小寫md5(容器操作系統系統的版本號+容器主機名+系統用戶名),例如:操作系統的版本號為10.0.22449,容器主機名為DESKTOP-0521,系統登錄用戶名為admin,則該題答案為32位小寫md5(10.0.22449DESKTOP-0521admin) 的值ae278d9bc4aa5ee84a4aed858d17d52a)
使用dumpregistry、WRR.exe對內存鏡像進行注冊表分析,發現主機名為DESKTOP-4N21ET2,系統的版本號為6.3.18363,系統登錄用戶名為Ado,則計算小寫32位md5(6.3.18363DESKTOP-4N21ET2Ado)值為38c9307280315a1888681d133658e6ce。
使用dumpregistry導出注冊表相關文件:
python2 vol.py -f mem_secret-963a4663.vmem --profile=Win10x64_18362 dumpregistry -D ./使用WRR解析SYSTEM.reg文件獲取到主機名為DESKTOP-4N21ET2
解析SOFTWARE.reg獲得系統的版本號為6.3.18363
使用windows.filescan,導出結果搜索Desktop發現用戶名為Ado
(2)黑客入侵容器后曾通過木馬控制端使用Messagebox發送過一段信息,該信息的內容是__。(答案為Messagebox信息框內內容)
第二題的答案即為上面掛起狀態虛擬機中看到的界面Messagebox內容:Best_hacker
(3)經過入侵分析發現該容器受到入侵的原因為容器使用人的違規進行游戲的行為,該使用人進行游戲程序的信息是__。(答案為“32位小寫md5(游戲程序注冊郵箱+游戲程序登錄用戶名+游戲程序登錄密碼),例如:注冊郵箱為adol@163.com,登錄用戶名為user,密碼為user1234,則該題答案為” adol@163.comuseruser1234”的小寫md5值5f4505b7734467bfed3b16d5d6e75c16)
根據題目要求,分析游戲程序,使用pslist查看進程信息可發現存在大量steam進程,對steam進程塊使用winhex進行郵箱正則匹配,匹配到steam注冊郵箱為john@uuf.me:
根據steam的登錄特征,在steam進程塊以及注冊郵箱偏移地址附近,搜索關鍵詞steamusername、password可以發現steam平臺的登錄信息,即用戶名為jock_you1,密碼為,jock.2021:
合并郵箱和用戶名密碼為john@uuf.mejock_you1jock.2021,計算md5小寫32為值為:39a9ac5a37f4a4ce27b1227cf83700a6
(4)經過入侵分析發現該容器曾被黑客植入木馬控制的信息是_。(答案為“32位小寫md5(木馬程序進程名+木馬回連ip地址+木馬回連ip端口)”,例如:木馬程序進程名為svhost.exe,木馬回連ip為1.1.1.1,木馬回連端口為1234,則該題答案為“svhost.exe1.1.1.11234”的32位小寫md5值f02da74a0d78a13e7944277c3531bbea)
使用pstree、netscan進行惡意程序分析,在使用pstree時發現偽裝為steam的木馬程序steam.exe,該程序并非steam自身程序且Wow64標識為True,并進行進程導出掃描,殺毒軟件確切報毒。
python3 vol.py -f mem_secret-963a4663.vmem windows.pstree
使用netscan掃描容器的網絡連接情況,并對導出的steam.exe木馬程序進行動態測試,發現木馬程序回連ip為192.168.241.147,端口號為8808,與netscan中一致:
(5)經過入侵分析,發現黑客曾經運行過痕跡清除工具,該工具運行的基本信息是__。(答案為“32為小寫md5”(痕跡清除工具執行程序名+最后一次運行時間),例如:黑客運行工具執行程序名為run.exe,運行時間為2021-07-10 10:10:13,則本題的答案為小寫的32位md5(run.exe2021-07-10 10:10:13) 值為82d7aa7a3f1467b973505702beb35769,注意:本題中運行時間的格式為yy-mm-dd hh:mm:ss,時間時區為UTC+8)
需要分析程序最后運行時間,使用userassist注冊表分析程序的運行情況,并結合filescan掃描容器內文件情況,二者結合可以發現存儲在容器桌面的無影無蹤痕跡清理軟件,該軟件的程序執行名為:Wywz.exe,程序的運行時間結合userassist可以發現為2021-09-10 21:10:13 UTC+8(注意時區的轉換),則該題答案為小寫32位md5(Wywz.exe2021-09-1021:10:13) d46586ca847e6be1004037bc288bf60c
python2 vol.py -f mem_secret-963a4663.vmem --profile=Win10x64_18362 userassist最后
【獲取網絡安全學習資料】可以關注私我
總結
以上是生活随笔為你收集整理的【CTF大赛】陇剑杯-机密内存-解题过程分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Web安全】Web开发中常见的安全误区
- 下一篇: 【安全工具】浅谈编写Java代码审计工具