自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實(shí)例講解基于Volatility的內(nèi)存分析技術(shù)Part 1

系統(tǒng) Windows 安全
在本文中,我們將為讀者詳細(xì)介紹如何使用Volatility進(jìn)行內(nèi)存分析。

[[348463]]

歡迎各位閱讀基于Volatility的內(nèi)存分析系列文章。為了順利閱讀本系列文章,讀者最好具備Windows內(nèi)部運(yùn)行機(jī)制方面的基礎(chǔ)知識(shí)。準(zhǔn)確來說,讀者需要了解內(nèi)存在Windows中運(yùn)行機(jī)制方面的基礎(chǔ)知識(shí),為此,我們將給出詳盡的介紹。除此之外,不管你有什么不懂的知識(shí),都不會(huì)影響您理解本文的內(nèi)容!

閱讀清單:

  •  內(nèi)核模式
  •  用戶模式
  •  虛擬內(nèi)存
  •  Windows進(jìn)程

一點(diǎn)背景知識(shí):

內(nèi)存取證(有時(shí)稱為內(nèi)存分析)是指對(duì)計(jì)算機(jī)內(nèi)存轉(zhuǎn)儲(chǔ)中易失性數(shù)據(jù)進(jìn)行的一種分析。信息安全專業(yè)人員可以通過內(nèi)存取證,來調(diào)查和識(shí)別那些不會(huì)在硬盤驅(qū)動(dòng)器數(shù)據(jù)中留下痕跡的攻擊或惡意行為。

通過內(nèi)存取證,安全人員可以了解運(yùn)行時(shí)的各種系統(tǒng)活動(dòng),例如開放的網(wǎng)絡(luò)連接或最近執(zhí)行的命令和進(jìn)程等。

程序在計(jì)算機(jī)上運(yùn)行之前,首先需要被加載到內(nèi)存中,這使得內(nèi)存取證變得非常重要——這意味著所有被創(chuàng)建、檢查或刪除的程序或數(shù)據(jù)都將被保存到RAM中。這其中包括圖像、所有Web瀏覽活動(dòng)、加密密鑰、網(wǎng)絡(luò)連接或注入的代碼片段。在許多情況下,某些證據(jù)只能在RAM中找到,例如在崩潰期間存在的開放網(wǎng)絡(luò)連接。由于攻擊者可以開發(fā)只駐留在內(nèi)存中而不在硬盤落地的惡意軟件,從而使標(biāo)準(zhǔn)的計(jì)算機(jī)取證方法幾乎看不到它。這使得內(nèi)存取證工具變得愈發(fā)重要。

Volatility是一個(gè)先進(jìn)的內(nèi)存取證框架。它為調(diào)查人員提供了許多自動(dòng)工具,人們可以利用其先進(jìn)的內(nèi)存分析技術(shù)揭示主機(jī)上的惡意活動(dòng)。需要指出的是,該框架是用python實(shí)現(xiàn)的,而且是開源的。該框架的下載地址為https://github.com/volatilityfoundation/volatility,相關(guān)的文檔地址為https://github.com/volatilityfoundation/volatility/wiki/Command-Reference-Mal。

在這個(gè)系列文章中,我們將以Coreflood木馬為例,來介紹相關(guān)的內(nèi)存取證方法。

Coreflood是由一群俄羅斯黑客創(chuàng)建并在2010年發(fā)布的木馬和僵尸網(wǎng)絡(luò)。FBI已經(jīng)將“大約17個(gè)州或地方政府機(jī)構(gòu),包括1個(gè)警察局;3個(gè)機(jī)場(chǎng);2個(gè)國防承包商;5個(gè)銀行或金融機(jī)構(gòu);大約30個(gè)學(xué)院或大學(xué);大約20個(gè)醫(yī)院或醫(yī)療公司;以及數(shù)百家企業(yè)”[1]列入受感染系統(tǒng)的名單中。截至2011年5月。它已經(jīng)感染了世界各地230多萬臺(tái)計(jì)算機(jī);到目前為止,它仍然是一個(gè)巨大的威脅。——維基百科

對(duì)于該樣本軟件,可以通過下面的地址進(jìn)行下載(.vmem文件):

https://github.com/mgoffin/malwarecookbook/blob/master/16/6/coreflood.vmem.zip

這個(gè)文章系列的目標(biāo)是借助于volatility來了解這個(gè)惡意軟件的行為,以及相應(yīng)的內(nèi)存取證方法。我將嘗試發(fā)掘所有關(guān)于Coreflood的取證工具,以了解這個(gè)惡意軟件背后的動(dòng)機(jī)到底是什么。我希望能從這次取證分析中學(xué)到一些新的東西,并教給大家一些新的東西!

