通常Linux恶意文件在受害系统中执行后会自删除(根据攻击者编写的后门逻辑大部分情况下是如此),因此文件扫描器和系统完整性检查不会发现落地的二进制文件。如果在应急响应中无法获取到和事件相关的恶意文件,会使安全人员的取证分析变得很困难。不过只要恶意进程仍在内存中,在Linux上恢复已删除本地文件的进程的二进制文件是很容易的。
恢复已删除的恶意文件命令
恢复已删除的恶意文件的基本命令很简单,只需执行以下操作:cp /proc/<PID>/exe /tmp/recovered_bin,其中<PID>是要恢复的已删除文件的恶意进程ID,上面的命令会将二进制文件复制到/tmp/recovered_bin,顺利的话就可对recovered_bin文件进行恶意代码分析来进一步确认并获取更多相关信息便于后续的取证分析。
举例一个海莲花Linux后门的简单取证过程,上机后通过外连的C2地址找到相对应的进程ID,然后根据获取的进程ID进入到这个进程的/proc目录。/proc文件系统是Linux上的一个特殊文件系统,它几乎可以跟踪你想要的所有内核和进程信息。来到/proc文件夹对应进程目录下,命令格式为:ls -al /proc/<PID>,<PID>是我们感兴趣的进程ID,如下所示,发现系统将二进制文件标记为已删除(deleted)。
虽然上述信息提示文件已删除(deleted),但是Linux文件系统实际上不会删除该文件。只要正在运行的进程仍然打开它,该文件就在那里,但它不再显示。这个/proc/24811/exe链接将很容易获得启动该进程的二进制文件,只需将其复制到系统任意位置,被删除的二进制文件就能被恢复回来。命令为:cp /proc/24811/exe /tmp/recovered_bin,恢复完成后,可以对落地的文件进行分析查看是否为正确的恶意文件,经过本地动静态分析确认这与笔者之前捕获的海莲花Linux后门是同源的恶意文件,C2回连地址也匹配,因此说明通过上述的操作已正确恢复被删除的恶意文件。
在彻底调查发生的情况之前,永远不要简单地杀死发现的可疑进程。如果要先终止该进程,则会丢失二进制文件,因为它会被文件系统释放并可能被破坏。如果系统感染了某些东西,请在网络上将其隔离,不要惊慌,花点时间,收集证据,然后在弄清楚发生了什么以及攻击是如何发生的(根本原因分析)之后重建系统。
https://www.sandflysecurity.com/blog/how-to-recover-a-deleted-binary-from-active-linux-malware/