.resyslogd 进程占用了 200% 的 CPU

.resyslogd 进程占用了 200% 的 CPU

首先,声明一下,我不是系统管理员,我只是被要求检查为什么我们的虚拟机占用了大量的 CPU。
结果发现这个进程一直以 200% 的速度运行
$top

PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+命令
11058 www-data 20 0 269564 5812 384 S 185.5 0.1 2:42.95 .resyslogd

经过一番研究,我发现这是一个记录器(实际上我发现记录器是 rsyslog,但我猜syslog 也是一样。
所以我注意到有很多连接尝试(我猜是来自机器人)触发了记录器的写入。所以我决定停止允许使用密码登录,并切换到密钥身份验证。这对 CPU 使用率没有任何影响,即使记录器上的记录现在比以前少了。对于我在记录器上看到的随机 IP,我将它们添加到 /etc/hosts.deny 中。
经过所有这些,CPU 使用率根本没有下降。相同的过程使用了超过 100% 的 CPU 核心。
我知道 www-data 是一个 Web 服务器,假设是 apache,不知道它是否真的因为某种原因被使用。

非常感谢您的帮助。

答案1

看起来很可疑。rsyslogd绝对不应该以用户身份运行www-data

.resyslogd绝对是不是与 相同rsyslogd,但它试图假装它是一个记录器进程以避免引起怀疑。

这绝对不是记录器。它可能是挖矿程序或类似程序,利用 Web 服务器中的弱点或 Web 服务器配置为运行的脚本之一(CGI、PHP、Perl 等)潜入您的服务器。

如果您有 root 权限(或可以切换到www-data用户),您可以停止并分析此蠕虫。如果没有,您应该让系统管理员帮助您。

要阻止它浪费更多 CPU,请运行kill -STOP 11058(以root或 为www-data)。程序无法拦截此信号:它只是告诉内核不要再为该进程分配任何 CPU 时间,除非另有明确指示。实际上,它会冻结该进程。

然后使用/proc文件系统转储蠕虫使用的实际程序代码/proc/<PID of the suspicious process>/exe。在本例中,PID 为 11058,因此:

 sudo cat /proc/11058/exe >/tmp/dirty_worm

即使蠕虫删除了其可执行文件(它可能已经这样做了,以隐藏自身),这也应该有效。

然后,您可以使用任何您喜欢的命令来分析可执行文件,例如

strings /tmp/dirty_worm | less

看看它是否包含任何可读的文本,可能有助于识别它及其目的。

然后,您可以检查下面的所有可用信息,/proc以查看进程正在做什么。例如,ls -l /proc/11058/fd应该显示它打开了哪些文件,ls -l /proc/11058/map_files应该列出它正在使用的任何库和其他内存映射文件等。

收集到所有信息后,您最终可以使用 删除此过程。这是少数使用绝对合理的kill -9 11058情况之一。kill -9

由于该进程似乎是通过 Web 服务器进入你的服务器的,你应该关闭 Web 服务器,检查其配置,从其中删除不再使用的所有文件(Web 应用程序、CGI/PHP/Perl 脚本等),并确保你删除的所有文件使用是最新且安全的。

相关内容