首页 > 系统相关 >内存取证例题及Volatility2.6的使用(含命令详细解析)

内存取证例题及Volatility2.6的使用(含命令详细解析)

时间:2024-06-01 09:59:06浏览次数:20  
标签:Volatility2.6 文件 exe 恶意软件 DLL 内存 进程 例题

文章目录

一、背景

X集团的一台重要的电脑系统感染了恶意程序,技术人员发现了该电脑中有入侵行为痕迹,系统中关键的文件被损坏,及时对系统内存和硬盘做了镜像固定现需要你的团队对已经保存好的磁盘镜像和内存镜像原始证据进行分析,找到黑客进行的相关入侵行为证据进行记录。

二、什么是内存取证?

内存取证是数字取证的一个分支,它涉及到收集和分析计算机系统的活动内存(RAM)中的信息。与硬盘取证不同,内存取证关注的是系统运行时的数据,这包括了当前运行的进程、网络连接、用户登录信息、系统漏洞利用的痕迹、恶意软件的特征以及其他在系统关闭或重启后可能丢失的信息。

内存取证可以帮助取证分析师发现攻击者的行为,比如代码注入、权限提升、数据窃取、运行中的恶意软件等。由于内存中的数据是易失的,所以内存取证通常需要在系统运行时或刚刚关闭之前尽快进行,以最大限度地保留证据。

三、参考文章

内存取证例题

记一次比赛的内存取证-基础训练 题目质量扎实

四、工具及题目

工具及镜像:https://www.123pan.com/s/q2J1jv-RAavd.html
提取码:0905

五、解析

1、哪个Volatility配置文件最适合这台机器?

推荐使用kali操作较为便捷,首先把解压完成的volatility_2.6_lin64_standalone文件夹一同复制到kali里,接着把镜像CYBERDEF-567078-20230213-171333.raw移动至我们刚刚复制到volatility_2.6_lin64_standalone文件夹下;(同一目录下不需要输路径,这样较为便捷)

接着进入目录;(原则上命令只是移动了一下并没有什么操作,这样做只是为了让命令看起来不是很长)

mv volatility_2.6_lin64_standalone vol

取证万事开头百分之九九都是查看镜像信息,分析出到底是哪一个操作系统,所以使用参数imageinfo;(重点)

./vol -f 123.raw imageinfo

在这里插入图片描述

可以看出这里不止一个操作系统,所以一般操作系统我们取第一个就可以了;(题目所说的也是这个配置文件)

拓展1.1

简单说明一下这里有那些信息可以获取;

  1. 推荐的配置文件:Volatility建议使用WinXPSP2x86WinXPSP3x86配置文件。这表明被分析的内存映像很可能来自一个运行Windows XP Service Pack 2或Service Pack 3的32位系统。

  2. 地址空间层级

    • AS Layer1:使用的是IA32PagedMemory,这是内核的地址空间,说明了系统是32位的。
    • AS Layer2:使用的是FileAddressSpace,指向内存映像文件的路径。
  3. 物理地址扩展(PAE)类型:显示为"No PAE",表示物理地址扩展没有启用。

  4. 目录表基(DTB)地址:提供了用于转换虚拟地址到物理地址的目录表基地址。

  5. 内核调试器块(KDBG)地址:给出了KDBG结构的物理地址。

  6. 处理器数量:显示只有1个处理器。

  7. 服务包类型Image Type (Service Pack)为3,这通常表示操作系统是Windows XP Service Pack 3。

  8. 处理器控制区寄存器(KPCR):为CPU 0提供了KPCR的地址。

  9. 用户模式共享数据(KUSER_SHARED_DATA)地址:提供了一个重要的数据结构的地址。

  10. 映像日期和时间

    • Image date and time:内存映像是在2023年2月13日18:29:11 UTC时间创建的。
    • Image local date and time:内存映像的本地时间是2023年2月13日10:29:11,时区是UTC-0800。

flag{WinXPSP2x86}

2、获取镜像时有多少个进程在运行?

查看进程我们使用pslist;(注意该插件可以列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以)

./vol -f 123.raw --profile=WinXPSP2x86 pslist

