本文作者:爱做梦的大米饭@深信服MSS专家部
前言-为什么要做Linux数据恢复
在攻防对抗过程中,难免会遇到攻击者将上传的扫描工具或者扫描结果删除,避免蓝队工作人员获取到扫描结果,进而对网络进行加固或者是编写应急响应报告从而回血。或者是避免防守人员分析日志文件从而获取到攻击者整体的攻击行为等等。
而作为蓝方防守人员,如果不能及时拿到扫描结果或者是history命令记录,那么所面临的处境就相当被动,不知道内网有哪些主机失陷。
故此针对此场景展开相关技术分析。
数据恢复技术
文件被占用的场景
在Linux系统中,如果文件被删除,但是文件还是被占用的情况,数据还是比较好恢复的,因为每个进程在执行的时候,都会分配一个内存空间。而Linux主打的就是万物皆是文件,那么进程自己本身其实就是个文件,往往进程相关的文件保存在 /proc 目录下。而proc目录下面,每个数字则是进程的pid。
1、可执行文件被删除
如果一个可执行文件被删除的话进程还在运行,在查看 /proc/pid/exe 文件长格式显示信息时,会如下所示,在exe所指向的文件,标记为deleted:
那么恢复文件只需要使用cat命令,将读取的文件内容重定向到另外一个文件即可获取到原始的可执行文件,后续则可对文件展开样本分析等相关工作。比如cat /proc/pid/exe > virus
2、文本文件被删除
文本文件被删除的话,但是还是处于被占用的状态,这个文件本身还是存在内存之中,文件往往指向/proc/pid/fd目录下的某个数字,如下所示,在进程中我们发现被删除的文件,还是有个进程一直保持占用状态
进入到进程目录后,发现文件3指向被删除的文件,那么这个时候使用cat命令即可恢复相关文件内容。
文件未被占用
文件没有被占用,那么从内存的角度去分析恢复数据是不太可能了。
那么思考下,在Linux环境中,删除文件的原理是什么。通过gpt检索发现,文件在磁盘上存储是有个inode索引节点进行标记,而删除文件则是将索引节点取消与文件关联,而文件本身还是在磁盘上的。如果有新的文件要写入则会将这节点的内容覆盖掉,达到重复利用的目的。
可以先做一个实验进行验证一下。
首先我们查看文件的块信息,然后删除删除文件
知道文件的块信息后删除文件,根据gpt给出的回复,删除后,只是将inode节点取消和文件的关联,本身还是在磁盘上的,那么使用debugfs知道块信息后,利用dd命令即可读到文件的内容。
在应急实战中我们是不知道被删除的所在的块信息的,那么如何找到呢。通过以下命令查看inode日志,检索到被删除文件的块信息。
Linux:~#:debugfs //执行debugfs命令
debugfs: open /dev/sda //打开分区
debugfs:ls -d / //查看被删除目录下的inode信息
debugfs:logdump -i <inode> //查看inode的日志信息
最后恢复查看数据,可以使用dd命令查看。
拓展:Extundelete数据恢复
除了以上系统自带命令恢复被删除的文件内容外,还可以使用第三方程序进行数据恢复。
Extundelete是一款Linux数据恢复程序,该程序进行数据恢复时,需要将被删除的文件所在分区进行卸载(生产环境下不推荐,可能影响业务)【电脑无环境,无演示图片】
1、首先安装Extundelete,apt install extundelete
2、卸载文件所在分区,umont /dev/sda
3、扫描指定文件路径extundelete --inode 2 /dev/sda
4、恢复被删除的文件extundelete --restore-file test.txt /dev/sdb1 -o /tmp/
,这里是使用文件名进行恢复,当然根据扫描结果,也可以使用inode参数进行恢复。
ps:该工具还可以通过时间恢复文件,也可以批量进行恢复
其他知识
在内网横向扫描的场景下,如果文件被删除,无法拿到攻击者的结果,可以找下主机的nohup.out文件,可能攻击者为了保证扫描程序的正常运行会使用nohup将扫描器放到后台运行。
原文始发于微信公众号(也总想挖RCE):应急响应-Linux文件恢复
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论