Redis未授权访问漏洞复现
1.漏洞简介;
Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。
攻击者访问后,利用Redis自身提供的congfig命令,可以进行写文件操作。可以成功把自己的SSH公钥写入目标服务器的/root/.ssh文件夹的authotrized_keys文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
2.危害:
导致敏感信息泄露,恶意执行flushall清空所有数据,通过eval执行Lua代码,通过备份功能往磁盘里写入后门文件;如果redis服务以root身份运行,可以给root用户写入SSH公钥文件,直接通过SSH登陆服务器;
3.漏洞产生的条件;
redis服务绑定在0.0.0.0:6379端口,而且信任了其他IP,导致了redis服务暴露在公网上,没有设置密码认证,可以免密登录redis服务;
4.密码验证:
密钥认证就是基于公钥密码的认证,使用公钥加密,私钥解密,其中公钥是公开的,放在服务端,可以把同一个公钥放在你想SSH登录的服务器,而私钥自己知道;
过程:(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;(2)客户端发起登陆请求,发送自己的相关信息;(3)服务器根据客户端发来的信息查找是否有该客户端的公钥,若没有拒绝登陆,若有则生成一段随机数,使用该公钥加密后发给客户端;(4)客户端收到服务器发来的加密信息后使用私钥解密,并把解密后的结果发给服务器用于验证;(5)服务器收到客户端发来的解密结果,与刚刚自己生成的随机数对比,如果一样就允许登录,不一致就不允许登录;
5.SSH服务介绍:
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的*。*所谓“中间人”的方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
1 | SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全性。 |
SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的。不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的密码具有足够的复杂度才能具有更高的安全性。而基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器。这种方式是相当安全的。
ssh服务认证类型:
(1)基于口令认证;
(2)基于密钥认证;