近期在环境出现过的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