Linux 挖矿木马手法摘录

Author Avatar
xF0rk 2月 28, 2020

如果说有一种木马比你更关心你系统的负载、资源使用率,那就是挖矿木马了!挖自己的矿,让别人无矿可挖,独占资源,特立独行。

挖矿木马概述

挖矿木马 通过目标系统的安全漏洞入侵,利用目标机器的计算资源挖掘匿名数字货币。为了保证 “业务” 的持续性,木马采用多种对抗手段在目标系统 持久驻留 ,并确保自身 资源的独占性 ;同时为实现 “业务” 的最大化,当前大多数挖矿木马都集成了 蠕虫功能 ,对内、外网进行扫描,若发现存在漏洞的资产机器则直接感染;同时攻击者利用裁剪的 命令控制 通道,来实现配置更新、应用迭代更新。

如上所示为阿里云发布的《2019年云上挖矿僵尸网络趋势报告》中 Linux 平台的家族挖矿木马,各家族木马活跃度如下所示(部分 Windows 平台家族木马未剔除),阿里云报告详细内容,读者可从参考链接中获取链接报告地址详细阅读。

挖矿木马由于挖矿收益虚拟币匿名不可追溯,加上近年数字货币持续走高,颇受黑色产业链欢迎,加速了整个挖矿木马产业链的发展,笔者根据网络上相关挖矿木马分析报告及自身分析过的挖矿木马经历,对挖矿木马常使用的入侵手法进行摘录,同时也给出一些简单的安全防护建议。

入侵手法摘录

攻击者入侵挖矿已具有工程化思维,技术手法不断变种完善,整个过程呈现出自动化、蠕虫化特征,同时在不同家族的挖矿木马中表现出较强的对抗性。

根据笔者分析过的几款挖矿木马,挖矿木马从入侵到植入,到挖矿收益,其关键环节流转如下所示

  • 探测扫描 ,攻击者对目标系统进行扫描、信息收集,为下一步漏洞利用奠定基础(同时也在不断分析其他家族木马特征,为后续的 资源独占 提供进程、文件等特征);
  • 漏洞利用 ,攻击人员利用 探测扫描 收集的信息进行手工或自动化漏洞挖掘,并在存在漏洞的机器中植入挖矿木马初始化脚本;
  • 释放文件 ,植入脚本在漏洞机器上直接释放或下载相关依赖文件,包括但不限于挖矿二进制程序、蠕虫二进制程序、bash 脚本、Rootkit 源代码等;
  • 资源独占 ,挖矿木马在目标系统执行相关操作实现 资源独占 ,包括终结其他挖矿进程、CPU 占比高进程等;
  • 系统驻留 ,挖矿木马通过修改目标系统的定时任务、开机启动项,甚至通过 Rootkit 相关技术在目标系统持久化驻留;
  • 挖矿收益 ,木马运行挖矿应用,利用目标系统算力,挖掘虚拟货币获取收益;
  • 蠕虫扫描 ,通过对目标系统所在的网络进行扫描,包括内部网络、外部网络进行周期性扫描,若发现漏洞机器则直接进入 漏洞利用 模块;
  • 命令控制 ,攻击者利用自建或外部免费匿名托管平台构建命令控制服务器,挖矿木马与命令控制服务器主动轮询,进而实现挖矿配置、木马二进制文件更新;
  • 版本更新 ,挖矿木马通过 命令控制 方式,实现挖矿木马配置、应用版本迭代更新,若检测到版本更新,则重新进入 释放文件

      |
      ↓
    探测扫描
      |
      |
      ↓
    漏洞利用  <  -  -   -  -  —  —  蠕虫扫描
      |                            ↑ 
      |                            |
      ↓                            |
    释放文件 -  - > 资源独占 -  - > 系统驻留 -  - > 挖矿收益
      ↑                            |
      |                            |
      |                            ↓
      版本更新 < -  -  -  命令控制  < - -


漏洞利用

挖矿木马植入过程需要在目标系统执行命令,所以挖矿木马通常利用的漏洞均可直接或间接命令执行,如下图所示为变种 DDG 家族挖矿木马所使用的漏洞 EXP 代码,包括 ElasticSearchHadoopRedisThinkPHP 等常见的中间件或框架

