Windows取证分析 | 如何最大程度提升分析效率

本文由安全研究人员Amr Ashraf发表于Cyber5w的官方博客,研究人员在本文中讨论了如何对可疑设备中的内存映像进行安全调查,并利用了Volatility 3和MemProcFS来最大程度提升Windows取证分析的工作效率。

介绍

内存取证是任何计算机取证分析人员的必备技能之一,这种技术允许我们找到很多无法在磁盘上找到的数字证据,例如:

1、建立的网络链接;

2、仅在内存中的恶意软件;

3、加密密钥;

4、用户凭证。

从零开始处理内存映像可能会非常具有挑战性,因为这种处理方式要求分析人员对目标操作系统的内存布局和数据结构有深入的了解,但幸运的是,社区有一些工具可以为我们解析这些数据结构,并为我们提供所需的最终结果。这样一来,我们就可以将注意力放到最重要的部分,即我们实际想要看到的内容,以及如何通过内存取证分析达到我们的最终目标。

内存取证中最重要的工具之一就是Volatility,这是一种基于插件的Python工具,我们可以根据需求使用不同的插件,而每个插件都可以从内存中提取特定信息。

Volatility

映像信息

在使用Volatility 2时,如果要处理内存映像的话,你还需要使用一个专门的配置。但如果你使用的是Volatility 3,插件本身就会动态识别配置信息。

使用Volatility需要提供下列参数:

python3 vol.py -f <MemoryImage> <Plugin>

我们以一个简单的插件使用作为开始,下列命令可以显示有关目标设备的一些信息:

python3 .\vol.py -f D:\MemoryDump.mem windows.info

上图中显示的内容可以告诉我们目标系统的Windows版本和执行内存数据捕捉时的系统时间。

运行进程

内存映像中会包含与目标设备相关的所有信息,其中就包括执行内存映像捕捉时目标设备正在运行的进程信息,Volatility同样提供了多种插件来帮助我们调查和分析这些正在运行的进程。

第一个插件就是windows.pslist插件,该插件可以枚举出所有正在运行的进程,如下图所示:

windows.psscan插件与windows.pslist插件类似,但它能够获取已终止进程的信息,同时它也使用了不同的方法来收集正在运行进程的信息,如果威胁行为者使用了反分析技术来隐藏其恶意进程的话,这个插件也许会派上用场。

windows.pstree插件是使用最频繁的,它支持以树状形式查看进程信息,并查看到进程之间的父子关系:

接下来继续我们的分析,我们的目标设备中存在一个恶意活动,我们需要对其进行安全调查,看看我们能够从目标设备的内存中获取到哪些信息。

根据windows.pstree插件的输出,我们发现了一个svchost进程正在以powershell的子进程形式运行,并且它还运行了一个cmd子进程,这就非常可疑了。但最可疑的地方在于,svchost进程本应该只能是services.exe作为父进程,这也就意味着,这个地方是我们可以深入挖掘和研究的地方。

可疑进程调查

找到了可疑的进程之后,我们就可以使用其他的插件来对其进行更深入的分析了。

windows.cmdline插件可以用来查看任意进程通过命令行接口执行的命令,只需要给该插件提供目标进程ID即可(插件名称+“-h”参数可以查看指定插件所有支持的命令选项):

上图中我们可以看到,svchost进程执行的命令行命令是在Documents目录下执行的。

需要注意的是,在某些情况下,你可能会发现Volatility返回的结果中存在信息交换的情况。而内存交换(Swapping)是一种提升内存效率的机制,它可以通过将内存中某些不使用的内容移动到磁盘上,当需要使用的时候再移动回来。

除此之外,我们还可以使用windows.handles来获取引用的进程句柄,这有助于我们找到文件访问或进程创建行为:

当然了,该工具所提供的很多其他命令也非常实用,可以处理DLL注入或其他使用DLL执行的恶意行为。比如说windows.dlllist,该插件可以显示目标进程加载的DLL信息。

在了解了哪一个进程值得进行深入分析之后,我们就可以使用windows.dumpfiles.DumpFiles插件并提供目标进程PID来提取更多信息。

网络链接

获取目标设备内存映像最大的一个优势就在于,我们可以获取到目标设备网络链接的目标IP地址实时信息,以及对应的进程信息。

这里可以选择使用windows.netscan插件:

从上述输出内容中我们可以看到,可疑进程通过端口1337连接了192.168.21.140。

异常检测

某些插件还提供了一些规则来帮助我们自动检测异常,虽然可能会存在假阳性,但确实能够帮助我们大大减少需要分析和查看的数据量。

windows.malfind插件可以查看带有“读&写&执行”权限的内存页面,虽然合法进程也会使用这种技术,但恶意文件使用得会更加频繁和广泛,尤其是当内存页面为MZ(Windows可执行程序签名)时:

让一切变得更简单-MemProcFS

除了Volatility之外,我们也可以选择使用其他的工具,以寻求更多的实用功能。接下来,我们看看如何使用MemProcFS来提升我们内存取证分析的效率。

MemProcFS可以允许我们在文件系统视图中一次性查看多个Volatility插件的输出结果。

该工具的使用非常简单,我们只需要给它传递一个内存映像和一个forensic参数,该工具就会帮助我们对目标内存映像执行自动化取证分析。

需要注意的是,内存映像加载完成后,取证分析操作可能需要等待一段时间才能执行完毕。

在文件系统视图中切换到加载点时,就可以看到如下所示的文件了:

我们可以在每一个进程目录中通过进程名称和进程ID来查看关于正在运行进程的详细信息:

在sys目录中,我们可以查看关于目标系统的详细信息,例如网络、用户和操作系统信息等:

其中,最重要的就是Forensic目录了,其中包含了大量的内存取证信息:

这里我们可以看到系统针对各种组件创建的时间戳,比如说NTFS、网络、Web和进程等:

findevil目录中可以查看到该工具所识别的异常信息,files目录中可以查看到加载在内存中的磁盘内容:

当然了,本文所涉及到的内容还可以扩展至磁盘分析,比如说注册表分析或日志分析等。

总结

每一种安全分析和调查都有其独特的的目标,而深入分析取证文件所采用的方法也因实际情况而定。本文介绍的工具和方法是内存取证活动中常用的,几乎每一项取证活动都会涉及到这些方法步骤,例如寻找可疑的父子进程关系、网络连接、命令执行和异常等等。希望本文能够给信息安全取证人员提供一些新的思路,最大程度地实现取证分析效率的提升。

附件资料

本文涉及到的内存映像拆分成了三个部分,感兴趣的用户可以自行下载实操:

1、第一部分:【点我获取】

2、第二部分:【点我获取】

3、第三部分:【点我获取】

参考资料

https://github.com/volatilityfoundation/volatility3

https://github.com/ufrisk/MemProcFS

参考链接

Windows Memory Forensics

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何给 MySQL 表和列授予权限?(官方版)

目录 授予表级别权限 授予列级别权限 如何给MySQL表和列授予权限是MySQL数据操作中非常重要的步骤&#xff0c;也是企业级使用MySQL数据库的起步点&#xff0c;以下分别参照官方教程整理的MySQL数据库的权限操作。 以下的语句可以直接使用MySQL的命令行进行操作&#xff08;如何…

3038. 相同分数的最大操作数目 I

题目 给你一个整数数组 nums&#xff0c;如果 nums 至少包含 2 个元素&#xff0c;你可以执行以下操作&#xff1a; 选择 nums 中的前两个元素并将它们删除。一次操作的分数是被删除元素的和。 在确保所有操作分数相同的前提下&#xff0c;请你求出最多能进行多少次操作。 …

排序数组 ---- 分治-归并

题目链接 题目: 分析: 用这道题来回顾一下归并排序的思想找到中间结点, 将数组分成两半, 运用递归的思想, 继续对一半进行分半, 分到最后剩一个元素, 再将左右数组合并, 合并两个有序数组, 是先分解, 再合并的过程在合并两个有序数组时, 需要一个额外的数组来记录, 为了避免每…

Unity DOTS技术(九) BufferElement动态缓冲区组件

文章目录 一.简介二.例子 一.简介 在之前的学习中我们发现Entity不能挂载相同的组件的. 当我们需要用相同的组件时则可以使用.IBufferElementData接口 动态缓冲区组件来实现 二.例子 1.创建IBufferElementData组件 using Unity.Entities; using UnityEngine; //[GenerateAu…

three.js官方案例(animation / multiple)webgl_animation_multiple.html学习笔记

目录 ​编辑 1 骨架工具&#xff08;SkeletonUtils&#xff09; 1.1 clone方法 2 蒙皮网格&#xff08;SkinnedMesh&#xff09; 3 自测 4 webgl_animation_multiple.html全部脚本 1 骨架工具&#xff08;SkeletonUtils&#xff09; 用于操控 Skeleton、 SkinnedMesh、和…

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍 前言一.五种IO模型1.IO的本质2.五种IO模型1.五种IO模型2.同步IO与异步IO3.IO效率 二.非阻塞IO1.系统调用介绍2.验证代码 三.select多路转接1.系统调用接口2.写代码 : 基于select的TCP服务器1.封装的Socket接口2.开始写…

1-Maven-settings配置

