文章目录
- 一、背景
- 二、什么是内存取证?
- 三、参考文章
- 四、工具及题目
- 五、解析
- 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
简单说明一下这里有那些信息可以获取;
-
推荐的配置文件:Volatility建议使用
WinXPSP2x86
或WinXPSP3x86
配置文件。这表明被分析的内存映像很可能来自一个运行Windows XP Service Pack 2或Service Pack 3的32位系统。 -
地址空间层级:
AS Layer1
:使用的是IA32PagedMemory
,这是内核的地址空间,说明了系统是32位的。AS Layer2
:使用的是FileAddressSpace
,指向内存映像文件的路径。
-
物理地址扩展(PAE)类型:显示为"No PAE",表示物理地址扩展没有启用。
-
目录表基(DTB)地址:提供了用于转换虚拟地址到物理地址的目录表基地址。
-
内核调试器块(KDBG)地址:给出了KDBG结构的物理地址。
-
处理器数量:显示只有1个处理器。
-
服务包类型:
Image Type (Service Pack)
为3,这通常表示操作系统是Windows XP Service Pack 3。 -
处理器控制区寄存器(KPCR):为CPU 0提供了KPCR的地址。
-
用户模式共享数据(KUSER_SHARED_DATA)地址:提供了一个重要的数据结构的地址。
-
映像日期和时间:
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
简述一下区别;
-
pslist:
pslist
是一种显示当前系统中所有活动进程的列表的工具。它通常显示每个进程的PID(进程ID)、父进程PID、进程启动时间、进程运行的用户、CPU时间、以及进程状态等信息。pslist
提供了一个平面视图,列出所有进程及其属性,但不直接显示进程之间的层级关系或父子关系。
-
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的主要特点:
-
隐蔽性:Rootkit的主要目的是隐藏自身和其他恶意活动,使得恶意软件可以在系统上长期潜伏。
-
持久性:Rootkit往往具有很强的持久性,即使系统重启,它们也能自动激活。
-
权限提升:Rootkit常常用于获取系统的最高权限(如root或Administrator权限),以便控制整个系统。
-
监控和控制: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的filescan
、dlllist
、handles
等插件可以帮助识别进程相关的文件和库。
这里我选择的是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的基址是什么?