如下所示为某家族挖矿木马利用 Redis 未授权访问漏洞在 Redis 写入待执行命令,并通过 save 写入到系统定时任务文件夹,通过创建定时任务来实现挖矿木马植入

脚本加密

为提高系统管理员或安全工程师后期分析挖矿木马相关脚本难度(部分也为了绕过一些 HIDS 检测),攻击者通常会对 bash 脚本进行加密加固,通过分发加密后的脚本来保证工具 “安全”。

为更好地描述脚本加密功能,下述内容将介绍相关加密手法,如下图所示为 Demo 所需要加密的初始脚本文件

GZEXE 压缩加密

gzexe 系统默认已安装,攻击者使用 gzexe 将目标 bash 脚本压缩,压缩脚本内容特征如下所示

加密后的脚本通常可以分为解压执行入口、压缩二进制数据两个部分,压缩二进制数据为原有脚本 gz 压缩数据,可以直接通过 gzexe 将加密后的脚本进行还原

由于二进制数据为 gzip 压缩数据,也可直接通过 binwalk [项目主页] 从压缩后的脚本中提取出 gzip 压缩包文件,并解压提取出原有 test.sh 脚本文件,如下图所示可直接识别到 test.sh 文件在二进制数据中

通过 binwalk 从加密后的脚本 test.sh 中提取出加密前 test.sh 脚本文件,如下所示

SHC 编译加密

SHC [工具介绍] 根据待加密的 bash 脚本内容生成 C 代码,然后将 C 代码编译成二进制文件,来实现对目标脚本加密。使用 SHC 加密后的文件已转化成 ELF 二进制文件,如下图所示

SHC 编译加密生成的二进制文件可使用 unshc 工具 [项目主页] 来解密,解密操作如下图所示

使用 unshac 工具过程中,不是所有版本 shc 加密后的脚本均可解密;如果针对无法解密的脚本,在安全事件应急过程中,可使用在线免费沙盒服务,快速分析脚本所执行的操作,缩短安全事件对实际业务的影响时间窗口。

系统驻留

为确保木马能够在目标机器持续运行挖矿,攻击者通常利用系统的开机启动、定时任务来实现木马的自动运行,部分挖矿还是用 Rootkit 来实现自身关键进程或文件的隐藏

SSH 公钥驻留

挖矿木马在目标机器写入 SSH 公钥,在系统管理员未完全清理挖矿木马后,确保挖矿木马可以自动化、重复通过 SSH 登录目标系统,并重复进行挖矿木马植入、挖矿收益等操作

开机启动驻留

为对抗重启大法,挖矿木马在系统开机启动目录写入启动脚本,来实现机器重启的自动运行,进而实现系统持久化驻留,Linux 常见的开机启动目录包括


/etc/rc.d/init.d
/etc/rc/d/rc.local

....

定时任务驻留

通过在目标机器创建定时任务,挖矿木马周期性地在受害主机上运行植入脚本,确保可以实现对目标机器的持久控制,同时在后续的 命令控制 模块可结合定时任务实现配置或应用版本的更新

ROOKIT 驻留

如下图所示,在挖矿木马植入脚本中自动化下载指定 C 源码,编译动态链接库 SO,并将其路径写至配置文件 /etc/ld.so.preload 中,HOOK 系统关键操作函数,来实现自身挖矿木马进程、文件或端口隐藏,甚至在目标系统永久、持续、不间断地创建木马植入脚本定时任务。

文件进程隐藏

通过 HOOK 系统公共函数来实现挖矿木马文件、进程、网络等信息隐藏,Rootkit 将系统管理员待查看或 HIDS 待检测的对象名称与预定义的字符串特征(MAGIC_STRINGMAGIC_DEAMON 及自身依赖库、配置文件名、文件夹名等)进行比对,若操作对象与预定义字符串的匹配,则屏蔽相关操作对象在命令 lstop 等命令的输出

如下图所示为挖矿木马下载 Rootkit 待编译的源码中攻击者预定义进程、文件相关静态特征字符及 HOOK 的系统公共函数