1-Maven-settings配置 整理下Maven工具的使用。 【本地仓库、私服、镜像仓库、远程仓库、中央仓库】 本文基于阅读其他博客和对公司Maven配置的学习整理出来的。希望通过本此学习能对Maven有个整体性的掌控。 顺序&#xff1a;profile.repository > pom文件中的repository &…

asp.net core使用httpclient

主要讲解常见的get请求和post请求 GET var client new HttpClient(); //3秒钟不响应就超时 client.TimeoutTimeSpan.FromSeconds(3); using HttpResponseMessage response await client.GetAsync("todos/3"); var jsonResponse await response.Content.ReadAsSt…

postman测试接口(springboot+shiro)带token也不通的解决方案

前几天做项目遇到个问题&#xff0c;在系统可以正常使用的接口&#xff0c;拿postman带token访问时候确一直不通&#xff08;后台返回需要登录的提示信息&#xff09; 但是我明明加了token的呀 打断点发现 subject.isAuthenticated()false 查资料猜测可能是因为请求的安全上…

【WP】猿人学_16_js逆向_window蜜罐

https://match.yuanrenxue.cn/match/16 抓包分析 荷载一个加密参数&#xff0c;一个时间戳 时间: 2024-06-07 15:52:31时间戳: 1717746751 1717746751000时间戳和现在对得上&#xff0c;直接生成就行。 追栈 追栈找m的生成位置。 点进去打断点&#xff0c;重新点击其他…

C语言基础——函数

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言 一、函数的概念 二、库函数 2.1 库函数和头文件 2.2 库函数的使用/…

出售iPhone前的必做步骤:完全擦除个人数据的方法

当您准备在闲鱼上转售旧 iPhone、将其捐赠、送给朋友或通过 Apple 回收之前&#xff0c;您可能会选择执行“恢复”操作来擦除您的数据。但请注意&#xff0c;这一操作并不能真正删除设备中的数据。被“删除”或“格式化”的数据实际上仍存在于 iPhone 中&#xff0c;只是被系统…

SpringBoot+Vue在线文档管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 员工管理员 系统功能截图

《精通ChatGPT:从入门到大师的Prompt指南》第1章:认识ChatGPT

第1章&#xff1a;认识ChatGPT 1.1 ChatGPT是什么 ChatGPT&#xff0c;全称为Chat Generative Pre-trained Transformer&#xff0c;是由OpenAI开发的一种先进的自然语言处理模型。它利用了深度学习中的一种技术——Transformer架构&#xff0c;来生成类人文本。ChatGPT通过对…

贪心算法-数组跳跃游戏(mid)

目录 一、问题描述 二、解题思路 1.回溯法 2.贪心算法 三、代码实现 1.回溯法实现 2.贪心算法实现 四、刷题链接 一、问题描述 二、解题思路 1.回溯法 使用递归的方式&#xff0c;找到所有可能的走步方式&#xff0c;并记录递归深度&#xff08;也就是走步次数&#x…

玩转ChatGPT:最全学术论文提示词分享【上】

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在当今数字时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正迅速改变各行各业的运作方式。特别是&#xff0c;OpenAI的ChatGPT等语言模型以其强大的文本生成能力&#xff0c;…

【CTF MISC】XCTF GFSJ0170 János-the-Ripper Writeup(文件提取+ZIP压缩包+暴力破解)

Jnos-the-Ripper 暂无 解法 用 winhex 打开&#xff0c;提到了 flag.txt。 用 binwalk 扫描&#xff0c;找到一些 zip 压缩包。 binwalk misc100用 foremost 提取文件。 foremost misc100 -o 100flag.txt 在压缩包里。 但是压缩包需要解压密码。 用 Ziperello 暴力破解。 不…

mac安装nigix且配置 vue/springboot项目(本地/服务器)

一、mac安装Nigix 1. 查看是否存在 nginx 执行brew search nginx 命令查询要安装的软件是否存在 brew search nginx 2. 安装nginx brew install nginx 3. 查看版本 nginx -v 4. 查看信息 查看ngxin下载的位置以及nginx配置文件存放路径等信息 brew info nginx 下载的存…

Angular 由一个bug说起之六:字体预加载

浏览器在加载一个页面时&#xff0c;会解析网页中的html和css&#xff0c;并开始加载字体文件。字体文件可以通过css中的font-face规则指定&#xff0c;并使用url()函数指定字体文件的路径。 比如下面这样: css font-face {font-family: MyFont;src: url(path/to/font.woff2…

IDEA 中设置 jdk 的版本

本文介绍一下 IDEA 中设置 jdk 版本的步骤。 一共有三处需要配置。 第一处 File --> Project Structure Project 和 Modules 下都需要指定一下。 第二处 File --> Settings 第三处 运行时的配置