已知病毒处理脚本

 近期在环境出现过的4个病毒的检测及处理工具,通过检测特征文件判断,下载附件后可放在任意目录执行。

如果有疑似中毒机器可以用这个查一下

执行sh virus.sh --help 可以查看使用帮助

#!/bin/bash
##############################################################
#File Name: virus.sh
#Author: Chen Deyang
#Created Time : 2018-12-13 12:30:00
##############################################################
source /etc/profile
BASE_DIR=$(cd `dirname $0`; pwd)

function show_help {
  echo "virus help page

描述:
  用于已知病毒检测,需要加入一些参数运行。

  参数列表:
    * --check       检测是否有已知病毒
    * --clean       需要输入病毒名,在check的输出中会提供。

  示例:
	sh $BASE_DIR/virus.sh --check;
	sh $BASE_DIR/virus.sh --clean=zigw;
"
}

function check_virus {
  local virus_flag=false;

  # zigw
  [ -e /etc/zigw ] || [ -e /etc/shz.sh ] && echo "------------------------------------------------------------------------------------------------------------------
    疑似存在已知病毒 zigw,请参考以下url确认当前机器现象是否符合描述,若符合则可执行clean语句根据提示进行清理。
    https://www.xzeu.com/index.php/archives/120/

    sh $BASE_DIR/virus.sh --clean=zigw" && virus_flag=true;

  # pastbin_a
  [ -e /etc/ld.so.preload ] || [ -e /usr/local/lib/libdns.so ] || [ -e /usr/sbin/netdns ] && echo "------------------------------------------------------------------------------------------------------------------
    疑似存在已知病毒 pastbin_a,请参考以下url确认当前机器现象是否符合描述,若符合则可执行clean语句根据提示进行清理。
    pastebin有多种分支,需要确认具体中的是哪一种。
    http://blog.51cto.com/xvjunjie/2306502

    执行将清空crontab已有定时任务
    sh $BASE_DIR/virus.sh --clean=pastbin_a" && virus_flag=true;

  # pastbin_b
  [ -e /etc/ld.so.preload ] || [ -e /usr/local/lib/libntpd.so ] || [ -e /usr/local/bin/dns ] && echo "------------------------------------------------------------------------------------------------------------------
    疑似存在已知病毒 pastbin_b,请参考以下url确认当前机器现象是否符合描述,若符合则可执行clean语句根据提示进行清理。
    pastebin有多种分支,需要确认具体中的是哪一种。
    https://blog.csdn.net/lang363/article/details/82354830

    执行将清空crontab已有定时任务
    sh $BASE_DIR/virus.sh --clean=pastbin_b" && virus_flag=true;

  # iacpkmn
  [ -e /usr/lib/libiacpkmn.so.3 ] || [ -e /etc/rc.d/init.d/nfstruncate ] || [ -e /usr/bin/nfstruncate ] && echo "------------------------------------------------------------------------------------------------------------------
    疑似存在已知病毒 iacpkmn,请参考以下url确认当前机器现象是否符合描述,若符合则可执行clean语句根据提示进行清理。
    http://blog.51cto.com/10950710/2123114

    sh $BASE_DIR/virus.sh --clean=iacpkmn" && virus_flag=true;

  if [ $virus_flag = true ] ;then
    echo "------------------------------------------------------------------------------------------------------------------"
  else
    echo "未检测到已知病毒";
  fi

}

function clean_virus {
  local virus_name=$1
  case $virus_name in
    "zigw")
      clean_zigw; 
      ;;
    "pastbin_a") 
      clean_pastebin_a;
      ;;
    "pastbin_b") 
      clean_pastebin_b;
      ;;
    "iacpkmn") 
      clean_iacpkmn;
      ;;
    *)
      echo "非已知病毒,请确认输入是否正确";
      exit;
      ;;
  esac
}

function clean_zigw {
  chattr -i /etc/zigw
  chattr -i /etc/shz.sh
  chattr -i /tmp/zigw
  chattr -i /tmp/shz.sh
  rm -rf /etc/zigw
  rm -rf /etc/shz.sh
  rm -rf /tmp/zigw
  rm -rf /tmp/shz.sh
  
  kill -9 `ps -ef|grep shz.sh|grep -v grep|awk '{print $2}'`
  kill -9 `ps -ef|grep zigw|grep -v grep|awk '{print $2}'`
  
  mv /usr/bin/get /usr/bin/wget
  mv /usr/bin/url /usr/bin/curl
  
  echo "----------------------------------------------------------------------------"
  echo "已完成zigw处理"
  echo "建议重启redis服务"
  echo "----------------------------------------------------------------------------"
}