為了開始調(diào)查,我想先搞清楚主機(jī)上運(yùn)行的進(jìn)程。為此,我們只需借助于pslist命令,就能查看是否有明顯可疑的進(jìn)程在運(yùn)行。

Windows使用一個(gè)循環(huán)的雙鏈接列表_EPROCESS結(jié)構(gòu)體來跟蹤所有的活動(dòng)進(jìn)程;并且,這個(gè)列表位于內(nèi)核中。而Volatility就是利用了這個(gè)事實(shí):首先,它會(huì)尋找PsActiveProcessHead指針,因?yàn)樵撝羔樦赶騼?nèi)核的_EPROCESS結(jié)構(gòu)體列表的起始位置;之后,Volatility會(huì)遍歷這個(gè)列表,從而找出正在運(yùn)行的所有進(jìn)程。

 

 主機(jī)上正在運(yùn)行的所有進(jìn)程:volatility -f coreflood.exe pslist命令的輸出結(jié)果

我們可以看到,似乎一切都很正常,不過有幾件事引起了我們的注意。當(dāng)前,IE瀏覽器在運(yùn)行,同時(shí)cmd也在運(yùn)行,看來正確的做法是檢查出站連接,因?yàn)閻阂廛浖赡軅窝b成Internet Explorer瀏覽器,以隱藏自己與C&C的通信流量。

此外,我們也可以檢查一下cmd在那邊做什么,這一點(diǎn)將在后面討論。

一個(gè)最簡(jiǎn)單的操作就是查看出站連接。如果IE出站連接沒有找到可疑之處,我們就需要從其他地方尋找惡意活動(dòng)的蹤跡。

下面,我們將使用connscan命令來檢查之前終止的和當(dāng)前活動(dòng)的連接:

“要想使用池標(biāo)簽掃描功能查找_TCPT_OBJECT結(jié)構(gòu)體,請(qǐng)使用connscan命令。這樣做的好處是,我們不僅可以從活動(dòng)的連接中查找證據(jù),還可以從之前被終止的連接中搜索證據(jù)。”——摘自Volatility的官方文檔

實(shí)際上,這種工作方式就是先通過掃描物理內(nèi)存,找到4個(gè)字節(jié)的簽名0x54455054(“TCPT”),然后,解析出接下來的28個(gè)字節(jié),并將其作為完整的_TCPT_OBJECT結(jié)構(gòu)體。

實(shí)例講解基于Volatility的內(nèi)存分析技術(shù)Part 1

 volatility -f coreflood.vmem connscan命令的輸出結(jié)果

從上面的輸出結(jié)果來看,主機(jī)好像正在進(jìn)行正常的通信,所有的通信都是由pid 2044進(jìn)程(IEXPLORE.EXE)創(chuàng)建的。我查了一下這些IP的地理位置,它們都是注冊(cè)在一些大公司的名下,比如微軟、AT&T等公司。當(dāng)然,關(guān)于這些IP的數(shù)據(jù)可能已經(jīng)改變了,因?yàn)楫?dāng)前考察的vmem文件已經(jīng)有些陳舊了;此外,這些也可能是黑客為了欺騙調(diào)查人員而對(duì)這些IP地址數(shù)據(jù)做了手腳。

為了確保的確沒有惡意通信,我們應(yīng)該檢查入站連接是否安全。為此,我們可以使用sockscan命令,該命令將掃描內(nèi)存中的_ADDRESS_OBJECT結(jié)構(gòu)體。通過掃描內(nèi)存中的這個(gè)內(nèi)存結(jié)構(gòu),我們可以深入了解以前打開的套接字和當(dāng)前打開的套接字。

 

 volatility -f coreflood.vmem sockscan命令的輸出結(jié)果

正如我們所看到的,進(jìn)程pid 2044(即IEXPLORE.EXE)中有一些非常奇怪的入站連接。這看起來非??梢桑?,是時(shí)候拿出我們的內(nèi)存取證神器Volatility,檢查一下該進(jìn)程中是否隱藏著惡意軟件了。

我們之所以說Volatility是一個(gè)內(nèi)存取證神器,是因?yàn)樗峁┝嗽S多功能強(qiáng)大的惡意軟件分析工具。

