【学习笔记】陇剑杯之攻击取证内存分析

  • A+
所属分类:CTF专场

Volatility


Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。


特点:

  • 开源:Python编写,易于和基于python的主机防御框架集成。

  • 支持多平台:Windows,Mac,Linux全支持

  • 易于扩展:通过插件来扩展Volatility的分析能力


安装分为三步走:

  1. 下载

  2. 安装必要的python依赖文件

  3. 安装本体


你可以在Release中找到对应你系统(Mac,Win,Linux)的源代码,当然也可以通过github去获取源码:


git clone https://github.com/volatilityfoundation/volatility.git


软件官方GitHub:https://github.com/volatilityfoundation


获取支持python2的软件:

https://github.com/volatilityfoundation/volatility


获取支持python3的软件:

https://github.com/volatilityfoundation/volatility3


如果只是用Volatility本体的话,这些依赖是没必要装的,但是如果你想用某些插件,还是把以下这些必备的依赖包装上吧。


Distorm3:牛逼的反编译库

pip install distorm3


【学习笔记】陇剑杯之攻击取证内存分析


Yara:恶意软件分类工具

pip install yara

【学习笔记】陇剑杯之攻击取证内存分析


PyCrypto:加密工具集

pip install pycrypto


PIL:图片处理库

pip install pillow


OpenPyxl:读写excel文件

pip install openpyxl


ujson:JSON解析

pip install ujson

【学习笔记】陇剑杯之攻击取证内存分析


如果你用的是独立的win、linux、mac执行文件,那就不必安装了。只要用python去执行就好。

若是下载了压缩文件,那你可以选择直接运行python主程序,也可以选择使用python setup.py install的方式将Volatility以一个库的形式安装在系统的特定位置上,从而以后我们可以将Volatility作为一个库在其他脚本中去引用其namespace。


先通过 imageinfo 获取系统信息


python2 vol.py -f Target.vmem imageinfo


【学习笔记】陇剑杯之攻击取证内存分析


使用hashdump命令获取用户名


python2 vol.py -f Target.vmem --profile=Win7SP1x64 hashdump

【学习笔记】陇剑杯之攻击取证内存分析


lsadump命令获取最后登录的用户


python2 vol.py -f Target.vmem --profile=Win7SP1x64 lsadump


【学习笔记】陇剑杯之攻击取证内存分析


可以直接使用mimikatz插件获取flag


插件下载地址:https://github.com/ruokeqx/tool-for-CTF


【学习笔记】陇剑杯之攻击取证内存分析


【学习笔记】陇剑杯之攻击取证内存分析


python2 vol.py -f Target.vmem --profile=Win7SP1x64 mimikatz


【学习笔记】陇剑杯之攻击取证内存分析



获取flag flag{W31C0M3 T0 THiS 34SY F0R3NSiCX}


┌──(root💀kali)-[/volatility-master]└─# python2 vol.py -f Target.vmem --profile=Win7SP1x64 mimikatz                    Volatility Foundation Volatility Framework 2.6.1Module   User             Domain           Password                                -------- ---------------- ---------------- ----------------------------------------wdigest  CTF              WIN-QUN5RVOOF27  flag{W31C0M3 T0 THiS 34SY F0R3NSiCX}    wdigest  WIN-QUN5RVOOF27$ WORKGROUP


补充扩展


基本概念

在CTF中,内存取证一般指对计算机及相关智能设备运行时的物理内存中存储的临时数据进行获取与分析,提取flag或者与flag相关重要信息。

解题思路

解析Windows/Linux/Mac OS的内存结构、分析进程等内存数据、根据题目提示寻找线索和思路,提取分析指定进程的特定内存数据。

笼统的说,常见的内存结构存在于以下三大操作系统:

●Windows操作系统

●Linux操作系统

●Mac OS操作系统

只要我们在拿到内存数据文件时,能够判断该内存是哪种格式的。常见的内存文件格式有img、dmp、raw、vmem等。

知道了内存格式之后呢,就需要开始分析内存数据了,通过对应格式下的内存所在的对应的系统,我们可以使用对应的工具去进行分析。最后根据题目提示,进行针对性的去提取我们所需要的内存数据。

了解完内存取证的解题思路后,就要开始了解一下解题所需要用到的工具,推荐一个比较好用的开源内存取证框架----Volatility。

开源内存分析框架--Volatility

Volatility Framwork是一款开源的基于Python开发的内存分析框架,它自带的分析插件支持分析内存镜像中所保留的历史网络连接信息、历史进程、历史命令记录等等。Kali系统自带,其他系统可自行到Github上进行Download。

使用方法:

基本命令格式

python vol.py -f [内存文件] --profile=[配置文件] <插件>eg:python vol.py -f /opt/test.vmem –profile=Win7SP1x86_23418 pslist

【学习笔记】陇剑杯之攻击取证内存分析