在这里插入图片描述

其实也还有一个插件pstree,它的作用和pslist大差不差;

拓展1.2

简述一下区别;

  1. pslist

    • pslist是一种显示当前系统中所有活动进程的列表的工具。它通常显示每个进程的PID(进程ID)、父进程PID、进程启动时间、进程运行的用户、CPU时间、以及进程状态等信息。
    • pslist提供了一个平面视图,列出所有进程及其属性,但不直接显示进程之间的层级关系或父子关系。
  2. pstree

    • pstree显示的是进程以树状结构的形式,这能够直观地展示进程之间的父子关系。它以树状图的方式展示进程,其中每个节点代表一个进程,节点的层级关系反映了进程之间的父子关系。
    • pstree对于理解进程之间的依赖关系非常有用,特别是当需要分析进程间的相互作用或是调试系统问题时。

总的来说,pslist提供了一种详细的方式来查看每个进程的具体信息,而pstree则提供了一种直观的方式来理解进程之间的层级关系。根据你的需要,你可以选择使用其中的一个或两者结合使用,以获得所需的进程信息。

flag{25}
3、cmd.exe的进程ID是什么?

进程ID就是里面的所指的PID,其实上一题答案就已经出来了,但是这里我们换一个命令试试看;

./vol -f 123.raw --profile=WinXPSP2x86 pstree

在这里插入图片描述

发现也可以看见大差不差,那即上题已说明过pstree的用处,这里就不在多述;

flag{1960}
4、最可疑的进程名称是什么?

这里如果是第一次做的小伙伴,那可能会有一些困难,如在一些CTF竞赛中,实在不知道,那就看那个顺眼挨个一个一个尝试,反正总是在这里的。当然这里是解析,肯定不会让大家慢慢尝试啦,那我们就来简单分析一下;

./vol -f 123.raw --profile=WinXPSP2x86 pstree 

在这里插入图片描述

简单查看了下发现rootkit.exe这个进程名看起来最可疑。

因为它与常见的合法进程名不符,而且"rootkit"这个词通常与恶意软件相关。此外,rootkit.exe下面有一个子进程cmd.exe,这可能表明rootkit.exe可能已经执行了一些命令或脚本,这是恶意软件常见的行为。

拓展1.3

rootkit.exe通常指的是一种恶意软件,其名称来源于“Rootkit”,这是一种旨在隐藏其存在以及系统中其他软件或活动的恶意软件。Rootkit通常用于隐藏恶意活动,如病毒、后门等,使它们对用户和安全软件难以检测。Rootkit可以攻击操作系统的核心级别(内核模式Rootkit)或用户模式级别的应用程序和服务。

Rootkit的主要特点

  1. 隐蔽性:Rootkit的主要目的是隐藏自身和其他恶意活动,使得恶意软件可以在系统上长期潜伏。

  2. 持久性:Rootkit往往具有很强的持久性,即使系统重启,它们也能自动激活。

  3. 权限提升:Rootkit常常用于获取系统的最高权限(如root或Administrator权限),以便控制整个系统。

  4. 监控和控制:Rootkit可能会监控用户输入、窃取敏感信息、控制系统行为,甚至远程控制受感染的计算机。

Rootkit的常见用途

  • 隐藏其他恶意软件,如病毒、木马、间谍软件。
  • 维持对受感染系统的远程访问和控制。
  • 监控用户行为,窃取敏感信息。
  • 禁用或绕过安全软件。

防御措施

  • 使用更新的安全软件,定期扫描系统。
  • 安装操作系统和应用程序的安全更新和补丁。
  • 限制系统权限,避免使用管理员账户进行日常操作。
  • 对异常行为保持警惕,如系统性能下降、未知进程活动等。

总结

rootkit.exe作为一种恶意软件,其设计理念是为了隐藏其存在和恶意活动,给系统安全带来严重威胁。

flag{rootkit.exe}
5、哪一个进程被注入的可能性最高?

这里我们使用pscan来进行查看较为便捷;

./vol -f 123.raw --profile=WinXPSP2x86 psscan

pscan简单分析:

pscan是一个在某些内存分析工具和取证工具中使用的命令,例如Volatility框架。它的主要作用是扫描物理内存,寻找进程相关的数据结构,以此来识别系统中运行的进程。不同于pslist这样的命令,它依赖于操作系统的进程列表来展示活动进程,pscan通过直接扫描内存来查找进程,这使得它能够发现那些被隐藏或从进程列表中解链(unlink)的进程。

在这里插入图片描述

从上题已得知恶意进程。所以基本可以确定svchost.exe就是被注入的;

我们简单分析一下;

由于rootkit.exe明显是一个恶意进程,它可能已经或正尝试注入代码到一个或多个svchost.exe进程中。svchost.exe进程通常会有多个实例运行,每个实例托管一组不同的服务。恶意软件作者知道这一点,并利用它来隐藏恶意活动,因为攻击者注入的代码会与正常的系统服务混合在一起,从而更难被发现。

因此,可以推测svchost.exe的实例可能被注入了恶意代码。

flag{svchost.exe}
6、最近的进程中引用了一个奇怪的文件。提供该文件的完整路径。

据上题可知svchost就是被注入的文件(暂时就这么想),所以我们只需要它运行中调用了分析一下调用了什么文件即可;

已知svchost进程PID是888,这里我们可以使用Volatility的filescandlllisthandles等插件可以帮助识别进程相关的文件和库。

这里我选择的是handles;

./vol -f 123.raw --profile=WinXPSP2x86 -p 880 handles -t file

简单分析一下命令:

  • -p 880-p参数指定了进程ID(PID)。这里的PID是880,命令将只针对此PID进行操作。

  • handles:这是Volatility的一个插件,用于列出指定进程打开的句柄。句柄是Windows操作系统中用于引用资源(如文件、注册表项、进程、线程等)的标识符。

  • -t file:这个参数与handles插件一起使用,用于过滤结果,只显示文件类型的句柄。

这个命令的作用是:使用Volatility分析名为123.raw的内存映像文件,该文件假定来自一个运行Windows XP SP2的32位系统。命令将列出PID为880的进程打开的所有文件句柄。

在这里插入图片描述

完整路径;\Device\HarddiskVolume1\WINDOWS\system32\drivers\str.sys

分析:

这个路径引用了一个名为str.sys的文件,位于WINDOWS\system32\drivers目录下。通常,这个目录用于存放系统的驱动程序文件。然而,str.sys并不是Windows XP SP2的一个标准驱动文件名。恶意软件作者有时会尝试将恶意驱动程序或其他类型的恶意文件放置在系统目录中,以此来隐藏它们的存在,并可能使用合法看起来的文件名。

flag{\Device\HarddiskVolume1\WINDOWS\system32\drivers\str.sys}
7、该进程加载时被注入的dll文件名是什么?

这里我们为了便捷,我们可以使用ldrmodules插件检查进程的加载器信息,也可以发现隐藏或未被正常列出的DLL文件。

./vol -f 123.raw --profile=WinXPSP2x86 ldrmodules -p 880 |grep -i false

在这里插入图片描述

简单分析一下这个命令:

  • ldrmodules:是Volatility的一个插件,用于检查进程加载的模块(DLLs和驱动程序)。它特别有用于寻找那些在正常的加载器列表中未列出(即隐藏模块),或者那些路径、内存映像、加载顺序不一致的模块。
  • -p 880:指定只分析PID为880的进程。
  • |grep -i false:这部分是Linux/Unix命令行的管道和grep命令,用于从ldrmodules插件的输出中筛选包含"false"的行。-i参数使得搜索不区分大小写。

因此,这个命令的作用是:分析指定内存映像文件中PID为880的进程,寻找那些加载异常或可能被隐藏的模块。

那为什么就可以确认三个False就是呢?

ldrmodules的上下文中,输出中的"false"通常指的是三个关键属性(是否在加载器列表中,是否在内存中,是否在磁盘上)之间的一致性检查。如果某个模块的某项检查结果为"false",这可能表明该模块被隐藏或以异常方式加载到进程中,这是恶意软件常用的技巧之一。

flag{msxml3r.dll}
8、被注入的dll的基址是什么?
拓展1.4

