随着虚拟货币市场的疯狂炒作,挖矿已经成为一种额外的经济来源,越来越多的人参与其中。从2019年安全态势来看,攻击者将企业、政府和教育行业作为挖矿的主要目标,通过弱口令爆破、社会工程和钓鱼等方式对计算机进行攻击,利用他人计算机CPU和GPU的计算能力挖取虚拟货币获利,导致计算资源被耗尽严重影响本地服务正常使用。
今日,在单位测试环境中发现一个挖矿木马样本。经溯源分析,该挖矿病毒具有蠕虫属性,攻击者利用后门去控制失陷的计算机作为“肉机”,从3个固定的Web服务器来获取攻击的目标IP和所使用的爆破字典,之后通过不断感染其他主机形成僵尸网络。挖矿攻击过程如下图2-1所示:
图2-1挖矿木马攻击流程
通过分析发现,此次攻击是一次有组织的攻击,攻击手段复杂多样,利用循环嵌套的方法在第三方网站隐藏真正存放恶意软件IP地址,目前只针对Linux物理机进行攻击,如果检测为蜜罐或者路由器则自动退出。攻击者通过ssh弱口令爆破取得系统权限后,利用ftp从其C&C服务器下载Shell脚本,为后续投递攻击载荷做准备。但是失陷计算机目录未发现“.ssh3”文件,分析人员怀疑攻击者在执行完脚本之后做了自身删除操作。图3-1所示为攻击者通过ftp下载命令。
图3-1 攻击者通过ftp下载恶意Shell
图3-2是在失陷计算机发现的tddwrt7s.sh脚本,猜测该脚本是通过ftp下发,目前下发地址控制台已失效,无法进行验证。
图3-2 通过wget和curl下载恶意软件
攻击者利用wget和curl指令从七个不同的URL下载恶意软件,这些URL下载的数据包中包含了与dota.tar.gz压缩包中同样的文件,如图3-3所示。利用这些URL,脚本随机选择其中一个URL,就可以下载有效载荷解压缩并执行。登陆被感染服务器,安全分析人员发现在X13-unix.tar.gz压缩包中包含了完整的挖矿组件,解压后的dota/.rsync目录中含有大量的恶意代码。攻击者为了掩盖痕迹,将恶意代码文件伪装成了系统指令,下文对恶意代码文件用<恶意代码文件>表示。
图3-3 攻击者下发的大量的相同的数据包
挖矿组件分为a、b、c三个子目录和<init>、<init2>和<initall>脚本,主目录的脚本主要对本地系统进行清理、初始化挖矿环境并启动恶意程序;文件夹a是挖矿组件,用于查杀其他矿机、定时任务和启动挖矿程序;文件夹b中包含了用于植入攻击者的后门组件和一些Shell启动脚本;文件夹c中包含的爆破程序和脚本将失陷计算机作为肉机去感染其他弱口令机器。
既然已经通过ssh爆破获得本地权限,那么后续则通过一系列脚本初始化本地系统、执行挖矿、安装后门和执行爆破。结合之前目录分析,使用</.rsync/initall>脚本初始化/var/tmp目录,并启动主脚本<init>;</.rsync/init>脚本执行过程如下:
1) 清除自身挖矿进程;
2) 执行挖矿程序;
3) 本地植入后门;
4) 启动爆破工具感染其他主机形成僵尸网;
5) 设置定时任务自启;
目标主机启动之后命令会自动执行。
图4-1init定时任务脚本
启动挖矿操作详细流程如下:
攻击者为了在挖矿计算期间独占CPU资源,</.rsync/a/init0>通过kill杀死其他矿机并进行删除,部分代码内容如图4-2所示。
图4-2init0清理其他矿机程序
启动脚本<a>中包含了下一步需要执行的恶意命令,删除当前crontab文件,生成<udp>执行<run>,代码内容如图4-3所示。
图4-3 生成udp进而执行run
恶意脚本根据i686架构或x86_64架构判断当前系统环境,如图4-4所示,不同的系统环境启动不同的挖矿程序。cron和anacron功能相同,一个是32位版本,一个是64位版本,两者主要作用是执行挖矿操作,其他Shell脚本则负责清理和删除本地系统中存在的其他挖矿程序。
图4-4 判断系统环境
接下来是挖矿信息分析,挖矿病毒支持Cryptonight系列算法的币种挖矿,逆向分析发现,本次挖矿攻击使用的工具是基于XMRig家族,编译时间戳为2019年05月03日,该样本今年才开始构建完成,如图4-5和图4-6所示。
图4-5 挖矿病毒使用注释
图4-6 编译时间及版本
根据b目录中的IRCBot遗留的主控服务器IP,在挖矿程序<anacron>中,也发现了与主控服务器在同一个C段的矿池。除此之外,还存在其他两个矿池。挖矿病毒中发现三个矿池分别是5.255.86.129:80 (荷兰)、107.191.99.221:80(美国)和workforce.ignorelist.com,截止分析之前所有矿池均存活,幸运的是找到矿池的同时也发现了攻击者的钱包地址,如图4-7所示。
图4-7 矿池和钱包地址
目前,由于钱包地址被多次举报为僵尸网络,在矿池官网已经无法查看钱包详细信息,钱包也已失效,如图4-8所示。
图4-8 钱包失效
攻击者一旦成功入侵计算机系统,就会想方设法通过各种方式连接到C&C服务器。命令和控制组件由一个基于perl脚本的IRCBot后门和可执行文件ps组成。IRCBot充当C&C连接到恶意IRC服务器,并且执行一些内置的命令进行反弹Shell。分析发现,可执行文件<ps>用于通过删除本地主机的.ssh文件夹并植入公钥来建立另一种持久性机制。总结而言,IRCBot作为辅助性的命令与控制,而<ps>则作为长期的后门工具。
命令与控制初始化由</.rsync/b/a>启动<run>开始,该脚本首先解密出IRCBot(以下称rsync)工具,并随后启动ps后门。此次攻击者所使用的挖矿工具使用IRC指令进行命令和控制,通过<ps>将RSA公钥植入到本地失陷系统,以便保持长期登录。
执行一段经过base64编码的代码,解码之后发现代码又采用了另外一种方式混淆。图5-1是run脚本执行编码的后门,下面是详细分析:
图5-1run启动后门
经过base64解码之后发现了核心代码经过了混淆,如图5-2所示为解析后的代码。
图5-2 混淆过的代码
对混淆的代码进行梳理,代码中eval用来压缩二进制程序,所以只需打印可还原出关键代码。该脚本是一个基于perl的后门工具。rsync是通过开源的ShellBot工具生成,主要功能是通过监听服务器下发IRC指令执行其他的恶意行为。其Server IP为5.255.86.125(荷兰),图5-3为解密后的IRCBot。
图5-3 解密后的IRCBot
<rsync>工具中所使用的变量和注释是葡萄牙语。具有多种后门功能,其中包括单端口探测、全端口扫描、下载文件和执行远程Shell,除此之外,<rsync>似乎还具有DoS和TCP Flood攻击功能。图5-4为在<rsync>中发现的疑似DoS攻击。
图5-4 疑似DoS攻击
整个<rsync>的功能主要是设置循环,监听来自IRC服务器的指令,图5-5为后门中设置的循环监听功能。该工具结合c目录下的爆破工具<tsm>会将本地失陷计算机变成僵尸网络,向其它存在弱口令的设备植入IRCBot。
图5-5 监听接受来自IRC服务器的指令
具体操作详情在后续分析c目录中叙述,<rsync>功能如图5-6所示。
图5-6<rsync>功能
另外一个后门工具<.rsync/b/ps>是一个Linux可执行文件,为了保证日后可以密登录,攻击者将RSA公钥添加到失陷计算机.ssh目录中Authorized_keys文件中。<ps>后门植入RSA公钥代码如图5-7所示。
图5-7 植入rsa公钥
通过图5-8不难发现,在失陷计算机上也确实发现了此公钥。
图5-8 本地系统中发现公钥
<ps>作为ssh后门服务器,注释中包含了大量的ssh字符串。功能包括典型的ssh会话、连接服务器、远程Shell以及传输命令等。图5-9是通过ssh连接服务器的一个操作。
图5-9ssh连接服务器
此次攻击中,攻击者通过爆破程序的扫描功能将IRCBot植入带有弱口令的设备,通过向失陷计算机植入IRCBot程序形成僵尸网络。和其他功能一样,</.rsync/c>目录为ssh爆破组件,依托Shell脚本进行初始化。<start>脚本由</.rsync/init>启动,然后创建脚本并命名为<aptitude>,运行之后启动<run>,进而执行关键脚本<go>。攻击者从第三方网站下载即将要爆破的IP表单和字典,将其作为<tsm>爆破工具的参数进行扫描和爆破,并时隔一天就会重新启动一次。<go>脚本代码如图6-1所示。
图6-1 执行爆破程序
此脚本会利用wget和curl指令遍历相应的恶意服务器网站,从网站/a/xtr目录下载真正存放恶意文件地址,这些地址存放了攻击者实施爆破的IP地址和字典文件。研究人员发现攻击组织通过54.36.182.244(法国),51.75.28.134(法国),103.248.211.198(印度)三个服务器轮询下载IP表单和字典。轮询的三个地址都包含了相同的IP列表文件a和字典文件b,并且这两个文件在实时更新,如图6-2所示。
图6-2 攻击者实时更新IP列表和字典
文件a中包含攻击者将要爆破的IP地址和端口号,IP数量固定为7万个。通过分析<tsm32>和<tsm64>(两个文件一样,简称tsm)可执行程序,作为爆破工具<tsm>可充当扫描器。<tsm>工具使用功能注释部分如图6-3所示,可以看到与<go>脚本中设置的命令一样。
图6-3 爆破程序与脚本内容一致
软件具有远程植入的功能,攻击者通过遍历IP列表,对单个IP尝试爆破,一旦爆破成功就会将IRCBot植入到下一个失陷计算机并上报。图6-4为<tsm>爆破一个IP地址后植入IRCBot,图6-5为后门代码与</.rsycn/b/run>中的所执行的后门代码一致。
图6-4通过ssh植入IRCBot
图6-5 爆破攻击内嵌IRCBot
攻击者通过sftp将本地挖矿木马传播到下一个失陷计算机,接着开启会话执行与本地系统相同的Shell指令,开始新一轮的攻击,如图6-6所示。
图6-6 执行相同Shell
通过上述分析,对本次挖矿攻击过程大致概括如下,见表7-1:
表7-1 挖矿攻击步骤
序号 | 攻击步骤 | 风险利用点 | 攻击效果 |
---|---|---|---|
1 | 资产发现 | 暴露在互联网的ssh服务 | – |
2 | 弱口令 爆破 | 未配置多次失效锁定账户安全策略; 未对短时多次失败登录进行日志采集与分析 | 被成功入侵 |
3 | 挖矿 | – | 计算资源被抢占 |
4 | 回连C&C 服务器 |
网络出向访问控制不严格 | C&C回连成功,下载挖矿程序及爆破工具(若为其他攻击,攻击效果不可想象) |
5 | 部署后门 (2重) |
安全监测缺失 | 即使肉机修改口令,仍然可以被攻击者远控继续实施攻击 |
6 | 重复攻击 | 网络出向访问控制不严格 | 成为僵尸网络中的肉机,继续攻击其他计算机 |
安全界有句话“世界上只有两种系统,一种是已知被攻破的系统,一种是已经被攻破但自己还不知道的系统”,如何阻止网络攻击是每个安全从业者的职责。目前业界普遍认可纵深防御的理念开展网络安全防护工作,通过访问控制FW和网络技术进行安全域隔离,生产与非生产隔离;身份认证IAM进行权限管理、运维审计、双因素认证等;应用防火墙WAF和RASP等技术对应用侧威胁检测与阻断;网络入侵监测防御系统NIDPS对威胁进行识别与阻断;APT检测系统在流量侧进行风险预警;服务器侧威胁检测系统HIDS/EDR对服务器资产、安全配置、运行服务和webshell等情况进行排查;日志管理系统SIEM汇总收集各类型日志,通过场景化日志识别风险并告警;数据库审计系统检测异常访问、数据获取与系统运维行为;安全运营中心SOC对各类安全产品进行汇总,借助统计分析、机器学习等方式对告警进行聚合,进行精准告警并联动阻断;通过众多安全产品开展递进式、多维式的防御,经过安全人员的不断运营起到了良好的防御效果。
但是,这一套系统的投入对于企业来说不可忽视,考虑到ROI问题,通常在非生产环境的安全投入是指数级下降。这里建议,如果企业在非生产环境有互联网服务,一定要尽可能的与生产保持一致的防护水平,如果预算不足,至少在如下几点做好管控:
1) 做好资产管理
所有IP资产责任到人,互联网服务责任到人。至少每半年复核1次,这样安全管理员能够确定资产使用情况,责任人能够了解有人在进行监督,杜绝出现无人认领的资产。
2) 严格访问控制
对于提供互联网服务和访问互联网服务的服务器建议单独设置安全域,严格控制出向访问,建议互联网服务双向进行点对点控制。
3) 不在互联网开放高危端口
严禁在互联网开放21、22、23、44、1433、3389、3306、6379、60000、11211等端口,如必须开放,建议通过VPN方式接入,其中ssh建议改为密钥登录。
4) 做好口令管理
严禁任何服务的任何账户使用空口令、默认口令、简单口令,在技术支持的基础上应强制设置高复杂度口令。
5) 坚持漏洞管理
系统被入侵很大原因是漏洞没有及时修复,像今天还有企业存在“永恒之蓝”、“Struts2”旧版本漏洞,在业务系统具备高可用机制的情况下,应采取“积极”的态度进行漏洞修复,也就是及时漏洞修复真的影响了1台服务器,系统架构具有高可用机制,具备回退窗口,依旧不会对系统造成影响。
6) 采集异常日志
对操作系统、数据库、应用登录等敏感日志进行日志采集,针对短时高频失败、短时跨地域、单账号多地同时在线等敏感场景进行捕捉告警。
6、重视“人”的因素
不论是资产的管理还是防护工作的管理都会归集的对“人”的管理,只有将安全意识深入人心,安全的短板才会真正补齐。
7) 落实安全体系
安全工作是一项综合工作,如何“有效”且“全面”的开展,应该在“网安法”和“等级保护2.0”的基础上开展制度体系建设,通过“制度”指引“人”对“资产”开展“防护”工作。
8) 争取预算
安全工作讲究“感知力”(及监测能力),纵深防御每个阶段都有不同的监测与防御能力,单一产品不可能具有“全面”的监测能力,要想做到安全的全面防护,需要企业持续的进行人才培养和资金投入。
*本文原创作者:pualanswer,本文属于FreeBuf原创奖励计划,未经许可禁止转载