# 关于黑暗力量（BlackEnergy）的一点思考

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-01-28T04:14:00Z
Canonical: https://wepostx.com/topics/55

> 乌云历史资料归档
>
> **原始作者：** 腾讯电脑管家
> **原始编号：** superkieran-wooyundrops:1021
> **原始发布时间：** 2016-01-28 12:14
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 背景

在乌克兰电力系统被攻击之后，最近又爆出该国机场也遭受网络袭击。罪魁祸首都是黑暗力量（BlackEnergy），BlackEnergy是何方神圣？为何有如此神通？BlackEnergy是最早出现在2007年的一套恶意软件，后来出现了专门针对乌克兰政府机构打造的分支。BlackEnergy并不是最近兴起的新型恶意软件，但时至今日仍然站在潮头兴风作浪，这点值得我们关注。

# 0x01 攻击简述

下边简要描述一下BlackEnergy的攻击过程。XLS文档通过邮件可以方便传播，文档中包含的宏代码会dropper一个vba_macro.exe，这个exe又会dropper两个东西。其一.dat结尾的文件是一个dll，而启动目录下的快捷方式是使用rundll32来运行dll中序号为1的导出函数。
rundll32拉起恶意dll之后，会使用进程外com的方式的去启动IE进程，然后使用IE进程去连接远程服务器，下载恶意软件组件。然后又通过安装驱动和apc注入，在系统模块中执行恶意代码，与远程服务器通信，根据远程服务器的指令以及拉取下来的恶意程序执行相应攻击。

![原文图片](/media/2016/06/7693b35b8ad2a3735948bc87d04fc8f8)

# 0x02 样本危害

通过宏病毒入侵系统，留有后门，后续攻击组件清空关键系统文件，使得计算机无法正常工作，达到破坏目的。

# 0x03 重点分析

### 1. FONTCACHE.DATA文件分析
FONTACACHE.DATA是由之前的vba_macro.exe来释放，FONTACACHE.DATA是一个dll文件，通过下面这条命令运行起来。C:\WINDOWS\system32\rundll32.exe "C:\Documents and Settings\Administrator\Local Settings\Application Data\FONTCACHE.DAT",#1可以看到调用dll导出的序号为1的函数。下图为导出函数表。

![原文图片](/media/2016/06/bc3cefbbfc6f760445d0415b208effa8)

运行后，通过virtualAlloc函数以及拷贝指令脱壳，在0x10010000地址处，写入了一个另外一个dll，暂称为primarydll。

![原文图片](/media/2016/06/db639f2077e52c1d57ff5fee4a4c64c1)

程序最终会执行到primarydll的入口处，primarydll的入口处代码，会执行sub_100122B6()函数，查看此函数的代码。

![原文图片](/media/2016/06/443fba3c40e535abb1c1361ba0a20573)

首先会设置一系列IE注册表相关的值，然后启动一个线程。查看线程函数地址。

![原文图片](/media/2016/06/9fbb43ff4dfe8f5baff272ec3c966462)

通过三个函数注册RPC服务，开启监听。这样中毒电脑就可以接受黑客的控制。接着往下走，样本会对NTUSER.LOG文件进行操作。随后便来到一个while true中。

![原文图片](/media/2016/06/3366ab09a013ca84dee2cfb6fec9a805)

在循环中，会调用sub_10012740()函数，静态分析此函数，可以看到样本在构造了http请求相关的字段后，通过CoCreateInstance来启动IE，去下载可执行文件。具体的url为：http://5.149.254.114/Microsoft/Update/KC074913.php(已经失效)

![原文图片](/media/2016/06/eebcc4ab5df2ebe8cef58c7860eda4ac)

### 2. xxx.sys驱动分析
恶意样本实际运行时创建的是一个随机名字的驱动文件，在此以xxx.sys代替。由于驱动加了壳所以主要通过动态调试来分析。首先进入svchost的进程的上下文，以便把分配好的内存映射到ring3的地址空间。

![原文图片](/media/2016/06/ca08d340c7aed226796d7b81eb9436ae)

初始化APC，从下图中可以看到 KeInitializeApc的NormalRoutine被设置为0x00c453cc

![原文图片](/media/2016/06/3dd9a87232ae4b68b5392fa7dc0b8a3e)

插入刚才初始化的APC

![原文图片](/media/2016/06/a02617cc91609d80753dfe23070aa600)

svchost执行到0x00c453cc的情况

![原文图片](/media/2016/06/12ce03ec84507770a8d8648b0acc98f1)

从该地址向回查找可以看到这是实际上是一个PE

![原文图片](/media/2016/06/dda4144543fe1cc514a4b694a16bbd0a)

而偏移0x53cc就是这个dll的入口点

![原文图片](/media/2016/06/5205b18f162d15a330c69ba0f1b8ffed)

至此可以看出xxx.sys先将自己的dll写入svchost的地址空间，然后通过插入apc使自己的代码执行起来。

### 3. Killdisk样本分析
将自身复制到系统盘windows目录下,重命名为svchost.exe文件，BlackEnergy的作者还真是对svchost情有独钟。

![原文图片](/media/2016/06/fff82e936a066b8467ce8d4a94089dc2)

