最近在客户提出了软件运行环境的三个安全问题,Redis未授权访问、mysql root账户密码太简单和ftp服务器可以anonymous匿名访问。经过仔细检查代码发现ftp服务器已经限制了匿名访问,root账户密码也比较好修改,只有Redis未授权访问不太清楚是什么意思,一番沟通后才了解客户想要什么效果。
Redis未授权访问
Redis在默认情况下会绑定在0:0:0:0:6379这样的IP端口上,这样这个端口就会暴露在互联网上,没有开启认证的时候任何用户都可以访问Redis服务器读取Redis数据,还可以利用脚本修改Redis数据,可以利用Redis相关的方法写入公钥进而使用对应的私钥访问目标服务器。
了解了Redis在公网上未授权访问的漏洞,其危害也不用多说,很容易被黑客利用攻击目标服务器。
修复Redis漏洞
修改绑定的IP端口
默认绑定的0:0:0:0:6379,所有计算机都可以访问,我们可以绑定特定的IP,只允许特定的IP访问,6379是默认端口众所周知,数字比较小的也比容易试出来,我们可以开放数字比较大的端口号如10073。我们修改Redis的配置文件redis.conf,Windows版本可能是redis.windows.conf。找到port修改端口号,然后找到bind开头的文字,去掉注释符号#,修改绑定IP。如下图所示:
实际运行环境中可以需要很多台电脑访问Redis服务,因此修改绑定IP可能不是很适用,要看情况设置。
添加密码验证
Redis默认是没有密码的,我们需要添加密码验证,通过验证才能访问Redis,在配置文件找到requirepass开头语句,如下图所示:
去掉注释符号#,设置密码验证
requirepass 你的密码
密码尽量设置复杂一点,由数字、字母、特殊符号组成,满足复杂性、随机性、不可预测性。
禁止高危命令
Redis还有一些命令设置也可能带来隐患,应该禁止这些命令,如远程修改DB文件地址的命令,我们可以在Redis配置文件redis.windows.conf中添加如下语句:
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
此外还有应该禁止其他用户添加新的密钥等等,还有在服务器上添加防火墙设置过滤规则等,在工作中我们应该实际情况设置,保证网络安全。
想了解更多精彩内容,快来关注程序猿小董