谈谈黑客是如何入侵服务器实现批量挖矿的?
一、 漏洞简介以及危害
1.先说说什么是Redis未授权访问漏洞?
Redis 默认情况下,会绑定在 0.0.0.0:6379。如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源IP访问等,就会将 Redis 服务暴露到公网上。如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
简单说,漏洞的产生条件有以下两点:
(1)Redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源 ip 访问等相关安全策略,直接暴露在公网;
(2)没有设置密码认证(一般为空),可以免密码远程登录Redis服务。
2.漏洞的危害
(1)攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
(2)攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件;
(3)最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器
二、漏洞的复现和利用
1.SSH免密登录原理简介
在正式开始介绍复现过程前,先说明一下我复现的是最严重的漏洞利用情况即以root身份登录redis服务写入ssh公钥实现使用ssh免密登录受害主机。现在先说明一下SSH免密登录的原理(已经了解的童靴们可以直接跳过hhh):
SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是**验证也就是我们想要的免密登录了,这里我只简单说一下**验证的原理。
所谓**验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密,其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:
(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;
(2)客户端发起登录请求,发送自己的相关信息;
(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端;
(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证;
(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。
2.漏洞环境搭建:
Kali linux 2016及以上
VMware
(1)官网下载源码的压缩包
http:// download.redis.io/relea ses/redis-3.2.11.tar.gz
(2)解压压缩包
tar xzf redis-3.2.11.tar.gz
(3)进入到解压后的目录:cd redis-3.2.11 ,并输入make执行;
(4)make结束后,进入src目录:cd src,将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了):
cp redis-server /usr/bin
cp redis-cli /usr/bin
(5)返回目录redis-3.2.11,将redis.conf拷贝到/etc/目录下:
cp redis.conf /etc
(6)编辑etc中的redis配置文件redis.conf
Vi /etc/redis.conf
(7)去掉ip绑定,允许除本地外的主机远程登录redis服务:
关闭保护模式,允许远程连接redis服务:
(8)使用/etc目录下的redis.conf文件中的配置启动redis服务
redis-server /etc/redis.conf
(9)启动ssh服务
kali安装有ssh服务,但默认没有启动,需使用service ssh start命令启动ssh服务。
(10)复制虚拟机,一个作为靶机,一个作为攻击端,至此漏洞环境便已经搭建完毕,此时的redis服务是可以以root用户身份远程免密码登录的。
将其中一台作为靶机A(192.168.227.129),另一台作为攻击端B(192.168.227.130)
在A中开启redis服务:redis-server /etc/redis.conf ;
在主机A中执行mkdir /root/.ssh命令,创建ssh公钥存放目录(A是作为ssh服务器使用的);在B中生成ssh公钥和私钥,密码设置为空:
进入.ssh目录:cd .ssh/,将生成的公钥保存到1.txt:
攻击端ping一下目标主机ip, 或者在靶机上ping一下攻击端,确保两台机的网络互通
将1.txt写入redis(使用redis-cli -h ip命令连接主机A,将文件写入):
远程登录主机A的redis服务:redis-cli -h 192.168.227.129(靶机) 并使用CONFIG GET dir命令得到redis备份的路径:
更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh):
设置上传公钥的备份文件名字为authorized_keys:
检查是否更改成功(查看有没有authorized_keys文件),没有问题就保存然后退出,至此成功写入ssh公钥到靶机:
开启主机A和主机B的ssh服务(kali默认ssh服务关闭),命令为service ssh start
在主机B使用ssh免密登录主机A:ssh -i id_rsa [email protected],成功登录:
至此,我们就成功利用redis未授权访问漏洞实现了ssh免密登录目标服务器,接下来就可以使用ssh服务来进行下一步的渗透工作啦。
3.利用搜索引擎查找漏洞
Redis 暴露在公网(即绑定在0.0.0.0:6379,目标IP公网可访问),并且没有开启相关认证和添加相关安全策略情况下可受影响而导致被利用。
通过ZoomEye 的搜索结果显示,有97707在公网可以直接访问的Redis服务。
根据 ZoomEye 的探测,全球无验证可直接利用Redis 分布情况如下:
全球无验证可直接利用Redis TOP 10国家与地区:
emmmmmm觉得写得不错的麻烦大家点个赞支持一下昂_(:з」∠)_