• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Volatility的圖形化用戶界面的實現(xiàn)和應(yīng)用

      2021-04-01 14:04李嘉鑫張國榮梁成輝唐遠(yuǎn)新翟繼強
      計算機與網(wǎng)絡(luò) 2021年1期

      李嘉鑫 張國榮 梁成輝 唐遠(yuǎn)新 翟繼強

      摘要:Volatility是一個基于Python語言的開源內(nèi)存取證框架,因功能強大而廣泛應(yīng)用在計算機內(nèi)存取證和分析領(lǐng)域。針對Volatility基于命令行用戶界面(CLI)參數(shù)繁多和使用不便的問題,使用Visual Studio 2016 C++集成開發(fā)環(huán)境,在詳細(xì)分析Volatility命令數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,利用匿名管道和進程執(zhí)行技術(shù)設(shè)計,實現(xiàn)了一個通用的Windows圖形用戶界面的Volatility操作程序,中文界面、交互性強,方便用戶對內(nèi)存轉(zhuǎn)儲文件進行解析和研究。

      關(guān)鍵詞:取證;Volatility;命令行用戶界面;圖形用戶界面

      中圖分類號:TP393文獻(xiàn)標(biāo)志碼:A文章編號:1008-1739(2021)01-60-4

      0引言

      內(nèi)存取證作為計算機取證科學(xué)的重要分支,是指從計算機物理內(nèi)存和頁面交換文件中查找、提取、分析易失性證據(jù),是對傳統(tǒng)基于文件系統(tǒng)取證的重要補充,是對抗網(wǎng)絡(luò)攻擊或網(wǎng)絡(luò)犯罪的有力武器[1]。Volatility是一個使用Python語言編寫的內(nèi)存取證工具的框架[2],可以對現(xiàn)有絕大多數(shù)操作系統(tǒng)進行內(nèi)存取證分析,并且支持多種內(nèi)存鏡像格式。

      但是Volatility作為一款基于CLI的命令行工具[3],只能通過手動輸入命令來使用各種功能,并且命令種類繁雜,每種命令還包含多個參數(shù),對于非專業(yè)人士來說難于使用。

      因此本文提出使用Visual Studio 2016 C++集成開發(fā)環(huán)境[4]設(shè)計和實現(xiàn)一個Windows平臺上運行的Volatility圖形化界面操作程序,用戶可以利用本程序方便快速地進行內(nèi)存分析和取證。

      1系統(tǒng)設(shè)計

      Volatility圖形化界面操作程序采用Windows的窗口消息機制進行構(gòu)建,免去了多余的第三方依賴。同時,為了能夠讓非專業(yè)人士方便快速地進行內(nèi)存分析和取證,設(shè)計了一套簡單且高效的操作模式替代原本繁雜的手工指令輸入操作。

      界面全部采用圖形化操作,為了以線性方式更為直觀地進行操作,系統(tǒng)將操作步驟劃分為打開鏡像文件、選擇鏡像信息、選擇操作命令和設(shè)置命令參數(shù)。系統(tǒng)整體的運行流程是接收用戶輸入、構(gòu)建命令文本、執(zhí)行命令及取回執(zhí)行結(jié)果,主要分為構(gòu)建模塊和控制模塊,其中構(gòu)建模塊負(fù)責(zé)處理用戶輸入以及構(gòu)建對應(yīng)的操作命令,控制模塊負(fù)責(zé)使用操作命令對Volatility進行控制并取回運行結(jié)果。

      1.1操作命令的構(gòu)建

      Volatility作為一個功能強大的內(nèi)存取證框架,支持多種命令,不同的命令對應(yīng)的參數(shù)字段又各有不同。為了實現(xiàn)可視化的命令構(gòu)建并且減少重復(fù)的樣板代碼,必須提高代碼的抽象程度。這就要求程序?qū)τ诓煌拿顟?yīng)該采取統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)進行抽象,并且能夠根據(jù)該數(shù)據(jù)結(jié)構(gòu)繪制出對應(yīng)的配置面板。

      本模塊包括三部分:

      (1)數(shù)據(jù)結(jié)構(gòu)的設(shè)計

      Volatility操作命令包含命令名、命令描述和多個命令參數(shù),操作命令的數(shù)據(jù)結(jié)構(gòu)如下:

      分別定義了該參數(shù)在窗后標(biāo)簽上提示的文本、構(gòu)成實際命令的參數(shù)文本、該參數(shù)是單選參數(shù)或多選參數(shù)(如指定進程標(biāo)識符和指定進程名稱都是單選參數(shù),在構(gòu)成命令時只能取其中的一個;而顯示詳細(xì)信息就是多選參數(shù),可以附加在單選參數(shù)后)、負(fù)責(zé)選定參數(shù)的控件、參數(shù)是否默認(rèn)選定、參數(shù)值的提供類型(如使用下拉框或文本框提供)、負(fù)責(zé)參數(shù)值的控件、下拉框的默認(rèn)內(nèi)容以及值的檢查類型(如整數(shù)、十六進制數(shù)、字符串等)。

      通過以上數(shù)據(jù)結(jié)構(gòu),可以把Volatility支持的命令統(tǒng)一且完整地錄入至程序中。

      (2)配置面板的繪制

      選擇不同命令后應(yīng)該根據(jù)命令本身的使用方法繪制出對應(yīng)的配置面板。首先清空當(dāng)前面板,重新初始化上一次選擇命令后的現(xiàn)場,然后根據(jù)該命令參數(shù)的個數(shù)來調(diào)整整個面板的布局,最后根據(jù)每個命令參數(shù)調(diào)出對應(yīng)的選擇控件和輸入控件。

      (3)構(gòu)建命令文本

      通過上一節(jié)的操作,用戶在設(shè)置完成參數(shù)后,點擊運行會生成對應(yīng)的命令文本,構(gòu)建命令時會使用參數(shù)數(shù)據(jù)結(jié)構(gòu)中的pszParam字段以及用戶在面板中輸入或選定的值進行拼接,還要使用參數(shù)數(shù)據(jù)結(jié)構(gòu)中的ValidationType字段進行對應(yīng)的輸入檢查(如整數(shù)或十六進制數(shù)格式的檢查)。

      1.2使用操作命令對Volatility的控制

      Volatility是一款基于命令行操作的內(nèi)存取證框架,使用給定參數(shù)啟動后會把相應(yīng)結(jié)果輸出至標(biāo)準(zhǔn)輸出,為了讓圖形界面得到結(jié)果需要將Volatility的結(jié)果輸出重定向。

      (1)創(chuàng)建子進程用于運行Volatility

      主進程本身已經(jīng)負(fù)責(zé)圖形界面的運行,不能用于實際運行Volatility,否則在等待Volatility運行時圖形界面會失去響應(yīng),必須使Volatility運行在新建的子進程中。

      創(chuàng)建進程需要使用CreateProcess函數(shù),其函數(shù)定義如下:

      下面只介紹程序中用到的參數(shù),其余參數(shù)均為默認(rèn)值NULL。

      參數(shù)lpCommandLine指定子進程運行程序的命令行文本,在參數(shù)lpApplicationName為NULL時必須包含要運行的應(yīng)用程序文件名;參數(shù)bInheritHandles指定創(chuàng)建的子進程是否可以繼承父進程擁有的句柄;參數(shù)dwCreationFlags指定創(chuàng)建的子進程的創(chuàng)建標(biāo)志,如CREATE_NEW_CONSOLE和CREATE_NO_WINDOW分別表示子進程需要新的控制臺和子進程無需啟動窗口;參數(shù)lpStartupInfo指定預(yù)設(shè)置啟動信息結(jié)構(gòu)體的指針,啟動信息結(jié)構(gòu)體標(biāo)識進程啟動時的初始信息,如標(biāo)準(zhǔn)輸入句柄、標(biāo)準(zhǔn)輸出句柄、標(biāo)準(zhǔn)錯誤句柄等;參數(shù)lpProcessInformation指定接受進程信息結(jié)構(gòu)體指針。

      (2)創(chuàng)建匿名管道傳遞Volatility運行結(jié)果

      在創(chuàng)建進程時設(shè)置的啟動信息結(jié)構(gòu)體包含關(guān)于標(biāo)準(zhǔn)輸出句柄和標(biāo)準(zhǔn)錯誤句柄的設(shè)置,為了重定向Volatility的運行結(jié)果,需要創(chuàng)建匿名管道用于子進程向父進程傳遞結(jié)果。

      創(chuàng)建管道需要使用CreatePipe函數(shù)[5],其函數(shù)定義如下:

      參數(shù)hReadPipe和hWritePipe分別指定接收管道讀寫句柄的指針;參數(shù)lpPipeAttributes指定安全參數(shù)結(jié)構(gòu)體指針,該結(jié)構(gòu)體標(biāo)識了管道句柄是否可以被新進程繼承。

      父進程使用CreatePipe函數(shù)創(chuàng)建匿名管道后使用CreateProcess函數(shù)創(chuàng)建子進程,并在啟動信息結(jié)構(gòu)體中指明輸出重定向至匿名管道的寫入句柄,父進程就可以使用ReadFile函數(shù)讀取匿名管道中Volatility的運行結(jié)果。

      2應(yīng)用測試

      應(yīng)用測試中,程序運行于Windows 10 64位主機上,測試鏡像為Windows 7 32位的系統(tǒng)內(nèi)存鏡像[6],目標(biāo)是提取系統(tǒng)鏡像中的敏感資產(chǎn),如圖1所示。

      使用pslist命令獲取當(dāng)前系統(tǒng)鏡像中的所有進程信息,可以看到,存在iexplore.exe,notepad.exe,mspaint.exe,TrueCrypt.exe等進程,如圖2所示。

      使用netscan命令查看系統(tǒng)鏡像的網(wǎng)絡(luò)連接情況和套接字信息,分析后沒有異常,如圖3所示。

      在分析網(wǎng)絡(luò)連接無異常之后,可以對cmd歷史命令進行提取,如圖4所示。

      最為關(guān)鍵的是,可以使用memdump命令來提取以上可疑進程的dmp數(shù)據(jù)。

      在notepad.exe進程數(shù)據(jù)中成功獲取一個非偽加密的zip壓縮包文件,嘗試爆破密碼無果,使用strings命令對原始數(shù)據(jù)敏感信息進行過濾分析操作,strings -e l ./3524.dmp| grep "pan"-B 5 -A 5>notepad.txt,如圖5所示。

      在對加密磁盤軟件TrueCrypt.exe程序提取之后,將其掛載至主機磁盤,可以獲取key,如圖6所示。

      至此,通過內(nèi)存取證軟件對目標(biāo)系統(tǒng)鏡像完成了敏感資產(chǎn)的搜集與提取測試工作。

      3結(jié)束語

      針對Volatility只能進行輸入繁瑣命令的問題,使用Visual Studio C++語言設(shè)計和實現(xiàn)了一個通用的Windows圖形化界面操作程序,測試結(jié)果表明,可以方便實現(xiàn)Windows平臺下Volatility內(nèi)存取證框架的快速使用,更好地發(fā)揮Volatility內(nèi)存取證框架強大的取證分析能力。

      參考文獻(xiàn)

      [1]張瑜,劉慶中,李濤,等.內(nèi)存取證研究與進展[J].軟件學(xué)報, 2015,26(5):1151-1172.

      [2] LIGH M H,CASE A,LEVY J,et al..The Art of Memory Forensics [M].Indianapolis:Wiley,2014.

      [3] MICHALAS A,MURRAY R.MemTri: A Memory Forensics Triage Tool Using Bayesian Network and Volatility[C]//The 9th ACM CCS International Workshop on Managing Insider Security Threats.Dallas:ACM,2017:57-66.

      [4]孫鑫.VC++深入詳解:第3版[M].北京:清華大學(xué)出版社, 2019.

      [5]王耀輝.Windows匿名管道技術(shù)及DOS命令重定向技術(shù)在可視化系統(tǒng)集成中的應(yīng)用[J].長春工業(yè)大學(xué)學(xué)報(自然科學(xué)版),2012,33(3):274-277.

      [6]翟繼強,肖亞軍,楊海陸,等.基于內(nèi)存池標(biāo)記快速掃描技術(shù)的Windows內(nèi)核驅(qū)動對象掃描[J].西北工業(yè)大學(xué)學(xué)報,2019,37(5):1044-1052.

      阜宁县| 乐都县| 文昌市| 东山县| 开化县| 满城县| 广饶县| 龙岩市| 秦皇岛市| 康定县| 汝阳县| 贵阳市| 衡东县| 绍兴市| 大埔县| 杭州市| 洛扎县| 双鸭山市| 绵竹市| 汤原县| 瑞丽市| 太湖县| 龙里县| 泗阳县| 灵川县| 南华县| 吕梁市| 措美县| 乐平市| 新丰县| 璧山县| 扶风县| 岳普湖县| 弋阳县| 湘阴县| 武隆县| 望谟县| 宁强县| 凤翔县| 准格尔旗| 金山区|