實(shí)戰(zhàn)案例:如何使用Speakeasy輕松模擬惡意Shellcode
一、概述
為了能夠大規(guī)模模擬惡意軟件樣本,研究人員近期開發(fā)了Speakeasy模擬框架。這一框架能夠幫助非惡意軟件分析人員的用戶能輕松自動(dòng)獲取分類報(bào)告,同時(shí)可以幫助逆向工程師為難以分類的惡意軟件系列編寫自定義插件。
Speakeasy最初是為了模擬Windows內(nèi)核模式的惡意軟件而創(chuàng)建的,現(xiàn)在也開始支持用戶模式樣本。這一項(xiàng)目的主要目標(biāo)是針對(duì)x86和amd64平臺(tái)進(jìn)行動(dòng)態(tài)惡意軟件分析的Windows操作系統(tǒng)的高度模擬。我們知道,目前也有類似的模擬框架可以實(shí)現(xiàn)對(duì)用戶模式二進(jìn)制文件進(jìn)行模擬,但Speakeasy的特點(diǎn)包括:
1、專為模擬Windows惡意軟件而設(shè)計(jì);
2、支持內(nèi)核模式二進(jìn)制文件的模擬,借此可以分析難以分類的rootkit;
3、結(jié)合當(dāng)前惡意軟件趨勢(shì)進(jìn)行模擬和API支持,提供了無需額外工具就可以提取威脅指標(biāo)的方法;
4、提供了無需其他代碼就完全可配置的模擬環(huán)境。
該項(xiàng)目目前支持內(nèi)核模式驅(qū)動(dòng)程序、用戶模式Windows DLL和可執(zhí)行文件、Shellcode??梢宰詣?dòng)模擬惡意軟件樣本,并生成報(bào)告,以讓分析人員進(jìn)行后期處理。我們的下一個(gè)目標(biāo)是繼續(xù)增加對(duì)新惡意軟件家族或常見惡意軟件家族的支持。
在這篇文章中,我們將展示一個(gè)案例,說明Speakeasy是如何有效地從在線惡意軟件集獲取的Cobalt Strike Beacon樣本中自動(dòng)提取威脅指標(biāo)的。
二、背景
Windows惡意軟件的動(dòng)態(tài)分析一直是惡意軟件分析過程中的一個(gè)關(guān)鍵步驟。要想評(píng)估惡意軟件對(duì)網(wǎng)絡(luò)產(chǎn)生的實(shí)際影響,了解惡意軟件如何與Windows API交互,并提取有價(jià)值的主機(jī)、網(wǎng)絡(luò)威脅指標(biāo)(IoC)就變得至關(guān)重要。通常情況下,研究人員都使用自動(dòng)化或有針對(duì)性的方式進(jìn)行動(dòng)態(tài)分析。例如將惡意軟件按順序在沙箱中運(yùn)行以監(jiān)視其功能,或者手動(dòng)進(jìn)行調(diào)試以確認(rèn)沙箱運(yùn)行期間沒能執(zhí)行的代碼路徑。
在以前,代碼模擬一直被用于測(cè)試、驗(yàn)證甚至是惡意軟件分析。如果能夠模擬惡意軟件代碼,無論對(duì)于人工分析還是自動(dòng)分析來說,都是很有收益的。通過對(duì)CPU指令的模擬,可以對(duì)二進(jìn)制代碼進(jìn)行全面檢測(cè),在這一過程中,可以讓控制流最大程度地覆蓋代碼。在模擬過程中,可以監(jiān)控并記錄所有功能,以便迅速提取威脅指標(biāo),或者其他有用的情報(bào)。
與在虛擬機(jī)沙箱中執(zhí)行相比,模擬具有一些優(yōu)勢(shì),其中一個(gè)關(guān)鍵優(yōu)勢(shì)就是減少環(huán)境中的噪音(誤報(bào)情況)。在模擬過程中,只有由惡意軟件作者編寫的活動(dòng)才會(huì)被記錄下來,或者是在二進(jìn)制文件中靜態(tài)編譯的。在虛擬機(jī)中的API Hooking(特別是在內(nèi)核模式中),可能很難被歸因于惡意軟件本身。舉例來說,沙箱解決方案經(jīng)常會(huì)Hook堆分配器API調(diào)用,但它們通常無法判斷惡意軟件作者是否打算分配內(nèi)存,還是在較低級(jí)別API負(fù)責(zé)內(nèi)存分配。
但是,模擬的方式也有缺點(diǎn)。由于我們?cè)诜治龅碾A段就脫離了操作系統(tǒng),因此模擬器需要負(fù)責(zé)提供API調(diào)用和模擬期間所發(fā)生的內(nèi)存訪問的預(yù)期輸入和輸出。為了成功模擬在正常Windows系統(tǒng)上運(yùn)行的惡意軟件樣本,這需要大量的精力。
三、Shellcode攻擊方式分析
通常,Shellcode是讓攻擊者在受感染系統(tǒng)上保持隱身的絕佳選擇。Shellcode在可執(zhí)行的內(nèi)存中運(yùn)行,不需要依賴于磁盤上的任何文件。這就使得攻擊者的代碼可以輕松隱藏在大多數(shù)形式的傳統(tǒng)取證都無法識(shí)別的內(nèi)存之中。必須首先確定加載Shellcode的原始二進(jìn)制文件,或者必須從內(nèi)存中轉(zhuǎn)儲(chǔ)Shellcode本身。為了逃避檢測(cè),攻擊者可以將Shellcode隱藏在合法的加載程序中,然后注入到另一個(gè)用戶模式進(jìn)程之中。
在文章的第一部分,我們將展示在應(yīng)急響應(yīng)過程中遇到的一個(gè)較為常見的Shellcode惡意軟件樣本,并分析如何對(duì)其進(jìn)行模擬。Cobalt Strike是一個(gè)商業(yè)的滲透測(cè)試框架,通常使用分階段的程序來執(zhí)行其他代碼。其中的一個(gè)階段,往往是通過HTTP請(qǐng)求下載其他代碼,并執(zhí)行HTTP響應(yīng)的數(shù)據(jù)內(nèi)容。在這種情況下,這個(gè)響應(yīng)的數(shù)據(jù)就成為了Shellcode,通常要對(duì)內(nèi)容進(jìn)行解碼,然后得到有效的PE,PE中包含反射加載其自身的代碼。在Cobalt Strike框架中,這種情況的Payload通常是被稱為Beacon的植入工具。Beacon被設(shè)計(jì)為駐留在內(nèi)存中的后門,用于在受感染的Windows系統(tǒng)上維持命令與控制(C2)。由于它是使用Cobalt Strike框架構(gòu)建的,所以無需進(jìn)行任何代碼層面上的修改,就能夠輕松調(diào)整其核心功能和命令與控制信息。
上述這些特點(diǎn),促使攻擊者能夠在受感染的網(wǎng)絡(luò)中快速構(gòu)建和部署新的Beacon注入工具變種。因此,我們就需要使用一種工具來快速提取Beacon的變種組件,并且在理想情況下,最好不要占用惡意軟件分析人員的過多寶貴時(shí)間。
四、Speakeasy原理分析
Speakeasy當(dāng)前使用基于QEMU的模擬器引擎Unicorn來模擬x86和amd64體系結(jié)構(gòu)的CPU指令。Speakeasy未來希望通過抽象層支持任意模擬引擎,但目前還是依賴于Unicorn。
如果要借助沙箱分析所有樣本,可能需要使用完整的操作系統(tǒng)沙箱來分析全量樣本,這種情況下就很難模擬所有版本的Windows系統(tǒng)。沙箱可能難以按照需要去擴(kuò)展,并且運(yùn)行樣本需要花費(fèi)大量的時(shí)間。但是,如果能夠確定特定的惡意軟件家族(例如案例中的Beacon),我們可以大幅減少需要進(jìn)行逆向工程的變種的數(shù)量。在對(duì)惡意軟件的變種進(jìn)行分析的過程中,最好是可以以自動(dòng)化的方式來生成一個(gè)高級(jí)的分類報(bào)告。這樣一來,就會(huì)讓惡意軟件分析人員有更多的時(shí)間專注于可能需要更深入分析的樣本。
使用Speakeasy時(shí),Shellcode或Windows PE被加載到模擬地址空間中。在嘗試模擬惡意軟件之前,首先創(chuàng)建了Windows內(nèi)核模式和用戶模式要進(jìn)行基本模擬所需的Windows數(shù)據(jù)結(jié)構(gòu)。進(jìn)程、驅(qū)動(dòng)程序、設(shè)備和用戶模式庫都是偽造的,這樣可以為惡意軟件提供一個(gè)近乎真實(shí)的執(zhí)行環(huán)境。惡意軟件可以與模擬的文件系統(tǒng)、網(wǎng)絡(luò)、注冊(cè)表繼續(xù)你功能交互。所有這些模擬的子系統(tǒng)都可以使用獨(dú)立的配置文件進(jìn)行配置。
Windows API由Python API處理程序進(jìn)行處理。這些處理程序?qū)L試模擬這些API的預(yù)期輸出,以便惡意軟件樣本繼續(xù)預(yù)期的執(zhí)行路徑。在定義API處理程序時(shí),我們所需要的就是API的名稱、API期望的參數(shù)數(shù)量以及可選的調(diào)用約定規(guī)范。如果沒有提供任何調(diào)用約定,則假設(shè)為stdcall。在目前版本中,如果嘗試了不支持的API調(diào)用,Speakeasy將記錄不支持的API,并繼續(xù)進(jìn)行下一個(gè)入口點(diǎn)。下圖展示了由kernel32.dll導(dǎo)出的Windows HeapAlloc函數(shù)的示例處理程序。
默認(rèn)情況下,會(huì)模擬所有入口點(diǎn)。例如,對(duì)于DLL來說,會(huì)模擬所有導(dǎo)出;對(duì)于驅(qū)動(dòng)程序,會(huì)分別模擬IRP主要函數(shù)。此外,還會(huì)跟蹤在運(yùn)行時(shí)發(fā)現(xiàn)的動(dòng)態(tài)入口點(diǎn)。其中一些動(dòng)態(tài)入口點(diǎn)包括創(chuàng)建的線程或注冊(cè)的回調(diào)。在嘗試確定惡意軟件的影響時(shí),將活動(dòng)與特定的入口點(diǎn)關(guān)聯(lián)起來對(duì)于全局來說至關(guān)重要。
五、導(dǎo)出報(bào)告
當(dāng)前,模擬工具捕獲的所有事件都會(huì)記錄在JSON格式的報(bào)告中,以便后續(xù)處理。報(bào)告中包含在模擬過程中記錄的關(guān)鍵事件。與大多數(shù)模擬工具一樣,所有Windows API調(diào)用及其參數(shù)都會(huì)被記錄。所有的入口點(diǎn)都會(huì)被模擬,并且標(biāo)記相應(yīng)的API列表。除了API跟蹤外,還會(huì)記錄其他特定事件,包括文件、注冊(cè)表和網(wǎng)絡(luò)訪問。所有解碼后或駐留在內(nèi)存中的字符串都會(huì)被轉(zhuǎn)儲(chǔ)并展現(xiàn)在報(bào)告中,從而揭示出通過靜態(tài)字符串分析無法找到的關(guān)鍵信息。下圖展示了Speakeasy的JSON報(bào)告中記錄的文件讀取事件的示例:
六、運(yùn)行速度
由于該框架是使用Python編寫的,所以速度是一個(gè)明顯需要關(guān)心的維度。Unicorn和QEMU是使用C編寫的,可以提供非??斓哪M速度。但是,我們編寫的API和事件處理程序使用了Python。本地代碼和Python之間的轉(zhuǎn)換過程會(huì)花費(fèi)一定時(shí)間,應(yīng)該盡量減少。所以,我們的目標(biāo)就是僅在絕對(duì)必要時(shí)再執(zhí)行Python代碼。默認(rèn)情況下,我們用Python處理的唯一事件就是內(nèi)存訪問異?;騑indows API調(diào)用。為了捕獲Windows API調(diào)用并在Python中進(jìn)行模擬,導(dǎo)入表中加入了無效的內(nèi)存地址,因此我們僅在訪問導(dǎo)入表時(shí)才會(huì)切換到Python。當(dāng)Shellcode訪問惡意軟件的模擬地址空間中加載的DLL導(dǎo)出表時(shí),也會(huì)使用類似的技術(shù)。通過執(zhí)行盡可能少的Python代碼,我們可以控制該框架在一個(gè)合理的速度,同時(shí)我們?cè)试S用戶開發(fā)該框架的功能。
七、內(nèi)存管理
Speakeasy在模擬工具引擎的內(nèi)存管理方面實(shí)現(xiàn)了輕量級(jí)。跟蹤并標(biāo)記由惡意軟件分配的每個(gè)內(nèi)存塊,就可以獲取到有意義的內(nèi)存轉(zhuǎn)儲(chǔ)。對(duì)于分析人員來說,能夠?qū)阂饣顒?dòng)與特定的內(nèi)存塊進(jìn)行關(guān)聯(lián)會(huì)非常有幫助。通過記錄對(duì)敏感數(shù)據(jù)結(jié)構(gòu)的內(nèi)存讀寫,就可以揭示出API調(diào)用記錄可能無法體現(xiàn)的惡意軟件真實(shí)意圖,這對(duì)于rootkit樣本來說特別有用。
Speakeasy提供了可選的“內(nèi)存跟蹤”功能,該功能將記錄樣本涉及到的所有內(nèi)存訪問。會(huì)記錄所有讀取、寫入和執(zhí)行的內(nèi)存。由于模擬工具標(biāo)記了所有分配的內(nèi)存塊,因此可能會(huì)從該數(shù)據(jù)中收集到更多上下文。如果惡意軟件對(duì)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進(jìn)行了Hook,或者將執(zhí)行轉(zhuǎn)移到動(dòng)態(tài)映射的內(nèi)存中,那么通過這一過程就能有效發(fā)現(xiàn),對(duì)于調(diào)試或分析來說很有幫助。但是,這一功能的資源消耗較高,默認(rèn)情況下是關(guān)閉的。
提供給惡意軟件的模擬環(huán)境中包括常見的數(shù)據(jù)結(jié)構(gòu),Shellcode可以在其中查找并執(zhí)行導(dǎo)出的Windows系統(tǒng)功能。為了調(diào)用Win32 API,必須解析導(dǎo)出的函數(shù),這樣才能對(duì)目標(biāo)系統(tǒng)產(chǎn)生有意義的影響。在大多數(shù)情況下(包括Beacon),這些函數(shù)是通過遍歷進(jìn)程環(huán)境塊(Process Environment Block,PEB)來定位的。Shellcode可以從PEB訪問進(jìn)程的虛擬地址空間中所有已加載模塊的列表。
下圖展示了通過模擬Beacon Shellcode樣本生成的內(nèi)存報(bào)告。在這里,我們可以看到惡意軟件遍歷PEB,以查找kernel32.dll的地址。然后,惡意軟件會(huì)手動(dòng)解析并調(diào)用VirtualAlloc API的函數(shù)指針,然后繼續(xù)進(jìn)行解碼,將其自身復(fù)制到新緩沖區(qū)中,以控制執(zhí)行。
內(nèi)存跟蹤報(bào)告:
八、配置
Speakeasy是高度可配置的,允許用戶創(chuàng)建自己的配置文件。其中,可以指定不同的分析程度,以優(yōu)化各個(gè)用例。最終目標(biāo)是讓用戶在不調(diào)整代碼的情況下輕松切換配置選項(xiàng)。當(dāng)前,配置文件的結(jié)構(gòu)是JSON文件。如果用戶沒有提供配置文件,則使用框架的默認(rèn)配置。哥哥字段都記錄在Speakeasy的項(xiàng)目文檔中。
下圖展示了網(wǎng)絡(luò)模擬工具配置部分的代碼片段。在這里,用戶可以指定在進(jìn)行DNS查找時(shí)返回哪些IP地址,或者在某些Beacon樣本的案例中,指定在TXT記錄查詢期間返回哪些二進(jìn)制數(shù)據(jù)。同樣,也可以自定義HTTP響應(yīng)。
網(wǎng)絡(luò)配置:
許多惡意軟件在HTTP階段都會(huì)使用HTTP GET請(qǐng)求來檢索Web資源。比如Cobalt Strike或Metasploit在這一階段,會(huì)立即執(zhí)行響應(yīng)的內(nèi)容,以繼續(xù)下一階段??梢允褂肧peakeasy的配置文件對(duì)響應(yīng)的內(nèi)容進(jìn)行輕松配置。在上圖的配置中,除非被覆蓋,否則框架會(huì)返回default.bin文件中包含的數(shù)據(jù)進(jìn)行響應(yīng)。該文件當(dāng)前包含調(diào)試中斷指令(int3),因此,如果惡意軟件嘗試執(zhí)行數(shù)據(jù),就會(huì)退出,并記錄在報(bào)告中。使用這個(gè)工具,我們可以輕松的將惡意軟件分類為“可下載其他代碼”的下載工具。類似地,還可以配置文件和注冊(cè)表路徑,將返回?cái)?shù)據(jù)變?yōu)橄M赪indows系統(tǒng)上運(yùn)行的樣本。
九、限制
如前所述,模擬的方式還帶來了一些挑戰(zhàn)。如何與被模擬的系統(tǒng)保持一致的功能,這對(duì)我們來說是一場(chǎng)持續(xù)的戰(zhàn)斗。但是,這也提供了控制惡意軟件和包含更多功能的獨(dú)特機(jī)會(huì)。
在模擬沒有完全完成的情況下,仍然可以生成模擬報(bào)告和內(nèi)存轉(zhuǎn)儲(chǔ),以收集盡可能多的數(shù)據(jù)。例如,后門可能會(huì)成功安裝其持久性機(jī)制,但無法連接到C2服務(wù)器。在這種情況下,仍然能夠記錄下來主機(jī)層面的指標(biāo),為分析人員提供價(jià)值。
同時(shí),可以輕松地將缺少的API處理程序添加到模擬工具中,以應(yīng)對(duì)這些情況。對(duì)于許多API處理程序來說,僅返回成功代碼就足以使惡意軟件繼續(xù)執(zhí)行。盡管不可能對(duì)每個(gè)惡意軟件進(jìn)行完全模擬,但針對(duì)特定惡意軟件家族的功能可以極大地減少逆向工程相同家族變種的需求。
十、使用方法
Speakeasy目前已經(jīng)在GitHub上發(fā)布??梢允褂庙?xiàng)目中的Python安裝程序腳本安裝,也可以使用提供的Dockerfile安裝在Docker容器中。該框架不受限于平臺(tái),可以在Windows、Linux或macOS中模擬Windows惡意軟件。有關(guān)更多信息,請(qǐng)參見項(xiàng)目的README文件。
安裝后,Speakeasy可以作為獨(dú)立的庫,也可以使用提供的run_speakeasy.py腳本直接調(diào)用。在這篇文章中,我們將演示如何從命令行模擬惡意軟件樣本。關(guān)于如何將Speakeasy作為庫使用的信息,請(qǐng)參考項(xiàng)目的README文件。
其中包含的腳本用于模擬單個(gè)樣本,并根據(jù)記錄的事件生成JSON報(bào)告。下圖展示了run_speakeasy.py的命令行參數(shù)。
Speakeasy還提供了豐富的開發(fā)和Hooking接口,用于編寫自定義插件。
十一、實(shí)戰(zhàn):Beacon注入工具的模擬過程
對(duì)于這一樣本,我們將模擬Shellcode,該Shellcode解碼后執(zhí)行Beacon植入程序變種,這個(gè)變種的SHA-256哈希值為7f6ce8a8c2093eaf6fea1b6f1ef68a957c1a06166d20023ee5b637b5f7838918。我們首先要驗(yàn)證樣本的文本格式。該樣本應(yīng)該由加載程序啟動(dòng),或者作為漏洞利用Payload的一部分。
惡意軟件的Hex轉(zhuǎn)儲(chǔ)示例:
從上圖,我們可以清楚地看到該文件不是PE文件格式。有Shellcode樣本分析經(jīng)驗(yàn)的分析人員可能會(huì)注意到前兩個(gè)字節(jié)——0xfc 0xe8。這些字節(jié)可以反匯編為Intel的匯編指令cld和call。cld指令通常是獨(dú)立Shellcode的前奏,因?yàn)樗鼘⑶宄较驑?biāo)記,使惡意軟件可以輕松地分析系統(tǒng)DLL導(dǎo)出表中的字符串?dāng)?shù)據(jù)。Shellcode通常使用后面的call指令,通過在其后跟隨pop指令來獲取當(dāng)前程序計(jì)數(shù)器。這樣,惡意軟件就可以從內(nèi)存中獲取其執(zhí)行位置。
由于我們確定該樣本是Shellcode,那么我們就使用命令行調(diào)用Speakeasy,如下圖所示。
使用命令行模擬惡意軟件樣本:
該命令將指示Speakeasy將偏移量為0的樣本模擬為x86 Shellcode。請(qǐng)注意,即使我們正在模擬代碼,并沒有實(shí)際執(zhí)行代碼,但它們?nèi)匀皇枪粽呱傻亩M(jìn)制文件。因此,如果要使用本地CPU模擬引擎,最好還是在虛擬機(jī)中模擬惡意代碼。
在模擬后,將生成一個(gè)名為report.json的報(bào)告。此外,還會(huì)將模擬環(huán)境的完整內(nèi)存轉(zhuǎn)儲(chǔ)壓縮后寫入memory_dump.zip。該惡意軟件將被加載到偽造的容器進(jìn)程內(nèi)部的模擬內(nèi)存中,以模擬Shellcode期望的真實(shí)執(zhí)行環(huán)境。一旦開始模擬,模擬的API調(diào)用將會(huì)連同其參數(shù)和返回值一起記錄到屏幕上。下圖展示了Beacon示例,該示例分配了一個(gè)新的內(nèi)存緩沖區(qū),將在其中復(fù)制自身。然后,惡意軟件開始手動(dòng)解析它需要執(zhí)行的導(dǎo)出。
網(wǎng)絡(luò)配置:
經(jīng)過額外的解碼和設(shè)置后,惡意軟件嘗試連接到其C2服務(wù)器。在下圖中,我們可以看到惡意軟件使用Wininet庫,通過HTTP連接并讀取了C2服務(wù)器中的數(shù)據(jù)。
用于連接到C2的Wininet API調(diào)用:
惡意軟件將無限次循環(huán),直到從C2服務(wù)器接收到期望的數(shù)據(jù)為止。Speakeasy將在預(yù)定時(shí)間后超時(shí),并生成JSON報(bào)告。
網(wǎng)絡(luò)C2事件:
在生成報(bào)告的“network_events”和“traffic”部分中,匯總了網(wǎng)絡(luò)指標(biāo)。在上圖中,我們可以看到IP地址、端口號(hào),還可以看到與惡意軟件建立的連接相關(guān)的HTTP標(biāo)頭。
對(duì)于這個(gè)樣本來說,當(dāng)我們模擬樣本時(shí),我們指示Speakeasy創(chuàng)建模擬地址空間的內(nèi)存轉(zhuǎn)儲(chǔ)。這會(huì)為每個(gè)內(nèi)存分配及周圍的上下文創(chuàng)建一個(gè)ZIP壓縮包,其中包括基址、大小、由模擬工具分配的標(biāo)簽(用于標(biāo)識(shí)內(nèi)存分配對(duì)應(yīng)的內(nèi)容)。下圖展示了在模擬過程中創(chuàng)建的內(nèi)存轉(zhuǎn)儲(chǔ)文件的摘要。文件名包含與每個(gè)內(nèi)存分配關(guān)聯(lián)的標(biāo)簽和基址。
通過模擬獲得的單個(gè)內(nèi)存塊:
如果僅在這些內(nèi)存轉(zhuǎn)儲(chǔ)上運(yùn)行字符串,就可以快速找到值得關(guān)注的字符串和Beacon配置數(shù)據(jù),如下圖所示。
惡意軟件的配置字符串?dāng)?shù)據(jù):
在分類的分析中,我們可能僅僅關(guān)心已知家族的惡意軟件變種的威脅指標(biāo)。但是,如果需要對(duì)樣本進(jìn)行完整的逆向工程,我們還可以以DLL形式恢復(fù)Beacon惡意軟件的解碼后版本。通過簡(jiǎn)單地對(duì)MZ魔術(shù)字節(jié)執(zhí)行原始的grep,我們唯一得到的結(jié)果就是與原始樣本分配相關(guān)的內(nèi)存轉(zhuǎn)儲(chǔ),以及惡意軟件將自身復(fù)制到的虛擬分配緩沖區(qū)。
包含已解碼惡意軟件的內(nèi)存轉(zhuǎn)儲(chǔ):
如果我們查看原始Shellcode緩沖區(qū)中的字節(jié),就可以看到它在復(fù)制之前已經(jīng)被解碼,并且位于內(nèi)存中,準(zhǔn)備從偏移量0x48進(jìn)行轉(zhuǎn)儲(chǔ)。現(xiàn)在,我們可以成功地將解碼后的Beacon DLL加載到IDA Pro中進(jìn)行全面分析。
已解碼的惡意軟件成功加載到IDA Pro中:
十二、總結(jié)
在這篇文章中,我們展示了如何使用Speakeasy模擬框架自動(dòng)分類Beacon惡意軟件樣本。我們用它來發(fā)現(xiàn)有價(jià)值的網(wǎng)絡(luò)指標(biāo),從內(nèi)存中提取配置信息,并得到了解碼后的Beacon DLL,以進(jìn)行進(jìn)一步分析。