1.背景
本文主要使用Dumpit及Volatility对计算机进行取证,对内存文件进行分析,获取内存重要信息, 还原攻击。
2.内存镜像Dumpit
2.1 简介
Dumpit是用于生成Windows机器的物理内存转储,可运行在32位/64位系统中,可完美地部署在USB闪存盘上,快速响应事件。
2.2 下载链接
下载链接:https://github.com/thimbleweed/All-In-USB/tree/master/utilities/DumpIt
2.3 Dumpit使用
1.将软件拷贝到需要被内存镜像的计算机中,双击运行软件,如下图:
2.内存镜像文件默认保存在“DumpIt软件所在的目录”,镜像名格式默认为“主机名+当前时间”。
3.按“y”即可开始制作内存镜像。
4.制作完成后的文件为raw格式,至此Dumpit完成内存取证。
3.内存分析volatility
3.1 简介
Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
3.2 volatility安装
1.我使用的环境为Kali2021.2,已不内置volatility,访问地址进行下载,如下图:https://www.volatilityfoundation.org/26
2.下载到本地后,unzip进行解压,并更名为volatility,复制到/usr/sbin/,不需要修改环境变量即可使用。
3.3 常用命令
3.3.1 查看系统版本
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw imageinfo
//对所需分析的raw文件进行分析,查看系统版本。通过输出可以看到应该是使用这几个系统版本:Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw imageinfo //对所需分析的raw文件进行分析,查看系统版本。
Volatility Foundation Volatility Framework 2.6
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
AS Layer2 : FileAddressSpace (/home/server.raw)
PAE type : No PAE
DTB : 0x187000L
KDBG : 0xf80001dfa070L
Number of Processors : 4
Image Type (Service Pack) : 0
KPCR for CPU 0 : 0xfffff80001dfbd00L
KPCR for CPU 1 : 0xfffff88001e00000L
KPCR for CPU 2 : 0xfffff88001e75000L
KPCR for CPU 3 : 0xfffff88001eea000L
KUSER_SHARED_DATA : 0xfffff78000000000L
Image date and time : 2021-08-01 14:41:49 UTC+0000
Image local date and time : 2021-08-01 22:41:49 +0800
3.3.2 查看进程信息
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 pslist
//使用pslist命令列出进程信息
Volatility Foundation Volatility Framework 2.6
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit
------------------ -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0xfffffa8000c68b30 System 4 0 85 479 ------ 0 2021-08-01 14:40:59 UTC+0000
0xfffffa800178a310 smss.exe 248 4 4 32 ------ 0 2021-08-01 14:40:59 UTC+0000
0xfffffa8001fdd5e0 csrss.exe 328 312 9 335 0 0 2021-08-01 14:41:00 UTC+0000
0xfffffa8001ffb060 wininit.exe 380 312 8 104 0 0 2021-08-01 14:41:00 UTC+0000
0xfffffa8001ffa4f0 csrss.exe 388 372 9 157 1 0 2021-08-01 14:41:00 UTC+0000
0xfffffa800200e910 winlogon.exe 428 372 5 111 1 0 2021-08-01 14:41:00 UTC+0000
0xfffffa8002035b30 services.exe 476 380 21 242 0 0 2021-08-01 14:41:00 UTC+0000
0xfffffa800203db30 lsass.exe 484 380 11 534 0 0 2021-08-01 14:41:00 UTC+0000
3.3.3 查看父进程与子进程
──(root💀localhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 pstree
//使用pstree命令列出父进程和子进程关系
3.3.4 查看注册表内容
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 hivelist
//列举缓存在内存中的注册表,并获取虚内存地址
3.3.5 内存中获取密码哈希值
┌──(root💀loaclhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 hashdump -y [0xfffff8a000024010] -s [0xfffff8a000f34010]
//从内存中获取密码哈希
3.3.6 导出注册表内容
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 hivedump -o 0xfffff8a000b9f010
//根据虚内存dump SOFTWARE注册表内容。可看到系统安装的所有软件
3.3.7 查看系统用户列表
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 printkey -K "SAM\Domains\Account\Users\Names"
//列出SAM表中用户,输出_Administrator和Guest两个账户
Volatility Foundation Volatility Framework 2.6
Legend: (S) = Stable (V) = Volatile
----------------------------
Registry: \SystemRoot\System32\Config\SAM
Key name: Names (S)
Last updated: 2021-07-24 15:29:16 UTC+0000
Subkeys:
(S) Administrator
(S) Guest
Values:
REG_DWORD : (S) 0
3.3.8 获取最后登录系统的用户
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 printkey -K "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
//获取最后登陆系统的用户
3.3.9 提取内存中的运行程序
┌──(root💀localhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 userassist
//正在运行的程序、运行过多少次、最后一次运行时间
3.3.10 对可疑PID进程进行提取
┌──(root💀loaclhost)-[/home]
└─#volatility -f server.raw --profile=Win2008R2SP1x64_23418 memdump -p 1780 -D /home
//-p参数为PID,-D为保存文件的路径,可对进程中可疑进程dump到指定文件夹,使用hexeditor 对dump文件以16进制方式查看
3.3.11 CMD命令历史使用记录
┌──(root💀loaclhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 cmdscan
//查看CMD命令行上的操作
3.3.12 查看网络连接
┌──(root💀loaclhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 netscan
//获取到当时的网络连接情况
3.3.13 获取IE浏览器历史记录
┌──(root💀loaclhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 iehistory
//获取浏览器浏览历史
3.3.14 收集系统活动信息
┌──(root💀loaclhost)-[/home]
└─# volatility -f server.raw --profile=Win2008R2SP1x64_23418 timeliner
//从多个位置收集大量系统活动信息
3.4 内存排查思路
1.首先对怀疑主机使用Dumpit进行内存导出。
2.对内存文件进行系统版本分析。命令为:volatility -f 【raw内存文件】 imageinfo
3.查看当时跑的进程,对可疑进程重点排查。命令为:volatility -f 【raw内存文件】 --profile=【系统版本】 pstree
4.查看网络连接,可能会存在本地主机对远端主机的连接。命令为:volatility -f 【raw内存文件】 --profile=【系统版本】 connscan
5.从上面几步中,如果发现可疑的PID,通过PID查看SID,可以知晓哪些用户访问允许访问此资源。命令为:volatility -f 【raw内存文件】 --profile=【系统版本】 getsids -p 【可疑PID】
6.查看调用动态链接库的数量,恶意软件要么特别多,要么特别少。命令为:volatility -f 【raw内存文件】 --profile=【系统版本】 dlllist -p 【可疑PID】
7.对可疑进程进行查杀。命令为:volatility -f 【raw内存文件】 --profile=【系统版本】 malfind -p 【可疑PID】 -D 【目录】