用户
搜索
  • TA的每日心情
    擦汗
    昨天 20:57
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    2

    主题

    8

    帖子

    220

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2018-8-6

    i春秋签约作者

    发表于 2020-11-4 22:17:31 46188
    本帖最后由 W4rnIn9 于 2020-11-5 11:28 编辑

    基础

    取证通常作为一个公司的事件响应调查人员或者司法调查的取证人员,通过调查被入侵的机器,将被入侵者的行为轨迹梳理出来,还原整个入侵的过程。对于入侵者而言,了解电子取证,可以更全面的了解到自己能够在系统中留下的痕迹,从而具有针对性的消除痕迹,而对于取证人员来说,电子取证无疑是了解整个入侵过程的关键。电子取证近年来也发展为了一个独立的学科,其中在安全竞赛中,电子取证也作为一部分考察内容,被纳入到杂项的大类中,也有只考察取证的竞赛。下面从技术层面介绍Windows取证的相关知识。

    取证的分类

    活取证

    • 抓取文件的metadata、创建是时间线、命令历史、分析日志文件、哈希摘要、转存内存信息
    • 使用未受感染的干净程序进行取证
    • U盘、网络、存储设备收集到的数据

    死取证

    • 系统关机后制作硬盘镜像、分析镜像

    获取内存工具

    在活取证中,可以使用内存dump工具,将被入侵的机器的内存保存下来,其中在Windows中经常使用的工具是Dumpit

    DumpIt 是一款绿色免安装的 windows 内存镜像取证工具。利用它我们可以轻松地将一个系统的完整内存镜像下来,并用于后续的调查取证工作

    在dump内存后,获取到的文件大小约等于主机内存的大小,所以在自己进行测试的时候,可以尽量把测试机的内存调小一点。

    Dump内存

    这里使用上面说的Dumpit工具,下载之后放到虚拟机中,双击之后输入y,即可获取当前的状态的内存文件,保存后是一个raw格式的文件,这里我在测试机上dump了一下内存,获取到了一个文件,用于下面的示例讲解,大家可以根据下面的讲解自己创建镜像进行测试。

    取证工具

    在取证工具中,比较有名的是Volatility,他是一个用于事件响应和恶意软件分析的开源内存取证框架。它是用Python编写的,支持Microsoft Windows,macOS和Linux,volatility框架是一个完全开放的工具集合,在GNU通用许可证下用Python实现,用于从易失性存储器(RAM)样本总提取数字镜像。提取技术完全独立于被取证的系统而执行,但可以查看到系统运行时的状态信息。该框架旨在向人们介绍从内存样本中提取的数字镜像相关的技术,并为进一步研究该领域提供一个平台,它可以分析 .raw、.vmem、.img后缀的文件

    安装方法

    在windows中可以直接下载exe的程序,放入环境变量中使用,而linux下需要进行安装,这里介绍linux下的安装方法
    首先下载文件

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

    Volatility需要使用python2环境,所以需要保证使用的是python2

    cd volatility
    python setup.py build
    python setup.py install

    安装完成后可以在volatility目录下执行 python vol.py --info 来测试是否安装成功可以将Volatilty的目录放入环境变量中,这样就可以在任意目录下执行 vol.py 1604413243331-323721bc-bdcb-4e48-97d2-839ecb9b9595.png
    如果在运行中报错或者提示错误信息,可以根据提示下载相应的模块,例如下面几个
    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

    在进行安装时,部分模块可能会报错,这就需要到https://pypi.org/project/搜索相应版本的模块的源码,进行手动安装

    基本使用

    Volatility命令的基本格式如下

    python vol.py -f [image] ‐-profile=[profile][plugin]

    其中 -f 后面加的是要取证的文件, --profile 后加的是工具识别出的系统版本, [plugin] 是指使用的插件,其中默认存在一些插件,另外还可以自己下载一些插件扩充。
    可以使用 -h 参数获取使用方法和插件介绍,这里只列举几个常用到的

    imageinfo:显示目标镜像的摘要信息,这常常是第一步---获取内存的操作系统类型及版本,之后可以在 –profile 中带上对应的操作系统,后续操作都要带上这一参数
    pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
    notepad:查看当前展示的 notepad 文本
    editbox:显示有关编辑控件的信息
    screenshot:保存基于GDI窗口的伪截屏
    psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
    pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
    mendump:提取出指定进程,常用foremost 来分离里面的文件(历年美亚杯有此题)
    filescan:扫描所有的文件列表
    hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(实际中没有mimikatz效果好)
    svcscan:扫描 Windows 的服务
    connscan:查看网络连接
    cmdscan:可用于查看终端记录
    dlllist: 列出某一进程加载的所有dll文件
    dumpfiles:导出某一文件(指定虚拟地址)
    hivelist: 列出所有的注册表项及其虚拟地址和物理地址
    timeliner: 将所有操作系统事件以时间线的方式展开

    示例讲解

    下面使用Volatility对前面获取的内存镜像进行分析
    首先获取镜像的摘要信息,一般这是进行镜像分析的第一步

    python vol.py -f TEST-PC.raw imageinfo

    1604413869649-1145ced0-ba43-4859-b98d-4996114656c0.png
    这其中比较有用的信息就是Suggested Profile(s) ,这个是工具识别的系统版本,存在多个的原因是这是根据一些特征识别的,所以可能有误报,就把各种结果按照可能性排列出来了,一般直接选择第一个,如果加载插件报错的话,可以尝试后面的。
    这里根据给出的结果选择第一个,然后使用 pslist 插件,看一下系统中运行的进程。

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 pslist

    1604414304320-56d25f71-1e4a-4e20-b650-6a89488ed61c.png
    图中标红的是几个需要注意的点,其中前两个说明系统运行着 httpmysql 服务,后面的 notepad.exe 是指正在运行一个记事本程序,而 mspaint.exe  是指是微软画图程序, cmd.exe 指正在运行命令行程序, DumpIt.exe 是之前说的用于获取内存镜像的工具。下面针对说到的几个进行进行分析。

    获取记事本数据

    在上面介绍插件的时候,其中有两个关于记事本的插件 notepadeditbox

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 notepad

    1604415295693-e3381b79-af10-4666-bc48-aaca851e3a79.png
    显示该这个插件不支持这个系统,这时可以使用 editbox 查看

     python vol.py -f TEST-PC.raw --profile=Win7SP1x64 editbox

    1604416779136-4229baff-288c-4f83-ad29-a63ff6e195d0.png
    可以看到这样就能查看到当前打开的记事本中的内容了

    查看当前桌面截图

    可以使用 screenshot 查看查看当前桌面的伪截图,其中会显示桌面上窗口的框,不会显示其中的内容

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 screenshot -D ./tmp

    其中 -D 参数是导出的地址
    1604417148078-9bee63d1-f7da-4731-a0cb-df87dd5808be.png
    在保存下来的图片中可以看到有一张显示了当时桌面的状态
    1604417238429-89ec762f-ed56-4191-acf2-25e5697640c5.png
    可以看到有一个DumpIt.exe 的窗口,还有另外两个窗口

    查看画图图像

    在上面的进程中可以看到,存在一个 mspaint.exe 的进程,它是微软的画图软件,对于这样的情况,可以使用工具还原内存中的图片,来当时查看的图片或者当时状态的图片,是用的工具是gimp,可以在linux上安装使用。
    这里首先将 mspaint.exe 的进程内存dump出来,使用 memdump 插件,在之前列举进程的截图中,进程名字后面一行就是该进程的PID。

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 memdump -p 1616 -D ./

    1604419074409-46d69d38-88c4-4d95-a4cf-c18e0c291f05.png
    将获取到的1616.dmp文件改名为1616.data,然后在gime中点击显示全部文件,选择1616.data打开
    1604419198479-73fb5615-d677-45ec-8323-38f3edad3833.png
    调节技巧
    首先选择一个固定的宽度,这里选择1000,然后调节高度把屏幕铺满,然后再大幅度拖动Image下的Offset的滑块,当看到图片类似下图时停止,可以看到隐隐约约有一张图,但是有点重叠,这时,点击上下箭头缓慢调节Width,其中Heigth在调节中作用是不大的,主要是Width和Offset的调节决定是否能看到图片
    1604480129731-0b1f79e3-ecc1-4196-954b-3684ad2d7277.png
    当调节到一定程度后,可以看到大致恢复出了画图程序当时的图像,但是有点倾斜,如果更加细致的调节,是可以调正的,同样也可以找到彩色界面图片。
    1604479748304-8ca9d1b8-e9bb-4256-a898-1cce1d3019e9.png
    当参数调节为以下时,可以看到当时图片的彩色图片,这时仅仅是图片,没有画图程序的界面。
    1604478988748-10dc0baa-f63e-416d-befc-3b6f376d2dae.png
    在调节时,不仅仅只能看到画图程序的图片,如下图,就调出了另一个状态的一个系统图片
    1604479832348-2f527386-e66d-4564-b63b-e977fc9e16c5.png

    获取系统中的用户以及密码

    Hash,一般翻译为"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

    使用hashdump插件可以获取计算机内存中的用户hash

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 hashdump

    1604482032253-fc1f7b00-8d93-42bf-bd03-2ff268b54889.png
    可以看到系统中存在六个账户,后面三个是隐藏账户,可能是入侵者创建的,下面介绍一下Windows下的Hash密码值的格式
    Windows系统下的hash密码格式为:用户名称: RID:LM-HASH值:NT-HASH 值,例如:
    Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC::: 表示
    用户名称为: Administrator
    RID 为:500
    LM-HASH值为: C8825DB10F2590EAAAD3B435B51404EE
    NT-HASH 值为: 683020925C5D8569C23AA724774CE6CC
    所以可以将获取的hash值拿到破解网站获得明文,类型选择NTLM
    1604482184691-2c572dc1-788a-433c-9f33-e8d3e05112ff.png
    另外还可以从注册表中,获取系统中的用户,

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"

    1604482722294-4e8f1c92-6696-4cb8-b6fe-27f0bd7d924d.png
    可以看到这里获取到的结果与使用hashdump获取的不同,通过hashdump可以看到系统中共存在三个隐藏账户,其中的W4$仅仅是通过添加了$来进行了隐藏,这时,通过net user命令是看不到此用户的,如下图所示
    1604483081496-f8bd2464-c873-4f6d-b7c6-92bb731e6ba6.png
    但是在注册表中,还存在该用户的信息,所以可以通过查看注册表的方式来找出该用户。
    而HomeGroupUser和hacker两个用户在添加了$符号的同时,还在注册表中删除了信息,所以通过注册表是无法获取到这两个用户的
    1604483569459-262e4847-388e-4ff3-b16e-62e4a5b31e86.png
    在NT/2000/XP下有一个叫HideAdmin的工具,可以自动创建隐藏的具有管理员权限的用户,创建后,通过net user命令和注册表都无法看到用户,甚至在计算机管理中,也无法看到隐藏用户,如下图
    1604483930696-538803e0-87bc-4654-95c1-f1174fcf046a.png

    获取运行过的命令

    在上面查看进程时,可以看到存在一个cmd进程,那么可以使用cmdscan插件来查看运行过的命令,

     python vol.py -f TEST-PC.raw --profile=Win7SP1x64 cmdscan

    1604484194508-691d45e1-90f0-4220-b812-95862b9271f4.png
    可以看到执行了whoamiifconfigipconfig这三个命令

    查看系统中的文件

    通过filescan命令,可以扫描当前状态下的一些文件,例如桌面的文件,或者特定类型的文件,这些都是结合grep命令来实现的

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 filescan | grep -E "zip|txt|doc|pdf"

    1604484835158-37107ec5-5790-4574-b2b8-1be1b7a5155c.png
    查看桌面的文件

    vol.py -f TEST-PC.raw --profile=Win7SP1x64 filescan | grep  "Desktop"

    1604485036228-41c9d5e5-0dfc-4cdc-b761-dbd93fc3caf4.png
    这里可以看到桌面有一个yep.txt的文件,下一步把它dump出来

    dump扫描到的文件

    在上一步中,发现了桌面的一个yep.txt,那么可以使用dumpfiles命令来将文件dump出来

    python vol.py -f TEST-PC.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003d87bf20 -D ./

    这里的 -Q   参数是前面扫描时候的第一个参数,标记了文件的转储的物理地址
    1604485273234-9d637ae5-4c06-4346-9b24-05647d4bbdf1.png
    dump 出的文件默认是dat后缀的,可以使用linux 下的 file 命令来查看获取的文件类型,或者是根据之前扫描文件获取到的文件名来修改后缀
    1604485413740-406110b2-9ce2-449d-bee5-7c7c4abe27b4.png
    修改后可以看到文件的内容

    总结

    本篇文章仅是简单介绍了一下电子取证以及Volatility的简单用法,实际电子取证还有很多内容,Volatility也有很多其他功能,想要详细了解还需要继续深入学习,并且多找机会练习,多积累经验,这样在拿到一个镜像后,才有分析的方向。在上面的示例讲解中,对使用Volatility取证的步骤做了简单的介绍,并对notepad、editbox、memdump、hashdump、printkey、filescan、dumpfiles、cmdscan插件的使用做了相关示例的讲解,另外介绍了gime的一个功能,在后面的文章中将会更深入介绍取证工具的使用和针对不同环境的取证方法。

    参考

    https://www.jianshu.com/p/5f13ee20f5b0
    https://www.w3xue.com/exp/article/20192/22237.html
    https://blog.51cto.com/13352079/2434792
    https://github.com/volatilityfoundation/volatility/wiki/Command-Reference
    https://volatility-labs.blogspot.com/2012/09/howto-scan-for-internet-cachehistory.html



    1604413243331-323721bc-bdcb-4e48-97d2-839ecb9b9595.png
    感谢分享,期待后续
    使用道具 举报 回复
    感谢表哥分享,学习了,持续关注下~
    使用道具 举报 回复
    发表于 2020-11-5 21:16:31
    学习了 感谢表哥
    W3bSafe Team 信息安全从未止步
    使用道具 举报 回复
    发表于 2020-11-9 15:41:45

    感谢分享,期待后续
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册