自从Redis未授权问题获取Linux系统root权限的攻击方法的披露后,由于其易用性,利用该问题入侵Linux服务进行挖矿、扫描等的黑客行为一直层出不穷;而在众多利用该问题入侵服务器进行黑产行为的案例中,其中就存在一类利用该问题进行挖矿并且会利用pnscan自动扫描感染其他机器;该类攻击一直存在,不过在近期又呈现数量增加的趋势,在最近捕获到多次,我们针对其做下具体的分析。
首先针对利用的漏洞做个说明,Redis 默认情况下,会绑定在 0.0.0.0:6379,在没有利用防火墙进行屏蔽的情况下,将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 ~/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器;如果Redis服务是以root权限启动,可以利用该问题直接获得服务器root权限。相关漏洞详情可以参考:
经过在ZoomEye和SHODAN检索,可以发现分别众多Redis服务开放在公网上,这些服务都可能成为攻击目标。
经过对捕获的事件进行分析,我们发现整个入侵流程大概是包含以下几个环节:1、扫描开放6379端口的Linux服务器(后续感染扫描网段为1.0.0.0/16到224.255.0.0/16)
整个入侵利用以及后续的感染的实现,最主要的功能都是基于通过Redis问题写入crontab任务中下载执行的NaNd脚本(来实现的,通过对它的分析,我们基本能够得到整个流程的所有细节,这是一个base脚本,我们通过解读来分析下它的相关功能。
这部分代码只要是用作重复执行的判断,将.mxff0文件作为标记文件,如果存在该文件则代表机器上已执行脚本,直接退出,否则写.mxff0文件并进行下一步动作;
这里再进一步的增加iptables限制6379端口只允许本地访问,同时kill相关包含挖矿、redis客户端、爬虫等进程,这里的目的也比较简单,避免被其他黑客再次入侵,同时清除可能其他黑客入侵启动的进程;
这一长串的内容主要目的是下载并编译安装pnscan,从内容中我们可以看到对于不同操作系统的判断然后安装依赖的相关模块,然后才是从github下载pnscan的源码进行编译安装;至于为什么采用编译安装的形式,猜测是出于兼容不同系统以及每次编译生成的pnscan的MD5都不一样,避免形成固定特征;
这部分主要是下载挖矿程序并重命名为.gpg,增加执行权限,执行后删除,同时重新上传到获取新的链接;
而这部分内容主要是生成新的.dat文件,包含将原来NaNd脚本里的里挖矿程序的下载地址替换为上一步上传到得到的新地址,还有Redis利用的相关语句;
最后就是收尾工作,清除相关日志和命令执行历史,同时在脚本退出的时候会触发脚本一开始用trap预置的动作,会做删除操作,删除相关文件和脚本自身(rm -rf m* NaNd tmp.* .r .dat $0)。
另外,通过阅读脚本,我们发现虽然整个入侵流程并不是多复杂,但脚本其实有很多”工程化”的细节考虑,不得不让人惊叹入侵者的”考虑周到”:
a) 判断操作系统,针对性的执行相关命令,安装依赖包,最大限度的提高pnscan编译安装的成功率
c) 写入Crontab里的下载并执行脚本的任务,通过curl、wget、lynx三种方式实现
a) Pnscan采用安装编译的方式,既提高在不同系统下的兼容性,也避免形成固定的MD5特征
1、 如无必要,修改bind项,不要将Redis绑定在0.0.0.0上,避免Redis服务开放在外网,可以通过iptables或者腾讯云用户可以通过安全组限制访问来源
2、 在不影响业务的情况,不要以root启动Redis服务,同时建议修改默认的6379端口,大部分针对Redis未授权问题的入侵都是针对默认端口进行的
3、 配置AUTH,增加密码校验,这样即使开放在公网上,如果非弱口令的情况,黑客也无法访问Redis服务进行相关操作
4、 使用rename-command ConFIG “RENAME_CONFIG”重命名相关命令,这样黑客即使在连接上未授权问题的Redis服务,在不知道命令的情况下只能获取相关数据,而无法进一步利用