首先我们了解什么是dll的基址:

1、DLL的基址是指一个动态链接库(DLL)文件在内存中加载时预定的起始地址。当一个DLL被加载到进程的地址空间时,操作系统尝试将它放置在这个预定的基址处。

2、每个DLL文件在其映像头中都有一个基址字段,这是DLL编译时设定的。如果该基址在进程的地址空间中是可用的,那么DLL就会被加载到那个地址;如果不可用(例如,已经被其他模块占用),操作系统必须重新定位DLL,这是通过修改DLL中的地址引用来实现的,这个过程被称为基址重定位。

3、基址重定位是一个消耗资源的过程,因为它需要额外的时间来修改DLL中的地址引用,并且可能会降低代码的执行效率。因此,理想情况下,每个DLL都会有一个独特的基址,以避免基址冲突和重定位的需要。

4、在安全分析和内存取证中,了解DLL的基址很重要,因为它可以帮助分析师确定DLL是否按照预>期加载到了进程中,或者是否存在异常行为,如代码注入或DLL劫持等。

那这里我们先查询注入malfind 找到隐藏以及注入代码的插件命令,但是注意这个命令很强大,直接输入会显示很多结果,为了要求显示svchost下的,必须要指定880端口进行过滤;

./vol -f 123.raw --profile=WinXPSP2x86 malfind -p 880 

在这里插入图片描述

简单分析一下命令:

  • malfind:这是一个Volatility插件,用于在内存中搜索可能的恶意软件注入行为。malfind可以帮助识别异常的内存段,这些内存段可能包含执行代码(如shellcode)或者被恶意软件修改以隐藏其存在。
  • 作用:这个命令的作用是在内存转储文件123.raw中,针对PID为880的进程,使用malfind插件来检查可能的恶意软件注入或内存篡改行为。

这里我们可以把该dll文件导出到我们想要的目录里;

./vol -f 123.raw --profile=WinXPSP2x86 dlldump -p 880 --base=0x980000 --dump-dir=.

在这里插入图片描述

分析:

  • dlldump:这是Volatility的一个插件,用于从内存映像中提取DLL文件。当你想要分析某个进程加载的特定DLL的实际内容时,这个插件非常有用。

  • --base=0x980000:这个选项指定了要提取的DLL的基址。基址是DLL在进程地址空间中加载的起始内存地址。这个地址必须准确,以确保正确提取目标DLL。

  • --dump-dir=.:这个选项指定了提取的DLL文件保存的目录。在这个例子中,.表示当前目录,也就是说,提取的DLL将会被保存在Volatility命令执行的当前目录中。

总结:这个命令的作用是从123.raw内存映像文件中,针对PID为880的进程,根据指定的基址0x980000,提取DLL文件并将其保存在当前目录。这对于分析恶意软件的行为或确定特定DLL版本是否包含已知漏洞非常有用。

可以看见文件已经在我们当前目录下,那我们这里可以使用微步检测到底是不是个病毒;

微步

在这里插入图片描述

拓展1.5

什么是微步?

微步在线(ThreatBook)是一个以云计算为基础的安全服务平台,专注于提供包括威胁情报、安全检测和响应等在内的网络安全服务。它旨在帮助企业和组织对抗网络威胁,提高安全防护能力。微步在线通过实时的威胁数据分析和丰富的安全知识库,为用户提供威胁识别、评估和防御建议。用户可以通过访问其网站获取相关服务和信息。

在这里插入图片描述

不出所料包是病毒的啦;

flag{0x980000}

六、原题英文目录;(含中文翻译)

1、Which volatility profile would be best for this machine?
哪个Volatility配置文件最适合这台机器?

2、How many processes were running when the image was acquired?
获取镜像时有多少个进程在运行?

3、What is the process ID of cmd.exe?
cmd.exe的进程ID是什么?

4、What is the name of the most suspicious process?
最可疑的进程名称是什么?

5、Which process shows the highest likelihood of code injection?
哪一个进程被注入的可能性最高?

6、There is an odd file referenced in the recent process. Provide the full path of that file.
最近的进程中引用了一个奇怪的文件。提供该文件的完整路径。