function clean_pastebin_a {
  iptables -D INPUT -p TCP --dport 6379 -j REJECT
  iptables -D INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
  
  rm -rf /etc/ld.so.preload
  rm -rf /usr/local/lib/libdns.so
  rm -rf /bin/httpdns
  rm -rf /usr/sbin/netdns
  rm -rf /etc/init.d/netdns
  
  sed -i '/etc\/cron.hourly/d' /etc/crontab ;
  sed -i '/etc\/cron.daily/d' /etc/crontab ;
  sed -i '/httpdns/d' /etc/crontab ;
  
  rm -rf /var/spool/cron/crontabs;
  echo > /var/spool/cron/root;
  echo > /etc/cron.d/apache;
  echo > /etc/cron.d/root;
  echo > /etc/cron.d/system;
  echo > /etc/cron.daily/oanacroner;
  echo > /etc/cron.hourly/oanacroner;
  echo > /etc/cron.monthly/oanacroner;
  
  kill -9 `ps -ef|grep kworkerds|grep -v grep|awk '{print $2}'`
  echo "----------------------------------------------------------------------------"
  echo "已完成pastebin_a处理"
  echo "挖矿脚本在/tmp/目录内,根据环境判断是执行rm -rf /tmp/* 还是单独寻找处理"
  echo "建议重启redis服务"
  echo "原有的定时任务已经被挖矿脚本清除,需要参考其他环境重新设定定时任务"
  echo "本病毒容易短期复发,需要在1小时后复查环境确认是否仍有异常"
  echo "----------------------------------------------------------------------------"
}

function clean_pastebin_b {
  echo "" > /etc/crontab
  echo "" > /var/spool/cron/root;
  rm -f /etc/cron.hourly/oanacroner 
  rm -f /etc/cron.daily/oanacroner
  chattr -i /usr/local/bin/dns && rm -f /usr/local/bin/dns
  chattr -i /etc/ld.so.preload && echo "" > /etc/ld.so.preload
  chattr -i /usr/local/lib/libntpd.so && rm -f /usr/local/lib/libntpd.so
  chattr -i /var/spool/cron/crontabs/root && rm -f /var/spool/cron/crontabs/root
  chattr -i /var/spool/cron/root && rm -f /var/spool/cron/root
  rm -f /tmp/kworkerds
  rm -f /tmp/.a
  rm -f /tmp/.38*
  chattr -i /etc/cron.d/0hourly && rm -f /etc/cron.d/0hourly
  chattr -i /etc/cron.d/apache && rm -f /etc/cron.d/apache
  chattr -i /etc/cron.d/root && rm -f /etc/cron.d/root
  chattr -i /etc/cron.d/system && rm -f /etc/cron.d/system
  pkill python
  kill -9 `ps -ef|grep kworkerds|grep -v grep|awk '{print $2}'`
  echo "" > /var/log/cron
  history -c
  
  echo "----------------------------------------------------------------------------"
  echo "已完成pastebin_b处理"
  echo "建议重启redis服务"
  echo "原有的定时任务已经被挖矿脚本清除,需要参考其他环境重新设定定时任务"
  echo "本病毒容易短期复发,需要在1小时后复查环境确认是否仍有异常"
  echo "----------------------------------------------------------------------------"
}

function clean_iacpkmn {
  sed -i '/iacpkmn/d' /etc/crontab ;
  sed -i '/iacpkmn/d' /var/spool/cron/root ;
  chattr -i /usr/lib/libiacpkmn.so.3 && rm -rf /usr/lib/libiacpkmn.so.3
  chattr -i /etc/rc.d/init.d/nfstruncate && rm -rf /etc/rc.d/init.d/nfstruncate
  chattr -i /usr/bin/nfstruncate && rm -rf /usr/bin/nfstruncate
  find /etc -name "S01nfs*"|xargs rm -f
  
  ps -aux --sort=-pcpu|head -10;
  
  echo "----------------------------------------------------------------------------"
  echo "已完成iacpkmn文件处理,请继续根据以下说明处理异常进程"
  echo "请确认当前cpu高的进程是否为[xfsdatad] 或者.sh等类似异常进程名,若是则将其kill -9"
  echo "本病毒容易短期复发,需要在1小时后复查环境确认是否仍有异常"
#  echo "本问题疑似为tomcat8.5.16漏洞导致"
  echo "----------------------------------------------------------------------------"
}


# 参数初始化
virus_name=
while [ $# -ge 0 ]; do
  for i in $@; do
    if [ $i = "--help" ]; then
      show_help
      exit
    elif [ $i = "--check" ];then
      check_virus
      exit
    elif [ ${i%=*} = "--clean" ];then
      virus_name=${i#*=}
    fi
  done
  if [ -z ${virus_name} ] ;then
    echo "参数接收异常,运行\"sh $BASE_DIR/virus.sh --help\"查看帮助信息"
    echo "Parameters receiving incomplete, execute \"sh $BASE_DIR/virus.sh --help\" to view Help information"
  else
    # 清理病毒
    clean_virus ${virus_name};
  fi
  exit 1
done

猜你喜欢

转载自blog.csdn.net/yujia_666/article/details/107328573