电子数据取证技术
1. 易失性信息的提取
易失性是指数据保存的环境如果不能满足某种条件,就确定会丢失,例如保存在DRAM中的数据是易失的,因为只要DRAM的电源被切断,其中所保存的数据就会丢失。易失性数据一般通过命令行方式提取,可减少对其他易失性数据的破坏,也可以通过专业的设备或工具提取,如Sysinternals等工具。在Sysinternals工具下可以提取大量的信息:
- Bginfo:计算机软、硬件信息,包括CPU主频、网络信息、操作系统版本、IP地址、硬盘信息等。
- PsloggedOn:本地登录的用户和通过本地计算机或远程计算机的资源登录的用户信息。
- Plist:本地或远程NT主机进程的相关信息。
- Psservice:系统服务信息,包括服务的状态、配置和相关性。
- Psfile:查看会话和被网络中用户打开的文件。
提取信息 | 命令 |
---|---|
系统日期 | data |
系统时间 | time |
账户信息 | net user |
系统共享 | net share |
当前会话网络连接 | net use |
网络配置信息 | ipconfig /all |
当前网络连接状态及端口 | netstat -an |
本地NetBIOS名称表 | nbtstat -n |
本地NetBIOS名称缓存目录 | nbtstat -c |
提取信息 | 命令 |
---|---|
用户登录、注销及系统启动、停机的信息 | last |
当前系统中每个用户和其运行的进程信息 | w |
当前登录的每个用户的信息 | who |
历史命令记录 | history |
最近被系统打开的文件 | lsof |
系统中当前运行的进程 | ps |
2. 内存镜像
除通过使用命令提取相应的易失性信息外,通常情况下还需要存转储文件。由于内存中有大量的结构化及非结构化的数据,可通过对物理内存镜像提取出有价值的数据,常见的有价值数据包括进程列表、动态链接库、打开文件列表、网络连接、注册表、加密密钥或密码、聊天记录、互联网访问、电子邮件、图片及文档等。通过对计算机内存内容的保存和分析,可以得到大量计算机运行时的各种信息,以还原各种文件、网络发送的数据、账号密码等信息。
Volatility是一款开源的内存取证分析工具,使用Python编写,支持indows、Linux、MacOs及Android,可以通过插件来拓展其功能。在Kali中集成了该具,命令行输入“volatility”即可使用。
1. Volatility常用命令行参数
- -h:查看相关参数及帮助说明
- --info:查看相关模块名称及支持的Windows版本
- -f:指定要打开的内存镜像文件及路径
- -d:开启调试模式
- -v:开启显示详细信息模式
2.Volatility使用
- 使用命令“
volatility -f <文件名> --profile=<配置文件><插件>[插件参数]
”。 - 通过命令“
volatility -ifno
”获取工具所支持的profile、Address Spaces、Scanner Checks、plugins等。
3. Volatility常用插件
- imageinfo:显示目标镜像的摘要信息,如果知道镜像的操作系统后,就可以在“
--profile
”中带上对应的操作系统。 - palist:该插件可列举出系统进程,但不能检测到隐藏或者解链的进程。
- psscan:可以找到先前已终止的进程,以及被Rootkit隐藏或解链的进程。
- pstree:以树的形式显示进程列表,无法检测隐藏或解链的进程。
- mendump:提取指定进程,常用“
foremost
”来分离其中的文件。 - filescan:扫描所有的文件列表。
- hashdump:查看当前操作系统中的密码Hash,如Windows的SAM文件内容。
- svcscan:扫描Windows的服务。
- connscan:查看网络连接。
4. Volatility使用方法
-
使用命令“
vol.py -h
”获取帮助文档,这里是我自己手动安装的Volatility,所以命令是用的vol.py
不是volatility
,只是名字不一样而已,其余都是相同的。
-
使用命令“
vol.py -f easy_dump.img imageinfo
”查看镜像信息(操作系统、硬件体系结构和Service Pack等)。
这里看到显示的操作系统为“Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_24000, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_24000, Win7SP1x64_23418
”,一般使用第一个作为后续分析的模板。 -
使用命令“
vol.py -f easy_dump.img --profile=Win7SP1x64 pslist
”查看进程信息。
-
使用命令“
vol.py -f easy_dump.img --profile=Win7SP1x64 netscan
”查看网络连接。
-
使用命令“
vol.py -f easy_dump.img --profile=Win7SP1x64 hashdump
”查看操作系统用户的hash值。
-
使用命令“
vol.py -f easy_dump.img --profile=Win7SP1x64 printkey
”查看注册表信息。
3. 磁盘复制
在Linux中,复制整体磁盘经常使用命令“dd
”,它可以完全复制,包括已删除的文件和零头空间。该复制可以转存储到取证机器的空白分区上,或者直接检查。
1. 参数说明:
- if=文件名:输入文件名,默认为标准输入,即指定源文件。
- of=文件名:输出文件名,默认为标准输出,即指定目的文件。
- ibs=bytes:一次读入bytes字节,即指定一个块大小为bytes字节
- obs=bytes:一次输出bytes字节,即指定一个块大小为bytes字节。
- bs=bytes:同时设置读入/输出的块大小为bytes字节
- cbs=bytes:一次转换bytes字节,即指定转换缓冲区大小。
- skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
- seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
- count=blocks:仅复制blocks个块,其块大小等于ibs指定的字节数。
- conv=conversion:用指定的参数转换文件,其关键字可以有以下11种:
- asci:转换ebcdic为ascii
- ebcdic:转换ascii为ebcdic
- ibm:转换ascii为alternate ebcdic
- block:使每一行转换的长度为cbs,不足部分用空格填充
- unblock:使每一行的长度都为cbs,不足部分用空格填充
- lcase:把大写字符转换为小写字符
- ucase:把小写字符转换为大写字符
- swab:交换输入的每对字节
- noerror:出错时不停止
- notrunc:不截短输出文件
- sync:将每个输入块填充ibs字节,不足部分用空(NUL)字符补齐
- - -help:显示帮助信息。
- - -version:显示版本信息。
2. 使用方法:
“dd if=/dev/zero of=/dev/rdsk/bs=512 count=1
”
- 其中if是指输入,of是指输出。常使用“
if=/dev/zero
”和“of=/dev/rdsk
”来实现两块硬盘对拷。 - bs是block size,一般为512。
- count是指复制的block数,不写则指所有的block。这里只是想将硬盘的vtoc区覆盖,所以写count=1,只复制一个block。