Linux机器CPU挖矿病毒排查
症状
放了一个假期回来,发现工位的Linux台式机走之前忘记关机了,赶紧关了让它休息一下。结果开机之后就发现风扇一直在嘶吼,htop看一下CPU占满100%,心中暗叫不妙。
排查
首先还没想到是病毒,先htop看一下哪个进程CPU占得高,一开始看ToDesk似乎有点问题,把它杀了之后CPU瞬间降下去了,感觉万事大吉。甚至还搜到了一个类似的博客,说ToDesk某个版本会异常占用CPU,于是狠狠地骂了一下ToDesk,并且卸载掉了。
但好景不长,过了很短的时间风扇又叫起来了,才发现错怪了它。htop看还是没有(不过htop顶端CPU占用是线程占用,而下方是进程占用,可能有很多进程,每个都占了一定CPU),于是找当初给装机的技术人员帮忙看一下,他建议我先进Windows看看是否正常(正常),然后recovery mode进Ubuntu看是否正常(正常),然后正常开机进Ubuntu,进入tty5(CLI),htop看,仍然异常。
然后dmesg命令(内核级日志:专门显示内核环形缓冲区(ring buffer)中的信息,包括 硬件检测、驱动加载、内核错误 等启动阶段的关键信息)和查看/var/log/syslog
(全系统日志:通过 syslogd 或 rsyslogd 服务记录 用户空间和内核空间 的各类日志,包括应用服务、安全认证、邮件系统等),但是没有发现异常。
后来他到现场,查了好久都没发现异常。最后用unhide proc
命令查看隐藏进程,发现了进程PID,但是进/proc
目录对应PID的目录下,却没有东西,更确定了是恶意进程。于是通过kill x
来杀掉它,权宜之计。
过了一天,搜到了一篇博客[1],和我的症状完全一致,于是参考。其实/proc
下查不到时,可以用systemctl status [pid]
来查看进程信息。
可以看到其可执行文件的路径,原来是隐藏为tmuxconfxxx了,卑鄙。上传到微步在线云沙箱分析,发现其执行过程。先删除系统日志,再替换系统命令、开放防火墙相关端口,下载挖矿程序并执行。
此外,病毒是通过mount --bind /dev/shm /proc/
来隐藏进程的。dev/shm
是一个基于内存的临时文件系统,通常用于存放共享内存对象。通过将其挂载到 /proc/
目录,恶意程序可以隐藏其在/proc
下的进程信息,使得常规的进程查看工具(如 ps 或 top)无法显示其进程。但不清楚其原理。
常用的其它隐藏方法还包括[2]:
- 命令替换: 直接替换系统中的ps、top命令工具。可以从GitHub上下载它们的源码,加入对应的过滤逻辑,在遍历进程的时候,剔除挖矿进程,实现隐藏的目的。
- 模块注入:编写一个动态链接库so文件,在so中,HOOK遍历相关的函数(readdir/readdir64),遍历的时候,过滤挖矿进程。通过修改LD_PRELOAD环境变量或/etc/ld.so.preload文件,配置动态链接库,实现将其注入到目标进程中。
- 内核级隐藏:模块注入的方式是在应用层执行函数HOOK,隐藏挖矿进程,更进一步,可以通过加载驱动程序的方式在内核空间HOOK相应的系统调用来实现隐藏。不过这对攻击者的技术要求也更高,遇到这样的病毒清理起来挑战也更大了。
解决
根据沙箱分析的病毒文件执行过程一步步排查。
根据systemctl status [pid]
的信息,删除源文件。netstat
查看是否有上传了SSH Key。
查看/root/.ssh/authorized_keys
是否被恶意添加。
查看reboot是否被修改。
修改ssh端口(实际上我直接关闭了sshd服务,因为不是服务器,台式机也用不到)。
但仍然不知道是怎么中的病毒,是攻击者通过校园网传播的吗?