删除 perl rootkit 很痛苦

删除 perl rootkit 很痛苦

因此,我们在办公室托管了一个地理服务网络服务器。

显然有人闯入了这个盒子(可能是通过 ftp 或 ssh),并放置了某种 irc 管理的 rootkit。

现在我试图清理整个事情,我发现了尝试通过 irc 连接的进程 pid,但是我无法弄清楚谁是调用进程(已经使用 ps、pstree、lsof 查看过)该进程是一个由 www 用户拥有的 perl 脚本,但是 ps aux |grep 在最后一列显示了一个虚假的文件路径。

还有其他方法可以跟踪该 pid 并捕获调用者吗?

忘了说了:内核是 2.6.23,可以利用它来成为 root,但我不能过多地接触这台机器,所以我无法升级内核

编辑: lsof 可能会有帮助:

lsof-p 9481
命令 PID 用户 FD 类型 设备大小 节点名称
ss perl 9481 www cwd DIR 8,2 608 2 /ss
perl 9481 www rtd DIR 8,2 608 2 /ss
perl 9481 www txt REG 8,2 1168928 38385 /usr/bin/perl5.8.8ss
perl 9481 www mem REG 8,2 135348 23286 /lib64/ld-2.5.soss perl 9481 www mem REG 8,2 103711 23295 /lib64/libnsl-2.5.soss
perl 9481 www
mem REG 8,2 19112 23292 /lib64/libdl-2.5.soss
perl 9481 www mem REG 8,2 586243 23293 /lib64/libm-2.5.soss
perl 9481 www mem REG 8,2 27041 23291 /lib64/libcrypt-2.5.soss perl 9481 www mem REG 8,2 14262 23307 /lib64/libutil-2.5.soss
perl 9481 www mem REG 8,2
128642 23303 /lib64/libpthread-2.5.soss
perl 9481 www mem REG 8,2 1602809 23289 /lib64/libc-2.5.soss
perl 9481 www mem REG 8,2 19256 38662 /usr/lib64/perl5/5.8.8/x86_64-linux-threa d-multi/auto/IO/IO.soss
perl 9481 www mem REG 8,2 21328 38877 /usr/lib64/perl5/5.8.8/x86_64-linux-threa d-multi/auto/Socket/Socket.soss perl
9481 www mem REG 8,2 52512 23298 /lib64/libnss_files-2.5.soss
perl 9481 www 0r FIFO 0,5 1068892 管道
perl 9481 www 1w FIFO 0,5 1071920 管道
perl 9481 www 2w FIFO 0,5 1068894 管道
perl 9481 www 3u IPv4 130646198 TCP 192.168.90.7:60321->www.****.net:ircd (SYN_SENT)

答案1

如果我可以给你任何建议,那就是不要再浪费时间清理了。制作一个操作系统的映像以供日后取证,然后重新安装服务器即可。

抱歉,但这是解决您被 rootkit 攻击的唯一安全方法。

稍后您可以检查图像,了解发生这种情况的原因。

从我的亲身经历来看,我是这样做的,后来发现一个内部用户的 SSH 密钥包含 2008 年 openssl 的缺陷。

我希望这能澄清一切。

笔记:
如果你要在重新安装之前对服务器进行映像/备份,请非常小心,你该怎么做。正如@dfranke 所说,从受信任的介质启动到备份。

您不应该从 rooted 服务器连接到其他机器,因为众所周知,强大的 rootkit 能够通过 SSH 等受信任的会话进行传播。

答案2

如果进程改变 argv[0],命令行也会改变。尝试ls -l /proc/[pid]/exe

man 5 proc

此文件是包含所执行命令的实际路径名的符号链接。此符号链接可以正常取消引用;尝试打开它将打开可执行文件。您甚至可以键入 /proc/[number]/exe 来运行与进程 [number] 正在运行的同一可执行文件的另一个副本。在多线程进程中,如果主线程已终止,则此符号链接的内容不可用

ps auxwf | less为您提供进程的“森林视图”,可以向您显示哪个进程启动了此进程(除非rootkit隐藏了它,或者应用程序的父级已退出并且已将其重新设置为init)。

这主要是学术性的,可能只是浪费时间,但strings -n 10 /proc/[pid]/mem看着过去可能会很有趣。您也可以echo 0x7 > /proc/[pid]/coredump_filter使用 gdbgcore强制进行核心转储,其中包含所有可能的内容,但随后进程会终止,这可能会阻止进一步的分析。

但一定要听从 Arenstar 的建议。只备份数据,从备份中恢复所有可执行文件,然后重新开始。您可能还应该从备份中恢复网站,因为每个 html 或 php 文件中都可能添加了恶意 javascript。如果您正在考虑采取法律行动,您只需将机器放在一边,将其从网络上拔下,并停止您正在做的一切,直到法医专家完成他们的工作。

答案3

尝试“cat /proc/[process id]/cmdline”,但是,如果它是一个真正的 rootkit,它可能会修改内核以更好地隐藏自己。

答案4

我认为现在你已经重新安装了。你只是在浪费时间试图跟踪进程并进行取证,因为从中合法开发任何东西的机会都非常小,而且找到黑客的机会无论如何都是徒劳的。除非你只是对研究和逆转 rootkit 感兴趣,这可能很有趣:)

相关内容