定时任务创建

如下挖矿木马 HOOK 系统 access 方法,实现在系统定时任务目录持续、永久、不间断地创建任务,用于挖矿木马持续植入,定时任务目录包括


/etc/cron.d/root
/var/spool/cron/root
/var/spool/cron/crontabs/root

命令控制

挖矿木马命令控制是“裁剪版”的命令控制,并没有包含指定下发命令、窃取指定文件等模块,其通常用于挖矿木马版本自身版本迭代更新,目前已曝光挖矿木马通过使用一些免费或匿名站点进行挖矿木马程序及配置文件托管、分发,包括但不限于

  • sowcar.com 免费图床
  • pastebin.com 免费代码分享平台
  • github.com 免费代码托管平台

某挖矿木马命令控制流程如下所示,攻击者通过免费代码分享平台 pastebin.com 进行文件托管和命令控制,其分别通过 Url AUrl B 发布指令 Cmd ACmd B,受害者机器 Host A 被攻击植入木马后周期性通过 Url A 获取并执行 Cmd ACmd A 要求受害者机器 Host AUrl B 获取 Cmd B 并执行,攻击者每次只需要更新 Url AUrl B 链接的命令内容即可让受害者机器执行新的命令、更新应用配置等操作。



            < - - 命令控制服务端 (pastebin.com)- - >
            |                                    |
            |                                    |
    对外发布 |                                    | 对外发布
            |                                    |
            ↓                                    ↓
        植入脚本指令 Cmd A (Url A)                  运行脚本指令 Cmd B (Url B)
            |                                    |
            |                                    |
    定期订阅 |                                    | 执行 Cmd A 下载
            |                                    |
            ↓                                    ↓ 
            - - - - > 受害者机器 Host A < - - - - -


如下图所示为挖矿木马Url A 中定义的指令 Cmd A 截图,其要求机器使用 wgetcurlUrl B 下载脚本并直接在 bash 中执行

如下为 Url B 中定义的指令 Cmd B 部分截图,其脚本描述挖矿木马的植入、挖矿等操作,同时通过写入定时任务确保 Cmd A 能够每 10 分钟执行一次

挖矿木马通过周期性执行 Cmd ACmd B 来实现对受害者机器的持续有效控制,同时利用 Cmd ACmd B 互相实现对方指令的更新。

资源独占

当前挖矿木马扫描、入侵、植入基本上已经实现自动化,若一台机器存在安全漏洞可被利用,通常该机器上可能同时存在多个家族的挖矿木马活跃,笔者也曾经在多台受害者机器上发现了多款挖矿木马活跃。在挖矿这个黑色产业链里,由于挖矿行为对目标系统的计算资源有非常大的需求,所以不同家族的木马总是在互相竞争,存在非常明显的 “黑吃黑” 场景,笔者总结挖矿木马常用的资源独占手法包括阻断入侵、清理暂存。

阻断入侵

阻断入侵是在一台漏洞机器被抢占之后,迅速对目标系统进行 “安全加固”,确保其他家族的挖矿木马无法再次获取目标机器的权限,来实现资源独占。

屏蔽域名解析

挖矿木马修改本地域名解析,阻断其他家族挖矿木马与文件分发平台、命令控制服务端正常通讯,打断非本家族木马正常植入流程,如下图所示为某家族木马在植入脚本中与屏蔽域名解析操作对抗,将其命令控制服务器 pastebin.com/etc/hosts 中移除

重命名系统命令

挖矿木马脚本中将大部分蠕虫脚本常用的 wgetcurl 命令进行重命名成 geturl(自动化植入木马需要从命令控制服务器上下载脚本并执行,目前常用的方法是 curl xxx|sh),以实现漏洞利用方式 “独占”,如下所示为某木马重命名系统命令操作

挖矿木马在自身脚本中进行 wgetcurl 命令适配,当发现目标系统 wgetcurl 不存在时,使用 cururlwgeget 等命令替换,以确保自身脚本功能执行正常

关闭漏洞端口

挖矿木马将常见漏洞端口关闭, 以修复自身入侵所利用漏洞,使漏洞不可再次利用 ,如下图所示

