服务器勘验、电子数据取证的一些实用技巧
作者:FancyPig | 发布时间: | 更新时间:
前言
服务器勘验、电子数据取证是公安机关在处理一些网络案件中所必须掌握的技能。
前一阵子在做网络安全相关专业分享的时候也谈到了,目前有网络安全与执法专业
| 专业名称 | 学科 | 专业代码 |
| 信息安全 | 计算机类 | 080904K |
| 信息对抗技术 | 兵器类/武器类 | 082107 |
| 网络空间安全 | 计算机类 | 080911TK |
| 网络安全与执法 | 公安技术类 | 083108TK |
该专业的核心课程包括:计算机网络、操作系统原理与分析、网络犯罪案件侦查、电子数据检验与分析、网络攻防技术、恶意代码调查技术。
很多同学们都比较好奇《网络犯罪案件侦查》、《电子数据检验与分析》这两门课的技术好不好学?或者说有没有具体的实践方法?
今天,我们就结合实际的镜像,教大家如何将其转换导入虚拟机,然后一步接着一步的进行服务器勘验、电子数据取证等操作呢?
基本操作(计算MD5值,防止文件被调换)
在取证过程中,最常见的命令即记录文件的MD5值,这么做的意义就在于防止证据被销毁或者被调换,譬如在案件审理过程中发现提交到法院的文件MD5和侦查阶段的文件MD5值不一致,则可以判断在中间递交环节中出现了有人将文件掉包的情况

在windows电脑的cmd命令行可以输入
certutil -hashfile 文件名 MD5
譬如,我们对将要还原的镜像先统计其MD5值
certutil -hashfile raw.dd MD5

镜像还原
首先我们需要将.dd镜像转换成vmware虚拟机可以读取的格式.vmdk,我们需要使用到qemu工具
使用cmd命令行将镜像进行转换,需要先进入镜像路径,然后在输入下面的命令
"C:\Program Files\qemu\qemu-img.exe" convert -f raw raw.dd -O vmdk raw.vmdk

导入虚拟机磁盘
动图操作

图文步骤
然后将.vmdk的文件以磁盘的形式加载到我们的虚拟机中,我们这里使用的是之前部署好的CentOS虚拟机,点击编辑虚拟机设置

点击添加

选择硬盘

磁盘类型选择SCSI,点击下一步

选择使用现有虚拟磁盘,并点击下一步

点击浏览添加我们刚刚导出的.vmdk文件

选择raw.vmdk,点击打开

点击完成

点击转换

然后开启虚拟机就可以进行进一步的电子取证了

进入虚拟机之后可以做什么
进入虚拟机之后直奔我们刚才导入的30GB的硬盘,这里显示的28GB的卷

寻找输入命令记录
我们这里以root账户为例,查看历史输入过的命令。
我们先在硬盘的/root路径下,我们需要查看.bash_history文件的内容

有2种方法
- 终端打开

- 直接图形化界面双击

有的人可能会问到这样只能显示历史输入了哪些命令,如果我还想进一步进行勘察,我想了解用户是什么时间输入了哪条命令,应该怎么做呢?
上面的目测没有携带时间戳,我们以自己虚拟机系统的/root/.bash_hisotry为例,我们打开可以看到每一条命令上都含有注释的时间戳

这个是unix的时间戳,我们以1650954017为例,可以使用unix在线转换工具

这样就可以查询到每条命令对应的执行时间了,针对系统本身的可以这么操作
export HISTTIMEFORMAT='%F %T '
history

但是我们通常要研究的是磁盘里的/root/.bash_history文件,因为我们的目标镜像是通过磁盘方式加载的,因此如果其中携带了时间戳,即有#数字这种形式的内容在命令前,我们可以将其覆盖到系统的/root/.bash_history文件中,这样就可以使用上面的history命令查看了(不过这样的话也有可能会出现污染证据的情况,但我们只关注于时间,只能说问题不大,我们的硬盘里的证据是没有受到污染的)
寻找历史重启记录
进入到硬盘的/var/log中,右键打开终端

last -f wtmp

系统日志位置
当然系统的日志太多太多了,我们可以参考下面的表格进行针对性的分析!
| 日志文件 | 说明 |
|---|---|
| /var/log/cron | 记录了系统定时任务相关的日志 |
| /var/log/cups | 记录打印信息的日志 |
| /var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
| /var/log/mailog | 记录邮件信息 |
| /var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
| /var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
| /var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
| /var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
| /var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
| /var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
站点数据导入及分析
数据导入

我们通过镜像还原站点的这一过程,其实与正常我们作为站长给站点搬家(换服务器)的过程是一致的。
我们需要做的就是将数据库和站点文件进行打包,然后导入宝塔面板(这里看个人习惯,有的人不愿意用面板喜欢用命令行操作都可以)
我们这里主要以宝塔面板作为示例,我们首先要找到数据库存放的路径
/www/server/data
我们通过观察可以发现里面仅有一个名为luntan的数据库文件夹

我们将其拷贝到CentOS镜像的/www/server/data目录下即可,但是这么做偶尔会出现宝塔面板不读这个数据库的情况,那么怎么做能够最完美的还原呢?我们可以使用宝塔面板,先创建一个名为luntan的数据库

创建完成后,我们将之前硬盘中的www/server/data/luntan路径下的文件复制到系统/www/server/data/luntan路径下即可,然后在phpmyadmin中就可以浏览数据库中的内容了

输入对应的root密码登录phpmyadmin

然后我们就要开始认真地分析数据表的内容了

数据分析
我们通过观察表的前缀,不难发现都是pre_common开头的,我们进行搜索

发现这个貌似是开源社区系统discuz的数据库,因此我们可以查询相关的开发文档
然后可以看到每张表的作用以及参数值的含义

这样,我们在分析这个站点的用户就会非常简单了,我们可以看到用户主表为pre_common_member

譬如我们看到pre_common_member表中uid从1-7,但是第6个不见了,代表应该是有人删除了第六个用户

那么如何找到被删除的用户呢?我们通过Discuz的机制可以发现,用户还存储在Ucenter表中

那我们继续观察数据库的表可以发现完整的用户在这里居然没有被删掉,这里可以看到网站是有10位用户的!也就是说刚才不仅删了第6个,第8、9、10也被删掉了

数据库进阶探索
上面我们讲的是通过开源程序的数据表的结构来进行分析,那如果我们完全不清楚这个数据库表结构,应该如何快速寻找有效的线索呢?这个时候可能就需要引入正则表达式来快速检索有效信息了!
收集银行卡证据信息
银行卡通常是19位的,我们可以通过19位纯数字的正则表达式快速检索
[0-9]{19}

然后可以看到有了搜索结果,这里貌似是论坛里的帖子记录

然后可以看到完整的用户名、用户ID、IP地址、聊天记录等信息

收集邮箱地址证据
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
收集IP地址证据
(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)
收集手机号证据
0?(13|14|15|18|17)[0-9]{9}
收集固定电话号码证据
\d{3}-\d{8}|\d{4}-\{7,8}
收集身份证证据
(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
相关工具分享
只需要配置好.yaml文件然后正常运行就可以扫描了
