999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

通過Glibc堆信息提取檢測house of spirit類型攻擊

2024-07-02 07:21:40翟繼強王家乾韓旭孫海旭
哈爾濱理工大學學報 2024年1期

翟繼強 王家乾 韓旭 孫海旭

摘 要:目前有關堆的取證研究主要是針對Windows系統的堆和NT堆,然而怎樣從轉儲文件中提取出Linux系統Glibc堆信息并沒有得到充分的研究。為了重現Linux系統中Glibc堆的內部信息,采用內存對象vtype描述信息中字段偏移定位結合在內存中Glibc堆實現的方法提取Glibc堆內部信息。并基于此方法研發了基于Rekall框架的3個堆信息提取插件。還研究了house of spirit類型的堆攻擊,建立了攻擊模型并提取其攻擊特征。基于提取的攻擊特征設計出針對house of spirit攻擊的檢測算法。在堆信息提取插件的基礎上研發了攻擊檢測插件。實驗結果表明本方法可以有效地提取Linux系統進程中堆在內存中的信息,并且基于這些信息結合攻擊檢測算法成功檢測內存中的house of spirit類型攻擊。

關鍵詞:Glibc堆;信息提取;堆攻擊檢測;Rekall框架

DOI:10.15938/j.jhust.2024.01.011

中圖分類號: TP319? 文獻標志碼: A

文章編號: 1007-2683(2024)01-0096-11

Detecting House of Spirit Attacks by Glibc Heap Information Extraction

ZHAI Jiqiang, WANG Jiaqian, HAN Xu, SUN Haixu

(School of Computer Science and Technology, Harbin University of Science and Technology, Harbin 150080, China)

Abstract:The current forensic research on heaps mainly extracts information from the heap and the NT heap of Windows However, the study of how to extract the information on the Glibc heap in the Linux from dump files is not sufficient To reproduce the internal information on the Glibc heap, this paper proposes a method to extract the internal information of Glibc heap in the Linux according to the field offset in the vtype description information of memory object combined with Glibc heap implementation in memoryBased on this method, three heap information extraction plugins were developed on the Rekall frameworkIn addition, the House of Spirit heap attack is studied, established an attack model, and extracted its attack featuresA detection algorithm for House of Spirit attack is designed based on the extracted attack features The attack detection plug-in is developed based on the heap information extraction pluginsThe experimental results show that this method can effectively extract the heap information in the memory of the Linux system process, and successfully detect the House of Spirit attack in the memory based on the information combined with the attack detection algorithm

Keywords:Glibc heap; information extraction; heap attack detection; Rekall framework

基金項目: 國家自然科學基金(61403109);國家自然科學基金(61402126);國家自然科學基金(61602133).

0 引 言

近年來,黑客經常通過網絡傳播惡意程序,當計算機染上惡意程序時,內存會留下痕跡,通過內存取證技術就可以捕獲到這些痕跡[1]。堆中含有進程運行時的重要信息,提取出堆中的信息可以了解進程的運行情況[2],因此對堆的內存取證研究在信息安全的防護領域意義重大。

到目前為止,對用戶空間進程堆的分析還沒有得到足夠的重視”[3]。Urrea、Case et al和Light et al主要研究涉及內核相關的工作[4-5]。Leppert和Macht研究的是分析應用程序和它們的堆數據[6-7]。然而他們的分析主要集中在堆中包含的序列化Java對象上,而不是堆對象的管理方式。其他已經存在的插件諸如cmdscan和bash[8],它們分別從Windows的cmd和Linux的bash shell提取命令歷史。然而,這些插件的工作原理只是將堆作為一個大的內聚內存區域來識別其中可能存在的信息[9]。

此外,由Light等[10]進行的記事本程序的堆分析是唯一1個使用了堆細節的研究,但它也僅僅與Windows系統有關。在內存取證范圍之外,也存在關于堆的基礎研究[11],特別是關于Linux進程的堆以及如何管理堆的研究。Ferguson的研究有助于深入理解Glibc的堆實現[12]。然而這項研究更多地集中在利用堆的方式上,因此沒有提供足夠的信息來可靠地收集內存取證場景中堆的所有相關信息。

為了彌補這些缺陷,本文研究了多個版本的基于Glibc堆實現的Linux系統,并且基于內存中Glibc堆實現,結合字段信息偏移定位的方法,提取堆內部信息。經過測試,該方法能成功提取堆內部信息,并且基于這些信息成功設計出檢測house of spirit堆溢出攻擊的插件。本文研究的主要內容如下:

1)研究了多個Linux版本的Glibc堆實現及其在內存中的結構及字段的作用;

