活取证:在主机存活时发现系统被入侵,然后直接把机器的运行内存dump下来,对运行内存进行分析,还原一些进程的中的信息。主要抓取文件metadata,创建时间线,命令历史,分析日志文件,哈希摘要,转存内存信息等数据.

死取证:是对机器的磁盘做镜像之后分析的取证方法。用于在关机后制作硬盘镜像,分析镜像(MBR硬盘分区,GPT全局分区表,LVM逻辑卷)是否存在病毒,木马等恶意程序.

相比于死取证,活取证是更加的重要,能够获取到当前系统第一手资料,对于分析入侵过程起到了至关重要的作用

我们现在构造一个场景,假如公司的一台主机被黑客侵入,当前主机处于运行状态,我们对其进行活取证,调查黑客是如何入侵本系统的.

windows系统活取证:

对windows主机来说,可以使用Dumplt去dump内存中的信息,下载地址为:http://www.secist.com/wp?content/uploads/2016/11/DumpIt.zip(为了保障目标系统的完整性和不破坏第一现场的原则,推荐在U盘中启动

用法很简单,双击打开程序,输入y即可将windows内存的数据制作成raw文件

然后将raw文件拷贝到kali中,使用Volatility进行系统取证,这个要简单许多,详情可参考http://www.cnblogs.com/Hydraxx/p/10530212.html

Linux系统进行活取证

这里我使用debain系统的内存镜像进行活取证,该镜像保存在/root下

在我们进行活取证成功获取到物理内存之后,接下来的工作就是要对镜像文件进行分析,从中提取有用的入侵证据。

一般来说,我们可以从镜像文件中提取以下信息 ( 这些信息是指在生成镜像文件那个时刻的信息) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
所有正在内存中运行的进程;

所有的载入模块和 DLL( 动态链接库),包括被植入的各种恶意程序;

所有正在运行的设备驱动程序,包括隐藏的 rootkits;

每个进程打开的所有文件;

每个进程打开的所有注册表的键值;

每个进程打开的所有网络套接字 ( sockets),包括 IP 地址和端口信息;

用户名和口令;

正在使用的电子邮件 和网页链接;

正在编辑的文件内容。

Volatility 简介:

Volatility是一款开源的,基于Python开发的内存取证工具集,可以分析内存中的各种数据。Volatility支持对32位或64位Wnidows、Linux、Mac、Android操作系统的RAM数据进行提取与分析。我们将使用Volatility对内存镜像进行分析.

首先安装volatility

1
apt-get install volatility 

但是volatility自带了一些windows系统的profile,Linux系统的profile需要自行下载制作

也可以直接去https://github.com/volatilityfoundation/profiles/blob/master/Linux/Debian/x64/Debian94.zip下载debain系统的profile,我这里直接在Linux系统下对windows内存镜像进行分析,对Linux内存镜像分析方法一致

volatility 使用方法:**

volatility -f <文件名> –profile=<配置文件> <插件> [插件参数]

使用imageinfo插件来猜测dump文件的profile值,WinXPSP2x86

1
 volatility -f mem.vmem imageinfo

指定profile值,使用pslist去列举系统进程

1
 volatility -f mem.vmem --profile=WinXPSP2x86 pslist

使用UserAssist键跟踪执行的程序,查看程序运行了多少次,最后一次运行时间等信息

1
 volatility -f mem.vmem --profile=WinXPSP2x86 userassist

使用hivelist插件列举在内存中的注册表

1
 volatility -f mem.vmem --profile=WinXPSP2x86 hivelist

按虚内存查看注册表内容 -o指向某一注册表的虚内存地址

1
 volatility -f mem.vmem --profile=WinXPSP2x86 hivedump -o 0xe1cee5d0

查看系统用户账户

1
2
3
 volatility -f mem.vmem --profile=WinXPSP2x86 printkey -K

"SAMDomainsAccountUsersNames"

查看最后登录用户

1
2
 volatility -f mem.vmem --profile=WinXPSP2x86 printkey -K 
"SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"

查看历史命令

1
 volatility cmdscan -f mem.vmem --profile=WinXPSP2x86

查看网络连接

1
 volatility iehistory -f win.dmp --profile=Win7SP1x86

查看IE历史信息

1
 volatility iehistory -f mem.vmem --profile=Win7SP2x86

提取hash

1
 volatility -f mem.vmem --profile=Win7SP2x86 hivelist

查看SID

1
 volatility -f cridex.vmem --profile=WinXPSP3x86 getsids -p 1484

检查结果查毒

1
 volatility -f mem.vmem --profile=WinXPSP2x86 malfind -p 1484 -D dumpd

Linux内存取证插件参数

获取系统进程信息相关命令:

linux_pstree:进程树列表

linux_pslist_cache:来自的 kmem_cache 活动进程

linux_psxview:比较进程列表

linux_lsof :打开文件描述符的每个活动进程

linux_pslist :活动的进程列表

linux_psaux:活动的进程列表(输出内容包括更多的细节)

获取系统内存信息的相关命令:

linux_memmap:内存映射文件

linux_pidhashtable: Linux 内核中的 PID 散列表

linux_proc_maps::转储由-s/–vma 参数到磁盘上指定的内存范围。

linux_dump_map:进程内存的详细信息,包括堆和共享库。

linux_bash :bash 历史文件

获取网络接口信息的相关命令:

linux_arp:显示 arp 列表

linux_ifconfig:显示网络接口详细情况

linux_route_cache:显示网络路由表

linux_netstat:查看网络链接情况

获取系统硬件信息的相关命令:

linux_cpuinfo :显示 cpu 的相关命令信息。

linux_dmesg :显示内核缓存信息。

linux_iomem :显示 io 设备信息。

linux_mount :显示/proc/mouns 的相关命令信息,主要是挂载的磁盘设备。

linux_mount_cache :显示 kmem_cache 的相关命令信息。

linux_slabinfo :显示/proc/slabinfo 的相关命令信息。

rootkit 检测的相关命令:

linux_check_afinfo:检查篡改网络协议结构。

linux_check_creds:检查进程共享结构。

linux_check_fop:检查文件操作数据结构篡改情况。

linux_check_idt:检查中断描述符表(IDT)的篡改情况。

linux_check_syscall:在系统调用表检查功能情况。

linux_check_modules:检查用于从内核模块列表中缺少在 sysfs 中的项目。

获取内核模块信息的相关命令:

linux_lsmod:加载内核模块。

linux_tmpfs::tmpfs 的内容。

死取证

镜像工具 dd

计算机取证时需要为计算机生成一个位镜像, 这个操作要在系统还在运行的时候或在系统关闭之前进行。最常使

用的就是两个工具: dd 和 netcat(两者都是开源软件安装非常简单这里从略)。dd 为我们生成磁盘的位镜像文

件,而 netcat 将拷贝通过网络传送出去。你需要一台联网的电脑来接收该镜像文件,而且该电脑需要有足够的空间来存放镜像文件。

复制/dev/sdc 到文件 cyqdrive.dd 中。将文件分割成多个 1GB 大小的文件。读取错误时,忽略该错误而不停止拷贝行为。这个例子命令如下:

刚才已经展示如何创建一个磁盘镜像,但只是创建镜像到系统的本地文件。但是当当前的物理空间不足时就要使用netcat 来将 dd 命令的的输出通过网络连接进行重定向。首先在目标服务器上,启动 netcat 作为一个监听,并将输

出重定向到一个远程服务器上的文件。我会用 netcat 监听 TCP 的 3452 端口,并将镜像写入一个远程的文件cyqimage.dd。然后你可以对服务器(192.168.1.1)进行镜像拷贝,并通过标准输出(没有指定输出的文件)来将镜像文件输出到 netcat,然后由 netcat 将镜像文件发送到目标服务器,使用如下命令:

1
2
3
#dd if=/dev/sdc split=1G of=cyqdrive.dd
#nc -l -p 3452 > myimage.dd
# dd if=/dev/sdc split=1G of=cyqdrive.dd | nc 192.168.1.1 3452

使用 FTK Imager for Linux

使用 FTK Imager 工具用户可以创建原始证据媒体的取证映象,如本地硬盘、闪盘、软盘、Zip 驱动器、CD、DVD等。对于 FTK Imager 来说 Command Line Version(命令行版本)是免费的,用户可以访问 http://www.accessdata.com/support/product-downloads 下载对应的操作系统版本,这里笔者使用的是 Fedora and Red Hat Versionx64 – 3.1.1 版本的文件,下载后解压缩后即可使用,文件名称是 ftkimager。用户可以使用这个命令查看帮助信息

首先查看当前加载的驱动器列表,输出界面见图 1

图 1. 查看驱动器列表

获取/dev/sdb 这个磁盘的 E01 模式的文件映像, 使用如下命令:

ftkimager 这个命令比较长,参数也比较多。这里简单介绍一下

/dev/sdb 是取证目标驱动器名称

/tmp/cyq.e01 是取证文件的名称和路径

–e01 是表示使用 E01 格式。

–frag 500M 表示每 500MB 分成一个文件,在映象片断的大小中,用户可以可以选择将映象分割为多个文件以便于

在 DVD 或 FAT 文件系统中中备份。

–examiner cyq 是取证操作人员的姓名简称。

–description “cyq"是操作说明。

E01 格式说明:dd 镜像格式是目前被最广泛使用的一种镜像格式,也称成原始格式 (RAW Image)。dd 镜像的优点是兼容性强,目前所有磁盘镜像和分析工具都支持 dd 格式。E01 是法证分析工具 EnCase 的一个证据文件格式,较好地解决了 dd 镜像的一些不足。在生成 E01 格式证据文件时,会要求用户输入与调查案件相关的信息,如调查人员、地点、机构、备注等元数据。这些元数据将随证据数据信息一同 存入 E01 文件中。文件的每个字节都经过 32 位的CRC 校验,这就使得证据被篡改的可能性几乎为 0。默认情况下,分析软件自动以每 64 扇区的数据块进行校验,这

1
2
./ftkimager –help
#./ftkimager /dev/sdb /tmp/cyq.e01 --e01 --frag 500M --description "cyq" --examiner cyq

种方式兼顾速度和完整性两个方面的考虑。获取个磁盘的 E01 模式的文件映像需要一些时间,根据磁盘大小和硬件型号有所差异,图 2 是完成的界面。

图 2. 获取/dev/sdb 这个磁盘的 E01 模式的文件映像

使用 xmount 工具制作 snapshot(快照)文件

xmount 工具可以把 E01 格式的镜像文件转化为 VDI 或者 VMDK 格式。然后用户可以使用 VirtualBox 和 Vmware

软件打开文件进行取证操作。

安装 xmount 软件包

1
2
RPM –ivh https://forensics.cert.org/cert-forensics-tools-release-el7.rpm
yum install xmount

下面需要修改配置文件

把下面一行的 # 去掉,修改为:

1
user_allow_other

然后保存文件后,然后建立一个目录

1
`#xmount --in ewf --out vdi --cache ~/tmp/MyDisk.cache ~/tmp/cyq.E?? ~/mnt0`

如果需要建立 vdi 格式,使用如下命令:

这个命令比较长,参数也比较多。这里简单介绍一下

–in ewf 是表示源文件是 E01 格式。

-~/tmp/cyq.E?? 表示源文件的路径,并且可能是多个文件。

–out vdi 表示输出格式是 vdi。

/mnt0 是输出文件的目录。

–description “cyq"是操作说明。

~/tmp/MyDisk.cache 是缓存文件名称。

建立 vdi 文件后,可以使用 VirtualBox 虚拟机导入这个 vdi 文件进行取证分析。

如果需要建立 vmdk 格式,使用如下命令:

1
`#xmount --in ewf --out vmdk --cache ~/tmp/MyDisk.cache ~/tmp/cyq.E?? ~/mnt0`

建立 vmdk 文件后,可以使用 Vmware Workstation 导入这个文件进行取证分析。