我們經(jīng)常用到的第一個(gè)分析工具就是malfind命令。這個(gè)命令可用于尋找進(jìn)程內(nèi)存中的注入代碼。它是通過尋找已分配內(nèi)存的段(通過查看VAD樹數(shù)據(jù)結(jié)構(gòu)),并檢查它們是否有未映射到磁盤上任何文件的可執(zhí)行代碼的線索來實(shí)現(xiàn)這一點(diǎn)的。

“VAD節(jié)點(diǎn)還引用了一些其他的內(nèi)核結(jié)構(gòu)體,這些結(jié)構(gòu)體可能對(duì)調(diào)查人員非常有用……因此,如果該內(nèi)存區(qū)被用于已映射的文件(如加載的DLL),則可以引用相應(yīng)的_FILE_OBJECT結(jié)構(gòu)體,并提取文件的名稱。這可以為調(diào)查人員提供一種替代的方法來列出進(jìn)程加載的模塊,然后可以與其他方法找到的模塊進(jìn)行比較,從而找到庫注入和隱藏模塊的相關(guān)證據(jù)。”——Science Direct

用于檢查一段內(nèi)存是否包含注入代碼的方法是檢查VAD的頁面權(quán)限,例如EXECUTE權(quán)限等。如果內(nèi)存中的某一段具有執(zhí)行權(quán)限,并且它沒有映射到磁盤上的任何可執(zhí)行文件的話,就說明這里很可能存在注入的代碼。

 

 volatility -f coreflood.vmem malfind命令的輸出結(jié)果,這里似乎存在誤報(bào)

正如我們?cè)谏蠄D中看到的,該命令的輸出結(jié)果好像并沒有帶來太多真正有價(jià)值的信息。

這可能是該惡意軟件沒有加載任何顯式PE(可移植可執(zhí)行文件)代碼到內(nèi)存中,而只是注入了一些shellcode所致,又或者映像的頭部被分頁了所致。此外,還有一種可能——惡意軟件通過調(diào)用注入的DLL的ImageBase上的VirtualFree,從內(nèi)存中清除PE的頭部,以避免檢測(cè)到。當(dāng)然,也可能是由于某些原因,這部分內(nèi)存被分頁或無法訪問。無論如何,我們還不能確定這里存在惡意活動(dòng),因?yàn)槲覀儧]有找到確切的證據(jù)。

接下來我們可以使用的命令是apihooks。

“它可以用來查找IAT、EAT、Inline式hook,以及幾種特殊類型的hook。對(duì)于Inline hook,它可以檢測(cè)直接和間接位置的CALL和JMP指令……以及對(duì)內(nèi)核內(nèi)存中未知代碼頁的調(diào)用。”——Volatility官方文檔

為了理解這里到底發(fā)生了什么,我們需要快速回顧一下IAT和EAT。

當(dāng)可執(zhí)行文件第一次被加載時(shí),Windows加載器將負(fù)責(zé)讀取文件的PE結(jié)構(gòu),并將可執(zhí)行文件的映像加載到內(nèi)存中。其中一步,就是加載應(yīng)用程序使用的所有dll,并將它們映射到進(jìn)程地址空間。

此外,可執(zhí)行文件還會(huì)指出在每個(gè)dll中需要的所有函數(shù)。不過,由于函數(shù)地址不是靜態(tài)的,所以,我們必須開發(fā)一種機(jī)制,以允許修改這些變量,這樣就不必在運(yùn)行時(shí)修改所有已編譯的代碼了。

這一點(diǎn)是通過導(dǎo)入地址表(IAT)實(shí)現(xiàn)的;而IAT,實(shí)際上就是由windows加載器在加載dll時(shí)所填寫的函數(shù)指針表。

EAT的工作方式和IAT基本一致,只不過它是供代碼庫用于將函數(shù)導(dǎo)出到映像可執(zhí)行文件中的,以便供程序從其中將函數(shù)地址導(dǎo)入到IAT中(具體細(xì)節(jié)我就不多說了)。

惡意軟件可以通過操縱這兩個(gè)內(nèi)存結(jié)構(gòu)體,使得可執(zhí)行文件調(diào)用其他函數(shù),而非原本要調(diào)用的函數(shù)。

我之所以要在IEXPLORE.EXE上使用apihooks參數(shù),是因?yàn)楦鶕?jù)sockscan的輸出結(jié)果,我已經(jīng)懷疑它可能被篡改了。

實(shí)例講解基于Volatility的內(nèi)存分析技術(shù)Part 1

 我們將使用apihooks參數(shù)并將輸出結(jié)果保存在一個(gè)文本文件中

難以置信! Internet Explorer已經(jīng)被鉤取了十幾次以調(diào)用同一個(gè)函數(shù)。

