通常,Linux恶意软件在启动后会自行删除,以免文件扫描器和完整性检查发现二进制文件的存在。这也会使得取得二进制文件变得困难,从而增加了取证分析的难度。
然而,在Linux上恢复已删除的进程二进制文件是很容易的,只要该进程仍然在内存中。
在 Linux 系统中,/proc/<PID>/exe
文件是一个特殊的符号链接文件,它指向当前正在运行的进程所执行的可执行文件。即使该可执行文件已经被删除,该符号链接仍然存在,并且可以继续指向被删除的文件。
这是因为 Linux 系统中的文件删除实际上是通过引用计数来处理的。当一个文件被打开或执行时,系统会为该文件增加一个引用计数。只有当该文件的引用计数降为零时,才会将其删除并释放磁盘空间。
所以恢复已删除的进程二进制文件的基本命令很简单。
1 | cp /proc/<PID>/exe /tmp/recovered_bin |
恢复已删除的进程的实践
下面以sleep命令来模拟一个已从磁盘中删除的进程。您可以在自己的Linux系统上安全地运行这一系列命令,以便练习恢复已删除的二进制文件。
1 | cd /tmp |
1 | # root @ ubuntu in ~ [16:37:43] |
可以看到文件确实不存在了,进程还在运行
1 | $ ps -aux | grep 3600 |
我们ls查看,可以看到文件被标记为删除了
1 | $ ls -al /proc/13499/exe |
我们用cp恢复
1 | cp /proc/13499/exe /tmp/recovered_bin |
可以看到文件完好无缺
1 | # root @ ubuntu in /tmp [16:40:38] |
假如这正是一个病毒木马,你可以可以在安全的虚拟环境中,使用调试器和ida去分析了。
总结
所以,绝不要轻易杀掉你发现的可疑进程,你可能失去获取病毒木马的机会。
如果系统感染了某种病毒,请将其隔离在网络中,然后慢慢查看。不要急于行动,因为这样会破坏关键数据。