2)根據內存中Glibc堆實現,結合內存對象vtype描述信息中字段偏移定位實現提取Glibc堆內部信息的方法;

3)分析了house of spirit類型的堆攻擊,建立其攻擊模型并提取其攻擊特征;

4)基于提取的攻擊特性設計出針對house of spirit攻擊的檢測算法。在堆信息提取插件的基礎上研發了攻擊檢測插件;

5)使用本文研發出的插件檢測house of spirit攻擊。

1 Glibc堆信息提取

1.1 內存中的Glibc堆實現分析

圖1顯示了正在運行進程的堆布局,重點是各個元素之間的引用。Chunk包含實際的用戶/進程數據。通過malloc調用顯式分配,這些塊位于特定的內存區域中。

1.1.1 內存中的Arena和heap_info結構

主堆是一個連續的內存區域,被分割到vm_area_struct結構體描述的多個連續內存區域中。用于描述Main Arena的malloc_state數據結構存儲于映射在內存中的Libc庫中,在Main Arena中沒有heap_info結構實例。

線程 Arena的malloc_state數據結構與堆塊一起存儲在同一內存區域中。在屬于線程Arena的每個映射內存區域的開始處都存在1個heap_info結構的實例。除此之外,在此之后的heap_info結構最終都位于同一映射內存區域中。

如圖2所示,灰色區域是vm_area_struct數據結構所描述的內存區域,藍色標記的結構和塊屬于同一Arena,綠色標記的結構和塊屬于另一Arena。size成員存儲的指針標記相對應heap_info結構所描述的內存區域的大小,ar_ptr成員指向其關聯的Arena,prev成員指向同一Arena中的上1個heap_info結構。

1.1.2 內存中的已分配堆塊

內存中的已分配塊如圖3所示。用戶數據開始于size成員之后,一直到下1個區塊的size成員。size成員后面的malloc_chunk結構的所有成員都會被用戶數據覆蓋。用戶數據覆蓋范圍如圖藍色字段。

如果上一堆塊為已釋放堆塊prev_size字段包含前一個區塊的大小。否則prev_size成員為上1個已分配堆塊用戶數據的一部分。

1.1.3 內存中的已釋放塊和bins

初始態時,所有bins和fastbins都是空的。對于fastbins,它們的指針都初始化為零,而bins有1個指向它們自己的指針。每個bin都包含1個正向和反向鏈接。

圖4顯示了bins 正好包含1個塊的情況。可以看到,實際釋放的塊引用Arena中的虛擬塊,該塊的fd和bk指針與bin 的指針相匹配。

圖5為帶有多個塊的bins。bin的bk指針指向該bin的最后1個塊,fd指針指向第1個塊。第1個塊的bk指針和最后1個塊的fd指針都引用Arena中的虛擬區塊,實現了1個循環雙鏈表。

1.1.4 內存中的MMAPPED塊

MMAPPED塊通常位于vm_area_struct數據結構描述的專用內存區域中。沒有來自malloc_state或heap_info等結構的指針引用內存區域或塊本身。其大小為頁面大小的倍數。此外,由于內核可以放大一個區域,多個MMAPPED塊最終可能位于1個vm_area_struct數據結構描述的同一內存區域中。如果1個位于同一區域的兩個或多個MMAPPED塊之間的MMAPPED塊被釋放,則連續內存區域將被拆分為兩個單獨的區域。

1.2 基于Glibc堆實現的堆信息提取方法

本節根據內存對象vtype描述信息中字段偏移定位結合在內存中Glibc的堆實現提出了一種提取Glibc堆內部信息的方法。

1.2.1 堆初始化信息提取方法

當識別出取證文件為Linux系統的轉儲文件時,使用內存取證框架內置的掃描技術掃描內核空間并定位到task結構體,通過task結構體遍歷VMA結構,獲取Glibc庫在內存中的位置,提取Glibc庫中Main Arena的位置。根據內存對象vtype描述信息中字段偏移定位Glibc堆的相關數據結構并提取堆的信息。堆初始化信息提取方法的流程圖如圖6所示。

該方法可以重現進程運行時,堆的內部信息。該方法首先收集內存中所有的Arena,及其第1個堆塊信息以及MMAP塊的第1個堆塊信息。通過收集到的初始信息,進一步收集內存中已分配及釋放的堆塊信息,通過bins列表收集bins表信息,從而實現對于堆的初始化信息提取。

1.2.2 堆塊信息提取方法

