概述
"链治百病,药不能停"。时下各种挖矿软件如雨后春笋层出不穷,想把他们都灭了,那是不可能的,这辈子都不可能的。通常我们都忽略他们。但这个利用ngrok生成大量随机域名作为Downloader和Report域名,对抗安全设施阻断其域名,隐藏真实服务器地址的挖矿恶意样本成功的引起了我们的注意。
该恶意样本的主要特点是:
使用ngrok定期更换的随机域名作为Downloader和Report域名。
利用redis,docker,jenkins,drupal,modx,CouchDB漏洞植入xmr挖矿程序挖矿。
企图扫描以太坊客户端,盗取以太币,当前未实际启用。
企图感染目标设备上的js文件,植入CoinHive挖矿脚本浏览器挖矿。
动态生成挖矿脚本和扫描脚本。
该挖矿样本主要模块由Scanner脚本,Miner脚本,Loader构成。Scanner模块负责扫描和上报漏洞信息给Loader。Loader负责给存在漏洞的设备植入Scanner和Miner。Miner负责挖矿。
Ngrok
ngrok是一个反向代理,其核心概念是作为一个转发服务器,将公网请求转发到内网指定的端口上,让内网资源得以在公网上访问。其工作原理如下图:
ngrok使用方式:先去ngrok.io注册一个服务,然后在本地启动ngrok client,把流量转到内网端口,ngrok client端会获得服务端随机分配的ngrok子域名,通过这些子域名就可以从外网访问内网资源了。免费模式下ngrok client可以有一个进程,一个进程可以有4个tunnel,每个tunnel会获得一个子域名,并且每次重启client重新获得每个tunnel对应的子域名。
域名存活周期
为了方便直观展示其所用域名的存活周期,我们绘制了该挖矿样本最近48小时所使用的各个域名我们能成功从该域名上下回来样本的次数的Heatmap。从图上可以看出该样本周期性更换其使用的域名,所使用的域名存活时间不超过12小时。实际上从我们的数据看该挖矿样本最早出现在6月下旬,域名切换规律一直如此。
Scanner
由Loader植入,植入时生成待扫描IP范围,Report以及Downloader域名硬编码在Scanner脚本中。具体执行流程:
下载扫描过程使用工具zmap,zgrab,jq
下载以太坊客户端geth扫描payload
漏洞扫描,使用zmap扫描端口开放,然后用zgrab做应用层扫描,当前该恶意样本扫描6379/2375/80/8080/5984端口,查找 redis,docker,jenkins,drupal,modx,couchdb服务
上传扫描结果
删除痕迹退出
Miner
Loader植入阶段生成Report,Downloader域名硬编码在Miner脚本中:
执行流程:
下载运行fc,是个全局标记,用来区分感染状态的,如果样本成功运行,说明感染成功。如果运行失败,记录错误信息,用来上报给Report。
杀死竞争对手
生成旧版本的自己的Report信息,包括进程名称,矿机MD5,矿机文件路径。用来上报给Report。
杀死旧版本的自己
下载daemon(进程管理工具),nginx(矿机)运行。
查找/etc/hosts中是否有其他矿工域名,如果有,将"127.0.0.1 localhost"写入/etc/hosts,用来清空其他矿工快速域名解析记录
清除非自己的crontab任务
在当前目录下的js脚本中插入CoinHive挖矿脚本, 感染肉鸡上的js文件。或许这是个bug,因为当前目录是其工作目录,下并没有js文件。
上报矿机运行信息
矿机运行成功,报告矿机进程ID,感染设备IP ID,CPU数量,感染设备所用漏洞,当前用户名。
矿机运行失败,报告错误信息, 包括感染结果,旧版本矿机运行信息(进程名称,矿机MD5,运行文件路径), crontab错误信息等
挖矿配置如下:
IoC
MD5
曾经使用过的Loader IP
领取专属 10元无门槛券
私享最新 技术干货