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

文章目录

      • 一、背景
      • 二、什么是内存取证?
      • 三、参考文章
      • 四、工具及题目
      • 五、解析
        • 1、哪个Volatility配置文件最适合这台机器?
          • 拓展1.1
        • 2、获取镜像时有多少个进程在运行?
          • 拓展1.2
        • 3、cmd.exe的进程ID是什么?
        • 4、最可疑的进程名称是什么?
          • 拓展1.3
        • 5、哪一个进程被注入的可能性最高?
        • 6、最近的进程中引用了一个奇怪的文件。提供该文件的完整路径。
        • 7、该进程加载时被注入的dll文件名是什么?
        • 8、被注入的dll的基址是什么?
          • 拓展1.4
          • 拓展1.5
      • 六、原题英文目录;(含中文翻译)

一、背景

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的基址是什么?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667731.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻松实现PDF文件的在线浏览

福昕软件最近发布了一款名为Cloud API的产品,通过几行代码即可轻松实现PDF文件的在线浏览。先一睹为快吧。 简介 先看看产品官网:福昕 Cloud API Cloud API包括两个形态产品,一个是在线的PDF查看工具,叫PDF Embed API,另外一个…

面试题 17.05. 字母与数字(前缀和)

给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。 返回该子数组,若存在多个最长子数组,返回左端点下标值最小的子数组。若不存在这样的数组,返回一个空数组。 示例 1: 输入: ["…

【并发程序设计】13.信号机制

13.信号机制 概念: 信号机制是Unix、类Unix以及其他POSIX兼容的操作系统中的一种进程间通讯方式,它允许进程在发生特定事件时接收通知。 信号机制是操作系统中的一个重要概念,它提供了一种异步的通知机制,用于在进程之间传递消…

每日一题——Python实现PAT甲级1042 Shuffling Machine(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 功能分析 时间复杂度 空间复杂度 总结 代码点评 我要更强 优化方向 …

数据库开发-Mysql03

目录 1. 多表查询 1.1 概述 1.1.1 数据准备 1.1.2 介绍 1.1.3 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 1.5 案例 2. 事务 2.1 介绍 2.2 操作 2.3 四大特性 3. 索引 3.1 介绍 3…

光伏企业供应链采购数字化转型升级路径

随着中国光伏行业引领全球,光伏行业竞争激烈。在供应链方面的处理能力也需要有更好的提升。本身光伏企业采购体系依赖传统采购方式,除了需要采购人员耗费大量的时间做供应商的背景调查之外,大量环节却依靠人工线下的方式完成,比如…

微服务 feign-gateway

早期微服务跨集群调用 使用的是Eureka 和RestTemplate,这种写法虽然可以解决服务之间的调用问题 ,但是随着服务的增多,实例变动,早期的写法相当于把请求方式,请求地址,参数写死了,耦合度太高,参…

OpenAI助手API接入-问答对自动生成

支持GPT-3.5-Turbo, GPT-4o, GPT-4-Turbo import json import openai from pathlib import Path import os client openai.OpenAI(base_urlbase_url, api_keyapi_key) file client.files.create( fileopen("H3.pdf", "rb"), purposeassistants ) …

Matplotlib | 绘制柱状图

简介 安装 Matplotlib 开始绘制 简单柱状图 改变颜色 改变纹理 改变边框样式 改变透明度 改变柱子宽度 改变图表标题 ​编辑 并列柱状图 横向柱状图 堆叠柱状图 更多函数 简介 柱状图(Bar chart),是一种以长方形的长度为变量的…

重庆人文科技学院建立“软件安全产学研基地”,推动西南地区软件安全发展

5月29日,重庆人文科技学院与开源网安签订了《产学研校企合作协议》,并举行了“重庆人文科技学院产学研基地”授牌仪式,此次合作不仅深化了双方在软件安全领域的产学研紧密联结,更是对川渝乃至西南地区软件供应链安全发展起到重要的…

缓冲区溢出攻击

缓冲区溢出攻击 缓冲区溢出概述基础概念缓冲区溢出根源缓冲区溢出危害性&普遍性 缓冲区溢出攻击原理内存分配模式缓冲区溢出攻击缓冲区溢出攻击原理缓冲区溢出攻击分类堆栈溢出堆栈相关知识攻击原理 堆溢出攻击堆简介堆溢出DWORD SHOOT BSS段溢出 缓冲区溢出攻击防御措施防…

npm install pubsub-js报错的解决汇总

我在练习谷粒商城P83时,选择分类时触发向后端请求选择分类catId绑定的品牌数据,发现前端控制台报错: "PubSub is not definded",找不到pubsub。 因为缺少pubsub包,所以开始安装此包。 于是在网上一顿搜索猛如虎&…

使用Python库Matplotlib绘制常用图表类型

使用Python库Matplotlib绘图 一、Matplotlib绘图参数设置1.1 设置分辨率和画布大小1.2 保存图片并设置边缘留白为紧凑型1.3 设置坐标轴标签1.4 画直线设置线宽和颜色1.5 画子图1.5.1 通过figure的add_subplot()画子图1.5.2 通过plt的subplots画子图 二、使用Matplotlib中scatte…

Geek Uninstaller丨轻盈免费无需安装,Win超强卸载工具

以前卸载软件用习惯了uninstall tool,今天试了一下geek,对比一下还是geek卸载软件更轻盈一点,没有太多冗杂的步骤。 Geek Uninstaller 是一款轻量级的软件卸载工具,它可以帮助用户彻底删除电脑上的软件,包括那些顽固的…

【因果推断python】8_线性回归模型2

目录 回归理论 非随机数据的回归 回归理论 我不打算深入研究线性回归是如何构建和估计的。然而,一点点理论将有助于解释它在因果推断中的力量。首先,回归解决了理论上的最佳线性预测问题。令 是一个参数向量: 线性回归找到最小化均方误差 (…

JavaScript倍速播放视频

F12打开开发者工具,打开控制台,输入这行代码,视频即可加速播放, 可以调整倍速(2,4,8,16) document. getElementsByTagName("video")[0]. playbackRate16

单片机建立自己的库文件(1)

文章目录 前言一、代码模块化是什么&#xff1f;二、使用步骤1.以LCD1602作为例子2.将LCD1602 相关的代码抽取到另外一个文件中 三、调用LCD1602.h1.新建一个工程项目&#xff0c;将LCD1602.h添加到工程中2.在主函数上加入 #include <LCD1602.h> 总结 前言 提示&#xf…

MACOS安装 vue 抱错解决方法npm ERR! code EACCESnpm ERR! syscall mkdirnpm ERR!

问题 在使用脚手架 vue-cli 创建 vue 工程的时候存在权限不足的情况下&#xff0c;报错&#xff1b; npm error code EACCES npm error syscall open npm error path /Users/ npm ERR! code EACCESnpm ERR! syscall mkdirnpm ERR! 解决方案&#xff1a; sudo npm cache cl…

Go跨平台编译

1.编译windows平台运行程序 # windows env GOOSwindows GOARCHamd64 go build main.go2.编译linux平台运行程序 # linux env GOOSlinux GOARCHamd64 go build main.go 3.编译macos平台运行程序 # macos env GOOSdarwin GOARCHamd64 go build main.go 编译结果:

VQAScore开启文本到视觉生成评估新篇章

随着生成式人工智能技术的飞速发展&#xff0c;如何全面评估生成内容的质量和与输入提示的一致性成为了一个挑战。在图像-文本对齐领域&#xff0c;传统的评估方法如CLIPScore存在局限性&#xff0c;尤其是在处理涉及多个对象、属性和关系的复杂提示时。它们通常基于简单的词袋…