CN104392171B - 一种基于数据关联的自动内存证据分析方法 - Google Patents
一种基于数据关联的自动内存证据分析方法 Download PDFInfo
- Publication number
- CN104392171B CN104392171B CN201410696545.0A CN201410696545A CN104392171B CN 104392171 B CN104392171 B CN 104392171B CN 201410696545 A CN201410696545 A CN 201410696545A CN 104392171 B CN104392171 B CN 104392171B
- Authority
- CN
- China
- Prior art keywords
- file
- association
- internal memory
- attribute
- structures
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/907—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
Abstract
一种基于数据关联的自动内存证据分析方法,借助关键数据结构分析以及聚类方法全面分析了进程、文件、用户、动态链接库等主要内存数据之间的各种关系;对于进程与其他信息之间,依次自动识别进程与文件关联、进程与动态链接库关联、进程与用户关联以及进程与网络报关联;对于进程与进程之间的关联,依次可自动识别进程间父子关联、进程间服务关联和进程间通信关联。通过描述这些关系,本方法可以将彼此独立的数据组织成关联图,从更高的语义层次揭示原始证据的含义。
Description
技术领域
本发明涉及的是一种计算机犯罪取证领域,涉及对内存证据自动分析、关联,以便重现犯罪场景的方法,尤其是一种适合自动分析Windows XP内存证据的方法。
背景技术
内存取证在过去十年发展迅速。这是因为内存能够提供磁盘不包含的正在运行的进程、实际执行的二进制代码、打开的网络连接及端口等调查者所关心的信息。尽管犯罪者可通过加密、代码混淆、挂钩等方式隐藏其行为,但非法行为仍必须在内存中执行,并难免留下痕迹。因此,来自内存的犯罪证据更加可靠,也更具实时性。基于上述优点,内存取证在近年来吸引了越来越多研究者的关注。但现有的内存取证研究主要侧重于如何可靠地获取内存镜像等证据,关于如何自动分析已获得证据的关注较少。近年来,随着硬件技术的发展,计算机内存容量已从MB级增长到TB级,而网络及云计算平台的广泛使用也使调查者经常需要同时分析很多内存镜像。面对海量的数据以及复杂、缺乏语义信息的低层OS数据结构,如何自动完成内存证据分析,找出其中隐藏的犯罪行为并以调查者容易理解的方式重构其犯罪过程已成为亟待解决的重要问题。
现有的内存证据分析方法主要分为基于字符串搜索、基于内存扫描、基于特征(signature)扫描和基于操作系统内核关键数据结构分析几种。字符串搜索建立在已知关键词的基础上,是早期流行的简单方法。该方法需要的人工干预较多,且搜索结果包含大量噪声。内存扫描分析方法是一种基于线性内存扫描的暴力破解方法。该方法逐个字节的扫描整个内存,然后获取需要的信息。在当前海量、复杂的分析背景下,该方法花费的时间往往比较长。基于特征(signature)扫描的分析技术通常使用一系列规则来精确的描述某种特征,然后使用扫描器进行扫描。该方法需要预先定义合适的规则,所以不能识别未知行为。尽管其精确度及效率较前两种方法有所提升,但在当前分析背景下该方法仍显得力不从心。目前主流的内存分析技术是分析内存数据结构,即通过研究关键的内存数据结构获得该结构中的信息,从而获得感兴趣的犯罪证据。但目前这类方法仅针对特定数据类型进行分析,比如恢复内存中的进程列表、二进制文件、打开的网络连接等,分析结果比较单一。即使是当前流行的取证分析框架volatility,也仅仅提供对各类内存信息的恢复及罗列,具体的犯罪行为识别及场景重构仍需人工完成。事实上证据分析过程需要综合考虑各类证据,通过数据之间的彼此关联印证来发现更多的犯罪行为,进而重构犯罪过程。
发明内容
针对现有技术在内存证据自动分析领域的不足,本发明目的是提出了一种基于数据关联的自动证据分析方法。借助关键数据结构分析以及聚类方法全面分析进程、文件、用户、动态链接库等主要内存数据之间的各种关系。
本发明的技术方案是,一种基于数据关联的自动内存证据分析方法,其特征在于:借助关键数据结构分析以及聚类方法全面分析了进程、文件、用户、动态链接库等主要内存数据之间的各种关系;对于进程与其他信息之间,依次自动识别进程与文件关联、进程与动态链接库关联、进程与用户关联以及进程与网络报关联;对于进程与进程之间的关联,依次可自动识别进程间父子关联、进程间服务关联和进程间通信关联。通过描述这些关系,本发明能够将彼此独立的数据组织成关联图,从更高的语义层次揭示原始证据的含义。
进一步,所述分析以进程为中心,涵盖了进程与进程之间的父子关联、通信关联和服务关联,以及进程与文件、动态链接库、用户、网络信息等内存信息的关联。本发明设计了一种基于数据关联的自动内存证据分析机制。在计算机取证过程中,内存中最重要的信息就是进程。进程代表了计算机中各种运行的软件、服务。因此,为了从内存包含的大量不同类别的信息中梳理出有用的关联关系,本发明机制采取了以进程为中心的关联分析策略,将内存中的关联关系分成进程间关联和进程与其他信息的关联两类。为了从不同角度展现内存中进程与进程的关系。提出了以父子关系、通信关系和服务目的关系为基础的关联方法。在进程与内存其他数据间的关联方面,主要选取了进程与文件、进程与动态链接库、进程与用户以及进程与网络包的关联关系加以分析。之所以选取这些关联,是因为它们对于计算机取证而言非常有用。为以可靠的方式揭示这些关联关系,并揭示内存中无直接指示信息的隐式关联关系,设计了一种综合使用数据结构分析及聚类技术的关联方法。对于内存中有标识的关联,将以分析内存数据结构为主进行识别。在识别过程中将比较各种标识数据结构,最终选择一种最为可靠的结构。而对于隐含关联的分析,主要基于聚类方法进行。因为windows XP仍是当前国内取证调查时最常见的操作系统,因此本发明主要基于Windows XP SP2操作系统的数据结构。
不同于以往的内存分析方法,本发明所提出的数据关联方法是首次将各类内存数据结合起来,较为完整地展示出内存中数据的关联关系。事实上,如果能够事先自动建立内存中各类信息的关联,那么不仅犯罪场景重构将变得更加容易,识别犯罪行为也会更为方便。因为异常的关联关系(例如outlook读取存储了用户密码的password文件)往往代表了非法的行为。而且,一旦识别出代表犯罪行为的某一证据,即可以依据已知的关联关系顺藤摸瓜找出更多的犯罪行为以及证据。这样犯罪者将更难隐藏其行为。
进一步,所述进程与文件之间的自动关联方法,具体步骤如下:
步骤1:在内存中定位到每个需分析的文件对象;
步骤2:从对象基址向前0x018偏移量,读取每个文件对象的_OBJECT_HEADER对象(其结构如图2所示)。
步骤3:读取_OBJECT_HEADER对象的HandleInfoOffset属性,并根据其值获取文件对象的对应句柄信息。
步骤4:读取句柄信息的第一个字。其内容即为拥有该文件的进程对象的基地址。
步骤5:根据步骤4中获得的地址信息读取进程对象并建立进程与文件之间的关联。
进一步,所述进程与动态链接库(DLL)之间的自动关联方法,具体步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构(其数据结构如图4所示)。
步骤2:读取_EPROCESS的属性ObjectTable,根据其值获取进程的句柄表_HANDLE_TABLE(其结构如图5所示)。
步骤3:遍历_HANDLE_TABLE的属性HandleTableList指向的双向链接表。找到其中类型为File,名称的后缀是动态数据库dll的句柄,这些句柄就是进程载入的动态链接库文件。
进一步,进程与用户之间的自动关联方法,具体步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤2:根据_EPROCESS中的属性Token值获取进程的_TOKEN结构(其结构如图7所示)。进程的很多安全有关的信息都保存在_TOKEN结构中,包括用户和组的安全标识符(SID)。
步骤3:读取_TOKEN结构中记录的用户和组的安全标识符(SID)。
步骤4:基于Windows的系统通用安全标识符文档过滤掉通用标示符,余下的即是实际登陆用户的安全标识符。
步骤5:在注册表中找到HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList项,其中记录了所有用户的安全标识符。
步骤6:根据筛选后余下的非通用安全标示符的ProfileImagePath属性即可提取出与其对应的用户名,从而可将进程与具体用户关联起来。
进一步,所述进程与网络信息之间的自动关联方法,具体步骤如下:
步骤1:通过基于特征分析的扫描方法定位结构_TCPT_OBJECT(其结构如图9所示),该结构在内存中出现时带有特殊的标识TCPT(0x54435054)。
步骤2:根据_TCPT_OBJECT中的属性Pid将每个_TCPT_OBJECT关联到对应的进程。
步骤3:根据每个_TCPT_OBJECT的Next属性找到下一个TCP对象,重复步骤(2)。
进一步,进程间的父子关联方法,具体步骤如下:
步骤1:找到内存中的所有进程。为识别隐藏进程,通过基于特征(signature)的扫描技术扫描进程的池分配标记Proc,这样就能保证获取的进程完整。
步骤2:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤3:读取_EPROCESS中的属性UniqueProcessId和InheritedFromUniqueProcessId,它们分别表示了进程自己的id和其父进程的id。根据进程id之间的父子关系即可将进程以父子关系关联起来。
进一步,进程间的服务关联方法,具体步骤如下:
方法一,基于名称相似度的进程间服务关联。其特征在于具体步骤如下:
步骤1:找到内存中的所有进程。为识别隐藏进程,通过基于特征(signature)的扫描技术扫描进程的池分配标记Proc,这样就能保证获取的进程完整。
步骤2:识别进程名称。
步骤3:找出所有名称中有相同的前缀或后缀的进程,并建立关联。
方法二,基于动态链接库的进程间服务关联。具体步骤如下:
步骤1:根据前文所述的进程与动态链接库(DLL)之间的自动关联方法获取每个进程载入的动态链接库列表。
步骤2:根据进程及其动态链接库文件,使用无需事先指定聚类个数的聚类算法(例如:DBSCAN算法)来对进程进行聚类。具体步骤如下:
步骤2.1,选择关键dll并用其建模每个进程。其中,关键DLL的选择原则是:首先,选择选取出现频度较高的dll。其次,如果文件A出现,文件B和C必定会出现,那么在出现文件A的时候只需考虑A而不用考虑B和C。建模进程的具体方法是:基于关键dll,将每个进程建模为一个n元组。其定义如下:
定义1若把n个关键dll组织成一个有序集合,那么每个进程对应的n-元组是一个由n个0或1组成的序列,其中1表示进程加载了对应序号的关键dll,0表示该进程未加载该dll。
步骤2.2,为聚类算法设置合适的参数。例如:若选择DBSCAN算法,则可设置epsilon的值为4.0,minPoints的值为2。
步骤2.3,用选定的聚类算法基于第一步建立的模型聚类所有进程,并输出结果。
进一步,进程间的通信关联方法,包含共享内存通信、文件通信及管道通信的关联。
进程间共享内存通信关联方法,具体步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤2:根据_EPROCESS对象的属性VadRoot获取进程的VAD树的根节点的地址。VAD树中每个节点都是一个_MMVAD结构,它代表了内存分配给进程的某段虚拟地址空间,属性StartingVpn和EndingVpn表明了这段虚拟地址空间的起始和结尾地址。同时属性LeftChild和RightChild指出了该节点的左右孩子节点,用于构建整棵VAD树,具体见图6所示。
步骤3:对VAD树进行遍历。VAD节点可分为私有的(private)或映射的(mapped),遍历时筛选出映射型VAD节点。
步骤4:读取筛选得到的VAD节点结构_MMVAD中的属性ControlArea。这是一个指向_CONTROL_AREA结构的指针。_CONTROL_AREA结构代表的是VAD节点这段虚拟地址空间的控制信息,包含了这段虚拟地址空间拥有的文件、共享内存、缓存数据等等的指针,具体结构如图7所示。根据ControlArea值得到_CONTROL_AREA结构。
步骤5:读取_CONTROL_AREA的属性FilePointer。这是一个指向一个文件对象_FILE_OBJECT结构的指针。通过FilePointer值识别共享内存块,即:如果FilePointer的值为null,说明_CONTROL_AREA对象指向的是一块共享内存区。
步骤6:基于_CONTROL_AREA结构中_SEGMENT属性识别进程间共享内存关联。_SEGMENT的属性u1指向创建这个共享内存区的进程。若u1的值与起始测试进程地址不同,则说明测试进程与创建该共享内存的进程有通信。
进一步,进程间文件通信关联方法,具体步骤如下:
步骤1:根据前文所述的进程与文件之间的自动关联方法将内存中的文件与进程关联起来。
步骤2:如果发现多个进程关联同一个文件,即可认为这些进程间存在文件通信关联关系。
进一步,进程间管道通信关联方法,具体步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤2:读取_EPROCESS的属性ObjectTable,根据其值获取进程的句柄表_HANDLE_TABLE。
步骤3:遍历_HANDLE_TABLE的属性HandleTableList指向的双向链接表。找到其中类型为命名管道的句柄,这些句柄就是进程对应的命名管道。
步骤4:获取命名管道的名称。
步骤5:将使用了同一个名称的命名管道的不同进程关联起来。
本发明提供的一套用于自动识别内存中各类信息间关联关系的方法,进程与其它内存信息的关联方法:本发明主要考虑对重构犯罪场景较为重要的文件、动态链接库、用户及网络信息。首先,基于windows操作系统的_OBJECT_HEADER结构自动获得进程与文件之间的关联。其次,基于windows操作系统的句柄表_HANDLE_TABLE自动获得进程与动态链接库(DLL)之间的关联。再次,基于进程的_TOKEN结构及注册表自动获得进程与用户之间的关联。最后,基于_TCPT_OBJECT结构自动获得进程与网络信息的关联。
进程与进程关联方法:本发明主要考虑进程间的父子关系、服务关系以及共享内存通信、文件通信、管道通信三种通信关系。首先,基于进程的池分配标记及_EPROCESS中的属性UniqueProcessId和InheritedFromUniqueProcessId自动识别进程间的父子关联。然后,基于进程名称及所加载的动态链接库自动识别进程间的服务关联。最后,基于_CONTROL_AREA结构自动识别共享内存通信;基于进程文件关联自动识别文件通信;基于进程句柄表_HANDLE_TABLE自动识别管道通信。
本发明的有益效果为:(1)与现有针对进程的内存分析方法相比,本发明并非单单地获取进程,而是能够以多种角度关联进程。(2)本发明还能将目前针对内存中各种信息的内存分析方法的分析结果关联到进程上,使得这些分析结果不是单独地存在,而是能较为完整地展示出内存中数据的关联关系,从更高的语义层次揭示原始证据的含义。(3)基于本发明事先自动建立的内存中各类信息的关联,犯罪场景重构将变得更加容易。(4)基于某个已知证据以及本发明识别出的关联关系,能够顺藤摸瓜找出更多的犯罪行为。(5)基于本发明识别出的一些异常的关联关系(例如outlook读取存储了用户密码的password文件)还可以识别潜藏在正常行为中的犯罪线索。(6)本发明提出的关联方法可通过不同证据的彼此佐证,增强取证结果的可靠性。
附图说明
图1为进程与文件关联流程;
图2为_OBJECT_HEADER对象结构示意图;
图3为进程与动态链接库关联流程;
图4为进程的_EPROCESS结构示意图;
图5为句柄表_HANDLE_TABLE结构示意图;
图6为进程与用户关联流程;
图7为_TOKEN结构示意图;
图8为进程与网络信息关联流程;
图9为_TCPT_OBJECT结构示意图;
图10为进程间父子关联流程;
图11为基于名称相似度的进程间服务关联流程;
图12为基于动态链接库的进程间服务关联流程;
图13为进程间共享内存通信关联流程;
图14为_MMVAD结构示意图;
图15为_CONTROL_AREA结构示意图;
图16为进程间文件通信关联流程;
图17为进程间管道通信关联流程;
图18关联进程与文件、关联进程与动态链接库、关联进程与用户以及关联进程与网络信息的流程;
图19识别进程间父子关联、识别进程间服务关联、识别进程间通讯关联流程。
具体实施方式
为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
图1、图2为进程与文件之间的自动关联方法涉及的数据结构与流程图。流程步骤如下:
步骤1:在内存中定位到每个需分析的文件对象。
步骤2:从对象基址向前0x018偏移量,读取每个文件对象的_OBJECT_HEADER对象(其结构如图2所示)。
步骤3:读取_OBJECT_HEADER对象的HandleInfoOffset属性,并根据其值获取文件对象的对应句柄信息。
步骤4:读取句柄信息的第一个字。其内容即为拥有该文件的进程对象的基地址。
步骤5:根据步骤4中获得的地址信息读取进程对象并建立进程与文件之间的关联。
图3、图4、图5为进程与动态链接库(DLL)之间的自动关联方法涉及的数据结构与流程图。流程步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构(其数据结构如图4所示)。
步骤2:读取_EPROCESS的属性ObjectTable,根据其值获取进程的句柄表_HANDLE_TABLE(其结构如图5所示)。
步骤3:遍历_HANDLE_TABLE的属性HandleTableList指向的双向链接表。找到其中类型为File,名称的后缀是dll的句柄,这些句柄就是进程载入的动态链接库文件。
图6、图7为进程与用户之间的自动关联方法涉及的数据结构与流程图。流程步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤2:根据_EPROCESS中的属性Token值获取进程的_TOKEN结构(其结构如图7所示)。进程的很多安全有关的信息都保存在_TOKEN结构中,包括用户和组的安全标识符(SID)。
步骤3:读取_TOKEN结构中记录的用户和组的安全标识符(SID)。
步骤4:基于Windows的系统通用安全标识符文档过滤掉通用标示符,余下的即是实际登陆用户的安全标识符。
步骤5:在注册表中找到HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList项,其中记录了所有用户的安全标识符。
步骤6:根据筛选后余下的非通用安全标示符的ProfileImagePath属性即可提取出与其对应的用户名,从而可将进程与具体用户关联起来。
图8、图9为进程与网络信息之间的自动关联方法涉及的数据结构与流程图。流程步骤如下:
步骤1:通过基于特征分析的扫描方法定位结构_TCPT_OBJECT(其结构如图9所示),该结构在内存中出现时带有特殊的标识TCPT(0x54435054)。
步骤2:根据_TCPT_OBJECT中的属性Pid将每个_TCPT_OBJECT关联到对应的进程。
步骤3:根据每个_TCPT_OBJECT的Next属性找到下一个TCP对象,重复步骤(2)。
图10为进程间的父子关联方法涉及的流程图。流程步骤如下:
步骤1:找到内存中的所有进程。为识别隐藏进程,通过基于特征(signature)的扫描技术扫描进程的池分配标记Proc,这样就能保证获取的进程完整。
步骤2:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤3:读取_EPROCESS中的属性UniqueProcessId和InheritedFromUniqueProcessId,它们分别表示了进程自己的id和其父进程的id。根据进程id之间的父子关系即可将进程以父子关系关联起来。
图11为基于名称相似度的进程间服务关联所涉及流程。流程步骤如下:
步骤1:找到内存中的所有进程。为识别隐藏进程,通过基于特征(signature)的扫描技术扫描进程的池分配标记Proc,这样就能保证获取的进程完整。
步骤2:识别进程名称。
步骤3:找出所有名称中有相同的前缀或后缀的进程,并建立关联。
图12为基于动态链接库的进程间服务关联所涉及流程。流程步骤如下:
步骤1:根据前文所述的进程与动态链接库(DLL)之间的自动关联方法获取每个进程载入的动态链接库列表。
步骤2:根据进程及其动态链接库文件,使用无需事先指定聚类个数的聚类算法(例如:DBSCAN算法)来对进程进行聚类。具体步骤如下:
步骤2.1,选择关键dll并用其建模每个进程。其中,关键DLL的选择原则是:首先,选择选取出现频度较高的dll。其次,如果文件A出现,文件B和C必定会出现,那么在出现文件A的时候只需考虑A而不用考虑B和C。建模进程的具体方法是:基于关键dll,将每个进程建模为一个n元组。其定义如下:
定义1若把n个关键dll组织成一个有序集合,那么每个进程对应的n-元组是一个由n个0或1组成的序列,其中1表示进程加载了对应序号的关键dll,0表示该进程未加载该dll。
步骤2.2,为聚类算法设置合适的参数。例如:若选择DBSCAN算法,则可设置epsilon的值为4.0,minPoints的值为2。
步骤2.3,用选定的聚类算法基于第一步建立的模型聚类所有进程,并输出结果。
图13、图14、图15为进程间共享内存通信关联方法涉及的数据结构与流程图。流程步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤2:根据_EPROCESS对象的属性VadRoot获取进程的VAD树的根节点的地址。VAD树中每个节点都是一个_MMVAD结构,它代表了内存分配给进程的某段虚拟地址空间,属性StartingVpn和EndingVpn表明了这段虚拟地址空间的起始和结尾地址。同时属性LeftChild和RightChild指出了该节点的左右孩子节点,用于构建整棵VAD树,具体见图6所示。
步骤3:对VAD树进行遍历。VAD节点可分为私有的(private)或映射的(mapped),遍历时筛选出映射型VAD节点。
步骤4:读取筛选得到的VAD节点结构_MMVAD中的属性ControlArea。这是一个指向_CONTROL_AREA结构的指针。_CONTROL_AREA结构代表的是VAD节点这段虚拟地址空间的控制信息,包含了这段虚拟地址空间拥有的文件、共享内存、缓存数据等等的指针,具体结构如图7所示。根据ControlArea值得到_CONTROL_AREA结构。
步骤5:读取_CONTROL_AREA的属性FilePointer。这是一个指向一个文件对象_FILE_OBJECT结构的指针。通过FilePointer值识别共享内存块,即:如果FilePointer的值为null,说明_CONTROL_AREA对象指向的是一块共享内存区。
步骤6:基于_CONTROL_AREA结构中_SEGMENT属性识别进程间共享内存关联。_SEGMENT的属性u1指向创建这个共享内存区的进程。若u1的值与起始测试进程地址不同,则说明测试进程与创建该共享内存的进程有通信。
图16为进程间文件通信关联所涉及流程。流程步骤如下:
步骤1:根据前文所述的进程与文件之间的自动关联方法将内存中的文件与进程关联起来。
步骤2:如果发现多个进程关联同一个文件,即可认为这些进程间存在文件通信关联关系。
图17为进程间管道通信关联所涉及流程。流程步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构。
步骤2:读取_EPROCESS的属性ObjectTable,根据其值获取进程的句柄表_HANDLE_TABLE。
步骤3:遍历_HANDLE_TABLE的属性HandleTableList指向的双向链接表。找到其中类型为命名管道的句柄,这些句柄就是进程对应的命名管道。
步骤4:获取命名管道的名称。
步骤5:将使用了同一个名称的命名管道的不同进程关联起来。
Claims (1)
1.一种基于数据关联的自动内存证据分析方法,其特征在于:借助关键数据结构分析以及聚类方法全面分析进程、文件、用户、动态链接库主要内存数据之间的各种关系;对于进程与其他信息之间,依次自动识别进程与文件之间的关联、进程与动态链接库(DLL)之间的关联、进程与用户之间关联以及进程与网络包关联;对于进程与进程之间的关联,依次可自动识别进程间父子关联、进程间服务关联和进程间通信关联;
1)所述进程与文件之间的关联方法步骤如下:
步骤1:在内存中定位到每个需分析的文件对象;
步骤2:从对象基址向前0x018偏移量,读取每个文件对象的_OBJECT_HEADER对象;
步骤3:读取_OBJECT_HEADER对象的HandleInfoOffset属性,并根据其值获取文件对象的对应句柄信息;
步骤4:读取句柄信息的第一个字;其内容即为拥有该文件的进程对象的基地址;
步骤5:根据步骤4中获得的地址信息读取进程对象并建立进程与文件之间的关联;
2)所述进程与动态链接库(DLL)之间的自动关联方法步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构;
步骤2:读取_EPROCESS的属性ObjectTable,根据其值获取进程的句柄表_HANDLE_TABLE;
步骤3:遍历_HANDLE_TABLE的属性HandleTableList指向的双向链接表;找到其中类型为File,名称的后缀是dll的句柄,这些句柄就是进程载入的动态链接库文件;
3)所述进程与用户之间的关联方法步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构;
步骤2:根据_EPROCESS中的属性Token值获取进程的_TOKEN结构;进程的很多安全有关的信息都保存在_TOKEN结构中,包括用户和组的安全标识符(SID);
步骤3:读取_TOKEN结构中记录的用户和组的安全标识符(SID);
步骤4:基于Windows的系统通用安全标识符文档过滤掉通用标示符,余下的即是实际登陆用户的安全标识符;
步骤5:在注册表中找到HKLM\SOFTWARE\Microsoft\WindowsNT\ CurrentVersion\ProfileList项,其中记录了所有用户的安全标识符;
步骤6:根据筛选后余下的非通用安全标示符的ProfileImagePath属性即可提取出与其对应的用户名,从而可将进程与具体用户关联起来;
4)所述进程与网络信息之间的自动关联方法步骤如下:
步骤1:通过基于特征分析的扫描方法定位结构_TCPT_OBJECT,该结构在内存中出现时带有特殊的标识TCPT即0x54435054;
步骤2:根据_TCPT_OBJECT中的属性Pid将每个_TCPT_OBJECT关联到对应的进程;
步骤3:根据每个_TCPT_OBJECT的Next属性找到下一个TCP对象,重复步骤(2);
5)所述进程与进程之间关联,依次可自动识别进程间父子关联方法具体步骤如下:
步骤1:找到内存中的所有进程;为识别隐藏进程,通过基于特征(signature)的扫描技术扫描进程的池分配标记Proc,这样就能保证获取的进程完整;
步骤2:在内存中定位到每个需调查进程的_EPROCESS结构;
步骤3:读取_EPROCESS中的属性UniqueProcessId和InheritedFromUniqueProcessId,它们分别表示了进程自己的id和其父进程的id;根据进程id之间的父子关系即可将进程以父子关系关联起来;
6)进程间的服务关联具体步骤如下:
方法一,基于名称相似度的进程间服务关联步骤:
步骤1:找到内存中的所有进程;为识别隐藏进程,通过基于特征(signature)的扫描技术扫描进程的池分配标记Proc,这样就能保证获取的进程完整;
步骤2:识别进程名称;
步骤3:找出所有名称中有相同的前缀或后缀的进程,并建立关联;
方法二,基于动态链接库的进程间服务关联具体步骤:
步骤1:根据前文所述的进程与动态链接库(DLL)之间的自动关联方法获取每个进程载入的动态链接库列表;
步骤2:根据进程及其动态链接库文件,使用无需事先指定聚类个数的聚类算法来对进程进行聚类; 具体步骤如下:
步骤2.1,选择关键dll并用其建模每个进程;其中,关键DLL的选择原则是:首先,选择选取出现频度较高的dll; 其次,如果文件A出现,文件B和C必定会出现,那么在出现文件A的时候只需考虑A而不用考虑B和C ;建模进程的具体方法是:基于关键dll,将每个进程建模为一个n元组;其定义如下:
定义1 若把n个关键dll组织成一个有序集合,那么每个进程对应的n元组是一个由n个0或1组成的序列,其中1表示进程加载了对应序号的关键dll,0表示该进程未加载该dll;
步骤2.2,为聚类算法设置合适的参数;若选择DBSCAN算法,则可设置epsilon的值为4.0,minPoints的值为2;
步骤2.3,用选定的聚类算法基于第一步建立的模型聚类所有进程,并输出结果;
7)进程间的通信关联方法,包含共享内存通信、文件通信及管道通信的关联;
7-1)进程间共享内存通信关联方法具体步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构;
步骤2:根据_EPROCESS对象的属性VadRoot获取进程的VAD树的根节点的地址;VAD树中每个节点都是一个_MMVAD结构,它代表了内存分配给进程的某段虚拟地址空间,属性StartingVpn和EndingVpn表明了这段虚拟地址空间的起始和结尾地址;同时属性LeftChild和RightChild指出了该节点的左右孩子节点,用于构建整棵VAD树;
步骤3:对VAD树进行遍历;VAD节点可分为私有的(private)或映射的(mapped),遍历时筛选出映射型VAD节点;
步骤4:读取筛选得到的VAD节点结构_MMVAD中的属性ControlArea;这是一个指向_CONTROL_AREA结构的指针;_CONTROL_AREA结构代表的是VAD节点这段虚拟地址空间的控制信息,包含了这段虚拟地址空间拥有的文件、共享内存、缓存数据等等的指针; 根据ControlArea值得到_CONTROL_AREA结构;
步骤5:读取_CONTROL_AREA的属性FilePointer;这是一个指向一个文件对象_FILE_OBJECT结构的指针;通过FilePointer值识别共享内存块,即:如果FilePointer的值为null,说明 _CONTROL_AREA对象指向的是一块共享内存区;
步骤6:基于_CONTROL_AREA结构中_SEGMENT属性识别进程间共享内存关联; _SEGMENT的属性u1指向创建这个共享内存区的进程;若u1的值与起始测试进程地址不同,则说明测试进程与创建该共享内存的进程有通信;
7-2)进程间文件通信关联方法步骤如下:
步骤1:根据前文所述的进程与文件之间的自动关联方法将内存中的文件与进程关联起来;
步骤2:如果发现多个进程关联同一个文件,即可认为这些进程间存在文件通信关联关系;
7-3)进程间管道通信关联方法步骤如下:
步骤1:在内存中定位到每个需调查进程的_EPROCESS结构;
步骤2:读取_EPROCESS的属性ObjectTable,根据其值获取进程的句柄表_HANDLE_TABLE;
步骤3:遍历_HANDLE_TABLE的属性HandleTableList指向的双向链接表;找到其中类型为命名管道的句柄,这些句柄就是进程对应的命名管道;
步骤4:获取命名管道的名称;
步骤5:将使用了同一个名称的命名管道的不同进程关联起来。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410696545.0A CN104392171B (zh) | 2014-11-27 | 2014-11-27 | 一种基于数据关联的自动内存证据分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410696545.0A CN104392171B (zh) | 2014-11-27 | 2014-11-27 | 一种基于数据关联的自动内存证据分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104392171A CN104392171A (zh) | 2015-03-04 |
CN104392171B true CN104392171B (zh) | 2017-04-05 |
Family
ID=52610073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410696545.0A Active CN104392171B (zh) | 2014-11-27 | 2014-11-27 | 一种基于数据关联的自动内存证据分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104392171B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104714831B (zh) * | 2015-03-31 | 2018-04-17 | 北京奇虎科技有限公司 | 一种检测虚拟机中的寄生进程的方法和装置 |
CN105797377B (zh) * | 2016-03-10 | 2019-08-23 | 武汉斗鱼网络科技有限公司 | 一种游戏进程识别和显示方法及系统 |
CN106201747B (zh) * | 2016-07-22 | 2019-04-23 | 浪潮软件集团有限公司 | 一种windows系统受限用户下访问智能密码设备的方法 |
CN111221699B (zh) * | 2018-11-27 | 2023-10-03 | 北京神州泰岳软件股份有限公司 | 一种资源关联关系发现方法、装置和电子设备 |
CN110096453B (zh) * | 2019-04-11 | 2020-01-03 | 北京华三通信技术有限公司 | 数据处理方法及装置 |
CN111240739B (zh) * | 2020-01-21 | 2022-04-15 | 烽火通信科技股份有限公司 | 一种对象的关联属性动态并发分配方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1855086A (zh) * | 2005-04-25 | 2006-11-01 | 北京中网安达信息安全科技有限公司 | 一种分析和提取数字证据的取证分析系统和方法 |
CN102945288A (zh) * | 2012-11-29 | 2013-02-27 | 重庆邮电大学 | 一种物理内存镜像中文本数据文件提取方法 |
CN104021063A (zh) * | 2014-05-14 | 2014-09-03 | 南京大学 | 一种基于硬件虚拟化的模块化计算机取证系统及其方法 |
-
2014
- 2014-11-27 CN CN201410696545.0A patent/CN104392171B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1855086A (zh) * | 2005-04-25 | 2006-11-01 | 北京中网安达信息安全科技有限公司 | 一种分析和提取数字证据的取证分析系统和方法 |
CN102945288A (zh) * | 2012-11-29 | 2013-02-27 | 重庆邮电大学 | 一种物理内存镜像中文本数据文件提取方法 |
CN104021063A (zh) * | 2014-05-14 | 2014-09-03 | 南京大学 | 一种基于硬件虚拟化的模块化计算机取证系统及其方法 |
Non-Patent Citations (3)
Title |
---|
基于Windows平台的内存数据获取和取证技术研究;刘洋;《中国优秀硕士学位论文全文数据库信息科技辑》;20130715;正文第3.3.3节,第4.5.3节,第4.5.5节,图4-12,表4-8,图4-13 * |
基于内存取证技术的关联性分析研究;孟祥宇;《中国优秀硕士学位论文全文数据库 信息科技辑》;20141015;正文第3.2-3.3节,第4.2节 * |
面向Windows操作系统的内存取证技术研究;钱勤,等;《计算机工程》;20140815;正文第4.3节、5.3、5.4节、6.2节 * |
Also Published As
Publication number | Publication date |
---|---|
CN104392171A (zh) | 2015-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104392171B (zh) | 一种基于数据关联的自动内存证据分析方法 | |
CN106599686B (zh) | 一种基于tlsh特征表示的恶意软件聚类方法 | |
CN103810233B (zh) | 内容管理 | |
CN103810224B (zh) | 信息持久化和查询方法及装置 | |
CN106302522B (zh) | 一种基于神经网络和大数据的网络安全态势分析方法和系统 | |
Adedayo | Big data and digital forensics | |
US11640583B2 (en) | Generation of user profile from source code | |
US11669549B2 (en) | Identity mapping for cloud migrations | |
WO2008134203A1 (en) | Enterprise-wide information management system | |
CN103810232B (zh) | 内容管理 | |
CN103559185B (zh) | 试验数据文档解析入库方法 | |
CN105825094A (zh) | 管理从网络数据流量中发现的身份数据的方法和装置 | |
CN109408811A (zh) | 一种数据处理方法及服务器 | |
CN106503223A (zh) | 一种结合位置和关键词信息的在线房源搜索方法及装置 | |
CN110727740B (zh) | 关联分析方法及装置、计算机设备与可读介质 | |
CN109690571A (zh) | 基于学习的组标记系统和方法 | |
CN106055546A (zh) | 基于Lucene的光盘库全文检索系统 | |
CN105518644A (zh) | 在地图上实时处理并显示社交数据的方法 | |
CN105095436A (zh) | 数据源数据自动建模方法 | |
CN104836919A (zh) | 一种弹奏仿真吉他实现移动终端解锁的方法及系统 | |
CN112463859A (zh) | 基于大数据和业务分析的用户数据处理方法及大数据平台 | |
CN105589935A (zh) | 社交群组识别方法 | |
CN115329753B (zh) | 一种基于自然语言处理的智能数据分析方法和系统 | |
CN107784588A (zh) | 保险用户信息合并方法和装置 | |
CN106156352A (zh) | 可视化内容管理方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |