如何从活动的Linux恶意软件中恢复已删除的二进制文件

通常,Linux恶意软件在启动后会自行删除,以免文件扫描器和完整性检查发现二进制文件的存在。这也会使得取得二进制文件变得困难,从而增加了取证分析的难度。

然而,在Linux上恢复已删除的进程二进制文件是很容易的,只要该进程仍然在内存中。

在 Linux 系统中,/proc/<PID>/exe 文件是一个特殊的符号链接文件,它指向当前正在运行的进程所执行的可执行文件。即使该可执行文件已经被删除,该符号链接仍然存在,并且可以继续指向被删除的文件。

这是因为 Linux 系统中的文件删除实际上是通过引用计数来处理的。当一个文件被打开或执行时,系统会为该文件增加一个引用计数。只有当该文件的引用计数降为零时,才会将其删除并释放磁盘空间。

所以恢复已删除的进程二进制文件的基本命令很简单。

1
cp /proc/<PID>/exe /tmp/recovered_bin

恢复已删除的进程的实践

下面以sleep命令来模拟一个已从磁盘中删除的进程。您可以在自己的Linux系统上安全地运行这一系列命令,以便练习恢复已删除的二进制文件。

1
2
3
4
cd /tmp
cp /bin/sleep x
./x 3600 &
rm x
1
2
3
4
5
6
7
8
9
10
11
12
# root @ ubuntu in ~ [16:37:43]
$ cd /tmp
# root @ ubuntu in /tmp [16:37:45]
$ cp /bin/sleep x
# root @ ubuntu in /tmp [16:37:45]
$ ./x 3600 &
[1] 13499
# root @ ubuntu in /tmp [16:37:45]
$ rm x
# root @ ubuntu in /tmp [16:37:47]
$ ls -al /tmp/x
ls: cannot access '/tmp/x': No such file or directory

可以看到文件确实不存在了,进程还在运行

1
2
3
$ ps -aux | grep 3600
root 13499 0.0 0.0 9224 748 pts/0 S 16:37 0:00 ./x 3600
root 13540 0.0 0.0 16180 1124 pts/0 S+ 16:38 0:00 grep --color=auto 3600

我们ls查看,可以看到文件被标记为删除了

1
2
3
4
5
$ ls -al /proc/13499/exe
lrwxrwxrwx 1 root root 0 7月 21 16:39 /proc/13499/exe -> '/tmp/x (deleted)'
# root @ ubuntu in /tmp [16:39:20]
$ ls /tmp/x
ls: cannot access '/tmp/x': No such file or directory

我们用cp恢复

1
cp /proc/13499/exe /tmp/recovered_bin

可以看到文件完好无缺

1
2
3
4
5
6
# root @ ubuntu in /tmp [16:40:38]
$ md5sum /tmp/recovered_bin
2fb28b5c237207b71c89ac6eb5861a5c /tmp/recovered_bin
# root @ ubuntu in /tmp [16:40:48]
$ md5sum /bin/sleep
2fb28b5c237207b71c89ac6eb5861a5c /bin/sleep

假如这正是一个病毒木马,你可以可以在安全的虚拟环境中,使用调试器和ida去分析了。

总结

所以,绝不要轻易杀掉你发现的可疑进程,你可能失去获取病毒木马的机会。

如果系统感染了某种病毒,请将其隔离在网络中,然后慢慢查看。不要急于行动,因为这样会破坏关键数据。

打赏专区