病毒创建一个名为Microsoft Defender Service的服务，使用该名称用来欺骗用户，看似正常的系统安全服务程序，通过该服务，启动病毒拷贝自身到Windows目录下的svchost.exe文件,启动命令行是svchost.exe -service。
拷贝自身到windows目录下的代码:

![原文图片](/media/2016/06/e429ef80df17629918c9a8da9a0a559a)

创建服务代码:

![原文图片](/media/2016/06/c8e5408b2b13ce3e3f48a42c85776e39)

创建并启动服务成功：

![原文图片](/media/2016/06/5fa10fd6c92de4b21c6c5f74f1287b39)

调整进程令牌，提升进程权限，使病毒程序具有关机和修改系统目录文件的权限。

![原文图片](/media/2016/06/8be20458a783da329499135944426f84)

![原文图片](/media/2016/06/8494a42c2bdee4aa964af6594275c70b)

执行病毒服务函数:

![原文图片](/media/2016/06/17c6ef638332d3345c9076de9aaa4ecb)

打开主硬盘PhysicalDrive0，将硬盘前2560个扇区的数据全部清零，破坏硬盘MBR和文件分配表等系统启动的核心数据。
打开主硬盘设备:

![原文图片](/media/2016/06/374fa076d642fa02d42189118abd6275)

从MBR扇区开始，循环执行256次，清除256个扇区的数据:

![原文图片](/media/2016/06/004e74397eb4e33f249b53276936eff6)

以上操作一共执行了10次，10*256共计2560个扇区的数据
从根目录开始遍历磁盘目录下的指定类型的文件,创建多个线程,将遍历到的指定类型的文件内容全部清0。
病毒主要清除的文件类型列表:

![原文图片](/media/2016/06/0963f80993477bb9468c2c8f12d4593c)

创建新线程,开始遍历文件:

![原文图片](/media/2016/06/6593036f34033adf50f786b5fa5c3833)

扫描所有指定类型的文件:

![原文图片](/media/2016/06/d9b22ef3b453e9c6622ba203a1de5b36)

![原文图片](/media/2016/06/3ec5c044c33eed79ba68029997a30904)

![原文图片](/media/2016/06/e44cdb2f08a2ef4b8696a6984383c18e)

打开文件，将文件内容全部填充为0:

![原文图片](/media/2016/06/2af5527814a4f94d3728d5863087540b)

WriteFileZeroByte函数内容:

![原文图片](/media/2016/06/1208c7fc398ebc23e488de53b736ee50)

终止系统进程lsass.exe和wininit.exe,并且记录日志，通过执行shutdown命令，重启电脑，由于系统MBR、文件分配表等信息都被破坏，系统重启后奔溃，无法修复
终止lsass.exe进程:

![原文图片](/media/2016/06/1ee1089726c4bb191667ae474253f4c9)

终止wininit.exe进程:

![原文图片](/media/2016/06/cb21d6b9a1e675d067d869bfb07ecc2c)

执行shutdown命令，重启系统

![原文图片](/media/2016/06/8c6574e72d118131937202dee49596f4)

由于系统关键文件被清空，导致重启后无法正常工作，整个攻击流程攻击完成。

# 0x04 防御思考

云端拉黑md5，杀毒引擎增加静态特征，IDS、IPS等系统上封住已知的远程服务器ip或者url，如果这些就是我们全部防御策略的话，那么下一次当我们的安全产品面临类似于BlackEnergy这样的攻击的时候，注定是脆弱的。
以攻击的第一步XLS为例，即使不使用office 0day，简简单单的宏病毒就可以达成目的。在这个入口点的防御上，使用动态分析要比静态扫描合适一些的。对于宏脚本加密的样本来说，不停地变换加密算法对静态扫描造成了太大的干扰，而动态分析技术则无惧加密变形等对抗手段。
这是哈勃文件分析系统（[http://habo.qq.com/](http://habo.qq.com/)）对攻击源头的xls文件的分析结果。

![原文图片](/media/2016/06/b2e2b047d5eb686068cfaaf5ca08caf9)

![原文图片](/media/2016/06/44192d3be5fed0aa4d6555659ed52b36)

这是哈勃对第一个dropper文件vba_macro.exe的分析结果。

![原文图片](/media/2016/06/14cc8215b620d6ccf43e98b55f983980)

这是哈勃对伪装wordpad释放并加载驱动样本的分析结果。

![原文图片](/media/2016/06/8f89f1aca6f833d4182a74f8bda87ed8)

这是哈勃对killdisk恶意样本的分析报告

![原文图片](/media/2016/06/33f80843fea635dd9da7ae6249ec133d)

样本加壳，数据加密已经成为黑客和木马作者的必修功课，在这种情况下传统的静态扫描越来越难以独自扛起系统防护的大旗。动态行为分析很可能成为一个备选的解决方案，即使是因为用户体验的因素而采取异步分析，也能为威胁感知和威胁情报提取提供重要帮助。
哈勃动态分析系统还在摸索中前进，但在不久的将来，类似的动态分析系统很有可能成为企业安全防护系统中一个重要的环节。

## Replies
