本文描述解决 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 进程是否会再次调起,这仍有待进一步验证。