• 内存取证工具Volatility学习


    更新时间:2022.08.11

    微信公众号:乌鸦安全

    说明

    本文参考了一下资料,感谢各位师傅的帮助:

    https://github.com/volatilityfoundation/volatility
    https://www.volatilityfoundation.org/
    https://www.cnblogs.com/Junglezt/p/16027761.html (主要参考)
    https://www.freebuf.com/articles/database/266738.html
    
    • 1
    • 2
    • 3
    • 4

    1. Volatility介绍

    Volatility是一款开源的内存取证分析工具,支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证方式。该工具是由python开发的,目前支持python2、python3环境。接下来小编将带领大家学习Volatility工具的安装及使用。
    参考:http://www.hackdig.com/09/hack-484669.htm
    volatility(挖楼推了推) 是一个开源的框架,能够对导出的内存镜像进行分析,能够通过获取内核的数据结构,使用插件获取内存的详细情况和运行状态,同时可以直接dump系统文件,屏幕截图,查看进程。
    参考:https://www.cnblogs.com/Junglezt/p/16027761.html

    可以使用 -h 参数获取使用方法和插件介绍,列举几个常用到的命令
    
    imageinfo:显示目标镜像的摘要信息,这常常是第一步,获取内存的操作系统类型及版本,之后可以在 –profile 中带上对应的操作系统,后续操作都要带上这一参数
    
    pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
    
    pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
    
    psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
    
    cmdscan:可用于查看终端记录
    
    notepad:查看当前展示的 notepad 文本(–profile=winxp啥的低版本可以,win7的不行,可以尝试使用editbox)
    
    filescan:扫描所有的文件列表
    
    linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’
    
    dumpfiles:导出某一文件(指定虚拟地址)
    
    需要指定偏移量 -Q 和输出目录 -D
    
    memdump:提取出指定进程,常用foremost 来分离里面的文件
    
    需要指定进程-p [pid] 和输出目录 -D
    
    editbox:显示有关编辑控件(曾经编辑过的内容)的信息
    
    screenshot:保存基于GDI窗口的伪截屏
    
    clipboard:查看剪贴板信息
    
    iehistory:检索IE浏览器历史记录
    
    systeminfo:显示关于计算机及其操作系统的详细配置信息(插件)
    
    hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码)
    
    mftparser:恢复被删除的文件
    
    svcscan:扫描 Windows 的服务
    
    connscan:查看网络连接
    
    envars:查看环境变量
    
    dlllist: 列出某一进程加载的所有dll文件
    
    hivelist: 列出所有的注册表项及其虚拟地址和物理地址
    
    timeliner: 将所有操作系统事件以时间线的方式展开
    ————————————————
    版权声明:本文为CSDN博主「南腩男」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/m0_53183117/article/details/122443367
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    2. Volatility安装

    目前作者已公布了两个版本的Volatility,Volatility2是基于py2环境,Volatility3是基于py3环境,目前可以在github上下载安装,也可以直接在官网下载直接运行:
    github环境:

    https://github.com/volatilityfoundation/volatility
    
    • 1

    官网直接下载使用:

    https://www.volatilityfoundation.org/
    
    • 1

    直接下载可执行文件直接运行:

    image.png

    安装的话,可以从github或者官网下载,利用python2进行安装,也可以直接下载编译好的可执行文件直接运行,在这里因为我的kali出了一点问题,所以直接下载mac版的可执行文件运行。
    文件下载的话,不要使用Chrome版,下载不下来,需要使用其他的浏览器来下载。

    image.png
    在这里使用命令看下:./volatility_2.6_mac64_standalone -h
    image.png

    3. volatility使用

    在这里以分析vm虚拟机的镜像文件为例:
    在这复制下winserver2003的vm暂停文件:
    image.png

    3.1 获取内存镜像版本信息

    使用方法是:volatility -f 文件名 imageinfo
    直接使用命令分析:

    ./volatility -f 2003.vmem imageinfo
    
    • 1

    image.png
    当前可以分析出来结果:

    $ ./volatility -f 2003.vmem imageinfo
    Volatility Foundation Volatility Framework 2.6
    INFO    : volatility.debug    : Determining profile based on KDBG search...
              Suggested Profile(s) : Win2003SP0x86, Win2003SP1x86, Win2003SP2x86
                         AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                         AS Layer2 : FileAddressSpace (/Users/crow/Security/crow_tools/19_取证/volatility_2.6_mac64_standalone/2003.vmem)
                          PAE type : PAE
                               DTB : 0x503000L
                              KDBG : 0x8088e3e0L
              Number of Processors : 1
         Image Type (Service Pack) : 2
                    KPCR for CPU 0 : 0xffdff000L
                 KUSER_SHARED_DATA : 0xffdf0000L
               Image date and time : 2022-08-09 10:30:16 UTC+0000
         Image local date and time : 2022-08-09 18:30:16 +0800
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.2 pslist 列出内存中的进程

    可以列出内存中运行的进程的pid,ppid等信息
    volatility -f 镜像名 --profile=第一步获取的版本信息 pslist
    在第一步获取的是Win2003SP0x86,所以命令组合以下就是:

    ./volatility -f 2003.vmem --profile=Win2003SP0x86 pslist
    
    • 1

    但是命令执行之后,并未获取到有效的进程信息:
    image.png

    在这里将镜像版本信息更换一下再试试:

    ./volatility -f 2003.vmem --profile=Win2003SP1x86 pslist
    
    • 1

    image.png

    3.3 导出指定进程 memdump

    在我们pslist会后,会给出进程的PID,只需要指定PID就可以将进程导出

    image.png

    当前svchost的进程为1256,运行命令为:

    ./volatility -f 2003.vmem --profile=Win2003SP1x86 memdump -p 1256 -D ./result
    
    • 1

    image.png

    image.png

    导出的文件名进程的PID,后缀名为dmp
    可以使用strings -e l 2616.dmp | grep flag,筛选其中的flag
    -e为选择字符的大小,l为32bit为一个字符

    这段不是我的
    [

    3.4 查看网络netscan

    该命令无法在2003上使用
    image.png

    换一个win7的试试:
    获取win7的镜像信息:
    image.png

    获取网络:

    ./volatility -f win7.vmem --profile=Win7SP1x64 netscan
    
    • 1

    image.png

    3.5 列出缓存在内存中的注册表 hivelist

    ./volatility -f win7.vmem --profile=Win7SP1x64 hivelist
    
    • 1

    image.png

    3.6 扫描内存中的文件 filescan

    ./volatility -f win7.vmem --profile=Win7SP1x64 filescan
    
    • 1

    列出的文件会非常的多:
    image.png
    可以使用grep命令来查找自己需要的:
    需要加上-E参数

    ./volatility -f win7.vmem --profile=Win7SP1x64 filescan | grep -E "txt\|jpg\|png" # 在linux|mac情况下使用
    
    volatility -f win7.vmem --profile=Win7SP1x64 filescan | findstr "txt\|jpg\|png"  # 在Windows下使用
    
    • 1
    • 2
    • 3

    image.png

    3.7 导出内存中的文件 dumpfiles

    在这里需要3.6中找到的文件的内存地址来导出:

    image.png

    ./volatility -f win7.vmem --profile=Win7SP1x64 dumpfiles -Q  0x000000007ce78f20  -D ./ -u 
    
    -Q:指定文件在内存中的地址  
    -D:指定文件导出的地址
    -u:指定原文件名导出(不咋好用)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里导出的时候,发现win7无法成功,导出的文件均为0kb
    image.png

    在这里使用winserver2003成功:

    ./volatility -f 2003.vmem --profile=Win2003SP1x86 dumpfiles -Q  0x0000000002e58150 -D ./ -u
    
    • 1

    image.png
    image.png

    3.8 历史命令cmdscan

    ./volatility -f win7.vmem --profile=Win7SP1x64 cmdscan # 没记录
    
    ./volatility -f 2003.vmem --profile=Win2003SP1x86 cmdscan
    
    • 1
    • 2
    • 3

    image.png

    3.9 获取截图 screenshot

    这里面的截图是黑白的:

    ./volatility -f win7.vmem --profile=Win7SP1x64 screenshot -D  ./result
    
    • 1

    image.png

    图片如下:
    image.png

    3.10 列出用户名 pringkey

     ./volatility -f 2003.vmem --profile=Win2003SP2x86 printkey -K "SAM\Domains\Account\Users\Names"
    
    • 1

    image.png

    3.11 列出hash信息 hashdump

    在这里也可以看到用户名信息

     ./volatility -f 2003.vmem --profile=Win2003SP2x86 hashdump
    
    • 1

    image.png

    3.12 获取主机名 printkey

    ./volatility -f 2003.vmem --profile=Win2003SP2x86 printkey -K "ControlSet001\Control\ComputerName\ComputerName"
    
    • 1

    image.png

    3.13 获取系统浏览器历史 iehistory

    ./volatility -f win7.vmem --profile=Win7SP1x64 iehistory
    
    • 1

    image.png

    3.14 列出PE|程序版本信息 verinfo

    ./volatility -f 2003.vmem --profile=Win2003SP1x86 verinfo
    
    • 1

    image.png

    3.15 editbox 查看内存中记事本的内容

    ./volatility -f 2003.vmem --profile=Win2003SP1x86 editbox
    
    • 1

    image.png

  • 相关阅读:
    电脑USB、HDMI、DP各种接口及速度
    小黑准备收拾东西领物资的日常积累:线程与进程
    Kafka配置SSL信道加密
    python--类与面向对象-3
    金仓数据库KingbaseES客户端应用参考手册--20. wrap
    MFC 对话框
    AMBA协议—AHB协议
    ES6的symbol及es2021
    JS懒加载模块封装
    Redis 事务
  • 原文地址:https://blog.csdn.net/csdnmmd/article/details/126848012