當使用Glibc分配器分配堆塊時,其堆塊起始地址add加上size成員的值即下1個堆塊的地址next_add,堆塊size位的標志位PREV_INUSE指示前1個堆塊是否為已釋放堆塊。該方法基于堆初始化信息提取方法所收集到的信息,遍歷堆空間,基于malloc_chunk數據結構追蹤程序已分配/釋放堆塊信息。提取的信息有已分配/釋放堆塊的數量、及堆塊內部信息等。該方法執行的步驟如下:

步驟1:基于堆初始化信息提取方法所收集到的信息,定位Main Arenafirst_chunk位置;

步驟2:提取first_chunk地址,通過其地址及malloc_chunk數據結構追蹤next_chunk;

步驟3:獲取next_chunk相關數據結構的size位,識別標志位PREV_INUSE。判定前一堆塊為分配對堆塊還是釋放堆塊,保存在相應堆塊列表中,指針保存在相應指針列表中。

步驟4:基于對初始化信息提取方法所收集到的信息,遍歷Thread Arena列表,定位線程heap_info結構體位置,獲取線程malloc_state,緊接著定位到Thread Arenafirstchunk,獲取其地址。

步驟5:重復步驟2和步驟3。

步驟6:統計已分配/釋放堆塊的數量。

2 house of spirit攻擊檢測

2.1 house of spirit攻擊原理及特征

堆分配器具有廣泛的攻擊面。一系列攻擊的重點是利用分配器算法本身[13],例如特定的fastbin或smallbin實現。攻擊者的目標是建立任意指針或任意代碼執行[14]。任意指針尤其危險,因為它們可以用來操縱目標程序的控制流[15]。house of spirit攻擊便屬于此類攻擊。

house of spirit攻擊原理:①修改1個將被釋放的堆指針,使其指向包含全局指針m_ptr的可控內存地址。②在可控內存區域中構建1個偽堆結構,繞過Glibc的檢測機制。可控內存可以作為堆塊釋放到堆塊的鏈表中。③在鏈表中的可控內存再次被應用后,可以實現m_ptr指針數據的可控性,并且可以寫入任意地址。以實現任意地址可控。圖7為house of spirit攻擊過程的示意圖。

因此,當程序中存在1個將要釋放的可控堆指針時,意味著該程序滿足house of spirit攻擊的第1個攻擊特征。

其次如果全局指針m_ptr附近存儲空間為可控區域,并且在可控內存空間中存在偽造堆塊。意味著該程序滿足house of spirit攻擊的第2個攻擊特征。

最后釋放受控內存區域,并將其再次分配為堆塊。基于堆的特性,m_ptr變為可控數據,意味著滿足house of spirit攻擊的第3個攻擊特征。此時攻擊者可以通過修改全局指針數據的值來實現任意地址寫入的目的。

2.2 house of spirit攻擊分析及特征提取

為了實現對house of spirit攻擊的自動檢測,需要監控house of spirit攻擊劫持控制流的過程,并在程序運行過程中收集程序控制流信息和堆塊的操作信息。

為了消除保護機制對檢測過程的影響,根據house of spirit的攻擊過程設計了相應的數據體現過程,并建立了house of spirit攻擊的攻擊模型,如圖8所示。

如果堆指針P是可控堆指針,則表示該程序滿足house of spirit攻擊的第1攻擊特征。如果m_ptr指針附近的存儲區域為可控的,并且在可控內存空間中存在構建的偽造堆塊結構。則表示該程序滿足house of spirit攻擊的第2攻擊特征。釋放指針P,將包含m_ptr的可控內存空間作為堆塊釋放到堆鏈表中,然后再申請,將數據寫入新創建的堆塊中,修改m_ptr的值,實現任意地址寫入,則表示該程序滿足house of spirit攻擊的第3攻擊特征。最終實現控制流劫持。

2.3 house of spirit攻擊檢測算法

基于Glibc堆信息提取方法,動態追蹤內存中程序用戶空間進程堆信息。結合house of spirit攻擊模型的3個攻擊特征,設計針對house of spirit攻擊的攻擊檢測模型,如圖9所示。

針對第1攻擊特性,本文設計了一種house of spirit第1攻擊特征檢測算法。基于堆信息提取所收集到的信息,獲取已分配堆塊列表Achunk和已釋放指針列表Fpointer。當已釋放指針列表新增釋放指針FP時遍歷Achunk檢測其是否屬于之前的已分配堆塊,若其不屬于之前的已分配堆塊,則設置指針FP標志位Is_HouseOfSpirit為true。保存指針FP于特定列表。其所指向堆塊保存在特定堆塊列表中。

house of spirit第1攻擊特征檢測算法如算法1所示。

算法1 house of spirit第一攻擊特征檢測算法

輸入:已分配堆塊列表Achunk;

已釋放堆塊指針列表Fpointer;

將被釋放的堆指針FP;