7、What is the name of the injected dll file loaded from the recent process?
该进程加载时被注入的dll文件名是什么?

8、What is the base address of the injected dll?
被注入的dll的基址是什么?

标签:Volatility2.6,文件,exe,恶意软件,DLL,内存,进程,例题
From: https://blog.csdn.net/administratorlws/article/details/139362086

相关文章

  • [转帖]数据库系列之MySQL数据库中内存使用分析
    在实际系统环境中,MySQL实例的内存使用随着业务的增长缓慢增长,有些时候并没有及时的释放。本文简要介绍下MySQL数据库中和内存相关的配置,以及分析内存的实际使用情况,以进行应急和调优处理。1、MySQL内存结构在MySQL中内存的占用主要由两部分组成:全局共享缓存globalbuffer......
  • [转帖]一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问
     https://segmentfault.com/a/1190000044152595 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存......
  • 数据在内存中的存储
    在通过之前学习c语言相关的知识后我们知道c语言中有多种的数据类型,那么这其中在编写程序的时候用的整型和浮点型在内存空间中是按照什么样的规律存储的呢?整型和浮点型数据在的存储方法是相同的吗?在本篇中就将详细的讲解数据在内存当中存储的相关知识1.整数在内存中的存储在......
  • 彻底关闭解决Windows Defender实时防护(MsMpEng.exe、Antimalware Service Executable
    彻底关闭解决WindowsDefender实时防护MsMpEng.exe、AntimalwareServiceExecutable占用CPU和内存过多win11有效解决方法常规方法步骤一、修改注册表步骤二、组策略关闭WindowsDefender防病毒程序根治方法直接删除WindowsDefender实时防护功能简述解决过程Antima......
  • 【C语言】动态内存管理
    前言为什么要有动态内存分配?可以回想一下目前为止,我们想要向内存申请一块空间存放数据,有哪些手段呢?目前我们遇到的方式主要有两种:一、创建一个变量。比如我们存放一个整型数据,就创建一个整型变量。(也就是申请4个字节)我们创建一个变量,存放了一个数据。intn=2077;二、如......
  • 【c++基础(五)】内存管理--new
    1.前言在C语言中,有四个内存管理函数:malloc,calloc,realloc和free但是使用起来他们却是非常的不方便:int*p1=(int*)malloc(sizeof(int)*n);int*p2=(int*)calloc(4,sizeof(int));int*p3=(int*)realloc(p2,sizeof(int)*10);同时这里也会出现一个问题,malloc不会进......
  • 大表迁移,内存不够,如何用纯代码实现?
    很多情况下,在工作中需要进行表单迁移,在没有迁移软件的前提下,应该如何进行操作呢?第一种思路可以通过命令行将表单文件导出再导入,但是表单文件足够大的情况下,导出和导入是非常麻烦的。在此提供一个纯java代码的简单思路。通常情况我们查询一个较大的表单需要花费很长的时间,并......
  • 服务器内存不足该怎么办?
    当服务器的物理内存使用率达到或者是接近百分之百时,会导致系统没有办法为新的进程或者是请求分配足够的内存空间,在这种情况下,服务器的性能很有可能会受到一定的影响,严重的会导致系统崩溃或者服务出现中断。那我们面临服务器内存不足时应该怎么办呢?首先服务器内存已满的情况......
  • 服务器内存不足的原因
    随着服务器的使用越来越广泛,大多数的企业都离不开服务器这一设备,服务器能够通过网络为多个用户提供计算、数据和游戏等多种应用服务,是一种高性能的商用计算机,能够存储和处理网络上大部分的数据信息,但随着时间的推移,服务器中的内存会变得不能够满足业务的需求,出现内存不足的情况......
  • 在 Python 中转换为 np.array 时的内存饱和与内核重启
    在将处理过的数据转换为numpy数组时,我遇到了内存问题。我有57GB内存,但内存很快就饱和了,内核会在np.array(processed_X)处重启。以下是我的代码:importnumpyasnp导入scipy.signalfromskimage.transformimportresizefromtqdmimporttqdmdefapply_stft(signal,n......