本文描述解决 biden1 挖矿病毒的方法。关于原因排查的过程按下不表(主要是未记录过程,也懒得进行复现),这里阐述结论。
1 原因分析
这个病毒会创建一个名为 biden1 的挖矿病毒,占满所有的 CPU 核心。如果用户尝试 kill 此进程,此进程会在短时间内自动拉起。这一机制是通过 systemd-run
命令的 transient 模式来实现的。我们可以通过 sudo systemctl status biden1-pid
查看到 biden1 进程的状态,可以看到该进程由 systemd 管理,但是处于 transient(abandon)
状态,这一状态可以让我们确定此进程是由 systemd-run
命令发起的。
2 解决办法
查看 system-run
的文档,我们可以发现该工具有一个选项 --send-sighup
,其描述为:
When terminating the scope or service unit, send a SIGHUP immediately after SIGTERM. This is useful to indicate to shells and shell-like processes that the connection has been severed. Also see SendSIGHUP= in systemd.kill(5).
可以发现,如果设置了这个选项,那么如果此进程在收到 SIGTERM
信号时,systemd-run
会立刻给这个进程发出一个 SIGHUP
信号,将此进程再次拉起。同时,这意味着我们如果发送除 SIGTERM
以外其他的能够终止进程的信号,即可阻止此进程被再次拉起。我们可以选择 SIGKILL
信号,这一信号的编号是 9。故我们可以通过如下命令终止挖矿进程 biden1
:
1 | kill -9 biden1-pid |
注意,biden1
还有一个兄弟进程(名字忘记了,你可以在 systemctl status
中查看到二者处于同一 scope 内)需要以相同的方式终止。
3 进一步的问题
除 biden1
以外,你可能会发现一个长时间保持 100% CPU 占用的 sshd 进程,这一进程事实上也是一个挖矿病毒,但是使用了更高阶的技巧来进行伪装。注意入侵者事实上并非替换了真正的 sshd 文件,可能是攻击者先将系统真正 sshd 文件移动到他处,然后在同一路径下设置同名的 sshd 病毒程序,并以 systemd-run
调起此进程,然后讲病毒文件删除,并恢复原 sshd 文件。此时你可以发现 sshd 文件的 md5 正确,但是运行中的 sshd 却是病毒程序的现象。事实上,使用 lsof
命令查看病毒 sshd 进程,可以发现其打开了一个 ESTABLISHED 的 http 链接(指向一个位于德国的 IP 地址),这是真正的 sshd 进程不会具有的行为。
既然此 sshd 进程同样是 systemd-run
发起,我们可以以前文类似的方式将其终止。注意有三个 httpd 进程与此 sshd 同组,同样需要终止。
4 结语
这里给出的方法能够终止挖矿进程,但是并不一定能彻底清楚相关文件,在服务器重启后是 biden1 进程是否会再次调起,这仍有待进一步验证。