基于Glibc堆实现的堆信息提取方法

未命名 07-20 阅读:126 评论:0

基于glibc堆实现的堆信息提取方法
技术领域
1.本发明涉及一种基于glibc堆实现的堆信息提取方法,该方法在计算机内存取证领域中有着很好的应用,主要用于重现linux系统中用户空间进程堆内部含有的信息和检测不同类型的堆攻击。


背景技术:

2.计算机取证技术是网络安全应急响应的基本步骤,恶意软件在计算机系统中执行的异常或未授权操作,可通过分析系统的磁盘驱动器或内存进行检测。内存取证作为计算机取证的分支,是指从计算机物理内存和页面交换文件中查找、提取、分析易失性证据,方法是通过硬件接口获取、软件获取、虚拟机快照等方式获取内存转储文件,将其保存到磁盘中,使用专用软件(如rekall framework)进行分析,以重构相关的安全事件。近年来,由于网络攻击技术的内存化和隐遁化,攻击者不再将关键的数字证据存放在磁盘中,并且在实时系统中检测很容易受到rootkit攻击的欺骗,因此,针对内存的内存取证技术逐渐变得越来越重要。
3.在linux系统中,每一个用户进程都有自己的私有内存空间。由于内存表示正在运行的系统的当前状态,它包含有关浏览器历史记录、输入的命令、活动网络连接、加载的驱动程序以及活动进程的信息,这些信息允许我们详细了解进程以前进行的活动。虽然这些信息大部分位于内核空间,可以使用现有的解决方案对其进行检查,但也有许多位于用户空间的信息可能对于取证调查来说是感兴趣的。例如,用户空间进程的堆通常是各种数据的丰富来源,并且根据具体的应用程序,可能包含凭据、ip地址/dns名称或命令历史记录等。到目前为止,从内存取证的角度来看,堆主要被认为是一个大的内聚内存区域,这使得人工识别内部的相关信息相当困难。
4.因此,为了高效、可靠地识别和提取这些信息,需要一个与进程相同或至少相似的堆视图:关于数据的位置、在特定位置存储的数据类型以及特定数据部分占用的内存量。否则,研究者只能将堆作为一个大内存区域使用,所有信息都位于其中,没有任何已知的结构。


技术实现要素:

5.本发明的目的是辅助取证分析人员利用linux系统中用户空间进程堆内部含有的信息。
6.本发明的实现包括以下步骤。
7.第一步,通过硬件接口或软件获取计算机物理内存的转储文件;
8.第二步,将内存转储文件载入rekall取证框架并查找与之匹配的操作系统版本和配置文件。根据配置文件确定系统版本内核,识别内存转储文件的内存布局,定位task结构体;
9.第三步,通过task结构体遍历vma结构,获取glibc库在内存中的位置,提取glibc
库中main-arena的位置;
10.第四步,根据内存对象vtype描述信息中字段偏移定位glibc堆的相关数据结构并提取堆的初始化信息。
11.第五步,根据提取到的堆初始化信息进一步提取堆块信息。
12.作为本发明的进一步改进,所述的第一步,判断目标系统是否为虚拟机,是否处于运行状态以及是否拥有目标系统的操作权限,决定通过软件运行的方式还是硬件接口方式生成转储文件。
13.作为本发明的进一步改进,所述的第二步,根据操作系统的主要版本号、次要版本号,导入相应配置文件,使用内存取证框架内置的扫描技术扫描转储文件的物理地址空间,识别地址空间硬编码,定位内核空间中task结构体的位置体。
14.作为本发明的进一步改进,所述的第三步,根据进程task结构体的内部信息,判断其是否为用户空间进程,加载进程地址空间,遍历vma结构体,结合glibc配置文件,获取glibc库在内存空间中的位置,进而获取main-arena。
15.作为本发明的进一步改进,所述的第四步,对main-arena进行初始化处理,验证arena循环双链表的完整性,通过malloc_state结构体的next成员定位所有arena,结合内存对象vtype描述信息中字段偏移定位,获取main-arena的first堆块信息并获取所有非主arena的heap_info结构体,通过malloc_state及heap_info结构体获取所有非主arena的first堆块。
16.作为本发明的进一步改进,所述的第五步,基于提取的main_arena.first_heap位置,通过其地址及malloc_chunk数据结构追踪next_chunk,获取next_chunk相关数据结构的size位,识别标志位prev_inuse。判定前一堆块为分配对堆块还是释放堆块,保存在相应列表中。遍历thread arena列表,定位线程heap_info结构体位置,重复上面操作。最后统计全部已分配/释放堆块的数量及大小。
17.本发明的核心技术内容在于通过内存中glibc堆实现结合内存对象vtype描述信息中字段偏移定位获取用户空间进程堆内部信息。
18.本发明提供的堆信息提取方法。是一种基于glibc堆实现的信息提取方法,能有效的提取linux系统用户空间进程堆内的信息。能辅助取证分析人员利用linux系统中用户空间进程堆内部含有的信息。
附图说明
19.图1是本发明的获取内存转储文件的流程图。
20.图2是本发明的获取堆块初始化信息流程图。
21.图3是本发明的获取堆块信息流程图。
具体实施方式
22.为了使本发明的实施例中的技术方案能够清楚和完整地描述,以下结合实施例中的附图,对本发明进行进一步的详细说明。
23.取内存转储文件过程如附图1所示,以5.7.17内核版本的linux系统为例。
24.第一步,判断目标操作系统不是虚拟机;
25.第二步,判断目标操作系统正处于运行状态;
26.第三步,判断拥有目标操作系统的操作权限,那么采用软件的方式获取目标操作系统的内存转储文件。
27.获取堆初始化信息的过程如附图2所示。
28.第一步,将内存转储文件载入rekall取证框架并查找与之匹配的操作系统版本和配置文件。判断配置文件是否适配,识别内存转储文件的内存布局,获取task结构体地址task.addr。
29.第二步,通过task结构体mm成员判断该进程是否为用户空间进程。
30.第三步,通过task结构体mm成员所指向的mm_struct结构体的mmap成员遍历vm_area_struct结构体,获取vma列表。
31.第四步,通过glibc配置文件提供的glibc版本,通过字符串匹配获得glibc库在vma列中的位置libc.startaddr及libc.endaddr;
32.第五步,通过libc.startaddr加上glibc配置文件提供的malloc_state偏移量offset获取malloc_state结构体。
33.第六步,通过malloc_state结构体的next成员验证arena双链表循环是否完整。获取所有arena保存在列表中。
34.第七步,通过malloc_state结构体的获取main-arena的first_chunk地址。
35.第八步,通过arena列表获取thread_arena[1],获取heap_info结构体,首地址加heap_info结构体的size成员的值,获取thread_arena[1]的first_chunk。
[0036]
第九步,便利arena列表,重复第八步,知道获取全部thread_arena的heap_info结构体及first_chunk信息。
[0037]
第十步,进行检查验证,确保获取到的堆初始化信息的正确性。
[0038]
获取堆块信息过程如附图3所示。
[0039]
第一步,通过main-arena.first_chunk_addr加上malloc_chunk结构体size成员大小获取next_chunk_addr,通过判断当前堆块malloc_chunk结构体的标志位prev_inuse的值。若为true则保存next_chunk_addr到已分配堆块列表,若为false则保存到以释放堆块列表。
[0040]
第二步,以新获得的next_chunk_addr加上该堆块malloc_chunk结构体size成员继续获取下一堆块地址,重复第一步后续内容,直到遍历完成全部堆块。
[0041]
第三步,遍历arena列表,通过thread_arena的first_chunkaddr地址重复第一二步,直到全部arena列表的全部堆块遍历完成。
[0042]
第四步,统计所有分配/释放堆块的数量和大小。堆块列表保存获取的各个堆块信息的首地址及大小。
[0043]
为了测试该方法的有效性,在4.9.5版本、5.3.12版本、5.7.17内核版本的linux系统中运行gnome-keyring-d程序,随后分别对系统内存进行转储生成转储文件选取gnome-keyring-d进程进行堆信息提取测试,提取gnome-keyring-d进程中的堆信息。
[0044]
测试结果如表1所示。
[0045][0046]
根据表1中数据可以明确的看出来,本发明的方法能成功地提取出不同linux版本的用户空间进程堆信息。因此本发明是非常有效和实用的。
[0047]
上方所述是结合附图对本发明的实施例进行的详细介绍,本文的具体实施方式只是用于帮助理解本发明的方法。对于本技术领域的普通技术人员,依据本发明的思想,在具体实施方式及应用范围内均可有所变更和修改,故本发明书不应理解为对本发明的限制。