實(shí)例講解基于Volatility的內(nèi)存分析技術(shù)Part 1

 上圖內(nèi)容摘自保存apihooks命令輸出結(jié)果的文本文件。實(shí)際上,這只是十幾個(gè)不同函數(shù)的hook中的一個(gè)而已;它們都調(diào)用同一個(gè)地址0x7ff82a6e。

我們可以看到,在這個(gè)例子中,惡意軟件在WINHTTP.dll中“掛鉤”了LoadLibrary。

LoadLibrary可用于將庫模塊加載到進(jìn)程的地址空間中,并返回一個(gè)句柄,該句柄可用于GetProcAddress以獲取DLL函數(shù)的地址。因此,LoadLibrary是一個(gè)非常顯而易見的鉤取對(duì)象,因?yàn)槲覀冎篮芏郟E都會(huì)使用其他dll,并導(dǎo)入這些庫中的相關(guān)函數(shù)。

我們需要搞清楚惡意軟件在這里試圖達(dá)到什么目的。為了做到這一點(diǎn),我們需要嘗試深入到惡意軟件試圖執(zhí)行的那段代碼中。因此,我們要使用Volatility的volshell工具。Volshell是一個(gè)非常強(qiáng)大的工具,可以用來瀏覽內(nèi)存的內(nèi)容。我們可以跳轉(zhuǎn)到內(nèi)存的各個(gè)部分,之后,我們不僅可以查看其中的內(nèi)容,還可以反匯編或讀取其中的內(nèi)容。

 

 輸入volshell命令,然后按照流程操作即可。

在輸入volshell命令后,我使用cc(

實(shí)例講解基于Volatility的內(nèi)存分析技術(shù)Part 1

 上面高亮顯示的文字(從上到下)向我們展示了被鉤住的地址,在它的下面,還高亮顯示了惡意軟件希望我們的代碼要跳轉(zhuǎn)到的地址。

如上圖所示,為了弄清楚該惡意軟件的意圖,我們需要反匯編相關(guān)的地址。為此,我將這個(gè)地址作為參數(shù)復(fù)制到volshell命令dis(

我們最終得到的輸出結(jié)果,就是惡意注入的代碼。

 

關(guān)于這個(gè)惡意代碼的作用,我們將在后面的文章中加以介紹。心急的讀者,也可以自己動(dòng)手嘗試一下。

在本文中,我們?yōu)樽x者介紹了如何使用volatility在主機(jī)運(yùn)行的進(jìn)程中查找潛在的惡意代碼。為此,我們首先介紹了一些基本的操作,比如確保沒有任何可疑的東西,這樣,一旦出現(xiàn)可疑的進(jìn)程或不常見的IP地址相關(guān)的流量,我們就能立即察覺。最后,我們通過volatility考察了惡意軟件樣本是否通過向無辜的進(jìn)程注入代碼來實(shí)現(xiàn)隱身,并發(fā)現(xiàn)了一些有趣的代碼。在下一篇文章中,我們將深入研究這些代碼,看看這個(gè)惡意軟件到底想達(dá)到什么目的。

祝閱讀愉快,我們下篇見。

本文翻譯自:https://medium.com/bugbountywriteup/memory-analysis-for-beginners-with-volatility-coreflood-trojan-part-1-89981433eeb6如若轉(zhuǎn)載,請(qǐng)注明原文地址。

 

責(zé)任編輯:姜華 來源: 嘶吼網(wǎng)
相關(guān)推薦

2010-06-29 19:08:23

UML建模技術(shù)

2017-02-20 10:24:41

2021-10-03 14:37:06

編程語言程序員代碼

2010-06-30 09:07:09

UML建模分析

2009-05-06 11:22:45

銀行信用卡構(gòu)架

2010-07-26 14:25:06

Widget開發(fā)

2010-06-30 17:57:08

UML用例建模

2010-06-18 11:28:14

2009-08-17 17:53:07

RSS訂閱開發(fā)實(shí)例

2011-04-01 09:04:09

RIP

2021-01-16 16:07:51

RustAndroid Nat內(nèi)存

2011-05-23 13:24:01

2011-04-01 09:40:25

OSPF路由器

2010-01-18 15:22:47

交換機(jī)MAC地址

2009-11-23 20:16:17

PHP接口特性

2009-11-23 17:31:49

PHP時(shí)間戳

2011-04-07 13:09:03

明文驗(yàn)證

2012-08-13 10:14:36

IBMdW

2015-07-08 10:35:17

2010-06-10 11:15:18

UML實(shí)例
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)