輸出:house of spirit 第1攻擊特征檢測標志位

Is_HouseOfSpirit。foreach ( FP ){?if (FP not in Achunk )?{? FPchunk = Getchunk(FP);? FPchunk -> Is_HouseOfSpirit = true;? AddIs_HouseOfSpiritChunkList(FPchunk);? AddIs_HouseOfSpiritPointerList(FP);?}?else?{? FPchunk = Getchunk(FP);? AddFpointer(FP);? DelAchunk(FPchunk);? FPchunk->Is_HouseOfSpirit = false;?}

針對第2攻擊特性,本文設計了一種house of spirit第2攻擊特征檢測算法。基于堆信息提取所收集到的信息,定位malloc_state結構體,獲取bin表信息。當檢測到新增釋放指針P時,檢索HouseOfSpiritPointer指針列表,當指針P屬于該列表時,獲取其所指向堆塊的相關數據結構,識別該堆塊size位的值,確認其屬于哪個bin表,遍歷該bin表,若存在則設置標志位Is_FakeHeapBlock。

house of spirit第2攻擊特征檢測算法如算法2所示。

算法2 house of spirit第2攻擊特征檢測算法

輸入:Main Arena數據結構體malloc_state;

第1攻擊特征指針列表HouseOfSpiritPointer;

新增釋放堆指針P;

輸出:house of spirit 第2攻擊特征檢測標志位

Is_FakeHeapBlock。

foreach (P){?if(P in HouseOfSpiritPointer)?{? Pchunk = Getchunk(P);? size = Getsize(Pchunk);? bins = Getbins(malloc_statesize);? if(Pchunk in bins)? {?? Pchunk->Is_FakeHeapBlock = true;? Fakechunk = Heapchunkdump(P,size);? }? else? {?? Pchunk->Is_FakeHeapBlock = false;?Del(HouseOfSpiritPointer(),P) ;? Del(HouseOfSpiritChunk(),Pchunk);?}?}}

針對第3攻擊特征,本文設計了一種house of spirit第3攻擊特征檢測算法。基于Is_HouseOfSpirit檢測組件及其Is_FakeHeapBlock檢測組件所提供信息,獲取疑似攻擊列表。當檢測到新增分配指針P時,檢索HouseOfSpiritPointer指針列表,獲取其所指向的堆塊,追蹤新分配堆塊,在新分配堆塊內查找變化指針,其指向控制流,即shellcode。

house of spirit第3攻擊特征檢測算法如算法3所示。

算法3 house of spirit第3攻擊特征檢測算法

輸入:第1攻擊特征指針列表HouseOfSpiritPointer;

新增分配堆指針AP;

輸出:house of spirit 第3攻擊特征檢測標志位

Is_PtrContorl。

foreach (AP){?if(AP in HouseOfSpiritPointer)?{? if(AP->Is_HouseOfSpirit = true)? {? if(AP->Is_FakeHeapBlock = true)? {Allochunk = Getchunk(AP);?if(Fakechunk != Allochunk)? AP->Is_PtrContorl = true;

基于上述3點,對house of spirit攻擊進行識別檢測。當程序滿足上述3點,被認定為house of spirit攻擊。

即:House_HiJack=Is_HouseOfSpirit && Is_ FakeHeapBlock && Is_PtrContorl。

3 插件的設計與實現

3.1 內存取證框架

本文研發的功能插件,都是基于內存取證框架實現的[16]。內存取證框架可以從轉儲文件和硬件磁盤鏡像中解析休眠文件與頁面文件信息,通過這兩個文件信息的對比能獲取隱藏進程的證據,而且還可以使用可執行頁面檢測算法遍歷內存頁并恢復可執行頁面,幫助調查人員識別代碼注入等[17]。

Rekall框架是 Google 開發的內存分析框架,是開源平臺,可以提供可視化的系統運行狀態,為相關的開發人員提供更多相關的數據和材料。

Rekall中含有各個Windows 10系統版本的配置文件,使用時不需要進行額外的制作[18]。然而Linux操作系統由于其內核版本、子內核版本和定制內核的數量眾多,需要使用者自己進行制作[19]。配置文件里面組合了許多vtype 描述信息。在對內存對象進行分析的時候,這些信息可以讓Rekall框架對轉儲文件中的數據進行解析。

3.2 Heapinit插件

Heapinit插件是基于內存取證框架實現的,該插件提取所有的Arena,及其第1個堆塊信息以及MMAP塊的第1個堆塊信息。

Heapinit插件基于堆初始化信息提取方法實現,相關偽代碼如下所示:

if profile is Linux:

if taskmmdereference is vaild:? task<—Gettaskstruct? process_as<—Get_process_address_space()? vmas = Get_vmas_for_task(task)?if vmas :? Load_libc_profile()? libc_offset = Get_libc_offset(vmas)?if libc_offset:?? Main_arena = libc_offset??? +libc_profilemain_arena_offset?? Initialize_arenas(Main_arena)?? Initialize_heap_first_chunks()?? Initialize_mmapped_first_chunk()?? check_and_report_size_inconsistencies()

3.3 Heapchunkinfo插件

該插件輸出的信息有已分配/釋放堆塊的數量、及堆塊信息等,Heapchunkinfo插件基于堆塊信息提取方法實現,相關的偽代碼如下:

Heapinit<—GetHeapinit()

while(Currentchunk.add< Topchunk.add):

KNextchunk <—Currentchunk.add+Currentchunk.size

if(Nextchunk.PREV_INUSE):

Add(MainAllocatedChunk(), Currentchunk)

Add(MainAllocatedchunkPointer(),Currentchunk.add)

MainAllocatedChunkNum++

else:

Add(MainFreedChunk(), Currentchunk)

Add(MainFreedChunkPointer(),Currentchunk.add)

MainFreedChunkNum++

for arena in Theard_Arena:

heapinfo<—arena.heapinfo

Currentchunk<—heapinfo.firstchunk

while(Currentchunk.add< Topchunk.add):

Nextchunk <—Currentchunk.add+Currentchunk.size

if(Nextchunk.PREV_INUSE):

Add(ThreadAllocatedChunk(), Currentchunk)

Add(ThreadAllocedchunkP(),Currentchunk.add)

ThreadAllocatedChunkNum++

3.4 House_HiJack插件

House_HiJack插件用于檢測house of spirit攻擊。針對house of spirit攻擊模型總結出其三種攻擊特征。針對三種攻擊特征設計針對性的檢測組件。

3.4.1 Is_HouseOfSpirit組件

基于house of spirit第1攻擊特征檢測算法,實現Is_HouseOfSpirit檢測組件的相關偽代碼如下:

Heapinit<—GetHeapinit()

Achunk<—MainAllocatedChunk()

Fpointer <—MainFreedChunkPointer()

FP<—GetAddMainFreedChunkPointer()

if FP in Achunk:

Del(MainAllocatedChunk(), Getchunk(FP))

Del(MainAllocatedChunkPointer(), FP)

else:

FP.IS_HouseOfSpirit = true

Add(HouseOfSpiritPointer(),FP)

Add(HouseOfSpiritChunk(),Getchunk(FP))

3.4.2 Is_FakeHeapBlock組件

基于house of spirit第2攻擊特征檢測算法,實現Is_FakeHeapBlock檢測組件的偽代碼如下:

Heapinit<—GetHeapinit()

main_arena<—Heapinit.main_arena

bins<—GetBins()

P<—GetAddMainFreedChunkPointer()

if P in HouseOfSpiritPointer:

Pchunk<—Getchunk(P)

size<—Pchunk.size

if Pchunk in Bins(size):

P.Is_FakeHeapBlock = true

else:

Del(HouseOfSpiritPointer(),P)

Del(HouseOfSpiritChunk(),Pchunk)

3.4.3 Is_PtrContorl組件

基于house of spirit第3攻擊特征檢測算法,實現Is_PtrContorl檢測組件的偽代碼如下:

Heapinit<—GetHeapinit()

P<—GetAddMainAllocatedChunkPointer()

PA<—GetMainAllocatedChunkPointer()

if P in HouseOfSpiritPointer&& P.Is_FakeHeapBlock:

Pchunk<—GetHouseOfSpiritChunk(P)

Heapchunkdump(Pchunk)

PAchunk<—GetChunk(PA)

Heapchunkdump(PAchunk)

if Pchunk != PAchunk:

P.Is_PtrContorl=true

shellcode<—GetPointer(PAchunk)

else:

Del(HouseOfSpiritPointer(),P)

Del(HouseOfSpiritChunk(),Pchunk)

4 測試與分析

測試分為堆信息提取測試和house of spirit攻擊檢測測試兩部分,堆信息提取測試是為了驗證插件能否在內存空間中有效提取堆的相關信息,house of spirit攻擊檢測測試是為了驗證插件是否能有效檢測出house of spirit攻擊。實驗環境如下:

主機操作系統為Linux內核版本4.9.5-5.7.17 64位,CPU為220GHz,內存大小8G,硬盤容量2T。

4.1 堆信息提取測試

選取init進程和gnome-keyring-d進程作為實驗對象,在495版本、5312版本、5717內核版本的Linux系統中運行gnome-keyring-d程序,隨后分別對系統內存進行轉儲生成轉儲文件,使用本文研發好的3個堆信息提取插件分別提取init進程和gnome-keyring-d進程中的堆信息。

以init進程pid=1為例,圖10顯示了Heapinit插件的運行來獲取Main Arena的位置及其定位的主堆第一個堆塊位置及信息。

同樣以init進程pid=1為例,圖11顯示了Heapchunkinfo插件獲取的進程的部分已分配堆塊的位置信息。

表1顯示了對于不同進程,Heapchunkinfo插件運行后收集到的堆塊相關信息。

從表1中可以看到該插件可以有效地提取出不同版本Linux系統不同進程用戶空間進程堆中的堆塊相關信息。

實驗結果表明本文研發的插件能成功地提取出不同Linux版本的用戶空間進程堆信息。隨著Linux系統的更新,用戶空間進程堆及其結構中字段位置發生了一些變化,當使用vtype描述信息解析堆時,根據信息名稱就能進行解析,因此本文研發的插件具有較強的兼容性。

4.2 堆溢出攻擊檢測測試

House_HiJack使用堆信息提取插件所收集的信息。檢測是否觸發house of spirit攻擊時存在的3個攻擊特性:Is_HouseOfSpirit、Is_FakeHeapBlock和Is_PtrContorl。如果該程序只包含某些特征,則意味著該程序包含house of spirit攻擊,但危害程度較低,或者該程序不包含house of spirit攻擊。如果該程序包含所有三個攻擊特征,則意味著該程序不僅包含house of spirit攻擊,還包含危險程序。

4.2.1 house of spirit攻擊檢測測試

以house_of_ spirit_text程序的自動檢測和追蹤為例,演示House_HiJack的檢測過程。圖12顯示了house_of_ spirit_text測試程序的關鍵觸發代碼。

如代碼所示,將數據寫入輸入指針時存在溢出漏洞。可以溢出并修改bin[0]的值,以寫入指向任何內存地址的輸入指針。然后通過輸入數據來構造1個偽堆塊結構,當程序釋放bin[0]時,會觸發house of spirit攻擊。此時,當程序應用相同大小的堆塊時,可以將目標內存作為堆塊結構應用,攻擊者可以修改關鍵指針的數據,以達到任意地址寫入的目的。

通過監視程序即將釋放的堆指針。當堆指針即將釋放時,Is_HouseOfSpirit組件觸發第1攻擊特性檢測算法以檢查指針變化。如果釋放指針不屬于已知已分配堆塊,則觸發house of spirit第1攻擊特征。如圖13所示。檢測到了house of spirit第1攻擊特征。

在檢測到house of spirit第1攻擊特征后,在程序內存空間中搜索堆內存,若發現偽造堆塊則檢測到house of spirit第2攻擊特征。識別的偽造堆塊如圖14所示。

在檢測到house of spirit第2攻擊特征后,將檢查關鍵指針數據的可控性。如果指針數據是符號值,則表示關鍵指針數據發生了變化,追蹤控制流。指針數據變化檢查結果如圖15所示。

4.2.2 house of spirit攻擊檢測測試結果

本文從shellphish / how2heap測試集中選取5個具有堆溢出漏洞的實驗程序進行驗證。

為了更好地反映系統的效果,比較了插件與現有漏洞攻擊檢測技術的差異。在實驗期間,每個測試程序都提交給House_HiJack和CRAX系統進行測試。

CRAX系統是SKHuang等提出的一種基于動態符號執行和著色分析技術研發的house of spirit類型攻擊檢測工具[20]。通過監控程序的動態運行過程來檢測IP劫持的狀態,使用動態符號執行和著色分析技術來監視程序運行過程中的程序控制流和數據流狀態信息,對觸發house of spirit漏洞觸發點的符號數據的關鍵信息進行監控,構造觸發house of spirit攻擊的數據約束,并求解約束條件,可有效的對該類型攻擊進行檢測。

測試用例生成如表2所示。其中t1表示系統完成實驗樣本分析與檢測所需的時間,t2表示系統完成控制流追蹤所需的時間。

表2中的結果表明,CRAX系統和本文研發的系統都可以成功檢測全部5個house of spirit類型的堆溢出攻擊。

通過比較t1與t2的數據可以看出。CRAX系統對測試程序的分析時間短于本文提出的檢測方法,但CRAX系統無法為所有五個測試程序追蹤控制流。House_HiJack系統為其中3個程序成功追蹤控制流代碼。

這表明CRAX系統雖然能快速的檢測其是否為house of spirit類型堆溢出攻擊,但無法定位其最終的自由指針變化過程,無法追蹤其shellcode。而本文研發的系統可以成功定位該類型攻擊的控制流,通過控制流獲取shellcode。這表明本文提出的檢測方法是有效的。

House_HiJack插件對每個測試程序的檢測過程進行詳細記錄和分析,結果如表3所示。

從表3可以看出,對于pwn200、shaxian和house_ of_spirit_test 3個測試用例,插件可以檢測到house of spirit第1攻擊特征、第2攻擊特征和第3攻擊特征3個關鍵特征。因此,可以在3個攻擊特征檢測的同時追蹤構造相應的偽堆塊和關鍵指針數據變化,從而追蹤控制流,以獲得最終的shellcode代碼。house_ of _spirit和example測試用例只能檢測house_of _spirit第1攻擊特征和第2攻擊特征,但無法檢測到第3攻擊特征,表明測試用例已經實現了對要釋放的指針數據的修改,并偽造了堆塊結構,但沒有進一步的指針利用,因此無法追蹤控制流。

5 結 論

本文提出了一種在Linux下檢測house of spirit類型攻擊的技術。該技術利用動態追蹤用戶空間進程堆信息。為了提取出Glibc堆中的信息,本文分析了Glibc在內存中的堆實現,堆結構中含有的字段并結合內存取證框架和字段在結構信息中的偏移量,設計出提取Glibc堆及其內部信息的功能插件,這些插件可以解析Linux系統中用戶空間進程堆內部含有的信息。

在此基礎上,提出了一種house of spirit型堆溢出漏洞自動檢測模型。基于該模型,實現了house of spirit型堆溢出漏洞的檢測與控制流追蹤。

實驗結果表明本文提出的方法可以重現進程運行時堆及其內部組件在內存中的分配情況,進而反映進程中堆內存信息,通過利用這些信息成功的檢測出Linux平臺下house of spirit類型攻擊的存在并追蹤控制流。

參 考 文 獻:

[1] MOSLI R, LI R, YUAN B, et al. Automated Malware Detection Using Artifacts in Forensic Memory Images[C]//2016 IEEE Symposium on Technologies for Homeland Security (HST). USA :IEEE, 2016:1.

[2] JEONG D, LEE S. Forensic Signature for Tracking Storage Devices: Analysis of UEFI Firmware Image, Disk Signature And Windows Artifacts[J]. Digital Investigation, 2019, 29:21.

[3] CASE A, RICHARD G. Memory forensics: The path forward[J]. Digital Investigation, 2017,20:23.

[4] 張瑜,劉慶中,李濤,等.內存取證研究與進展[J].軟件學報,2015,26(5):1151.

ZHANG Yu, LIU Qingzhong, LI Tao, et al. Research and Development of Memory Forensics[J]. Journal of Software, 2015,26(5):1151.

[5] HEDBERG T D, KRIMA S, CAMELIO J A. Embedding X.509 Digital Certificates in Three-Dimensional Models for Authentication, Authorization, and Traceability of Product Data[J]. Journal of Computing & Information Science in Engineering, 2017,17(1):011008.

[6] KIM D, KWON B J, DUMITRA T. Certified Malware: Measuring Breaches of Trust in the Windows Code-Signing PKI[C]//2017 ACM SIGSAC Conference on Computer and Communications Security.New York: ACM, 2017:1435.

[7] UGARTE-PEDRERO X, GRAZIANO M, BALZAROTTI D. A Close Look at a Daily Dataset of Malware Samples[J]. ACM Transactions on Privacy and Security, 2019,22(1):1.

[8] 翟繼強,陳攀,徐曉,楊海陸.面向Windows 10系統段堆的內存取證研究[J].西北工業大學學報,2021,39(5):1139.

ZHAI Jiqiang, CHEN Pan, XU Xiao, Yang Hailu. Research on Memory Forensics for Windows 10 System Segment Heap [J]. Journal of Northwestern Polytechnical University,2021,39(5):1139.

[9] Description of User Account Control and Remote Restrictions in Windows Vista [EB/OL]. (2020-9-18)[2020-12-09].

[10]Sigcheck v2.81[EB/OL].(2020-9-17)[2020-12-09].

[11]UROZ D, RICARDO J. On Challenges in Verifying Trusted Executable Files in Memory Forensics[J]. Digital Investigation, 2020,32:300917.

[12]SYLVE J T, MARZIALE V, RICHARD G G. Pool Tag Quick Scanning for Windows Memory Analysis[J]. Digital Investiga-tion, 2016,16:25.

[13]翟繼強,徐曉,陳攀,等.基千元數據和指令流的 64 位 Windows 堆棧取證[J].哈爾濱理工大學學報,2021,26(5):51.

ZHAI Jiqiang,XU Xiao,CHEN Pan,et al.Stack Forensics Based on Meta Data and Instruction Flow of 64-bit Windows [J].Journal of Harbin University of Science and Technology,2021,26(5):51.

[14]ZHANG N, ZHANG R, SUN K, et al. Memory Forensic Challenges Under Misused Architectural Features[J]. IEEE Transactions on Information Forensics & Security, 2018,13(9): 2345.

[15]ZHU W T, LIN J. Generating Correlated Digital Certificates: Framework and Applications[J]. IEEE Transactions on Information Forensics & Security, 2016, 11(6):1117.

[16]PANDEY A K, TRIPATHI A K, KAPIL G, et al. Current Challenges of Digital Forensics in Cyber Security[J]. Critical Concepts, Standards, and Techniques in Cyber Forensics, 2020: 31.

[17]PARIDA T, DAS S. PageDumper: a Mechanism to Collect Page Table Manipulation Information At Run-time[J]. International Journal of Information Security, 2021, 20(4): 603.

[18]VOLATILITY: An Advanced Memory Forensics Framework[EB/OL].(2020-11-11)[2021-6-18].

[19]ZHAO X, HUANG S, PAN Z, et al. Buffer Overflow Vulnerability Detection Based on Unsafe Function Invocation[J]. Journal of Physics: Conference Series, 2020, 15(9):1145.

[20]HUANG S K, HUANG M H, HUANG P Y, et al. Crax: Software Crash Analysis for Automaticexploit Generation by Modeling Attacks as Symbolic Continuations[C]// In 2012 IEEE Sixth International Conference on Software Security and Reliability, IEEE, 2012: 78.

(編輯:溫澤宇)

作者簡介:王家乾(1997—),男,碩士研究生;

韓 旭(1997—),男,碩士研究生.

通信作者:翟繼強(1972—),男,博士,教授,碩士研究生導師,E-mail:zaijiqiang@163.com.

主站蜘蛛池模板: 乱人伦视频中文字幕在线| 综1合AV在线播放| 亚洲男女在线| 色噜噜在线观看| 免费不卡视频| 最新国语自产精品视频在| 国产十八禁在线观看免费| 亚洲无码在线午夜电影| 欧美中出一区二区| 一级不卡毛片| a级高清毛片| 国产浮力第一页永久地址| 国产黄网永久免费| 日本AⅤ精品一区二区三区日| 亚洲最新在线| 国产人成在线视频| h视频在线播放| 色综合中文字幕| 久久精品视频一| 成人福利在线看| 99热在线只有精品| 亚洲天堂网在线播放| 亚洲久悠悠色悠在线播放| 欧美午夜小视频| 中国一级毛片免费观看| 精品国产欧美精品v| 国产69精品久久久久妇女| 成人国产免费| 九色综合伊人久久富二代| 伊人久久久久久久久久| 亚洲人成网站色7799在线播放| 国产精品网址你懂的| 婷婷久久综合九色综合88| 色悠久久久久久久综合网伊人| 久久久久国产精品免费免费不卡| 国产精品亚洲一区二区在线观看| 国产又粗又爽视频| 欧美一区精品| 奇米精品一区二区三区在线观看| 亚洲视频免| 国产香蕉在线| 精品视频福利| 国产69精品久久久久孕妇大杂乱| 丰满人妻久久中文字幕| 久久精品国产91久久综合麻豆自制| 中国国产高清免费AV片| 国产在线专区| 欧美区国产区| 三级欧美在线| 福利视频一区| 国产成人免费手机在线观看视频| 成年女人18毛片毛片免费| 国产真实乱子伦精品视手机观看| 色有码无码视频| 99久久精品国产麻豆婷婷| 亚洲码在线中文在线观看| 激情在线网| 爽爽影院十八禁在线观看| 欧美日韩午夜视频在线观看| 91福利在线看| 国产福利不卡视频| 亚洲欧美激情小说另类| 久久人人爽人人爽人人片aV东京热| 亚洲国产成人久久精品软件| 国产精品美女自慰喷水| 亚洲欧美成人网| 黄色网址免费在线| 亚洲精品无码不卡在线播放| 亚洲日韩国产精品无码专区| 国产91特黄特色A级毛片| 亚洲一区二区三区国产精品| 欧美日韩午夜| 久久综合丝袜日本网| 色窝窝免费一区二区三区| 国产欧美网站| 色噜噜在线观看| 亚洲视频无码| 中文字幕天无码久久精品视频免费| 四虎成人免费毛片| 日韩大片免费观看视频播放| 国产a网站| 日韩在线成年视频人网站观看|