最近我注意到我管理的一些系统上的 SSHd 将开始产生不可停止的进程,这将消耗大量的 CPU。
系统调用显示所有进程都在“运行”并且不是僵尸进程或等待它们的父进程杀死它们(至少据我所知不是这样)。

我已经尝试了一切来终止这些进程......迄今为止我发现的唯一可靠的方法是重新启动整个服务器(这并不理想)。我试过为 dropbear 切换 openssh-server,但它的行为方式与我的应用程序需要的方式不同。
我试过了:
killall -9 sshd
Run Code Online (Sandbox Code Playgroud)
通过它的 id 杀死每个 sshd。很少有其他杂项(htop + sigterm 等...)
我喜欢一些想法来终止这些进程或解决导致这种情况的原因。
小智 3
如果这些实际上是 OpenSSH sshd 的,我的猜测是某处的某个脚本正在一个损坏的循环中运行它们,并且它们的一个子进程正在占用所有 CPU。
正如 Marki555 所建议的,strace会对您有所帮助,但您应该使用strace -fstrace 来跟踪子进程。从man strace:
-f Trace child processes as they are created by cur-
rently traced processes as a result of the fork(2)
system call.
Run Code Online (Sandbox Code Playgroud)
由于 strace 生成如此多的数据,因此使用 -e 参数也可能是个好主意(例如,仅显示 open() 调用):
-e expr A qualifying expression which modifies which events
to trace or how to trace them. The format of the
expression is:
[qualifier=][!]value1[,value2]...
Run Code Online (Sandbox Code Playgroud)
您可以尝试的另一个命令是ps xaforpstree -a获取进程及其子进程的易于理解的树视图,以便您可以确定哪个进程启动了这些 sshd。lsof也可能对您有帮助,它会告诉您进程打开了哪些文件。
当然,请确保您使用的是最新的 OpenSSH。我认为在古老的 OpenSSH 3.4p1 上使用 rsync + 大文件 + ssh 会有问题。
如果这些不是真正的 sshd 进程,则二进制文件的 MD5 校验和可能会正确显示,但它可能不是实际运行的 sshd 程序。此外,该md5sum命令本身可能是一个后门版本,经过修改以报告某些文件(如 sshd)的正确校验和。
您应该查看 /proc/[sshd pid]/exe 并确保它是 /usr/sbin/sshd (或 sshd 所在的任何位置)的符号链接,以及 /proc/[sshd pid]/environ 来查看它正在使用什么环境变量,以及 /proc/[sshd pid]/cmdline 以查看实际启动它的命令。
尽管攻击者可能已将恶意程序重命名为“sshd”,然后执行它以使其看起来像是 sshd。甚至可以将 /usr/sbin/sshd 移动到 /tmp/sshd,然后将恶意 sshd 移动到 /usr/sbin/sshd,以尝试将其隐藏在此类 /proc 分析中,但是当 /tmp/sshd 移回时/usr/sbin/sshd /proc/[sshd pid]/exe 符号链接将显示为ls:
lrwxrwxrwx 1 root root 0 May 19 06:47 /proc/[sshd pid]/exe -> (deleted)/usr/sbin/sshd
Run Code Online (Sandbox Code Playgroud)
另外,如果这些 sshd 正在做一些事情来主动阻止正常的进程分析,您可以尝试kill -STOP而不是kill -9“暂停”该进程(用于kill -CONT恢复它。请参阅http://en.wikipedia.org/wiki/Job_control_%28Unix%29 #执行)。
但是,如果攻击者具有 root 权限,则可以安装隐藏在 /proc、netstat、ls 等中的 rootkit。如果您确实受到威胁,最好的做法是使系统脱机并将其分区挂载到另一个系统上( clean)系统然后进行取证(或使用一张为取证制作的 live Linux CD)。
| 归档时间: |
|
| 查看次数: |
12065 次 |
| 最近记录: |