本发明属于电子取证
技术领域:
,特别涉及一种基于结构链逆向的内存碎片文件重建方法及系统。
背景技术:
:随着信息技术的迅猛发展,网络犯罪事件频繁发生,比如电信诈骗、信息勒索以及apt攻击等。数字取证调查已经成为制止和威慑网络犯罪关键技术手段之一。磁盘取证是数字取证领域中一种重要的调查技术,对于数字犯罪调查具有重要意义。但随着反取证技术的发展,新型“无文件攻击”等网络威胁仅在内存中运行,不在磁盘上留下任何痕迹信息,具有更强的隐蔽性和复杂性。此外,磁盘容量的不断增大,导致磁盘取证具有局限性。内存中含有与网络攻击威胁有关的大量实时证据和线索,而且内存中的网络连接、系统加载的模块以及执行的指令等证据信息和磁盘中的证据不同,更能说明网络攻击威胁发生的场景。因此内存取证成为当前数字调查领域重要研究方向。目前,内存取证主要聚焦于基于内存映像的进程、网络连接信息、剪贴板数据、命令行历史、口令等证据的提取和分析,而针对内存映像中数据文件雕刻技术研究较少。在早期内存取证实践工作中,调查人员利用markrussinovich开发的“strings”工具、winhex等工具,从内存映像中搜索口令、ip地址、email地址等证据信息,该方法的前提是必须知道所要查找信息的内容。之后,有人讨论了基于内存映像精确提取证据的可行性,并设计了内存映像中进程对应的可执行文件的提取方法,通过使用指针来重构可执行文件,并分析了可执行文件由于运行时多种变量的变化因素,导致基于内存映像提取的可执行文件与其在磁盘上相应的文件不能完全相同。利用虚拟地址描述符(virtualaddressdescriptor,vad)树来定位、解析结构,遍历进程的虚拟内存空间,并为取证调查人员提供内存转储中有用的信息。基于vad的内存数据文件提取方法,即通过遍历vad树,定位共享文件,然后查找对象表,进而找到文件信息。以上方法在实际使用中具有局限性,即如果进程关闭或者内存中进程结构信息被覆盖将不能有效定位vad信息,从而造成文件信息不能恢复。另外,基于页面哈希比较的数据文件提取,该方法计算内存映像中页面哈希,并和磁盘中文件对应页的哈希进行比较,进而提出内存映像中文件碎片,要求取证调查人员必须提前知道磁盘中文件内容,而不能直接从内存映像中提取。此外,当磁盘中文件映射到内存页面时,内存中文件数据还有可能被修改,导致内存页面哈希值不同于磁盘上对应页面,从而造成内存文件提取无效。此外gao等人研究了实时系统中qq的取证方法,从中获取通信列表、qq账号、聊天记录、qq讨论组、显示名称,该方法通过逆向分析qq的内存结构来实现,但不具有通用性。另外,内存取证框架和内存取证分析工具套件能够从易失性内存映像中提取取证痕迹,但更多集中于内存映像中进程、线程等结构,以及可执行文件提取。虽然基于磁盘的文件雕刻算法有很多,但是应用实验结果表明,生成的文件雕刻结果几乎全部是虚假结果,精确度极低。综上所述,基于内存映像的碎片数据文件雕刻算法的通用性问题没有得到很好的研究,为了从内存中提取有效的网络犯罪行为相关的文件数据和文件行为,探索物理内存中新的文件雕刻机制具有非常重要的理论意义和现实价值。技术实现要素:为此,本发明提供一种基于结构链逆向的内存碎片文件重建方法及系统,利用基于结构链逆向的内存碎片文件雕刻重建来满足电子(数字)犯罪取证实际应用,能够适合于正在运行的基于windows不同版本操作系统的物理内存中网络入侵行为的数据文件的恢复与分析,具有较强的实用性。按照本发明所提供的设计方案,一种基于结构链逆向的内存碎片文件重建方法,包含如下内容:扫描并分析内存介质映像,建立碎片集合到文件碎片子集的映射,获取文件碎片子集中的碎片元素;基于操作系统结构逆向分析,构建文件碎片子集中碎片元素的连接关系及逻辑位置,重构内存碎片文件。作为本发明基于结构链逆向的内存碎片文件重建方法,进一步的,内存介质映像扫描分析中,先过滤非数据文件内存碎片,其中,所述非数据文件内存碎片包含:包含有0x00/0xff的内存页面碎片及含有可执行代码的内存页面碎片。作为本发明基于结构链逆向的内存碎片文件重建方法,进一步地,利用文件内核对象池分配结构特征,扫描内存碎片集合,确定其中的数据文件个数作为内核结构数;利用内核文件对象结构逆向分析来确定内存文件在内存映像中的结构信息,进而构建出内存文件碎片子集。作为本发明基于结构链逆向的内存碎片文件重建方法,进一步地,文件碎片子集和碎片集合s之间构成关系表示为:其中,0≤i≤k,filei表示文件碎片子集,k表示内存碎片中数据文件个数。作为本发明基于结构链逆向的内存碎片文件重建方法,进一步地,基于操作系统结构逆向分析,使用内核调试工具对文件对象及相关结构进行逆向分析重建。作为本发明基于结构链逆向的内存碎片文件重建方法,进一步地,文件对象及相关结构分析中,首先定位内存映像中的文件对象,通过偏移量确定文件名称及内存区对象信息;依据内存区对象信息获取用于维护数据文件的控制区域指针变量;利用控制区域指针变量得到用于管理文件与内存碎片页面映射的分段结构;通过该分段结构获取数据文件页面存储内容,并结合共享缓存映射结构中缓存管理器来查找数据文件在虚拟地址中的数据。作为本发明基于结构链逆向的内存碎片文件重建方法,进一步地,基于操作系统结构逆向分析重构内存碎片文件,包含:利用扫描工具定位内存文件对象并通过重建内存文件对象字段进行文件结构重构的文件对象扫描重建;通过定位数据部分对象中的控制区域结构重构数据文件空间字段及用于索引字节页面的mmpte数组结构的文件碎片提取重建;及通过定位共享缓存映射结构并重构变量来依据基地址变量获取缓存文件信息的缓存文件重建。进一步地,基于上述的方法,本发明还提供一种基于结构链逆向的内存碎片文件重建系统,包含:扫描分析模块和逆向重构模块,其中,扫描分析模块,用于扫描并分析内存介质映像,建立碎片集合到文件碎片子集的映射,获取文件碎片子集中的碎片元素;逆向重构模块,用于基于操作系统结构逆向分析,构建文件碎片子集中碎片元素的连接关系及逻辑位置,重构内存碎片文件。本发明的有益效果:本发明从集合论的角度通过分析内存映像碎片集合中元素的特性,从内存文件构成的原理分析内存碎片文件雕刻重建问题,并通过分析内存映像中文件对象及其相关结构的特征字段,来实现基于结构链逆向的内存碎片文件雕刻,解决现有文件子集碎片元素确定问题以及文件碎片子集中元素连接顺序问题。并进一步经过实验数据验证,本方案不但能够提取内存映像中已经打开的文件内容信息,而且还可以在文件已经关闭情况下获取文件的内容信息,以及文件的元数据信息,比如文件来源、文件名称等;且,即使不能雕刻出有效的数据文件,但是针对雕刻文件中结构信息的分析,仍然能够分析出网络攻击过程中病毒木马的感染过程,这对于实时取证调查具有重要意义,具有较好的应用前景。附图说明:图1为实施例中内存碎片文件重建原理示意;图2为实施例中文件对象分配单元签名十六进制特征示意;图3为实施例中重建算法流程示意;图4为实施例中bob.vmem映像文件元数据雕刻结果示意。具体实施方式:为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。内存数据文件是pdf、doc、xls、txt以及jpg等类型文件在内存中由用户进程或攻击进程打开和访问的文件,内存文件由两部分构成,一是文件内容信息,另外是文件名(文件路径)等元数据信息。这些信息含有与网络犯罪有关的重要证据。内存数据文件的存储特性与磁盘中文件的存储状态和规律不同,磁盘中文件构成单元(簇)多是连续存放,而内存文件构成单元(内存页面)多是不连续存放,这导致内存文件构成单元严重碎片化。本发明实施例,提供一种基于结构链逆向的内存碎片文件重建方法,包含如下内容:扫描并分析内存介质映像,建立碎片集合到文件碎片子集的映射,获取文件碎片子集中的碎片元素;基于操作系统结构逆向分析,构建文件碎片子集中碎片元素的连接关系及逻辑位置,重构内存碎片文件。假定在t时刻获取内存映像,构成内存映像的内存页面称之为“碎片”,那么内存映像可以抽象为一个碎片集合:s={f1,f2,...,fi,...,fj,...,fn},其中,fi表示内存映像中的任意一个内存碎片,n表示集合s的大小,并且n值取决于内存介质容量以及内存页面的大小(如果内存容量一定的情况下,页面大小越大,则内存碎片集合s中元素个数就越小,通常情况下内存页面大小为4k字节,即4096字节)。集合s具有如下特性:(1)确定性:对于1≤i,≤n,fi表示集合s中的内存碎片元素,用fi∈s表示,这表明fi是在t时刻获取的内存映像中确定的一个元素,而不是其它时刻获得的内存映像中的元素。(2)互异性:对于1≤i,j≤n,fi,fj表示集合s中的内存碎片,如果i≠j,那么表示碎片集合s中两个不同碎片,在内存空间上不存在交集,并且两个碎片的内容及其元数据(比如内存碎片的地址信息等)都不相同,即集合中的任何两个元素都不相同,或者在同一集合里不能出现相同的元素。(3)无序性:集合中的元素是平等的,没有先后顺序。因此判断两个集合是否相同,只需要比较他们的元素是否一样,不需要考察排列顺序是否一样。但由于内存数据的动态变化性,以及内存映像获取的时间变化性,使得不同时刻的内存碎片集合都是不同的。根据操作系统运行原理,内存文件由多个页面构成,由内存映像碎片集合s中元素特性可知,内存文件是s的一个子集,即文件碎片子集,用filei表示,其中0≤i≤k,k表示内存碎片中最大文件个数。此外,由于内存文件的页面碎片之间存在一定的顺序关系。事实上如果内存文件的页面碎片之间的顺序破坏,则导致内存文件损坏或者内容变化。为此,本案实施例将内存文件抽象为一个序列,用(filei,k)表示。(filei,k)=(fi,1,fi,2,…,fi,j,fi,j 1,…,fi,k)其中1≤j≤m,m表示filei碎片子集中元素个数。(filei,k)具有如下特性:(1)有限性,即(filei,k)中的项是有限的,这是根据文件构成原理确定的,尽管理论上文件长度可以无限,但不具有实际意义。(2)有序性,即(filei,k)中项与项之间的关系是有序的,这种有序构成了文件的内在关系,具体可以体现在内存页面间的结构关系、语义关系、签名特征关系,比如fi,1是该序列中的第一项,表示文件头碎片,fi,k是该序列最后一项,表示文件尾碎片,这通常是根据文件类型头尾签名特征确定的。(3)元数据性,即用来说明(filei,k)的文件名、大小,甚至是由哪个进程打开等信息。需要说明的是,(filei,k)具有元数据,但并不是基于该序列中的页面碎片提取出来,而是从含有操作系统相关结构的页面碎片中提取出来。为此,一个内存碎片文件可以抽象为:metadata||(filei,k)。而根据以上分析,基于内存映像的碎片文件雕刻问题可以看作:集合s到metadata||(filei,k)的一个映射,即s→metadata||(filei,k),也就是找到这种映射关系,就能解决内存碎片文件雕刻。内存碎片文件雕刻问题是一个内存碎片集合到文件元数据和文件序列的映射问题,该问题可以分解为以下三个子问题。(1)文件碎片子集元素确定子问题含有数据文件的页面碎片集合仅是整个内存映像碎片集合的一部分。此外,含有操作系统内核模块、内核进程、硬件驱动,以及应用进程等的页面也都是内存映像碎片集合中的元素。因此构成数据文件的碎片集合是内存映像碎片集合的一个子集,利用集合划分思想,数据文件碎片子集和内存碎片集合s之间具有如下关系:其中,0≤i≤k,filei表示文件碎片子集,其实质是具有特定文件类型(如office文件类型、acrobatpdf文件类型等)的一个数据文件的所有页面。文件碎片子集元素确定子问题就是要确定一个数据文件中的所有页面碎片,即建立碎片集合s到文件碎片子集filei的映射,即s→filei,利用该映射关系获得数据文件碎片子集中的所有碎片。(2)文件碎片子集元素关系顺序确定子问题由于内存碎片集合s中元素的无序性,并且文件碎片子集根据集合中元素无序性特征,因此filei中元素也具有无序性。假设filei中有m个元素碎片,则可能的连接顺序共有m×(m-1)×(m-2)×…×2×1种。文件碎片子集元素关系确定子问题就是要找到filei中元素之间的唯一的序列,即filei→(filei,k)的映射。(3)文件元数据构建子问题文件元数据通常指的是文件系统中维护文件内容数据的相关数据。目前内存数据文件元数据尚没有定义,内存文件元数据是指在内存中由操作系统及其相关结构维护的文件信息,比如文件名、文件大小等数据。因此含有内存文件元数据的页面碎片并不是某个filei碎片子集中的元素,而是具有操作系统结构的内存碎片上。因此,要构建内存文件元数据,前提是必须找到含有操作系统相关数据结构的内存碎片,并在该内存碎片上找到文件元数据的具体位置。由于内存碎片元素确定性、互异性和无序性,通过直接分析内存碎片中的二进制数据,难于解决上述三个子问题。基于内存管理理论和机制,内存页面是通过操作系统的内核对象结构进行管理,也就是说如果找到内存映像中含有操作系统相关结构的碎片,并针对文件对象及其链接关系进行逆向重建,可解决碎片文件雕刻的三个子问题。碎片文件雕刻模型的基本思想是,利用内存中操作系统结构逆向分析技术,分析windows系统中文件对象结构及相关结构,逆向构建文件对象的结构链,通过结构链中的指针关系确定文件碎片子集中的元素及碎片元素间的连接关系,并利用相关结构中文件名等字段构建文件元数据。本案实施例可选择将文件对象作为结构链逆向重建的起始结构,其优点在于能够解决现有雕刻算法中进程被关闭或者被覆盖后造成文件不能雕刻的问题。利用winhex工具分析可知文件对象结构的内存分配单元具有明显的签名特征,如图2所示。即每个文件对象的池分配单元的签名特征都含有“46696ce5”都有这样的十六进制信息,因此该签名特征可以定位文件对象结构链的起始结构。此外构成文件的内存页面都有一个页面指针,通过文件页面地址指针就能够文件的内存页面以及该页面在文件中的位置顺序。因此通过重建文件对象结构及其中的关键字段,并根据字段中的指针地址确定文件对象结构链接指向关系,最终确定文件的碎片元素及其关系,构建的内存碎片文件雕刻模型如图1所示,内存碎片雕刻过程可分为四个阶段:预处理、文件对象结构链逆向重建算法、内存页面指针关系逆向重建算法和文件签名特征验证算法。预处理:即先对内存映像进行扫描分析,去除掉非数据文件内存碎片:一是利用0/1二进制数据统计特征,过滤掉不含有任何数据的内存页面碎片;二是利用内存取证中的进程重建机制去除掉含有可执行代码的内存碎片页面。最终获取内存数据文件碎片及元数据碎片的集合。文件对象结构链逆向重建算法:即利用文件内核对象内存分配签名特征,扫描内存映像碎片集合,确定该签名特征位置,同时记录内存映像碎片集合中签名个数(对应内存中文件个数);其次,根据签名特征位置,定位文件对象分配单元,并逆向重建其关键字段;第三,根据文件对象结构的链接指向关系,确定指向内存碎片的页面指针。依据页面指针就能确定文件碎片子集中元素的个数。最后,利用内存页面指针关系逆向重建算法确定页面指针的关系,构建文件碎片子集中页面之间的连接顺序关系。根据内存碎片文件雕刻模型可知,碎片文件雕刻成功的关键是必须能够逆向重建文件对象,并且还要能够获得结构中关键变量,尤其是结构链指针。如果指针值有误差,则可能导致错误的雕刻结果。为了进一步提升雕刻结果的正确性,引入文件签名算法针对雕刻结果进行验证,从而确认雕刻结果十六进制类型是否符合文件类型要求。文件类型签名特征验证算法:即利用文件类型十六进制头尾特征,比如jpg文件类型的文件头十六进制特征是“ffd8ffe000104a464946”,文件尾特征是“ffd9”。那么利用jpg的文件头尾特征针对内存中jpg雕刻文件进行比较验证,从而验证雕刻文件的签名特征。windows系统的内核结构、内存的相关管理机制并没有完全公开,并且不同系统版本、机器字长、分页模式等因素对内存映像分析影响很大。作为本发明实施例中的基于结构链逆向的内存碎片文件重建方法,进一步地,基于操作系统结构逆向分析,使用内核调试工具对文件对象及相关结构进行逆向分析重建。进一步地,文件对象及相关结构分析中,首先定位内文文件对象,通过偏移量确定文件名称及内存区对象信息;依据内存区对象信息获取用于维护数据文件的控制区域指针变量;利用控制区域指针变量得到用于管理文件与内存碎片页面映射的分段结构;通过该分段结构获取数据文件页面存储内容,并结合共享缓存映射结构中缓存管理器来查找数据文件在虚拟地址中的数据。可使用微软公司提供的内核调试工具windbg对文件对象及相关结构进行逆向分析重建,其中:(1)file_object内核文件对象windows文件对象(file_object)是windows系统运行中进程访问(修改、删除)文件时构建的一个结构,并将其分配给那个文件。重建文件内容数据,首先就要定位file_object。该结构的关键变量如下所示:file_object结构包含几个重要的成员,通过偏移量为0x030处的filename可以查看文件的名称, 0x004处的deviceobject域,包含一个指向deviceobject的指针,其中包含了驱动和设备信息。对于数据文件雕刻来说,最重要的成员变量在偏移量为0x014位置,它是一个指向section_object_pointers结构的指针(该结构详细分析见(2)。(2)section_object_pointers,内存管理器和缓存管理器应用该结构存储文件映射和缓存有关的信息,该结构的关键变量定义如下。该结构包含三个指针变量,其中datasectionobject指向control_area结构,用于维护数据文件,例如microsoftword文件;imagesectionobject用来表示内存中可执行文件;sharedcachemap指向一个shared_cache_map结构变量,该结构与操作系统中的高速缓存有关。(3)_control_area,是一个内存管理结构,是整个内存映射的核心,同时也是联系subsection和mmpte结构的核心。该结构关键变量如下所示。偏移量0x01c的变量subsection是指针变量,通过该指针可以定位subsection结构。(4)subsection结构,用来管理文件映射到内存中的各个页面。该结构关键变量如下所示。偏移量0x010处的subsectionbase是一个指向mmpte结构体的指针,这个结构体实际上是一个原型pte(prototypeptes)的数组。原型pte与硬件pte相关联,因此通过该结构可以找到数据文件页面的存储内容。mmpte结构变量如下所示。(5)_shared_cache_map结构管理内存中的缓存文件,该结构的关键变量如下:该结构中的vacbs指针变量指向_vacb结构,该结构是缓存管理器用来描述缓存中正在被使用的虚拟地址,通过该地址能够找到数据文件在虚拟地址中的数据。结合内存管理器,缓存管理器提供了智能提前读及快速i/o操作。尽管并不是文件的所有部分都被映射到缓存内存,但是那些在缓存中的文件部分数据具有极其重要的特性,因为如果文件的部分内容在缓存中被找到,则意味着文件的这部分内容已经被某一进程最近或经常使用和访问。作为本发明实施例中的基于结构链逆向的内存碎片文件重建方法,进一步地,基于操作系统结构逆向分析重构内存碎片文件,包含:利用扫描工具定位内存文件对象并通过重建内存文件对象字段进行文件结构重构的文件对象扫描重建;通过定位数据部分对象中的控制区域结构重构数据文件空间字段及用于索引字节页面的mmpte数组结构的文件碎片提取重建;及通过定位共享缓存映射结构并重构变量来依据基地址变量获取缓存文件信息的缓存文件重建。基于逆向工程重建的文件对象及其相关的内存结构,内存碎片文件雕刻重建算法如图3所示,分为内核文件对象扫描重建、文件碎片提取与重建、缓存文件提取等三个子算法。该算法中需要多次定位对应的结构,根据内存页式管理的特点,虚实地址转化首先要定位页目录表的基地址(dtb)。分析得知,文件对象重建中虚拟地址的转化需要csrss.exe系统进程的dtb,进而按照32位或64位系统虚拟地址字段的划分来完成整个的地址转化过程,定位文件典型及其相关结构键的物理地址。(1)文件内核对象扫描逆向重建子算法的详细过程为:①利用文件对象签名特征扫描算法识别文件对象分配单元,并进而定位file_object对象,重建该结构的“sectionobjectpointer”字段变量,该字段指向“section_object_pointers”结构,该结构由windows为该文件构建。。②定位sectionobjecpointer指向的section_object_pointers结构,重建该结构的datasectionobject和sharedcachemap字段变量。(2)文件碎片提取与重建子算法:①定位datasectionobject指向的controlarea结构,重建该结构中的subsection字段变量。②定位subsection字段,并重建该结构中的subsectionbase的指针和nextsubsection的指针变量。③定位subsectionbase地址,重建mmpte数组结构变量。④遍历mmpte数组指向的页面,并将其数据写入到新建文件中。每个mmpte可索引一个4096字节的页面,而一个完整的扇区有512字节,每个mmpte最多可以对应8个扇区。此外,每一个subsetction均有一个指针指向nextsubsetction,表示文件下一部分所处的内存页面。如果文件的大小足以用一个subsetction来管理,则此处为空。(3)缓存碎片文件雕刻子算法①定位sharedcachemap指向的shared_cache_map结构,重建该结构的变量。②定位vacb结构,重建vacb结构。转换vacb结构中的baseaddress地址为物理地址。③如果vacb结构中的baseaddress为0,则表示该文件对应的缓存无效,算法退出。否则继续执行④。④定位vacb结构中的baseaddress变量,遍历该结构数组,将每一个页面数据写入到新建文件,重建碎片文件内容。进一步地,基于上述的方法,本发明实施例还提供一种基于结构链逆向的内存碎片文件重建系统,包含:扫描分析模块和逆向重构模块,其中,扫描分析模块,用于扫描并分析内存介质映像,建立碎片集合到文件碎片子集的映射,获取文件碎片子集中的碎片元素;逆向重构模块,用于基于操作系统结构逆向分析,构建文件碎片子集中碎片元素的连接关系及逻辑位置,重构内存碎片文件。为验证本发明实施方案有效性,下面结合具体数据做进一步解释说明:以win7系统为内存文件雕刻实验对象。根据statcounter2020年10月发布的全球pc操作系统市场份额排名,windows7系统占据16.8%的比例,windows7系统的实际用户数量肯定还要高于这个比例。虽然不同版本系统的内存对象结构不尽相同,介绍的获取物理内存中数据的基本方法可以推广到win8、win10等系统中。一、碎片文件雕刻结果实验机器是thinkpadx230,coretmi5-3230mcpu@2.60ghz,内存容量为4gb,64位windows7操作系统。选择doc、pdf、txt、jpg四类常用文件类型数据文件进行测试,各选择10个文件,文件详细情况见表1。通过设计三个不同的实验:(1)实验1:表1中从本地磁盘中分别利用美图看看、microsoftoffice、acrobat阅读器、notepad.exe等工具打开f0文件(注意文件后缀不同)。然后转储内存映像。(2)实验2:表1中从本地磁盘中分别利用美图看看、microsoftoffice、acrobat阅读器、notepad.exe、firefox等工具打开表1中所有文件。然后转储内存映像。(3)实验3:关闭所有文件。然后转储内存映像。表1实验中文件名称、类型及大小((字节)jpg/sizedoc/sizepdf/sizetxt/sizef014717240645161832f1600192611266067698f2977882662486311747f312285427136138276778f414196328160145813997f5226174394241593313917f63609078192021239215127f742106911878427266924154f8259941918995239751924564f965236492339842173636318997针对实验1获得内存映像,雕刻结果从文件元数据和文件内容进行评价,文件元数据主要是指文件的名称,即文件的完整路径。scalpel是一款经典的基于磁盘的文件雕刻工具,目前版本是1.60。可选择scalpel1.60和本案内存碎片文件雕刻重建算法进行比较,如表2所示。表2内存映像碎片文件雕刻结果(√:表示雕刻成功;×:雕刻失败)从表2实验结果可知,本案方案不但能够雕刻出实验1中内存映像的文件内容数据,而且可以雕刻出文件的完整路径,这对于调查文件来源具有重要意义。此外该实验中还发现,如果该文件来源于网络,则该文件名对应于网络服务器中的完整路径。同时也发现利用scalpel1.60工具针对该内存映像进行雕刻,几乎不能成功雕刻任何文件,对于txt文件来说,之所以用“√×”表示,是因为雕刻出36个txt文件,而通过测试的f0.txt文件的内容分散在写文件中,即虽然内容找到了,但是却不是以一个完整文件雕刻成功。此外,还可打开f9文件,发现文件的元数据(即文件路径)都能够成功雕刻,但是对于文件f9.jpg、f9.doc、f9.pdf、f9.txt并不能完全雕刻成功,可能的原因在于当文件大小大时可能有部分页面交换到交换分区(虚拟内存),造成内存中的页面不完整。针对实验2获得的内存映像,本案内存碎片文件雕刻重建算法结果和基于磁盘的文件雕刻算法结果如表3所示。表3内存映像碎片文件雕刻结果(√:表示雕刻成功;×:雕刻失败)从表3结果可以看出,从这些结果可以看出即使在这种情况下,本案方案能够雕刻出所有元数据,并能够雕刻出大部分的jpg、doc、pdf文件类型的文件,其中和实验1不同的是,不能有效雕刻的文件并不是较大的文件,即文件大小和文件有效雕刻之间没有关系,可能是由于多个文件同时打开后相互影响,使得有些文件页面交换到交换分区,从而造成内存中某些文件页面缺失,导致文件内容数据丢失,从而不能有效进行雕刻。针对实验3获得的内存映像,本案内存碎片文件雕刻重建算法结果和基于磁盘的文件雕刻算法结果如表4所示。表4内存映像碎片文件雕刻结果从实验结果看,实验3中文件内容雕刻精确度较低,根本原因是在结构链逆向过程中存在指针缺失。而且从文件元数据雕刻结果分析,主要是利用缓存雕刻子算法得到的。这说明在实际的数字调查过程中需要综合利用文件雕刻算法获得有用的调查信息。另外,在实际的调查中,进一步分析与之相关联的进程、网络连接信息、剪贴板数据信息的取证相关联,实现更细粒度的取证分析和更广泛的内存文本信息取证。二、宙斯木马病毒入侵分析在本案例中,选择的是honeynet项目挑战(challenge)提供的内存映像文件bob.vmem,该内存映像中可能存在zeus病毒木马。zeus病毒木马通过acrobat工具对系统进行感染,可通过内存碎片文件雕刻算法对该内存映像中的pdf文件进行雕刻,并进行进一步分析,更加确认了zeus病毒木马的感染过程。利用本案提出的内存文件雕刻算法对该内存映像进行雕刻,共计雕刻出16个文件元数据,其中与pdf文件类型相关的文件有4个,如图4所示,这些元数据表明在zeus病毒木马入侵期间系统上打开或者访问了这些文件。雕刻出来的4个pdf文件并不能有效打开显示,但是利用winhex工具对其内容分析,发现其中含有“javascript”和“openaction”等pdf文件类型结构对象。综合该案例其它线索证据,黑客正是利用这些结构对象将zeus病毒木马感染给该系统。需要说明的是,acrobat阅读器并不能打开雕刻出的4个pdf文件,但这并不影响通过这些pdf文件内容发现网络攻击的感染过程。这些结果表明,即使不能成功雕刻文件内容,但是从内存碎片中雕刻的元数据以及文件内容对于调查病毒入侵过程也有帮助,可以了解入侵过程中文件的访问关系。除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。基于上述的方法或系统,本发明实施例还提供一种网络设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的系统或执行上述的方法。基于上述的系统,本发明实施例还提供一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理器执行时实现上述的系统。本发明实施例所提供的装置,其实现原理及产生的技术效果和前述系统实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述系统实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述系统实施例中的对应过程,在此不再赘述。在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。附图中的流程图和框图显示了根据本发明的多个实施例的系统、系统和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述系统的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本
技术领域:
的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。当前第1页1 2 3 
技术特征:1.一种基于结构链逆向的内存碎片文件重建方法,其特征在于,包含如下内容:
扫描并分析内存介质映像,建立碎片集合到文件碎片子集的映射,获取文件碎片子集中的碎片元素;
基于操作系统结构逆向分析,构建文件碎片子集中碎片元素的连接关系及逻辑位置,重构内存碎片文件。
2.根据权利要求1所述的基于结构链逆向的内存碎片文件重建方法,其特征在于,内存介质映像扫描分析中,先过滤非数据文件内存碎片,其中,所述非数据文件内存碎片包含:包含有0x00/0xff数据的内存页面碎片及含有可执行代码的内存页面碎片。
3.根据权利要求1或2所述的基于结构链逆向的内存碎片文件重建方法,其特征在于,利用文件内核对象池分配结构特征,扫描内存碎片集合,确定其中的数据文件个数;利用内核文件对象结构逆向分析来确定内存文件在内存映像中的结构信息,进而构建出内存文件碎片子集。
4.根据权利要求3所述的基于结构链逆向的内存碎片文件重建方法,其特征在于,文件碎片子集和碎片集合s之间构成关系表示为:
其中,0≤i≤k,filei表示文件碎片子集,k表示内存碎片中数据文件个数。
5.根据权利要求1所述的基于结构链逆向的内存碎片文件重建方法,其特征在于,基于操作系统结构逆向分析,使用内核调试工具对文件对象及相关结构进行逆向分析重建。
6.根据权利要求5所述的基于结构链逆向的内存碎片文件重建方法,其特征在于,文件对象及相关结构分析中,首先定位内存映像中的文件对象,通过偏移量确定文件名称及内存区对象信息;依据内存区对象信息获取用于维护数据文件的控制区域指针变量;利用控制区域指针变量得到用于管理文件与内存碎片页面映射的分段结构;通过该分段结构获取数据文件页面存储内容,并结合共享缓存映射结构中缓存管理器来查找数据文件在虚拟地址中的数据。
7.根据权利要求1所述的基于结构链逆向的内存碎片文件重建方法,其特征在于,基于操作系统结构逆向分析重构内存碎片文件,包含:利用扫描工具定位内存文件对象并通过重建内存文件对象字段进行文件结构重构的文件对象扫描重建;通过定位数据部分对象中的控制区域结构重构数据文件空间字段及用于索引字节页面的mmpte数组结构的文件碎片提取重建;及通过定位共享缓存映射结构并重构变量来依据基地址变量获取缓存文件信息的缓存文件重建。
8.一种基于结构链逆向的内存碎片文件重建系统,其特征在于,包含:扫描分析模块和逆向重构模块,其中,
扫描分析模块,用于扫描并分析内存介质映像,建立碎片集合到文件碎片子集的映射,获取文件碎片子集中的碎片元素;
逆向重构模块,用于基于操作系统结构逆向分析,构建文件碎片子集中碎片元素的连接关系及逻辑位置,重构内存碎片文件。
9.一种计算机可读存储介质,其上存储有计算机程序,其中,该程序被处理器执行时执行权利要求1~7任一项所述的方法。
10.一种计算机设备,包含处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以执行权利要求1~7任一项所述的方法。
技术总结本发明属于电子取证技术领域,特别涉及一种基于结构链逆向的内存碎片文件重建方法及系统,扫描并分析内存介质映像,建立碎片集合到文件碎片子集的映射,获取文件碎片子集中的碎片元素;基于操作系统结构逆向分析,构建文件碎片子集中碎片元素的连接关系及逻辑位置,重构内存碎片文件。本发明利用基于结构链逆向的内存碎片文件雕刻重建来满足电子(数字)犯罪取证实际应用,能够适合于正在运行的基于Windows不同版本操作系统的物理内存中网络入侵行为的数据文件的恢复与分析,具有较强的实用性。
技术研发人员:李炳龙;周振宇;王懿;张宇;李媛芳;张和禹;孙怡峰;胡浩;常朝稳
受保护的技术使用者:中国人民解放军战略支援部队信息工程大学;开封市科学技术情报研究所;河南云眼科技有限公司
技术研发日:2020.12.02
技术公布日:2021.03.12