技术特征:
1.一种基于glibc堆实现的堆信息提取方法,该方法包括以下步骤:步骤1:通过硬件接口或软件获取计算机物理内存的转储文件步骤2:将内存转储文件载入rekall取证框架并查找与之匹配的操作系统版本和配置文件。根据配置文件确定系统版本内核,识别内存转储文件的内存布局,定位task结构体。步骤3:通过task结构体遍历vma结构,获取glibc库在内存中的位置,提取glibc库中main-arena的位置。步骤4:根据内存对象vtype描述信息中字段偏移定位glibc堆的相关数据结构并提取堆的初始化信息。步骤5:根据提取到的堆初始化信息进一步提取堆块信息。2.根据权利要求1所述的基于glibc堆实现的堆信息提取方法,其特征在于,所述步骤1中,通过硬件接口或软件获取计算机物理内存的转储文件,具体步骤为:步骤1-1判断目标系统是否为虚拟机,若是则拍摄快照文件,若不是进行步骤1-2;步骤1-2判断目标系统是否处于运行状态,若不是,则检查磁盘中的休眠文件、崩溃转储和分页文件,若目标系统处于运行状态进行步骤1-3;步骤1-3判断是否拥有目标系统的操作权限,若拥有权限,则通过软件运行的方式生成转储文件,否则通过硬件接口方式获取内存转储文件。3.根据权利要求1所述的基于glibc堆实现的堆信息提取方法,其特征在于,所述步骤2中,将内存转储文件载入rekall取证框架并查找与之匹配的操作系统版本和配置文件并定位task结构体,具体步骤为:步骤2-1查找并解析构建字符串,获取操作系统的主要版本号、次要版本号以及进程pid;步骤2-2根据版本号导入相应配置文件。步骤2-3使用内存取证框架内置的扫描技术扫描转储文件的物理地址空间,识别地址空间硬编码,定位内核空间中task结构体的位置体。4.根据权利要求1所述的基于glibc堆实现的堆信息提取方法,其特征在于,所述步骤3中,通过task结构体遍历vma结构,获取glibc库在内存中的位置,提取glibc库中main-arena的位置,具体步骤为:步骤3-1根据进程task结构体的内部信息,判断其是否为用户空间进程,若是用户空间进程进行步骤3-2;步骤3-2加载进程地址空间,遍历vma结构体,将其保存在列表中;步骤3-3加载glibc配置文件,获取glibc库在内存空间中的位置结合glibc配置文件获取main-arena。5.根据权利要求1所述的基于glibc堆实现的堆信息提取方法,其特征在于,在所述步骤4中,根据内存对象vtype描述信息中字段偏移定位glibc堆的相关数据结构并提取堆的初始化信息,具体过程为:步骤4-1首先对main-arena进行初始化处理;步骤4-2检测arena循环双链表是否完整;步骤4-3通过malloc_state结构体的next成员获取所有arena,保存在列表中;步骤4-4根据内存对象vtype描述信息中字段偏移定位,获取main-arena的first堆块
信息并获取所有非主arena的heap_info结构体;步骤4-4根据malloc_state及heap_info结构体获取所有非主arena的first堆块。6.根据权利要求1所述的基于glibc堆实现的堆信息提取方法,其特征在于,在所述步骤5中,根据提取到的堆初始化信息进一步提取堆块信息,具体过程为:步骤5-1基于提取的堆初始化信息,定位main_arena.first_heap位置;步骤5-2提取first_heap地址,通过其地址及malloc_chunk数据结构追踪next_chunk;步骤5-3获取next_chunk相关数据结构的size位,识别标志位prev_inuse。判定前一堆块为分配对堆块还是释放堆块,保存在相应堆块列表中,指针保存在相应指针列表中。步骤5-4基于提取的堆初始化信息,遍历thread arena列表,定位线程heap_info结构体位置,获取线程malloc_state,定位thread_arena.firstchunk,获取其地址。步骤5-5重复步骤5-2和步骤5-3;步骤5-6统计已分配/释放堆块的数量及大小。

技术总结
本发明涉及一种基于Glibc堆实现的堆信息提取方法。本发明首先对计算机物理内存建立转储文件;然后利用Rekall取证框架获取操作系统版本和配置文件信息;在操作系统版本和配置文件信息支持下使用内存取证框架内置的扫描技术扫描内核空间并定位到task结构体;如果定位到task结构体,则遍历VMA结构,获取glibc库在内存中的位置,提取glibc库中main-arena的位置;根据内存对象vtype描述信息中字段偏移定位glibc堆的相关数据结构并提取堆的相关信息。本发明的堆信息提取方法能够有效提取Linux系统中用户空间进程堆内部含有的信息。Linux系统中用户空间进程堆内部含有的信息。Linux系统中用户空间进程堆内部含有的信息。


技术研发人员:翟继强 王家乾 韩旭
受保护的技术使用者:哈尔滨理工大学
技术研发日:2023.03.09
技术公布日:2023/7/19
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