如下图所示,为某挖矿木马,为保证本地 Redis 漏洞独占所使用的命令,其使用 iptables 限制 6379 端口只允许本地访问

清理暂存

挖矿木马通过进程字符串、矿池地址等静态特征检测机器上是否存在其他挖矿木马家族,同时也会根据挖矿进程资源高消耗的动态来发现可疑的挖矿进程,若发现进程中存在其他家族的挖矿木马,则将其终结,最大可能确保当前系统非本家族的挖矿进程被终结。

屏蔽域名解析

挖矿木马通过修改本地域名解析,将部分矿池、命令控制端域名解析至本地 127.0.0.1 来干扰木马植入及挖矿进程正常通讯过程,进而阻断正在运行的挖矿进程。如下图所示(来源阿里云报告),某家族挖矿木马中修改本地 /etc/hosts 命令

挖矿进程识别

挖矿木马内置其他家族挖矿木马进程指纹,其通过识别常见挖矿进程特征,并终结非本家族的挖矿进程,实现资源独占

高消耗进程识别

挖矿木马寻找并终结目标系统 CPU 资源消耗高于 40% 的进程,保证自己能够尽可能大地占有目标系统的计算资源

蠕虫入侵

当前大部分挖矿木马基本上已经实现蠕虫化,当挖矿木马成功入侵一台机器之后,木马依托当前机器的网络资源,并将其作为跳板实现自动化攻击内、外网其他机器,实现自动化扩散感染,实现控制机器的最大化。

SSH 蠕虫模块

如下为某挖矿木马解析当前机器 .ssh 文件夹下的 known_hosts 历史 SSH 登录记录,尝试 SSH 免密自动化登录历史登录过的机器,并自动化执行植入脚本,来实现蠕虫扩散

REDIS 蠕虫模块

如下为某挖矿木马通过扫描内网的 6379 端口,检测是否存在 Redis 未授权访问,若存在未授权访问,则利用 Redis 备份 save 写入定时任务,实现木马植入

蠕虫入侵所使用的漏洞非常之多,基本上均为可执行命令漏洞,以上仅用 SSHRedis 进行说明

其他对抗

检测对抗

如下图所示,某家族的挖矿木马识别受害者主机上是否安装了阿里云的安骑士、腾讯云的云镜,若发现则调用官方卸载工具移除

溯源对抗

如下图所示,某家族的挖矿木马在所有操作执行后,删除历史操作命令,同时清空目标机器上的安全日志及邮件日志,提高后期系统管理员溯源分析难度

防御安全加固

笔者将挖矿木马的入侵手法在 Att&ck [主页] 攻击知识库中映射,由于挖矿木马其 “业务功能” 的特殊性,所使用的攻击手法并没有覆盖全阶段,其入侵攻击手法主要体现在 Initial Access(初始化访问)、Execution(执行)、Persistence(持久化)、Privilege Escalation(权限提升)、Defense Evasion(防御逃逸)、Credential Access(凭据访问)、Discovery(发现)、Lateral Movement(横向移动)、Command And Control(命令与控制) 几个阶段,如下图所示

针对挖矿木马等同类突发安全事件,其原因是由于业务系统上所使用的中间件或框架存在漏洞,被攻击者恶意利用。作为企业应该根据自身业务实际情况,可依据 Att&ck 攻击知识库,针对性地建立各阶段的防护方案,及时更新业务系统组件的安全补丁,多维度监控自身业务系统的健康度,持续周期性地对系统进行安全检测;对于已感染的木马病毒机器,及时隔离监控,并提取出攻击者所使用的攻击手法,不断完善迭代自我的安全防护方案。

灵魂发问

你所经历的入侵真的是挖矿木马吗?之前听到这样一个说法,有攻击者进入某个业务内网,为了隐藏本来的攻击目的,植入一个挖矿木马,掩人耳目!!!

参考链接

  1. 《2019年云上挖矿僵尸网络趋势报告》首发:挖矿木马全面蠕虫化 [原文]
  2. 自变异挖矿木马Axlist分析报告 [原文]
  3. 一款“僵尸网络挖矿” 攻击分析 [原文]