实战 | 网页挖矿分析

实战 | 网页挖矿分析

点击蓝字 关注我们

免责声明

本文章只用于技术交流,若使用本文章提供的技术信息进行非法操作,后果均由使用者本人负责。

前言

近日,收到设备告警,办公区有用户终端连接了公共矿池地址,本文对整个事件进行了大致描述,简单分享下分析思路。

分析思路

       发现告警后,进入终端查看sysmon日志发现dns解析记录和发起程序。

        进入浏览器查看历史记录,定位到该事件点访问的页面。

访问后发现该终端非常卡,进入资源管理器果然发现浏览器对cpu的资源占用特别高,开始怀疑是网页挖矿。

        由于系统太卡,先将该页面进程结束了,进入虚拟机进行访问,并限制进程的cpu占用方便后续排查。

限制该进程只允许1个处理器运行,降低cpu占用。

        继续搜罗相关的信息,进F12,查看该网页的源码和网络链接调用,确认该地址调用了这个公共矿池地址,并且还请求公共矿池地址的js文件,后面没有再发现其他相关的链接调用,先将js文件下到本地。

        眼细的朋友可能还发现了上面状态码的后面还带了“来自磁盘缓存”,这个是因为浏览器第一次访问的时候默认会将js文件缓存到本地,后面访问的时候直接读取本地的js文件,清理办法也很简单,进入设置中的 清除浏览数据>清除缓存文件 即可。

        言归正传,上沙箱,将刚刚的js文件先送进沙箱跑一下。

果不其然报毒了,根据里面反馈的有部分引擎标记是挖矿。

        打开js文件进行查看发现内容中是一段被混淆的代码

        先将pt中的值拿出来,规范下代码格式,尝试解读代码中的信息

可以看出它定义了一个名为 _BMCM 的全局变量,其目的是将一个经过base64编码和加密的代码进行解密和执行。具体流程如下:

定义了一个对象tf,包含三个方法:b64d用于base64解码,atob用于base64解码(兼容不支持window对象的情况),d用于解密字符串。

调用tf.d方法,传入两个参数:pt和p(如果有pp参数则使用tf.d(p,”p”)作为第二个参数),解密并执行代码。

解密的过程是先将p或者pp参数进行base64解码,然后再和另一个参数进行异或(^)运算,最后得到的字符串再进行eval执行。

这里用了两种办法尝试对密文进行解密:

方法一:

在第8、47、48行对代码进行修改

方法二:直接上工具(为什么不直接用这个?因为我是后面才知道的,写都写了)

        可以看出解密出来的结果还被混淆了,没办法,只能另寻他路,抓进程行为、抓流量齐刷刷一起上,但都没有收获。

        小编以为今天的文章就只能到这里了,实在是整不下去了,别问,问就是菜。这时身后大佬出来指路,让我在做个断点试试。

        逐步调试过程中,来到了一个新文件,看来这就是真正执行挖矿的代码了,接着往下看。

        这里定义了一个数组,其中包含两个元素,每个元素都是一个包含两个WebSocket URL的数组。通过这些WebSocket URL连接到矿池服务器,矿池节点如下:

ws://ws1.bmst.pw/ws, ws://ws2.bmst.pw/ws

    挖矿脚本允许自动调节线程数目

    这里还发现疑似挖矿的钱包

Cpass “8us4qdirnf894lj2”

        可以看到,这段代码是挖矿程序的内部函数_adjustThreads(),用于自动调整挖矿线程数

        这里定义了一个Miner对象的_onClose方法。当WebSocket连接关闭时,该方法会被触发。如果关闭代码(A.code)在1003到1009之间,则将重新连接重试次数设置为60,同时将等待重新连接的时间设置为当前时间加上60秒。然后,停止所有线程,清空线程数组和socket对象,并触发“close”事件。最后,如果启用了自动重新连接,则1秒后执行_startNow方法重新连接。

        可以看到这里启用了多个挖矿worker线程。

总结

        触发挖矿时,会在浏览器后台使用web worker 调用多个挖矿线程。通过WebSocket连接到矿池服务器,会迅速占用用户浏览器和电脑主机资源。会引起主机卡顿。Worker 0 worker 1 worker 2 worker 3……. 调用多个挖矿线程,使得主机CPU资源短时间内被占用过大。这也就解释了为什么wireshark抓流量都一无所获。

结语:

        本次挖矿事件不排除该网站被黑,不过从另一个角度考虑,可能是该公司为了盈利而采取的牟利手段。后来小编还发现该站点在谷歌浏览器能成功开启挖矿,但是火狐浏览器无法成功复现,具体原因不明,因为时间问题也只能分析到这里了。

最终处置方案:

1、封禁矿池地址并加入全流量设备监控

2、通知用户暂停访问该站点

3、清理浏览器缓存

4、告知站点所属公司该页面被植入挖矿脚本

IOC

文件HASH:

SHA256:b7015556187a6f85afe273e1beeea831d1cae7237831f6183777291c4275344a

MD5:cd2ae668775680c7dc697717591affae

SHA1:dfd7ee1b03a8d0cb4d0b9b388e5d2ebfca4998cc

矿池地址:

ws1.bmst.pw

104.21.57.121

172.67.190.93

http://bmst.pw/6034003×100.js

文章中的一些问题希望各位大佬不吝赐教,对于一些错误之处希望各位师傅多多指正!

 

公众号|A9 Team

作者|Safeside

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注