CTF中比较常用(目前经常用到过的)的插件:

插件名

作用

imageinfo

识别内存映像相关信息(包括了配置文件类型、处理器数量、文件类型、文件日期与时间等等)

netscan

扫描内存中的连接以及开放端口

hivelist

列出注册表配置文件中的注册表信息

printkey

打印注册表项及其子项和对应的值

clipboard

打印内存中Windows剪切板中的内容

pslist

按照EPROCESS列表列出所有正在运行的进程

psscan

扫描内存中的进程

pstree

将内存中的进程以树的结构打印出来

dlllist

列出每个进程已加载的DLL

iehistory

重建Internet   Explorer缓存/历史记录

filescan

扫描内存中的文件对象

cmdscan

通过扫描_COMMAND_HISTORY提取命令历史记录

cmdline

显示进程命令行参数

notepad

列出当前显示的记事本文本

hashdump

从内存中转储指定的密码hash

memdump

转储出可寻址的内存数据

hivedump

打印内存中指定的注册表信息

dumpfiles

提取内存映射以及缓存文件

procdump

将进程转储到可执行文件中

基本用法(以Windows为例来阐述)

1. 当我们拿到内存文件后,一般会做的便是先识别一下该内存文件一些信息(一般会去识别配置文件,然后通过对应的配置文件进行其他操作)

命令:

python vol.py -f [内存文件] imageinfo

【学习笔记】陇剑杯之攻击取证内存分析

2. 得到配置文件后,我们可以使用对应的配置文件进行相应的查询

a. 查看系统开放端口以及连接情况(发现可疑进程、可疑连接)

命令:

python vol.py -f [内存文件] --profile=[配置文件] netscan

【学习笔记】陇剑杯之攻击取证内存分析


b. 查看系统注册表(获取主机名、IP等信息)

找到system注册表—hivelist:

命令:

python vol.py -f [内存文件] --profile=[配置文件] hivelist

【学习笔记】陇剑杯之攻击取证内存分析


● 读注册表中的信息—printkey 命令:

python vol.py -f [内存文件] --profile=[配置文件] printkey -o [虚拟地址] -K [注册表路径]


c. 查看剪切版中的信息(获取复制剪切的内容):

命令:

python vol.py -f [内存文件] --profile=[配置文件] clipboard

d. 查看进程信息(发现可疑进程):

● 无法显示隐藏/终止的进程—pslist

命令:

python vol.py -f [内存文件] --profile=[配置文件] pslist

【学习笔记】陇剑杯之攻击取证内存分析

● 显示隐藏/终止的进程—psscan

命令:

python vol.py -f [内存文件] --profile=[配置文件] psscan

● 把进程以树的形式显示—pstree

命令:

python vol.py -f [内存文件] --profile=[配置文件] pstree

【学习笔记】陇剑杯之攻击取证内存分析

e. 查看DLL文件(当我们发现可疑进程后,可通过此命令进行深度查看):

命令:

python vol.py -f [内存文件] --profile=[配置文件] dlllist -p [PID]

【学习笔记】陇剑杯之攻击取证内存分析

f. 查看IE浏览器历史记录(获取IE浏览器浏览历史信息):

命令:

python vol.py -f [内存文件] --profile=[配置文件] iehistory

g. 查看文件(获取可疑文件):

命令:

python vol.py -f [内存文件] --profile=[配置文件] filescan

h. 查看命令行历史记录(获取执行的可疑命令) 命令:

python vol.py -f [内存文件] --profile=[配置文件] cmdscan

i. 查看进程命令行参数(具体查看一些可疑进程的参数指令) 命令:

python vol.py -f [内存文件] --profile=[配置文件] cmdline

【学习笔记】陇剑杯之攻击取证内存分析

j. 查看notepad文件(只能查看进程中的notepad.exe中的内容) 命令:

python vol.py -f [内存文件] --profile=[配置文件] notepad

3.得到了一些信息有时候往往不过,有可能还需要我们提取内存中的数据再进行二次操作才可以得到flag a. 获取密码hash 命令:

python vol.py -f [内存文件] --profile=[配置文件] hashdump

b. 获取对应进程(当我们发现某个进程中可能会存在我们所需的flag) 命令:

python vol.py -f [内存文件] --profile=[配置文件] memdump -n [文件名(不带后缀)] -D [保存路径]
python vol.py -f [内存文件] --profile=[配置文件] memdump -p [PID] -D [保存路径]

【学习笔记】陇剑杯之攻击取证内存分析

c. 打印注册表中的对应表的数据:命令:

python vol.py -f [内存文件] --profile=[配置文件] hivedump -o [虚拟地址]

d. 转储内存中的文件 命令:



python vol.py -f [内存文件] --profile=[配置文件] dumpfiles -Q [偏移地址] -D [保存路径]
e. 转储内存中的进程里exe文件 命令:
python vol.py -f [内存文件] --profile=[配置文件] procdump -p [PID] -D [保存路径]
这些便是volatility内存分析框架目前在比赛中比较常见的一些用法。具体操作还是需要跟着题目的提示或者一些隐藏在字里行间的需求来做题。


Volatility入门指令篇:


python vol.py -f name imageinfopython vol.py -f name --profile=Win10x64_18362 pslist 列举进程python vol.py -f name --profile=Win10x64_18362 volshelldt("_PEB") 查看进程环境块python vol.py -f name --profile=Win10x64_18362 hivelist 列举缓存在内存的注册表
hivedump打印出注册表中的数据 :
python vol.py -f name --profile=Win10x64_18362 hivedump -o 注册表的 virtual 地址
显示每个进程的加载dll列表
python vol.py -f name --profile=Win10x64_18362 dlllist> dlllist.txt
获取SAM表中的用户:
python vol.py -f name --profile=Win10x64_18362 printkey -K "SAMDomainsAccountUsersNames"



【学习笔记】陇剑杯之攻击取证内存分析

登录账户系统

python vol.py -f name --profile=Win10x64_18362 printkey -K "SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"

【学习笔记】陇剑杯之攻击取证内存分析

userassist键值包含系统或桌面执行文件的信息,如名称、路径、执行次数、最后一次执行时间等

python vol.py -f name --profile=Win10x64_18362 userassist

将内存中的某个进程数据以 dmp 的格式保存出来

python vol.py -f name --profile=Win10x64_18362 -p [PID] -D [dump 出的文件保存的目录]

提取内存中保留的 cmd 命令使用情况

python vol.py -f name --profile=Win10x64_18362 cmdscan

获取到当时的网络连接情况

python vol.py -f name --profile=Win10x64_18362 netscan

获取 IE 浏览器的使用情况

python vol.py -f name --profile=Win10x64_18362 iehistory

获取内存中的系统密码,可以使用 hashdump 将它提取出来

python vol.py -f name --profile=Win10x64_18362 hashdump -y (注册表 system 的 virtual 地址 )-s (SAM 的 virtual 地址)python vol.py -f name --profile=Win10x64_18362 hashdump -y 0xe1035b60 -s 0xe16aab60python vol.py -f name --profile=Win10x64_18362 timeliner

对文件查找及dumo提取某个进程

python vol.py -f name --profile=Win10x64_18362 memdump -D . -p 2872strings -e l ./2872.dmp | grep flagpython vol.py -f name --profile=Win10x64_18362 dumpfiles -Q 0x000000007e410890 -n --dump-dir=./

HASH匹配用户账户名密码

Hash, 然后使用john filename --format=NT破解

安全进程扫描

python vol.py -f name --profile=Win10x64_18362 psscan

Flag字符串扫描

strings -e l 2616.dmp | grep flag

【学习笔记】陇剑杯之攻击取证内存分析

查找图片

python vol.py -f name --profile=Win10x64_18362 filescan | grep -E 'jpg|png|jpeg|bmp|gifpython vol.py -f name --profile=Win10x64_18362 netscan

注册表解析

python vol.py -f name --profile=Win10x64_18362 hivelistpython vol.py -f name --profile=Win10x64_18362 -o 0xfffff8a000024010 printkey -K "ControlSet001Control;"

复制、剪切版

python vol.py -f name --profile=Win10x64_18362 clipboardpython vol.py -f name --profile=Win10x64_18362 dlllist -p 3820

Dump所有进程

python vol.py -f name --profile=Win10x64_18362 memdump -n chrome -D .利用字符串查找downloadpython vol.py -f name --profile=Win10x64_18362 shimcache

svcscan查看服务

python vol.py -f name --profile=Win10x64_18362 svcscan
modules 查看内核驱动modscan、driverscan 可查看一些隐藏的内核驱动ShimCache来识别应用程序兼容性问题。跟踪文件路径,大小,最后修改时间和最后“执行”时间.

分割文件

foremost 352.dmp  ##分割dmp文件


题外话 :

学习了一圈,依然没有解决内存分析获取操作系统产品密钥问题。哪位大佬知道如何操作可以公众号私聊我。


【学习笔记】陇剑杯之攻击取证内存分析


参考资料


1、https://cloud.tencent.com/developer/article/1419462


作者:漏洞社区

链接:https://cloud.tencent.com/developer/article/1419462

标题:CTF| 攻击取证之内存分析

来源:腾讯云社区


2、https://blog.csdn.net/chanyi0040/article/details/100956582


作者:chanyi0040

链接:https://blog.csdn.net/chanyi0040/article/details/100956582

标题:Volatility工具指令篇

来源:CSDN

本文始发于微信公众号(利刃信安):【学习笔记】陇剑杯之攻击取证内存分析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: