linux环境下取证
易失性数据
-
特点:
-
Linux自带命令可被恶意代码修改不可信
-
Unix系统存在一个脚本程序用于记录系统命令的运行及输出结果,只不过在命令终止后,才输出记录结果,除非脚本加上-f选项,可以在命令运行时进行刷新,减少取证过程中因故障带来的数据损失。
-
-
方法:
-
在目标机器上运行使用静态编译方式生成的shell命令(如Helix CD)
-
运行脚本记录键盘记录
-
记录日器上的日期和时间并与标准时间比较
-
date命令
-
-
使用dd命令获取全部内存数据
-
保存物理内存:
-
dd if=/dev/mem > destPath(example: /mnt/evidence/host.physicalmem)
-
或者corner(TCT)工具箱 memdump命令
-
-
保存/proc/kcore文件:(以ELF格式保存物理内存的全部数据)
-
dd if=/proc/kcore of=destpath(example:/mnt/evidence/host.kcore)
-
-
保存Unix系统中的进程信息:
-
使用TCT工具箱中的pcat命令:
-
pcat [-H (keep holes)] [ -m mapfile] [-v ] process_id > destPath
-
-
使用Memfetch工具:
-
Memfetch与pcat不同的是将进程内存映射保存到单独的文件而不是一个文件中。
-
memfetch <pid>
-
使用-S选项并制定一个十六进制地址来导出含有指定地址的内存数据。
-
导出进程数据时,还会生成一个mfetch.lst 文件用于为导出的内容提供索引。
-
可以使用-w选项,将索引内容输出到stdout
-
-
使用ProcessDumper 和Memory Parser工具结合进行分析
-
-
-
获取主机名,iP地址,和操作系统详细信息
-
主机名:hostname
-
IP地址: ifconfig -a
-
操作系统和内核版本: cat /proc/version
-
-
获取系统状态和系统环境细节,包括目标机器上是否有网络嗅探器正在运行。
-
系统运行时间: uptime
-
系统环境相关信息在/proc 目录下:CPU信息:/proc/cpuinfo,内核信息:/proc/cmdline
-
-
识别系统已登录用户,使用who、w命令来检查当前登录账号,确认合法用户开启的每一个session
-
命令是通过查询utmp文件来获得信息。正常的系统登录会在utmp文件中建立一个条目,但注意一些rookits能绕开Linux系统中的这些日志。
-
-
检查网络连接活动,使用netstat命令查看主机上开放的端口
-
netstat -anp
-
arp -a 查看Linux系统中的ARP缓存信息
-
-
使用ps命令来查看主机上的运行进程,检查是否有异常的进程运行
-
ps -auxeww 显示出所有进程的关联终端(tty)以及进程的环境信息(如命令行参数和当前工作目录)
-
ps -ealf 或 -ef 显示不带环境信息的进来列表。
-
/proc 目录下包含了每个活动进程的相关信息,如命令行参数和内存内容:其中一些有价值的条目信息:/proc/<PID>/ 目录下的:
-
cmdline:包含了进程的命令行信息
-
符号链接cwd:指向该进程的当前目录
-
符号链接exe:则显示和该进程相关联的可执行文件的完整路径
-
environ:包含进程的运行环境信息
-
fd :包含进程访问的所有文件的相关记录,每条记录以文件描述符命名,可以通过这个符号链接直接访问实际的文件。
-
maps:显示了进程内存空间中文件映射的区域和相关的访问权限,同时记录文件的inode索引和文件名称
-
status:文件中保存了有关进程状态的信息,例如进程名,进程状态,进程ID,父进程ID,进程所在组,进程张的线程相关的信息和其他信息
-
-
用gcore -o filename pid 导出核心进程的映像
-
-
使用lsof命令来查看哪些文件和socket正在被访问
-
lsof -P -i -n选项能提供一个与该进程关联的开发端口,以及网络连接信息
-
-
检查与本机建立连接的其他主机的主机名
-
检查连接上的其他主机名
-
检查命令行的历史记录
-
history命令
-
.bash_history 文件会为每个账户保存其命令行历史信息
-
-
检查共享数据
-
已安装的驱动器
-
信息在/proc/mounts 和/etc/fstab 文件中获取
-
df或者mount命令获取
-
-
NFS服务输出的共享信息:/etc/exports 文件中
-
Samba的配置文件:/etc/samba/smb.conf 显示输出的所有共享信息。
-
-
检查未授权账号,组,共享,以及其他系统资源和配置
-
检查计划任务
-
at或as命令
-
检查系统的crontab配置文件可以显示例行计划任务 /etc/crontabs
-
-
输入exit来退出脚本
-
注意事项:
-
保存特征的MD5值
-
数据收集应当是自动化的,避免人工误操作。
-
-
-
TCT工具箱中的grave-robber 能自动保存易失性数据且能收集配置收集不同类型的文件,并产生所有被保存数据的信息摘要从而记录数据的完整性。
-
grave-robber -p -d /mnt/evidence
-
使用时必须将安装有TCT的独立驱动器或计算机挂载到被感染的系统中。
-
工具能使用小写-p参数的pcat命令来获取所有活动进程的内存信息。
-
使用大写-P参数能获取到ps 和lsof的输出。
-
非易失性数据
-
存储介质取证
-
获取实时Linux系统中的内置硬盘的数据,并将其保存到可移动介质的文件上,同时还将加上MD5散列值
-
dd if=/dev/hda of=/mnt/evidence/vitim13.dd conv=noerror,sync hash=md5 hashwindow=1024 haslog=/mnt/evidence/audit/victim13.md5
-
确认整个驱动器的内容都被完整获取:fdisk -lu 查看本地驱动器的扇区或字节的大小。
-
指定数据进行取证保存
-
评估安全配置
-
互联网安全中心有一个评估Linux'系统安全性的综合指南。
-
-
评估主机的信任关系
-
添加一个包含“+”符号和不可信的主机名的条目到系统中的/etc/hosts.equiv 或/etc/hosts.lpq文件中,可以使受害主机允许来自不可信的主机的连接请求。
-
单独的用户账号也能在.rhosts文件中被配置成信任远程系统。
-
-
收集登录日志和系统日志信息
-
命令:last
-
wtmp和lastlog文件包含事件登录的详细信息
-
linux机器的系统日志多数保存在/var/log目录下,一些Unix版本的机器子保存到/usr/adm或/var/adm中
-
-
-
当取证时遇到LKM rootkit时,rookit监测工具失效时,可以使用rookit的配置程序来卸载自身,从而显示所有隐藏的信息:
-
更改当前目录到ps命令显示的隐藏文件夹中 cd /dev/tyyec
-
用ls命令显示Adore rookit 的组件
-
运行Adore主程序: ./ava
-
卸载选项
-