固定链接 一次Redis未授权访问漏洞入侵分析

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

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

0x00 简介

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

0x01 样本分析

通过蜜罐日志得到攻击者入侵开始于通过 Redis 写 crontab:

命令中的 URL https://pastebin.com/raw/1NtRkBc3 其实是一个中转,实际样本文件为 https://pastebin.com/raw/tRxfvbYN 在 base64 解码后的结果为:

解码后是一个 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 等敏感文件,对于滴滴云的用户来讲,可以从主机安全的界面直接看到相关内容:

  2. 下载静态链接版本的命令文件比如 ls、top 查看系统状态。

本文作者:张博

您的留言将激励我们越做越好

用户评论(1)

  1. 135*****280

    这个提权漏洞几年前已经发布了,目前包括滴滴云在内的大部分云redis都已经做了相应的应对处理:
    1 重命名config和save等管理命令,改成一个带随机字符串的命令,只能内部管理员知道,外部还能通过暴露破解新的命令名
    2 redis进程都是以极小权限的普通用户身份运行,对/var等目录是没有访问权限的
    3 网络上也有隔离,用户只能访问自己vpc内的网络资源,是无法进行b段扫描的
    4 部分redis产品,例如我们内部使用redis部门都是ip白名单限制的

    通过上面几个安全措施加固,大家是可以放心大胆使用云redis服务的。 ^_^