11月08, 2016

乌克兰电力事件综合报告

核心安全事业部-追日团队

一、 概述

2015年底 ,乌克兰一家供电公司遭到黑客攻击,直接导致22万户用户失去供电,造成了巨大损失。随后,美国政府协助乌克兰政府调查此次事件。2016年1月,ESET公司公布了事件中使用的部分恶意代码,并将攻击源头直指具有俄罗斯背景的沙虫组织。 此次事件在电力行业和安全行业都引起了巨大的轰动,整个事件中,攻击者并没有使用很高端的攻击技术,比如没有使用0Day漏洞。仅仅使用常规攻击方式:Office文档内嵌宏脚本就攻入了目标系统,相对于震网、方程式这种成本高昂的核武器级别APT攻击,乌克兰电力事件可谓使用低成本达到目标的经典案例。 自从震网事件被曝光之后,全世界都开始关注国家基础设施的安全。中国工信部在2011年9月《关于加强工业控制系统信息安全管理的通知》,2016年11月又发布了《工业控制系统信息安全防护指南 [1]》,都表明了我国已经将工控安全提升到了国家安全的高度。

二、 乌克兰电力事件攻击事件回顾

背景

2015年12月23日,乌克兰一家区域配电公司Kyivoblenergo遭受到第三方非法入侵公司电脑和SCADA系统。下午3点35分,7个110KV的变电站和23个35KV的变电站断开连接长达3个小时,导致伊万诺-弗兰科夫斯克地区将近一半的家庭在圣诞节前夕经历了数小时的电力瘫痪[2] 。起初,Kyivoblenergo认为约80000用户受灾,后发现共有三种不同配电站的能源公司遭受攻击,造成各领域约225000用户失去动力[3]。

攻击事件发生不久后,乌克兰政府官员声称电力中断是由网络攻击引起的,并指责俄罗斯国家安全部门应为此事负责。 [4]乌克兰的调查人员、私人公司以及美国政府,向乌克兰政府提供援助,对攻击事件进行分析,以确定故障的根本原因。

虽然乌克兰攻击事件实际发生于2015年12月底,而针对乌克兰“电力门”事件的主要报道及分析结果则出现于2016年第一季度,并在很长一段时间能保持着较高关注度。由于此事件是针对电力设备的攻击,对于国家关键基础设施的安全性具有非比寻常的意义,可以说是一次具有里程碑意义的攻击事件。

2015年12月24日,乌克兰新闻媒体TSN最早发声报道称,由于黑客攻击,伊万诺-弗兰科夫斯克地区一半断电。随后,无数来自《华盛顿邮报》、SANS研究所、纽约时报、ARS Technica、等新闻没提和独立博客,以及多个安全企业和安全组织都跟进了相关系列事件,并不断为这起针对乌克兰电力系统的网络攻击补充细节。

2016年1月3日,安全公司ESET最早披露了本次事件中的相关恶意代码,并发表文章称,乌克兰电力部门感染的是恶意代码BlackEnergy。BlackEnergy被当作后门使用,攻击者能够利用它来远程访问并控制电力控制系统,同时在乌克兰境内的多家配电公司设备中检测到KillDisk,KillDisk的作用是破坏数据来延缓系统的恢复。在其他服务器还发现一个添加后门的SSH程序,攻击者可以根据内置密码随时连入受感染主机[5]。

2016年1月9日,美国工控系统安全组织SANS ICS发布报告对乌克兰变电站SCADA系统被攻击过程进行了分析和猜测。2016年1月15日,根据CERT-UA的消息,乌克兰最大机场基辅鲍里斯波尔机场网络遭受BlackEnergy攻击。2016年1月28日,卡巴斯基分析人员发现了一种新型的针对乌克兰的BlackEnergy文档类攻击,不像以前采用Excel文档进行攻击,此次采用的是Word文档,该文档通过提及乌克兰“Right Sector”反对派政府来达到迷惑的效果,受害者包括乌克兰电视台STB。 [6]2016年2月16日,趋势科技安全专家在乌克兰一家矿业公司和铁路运营商的系统上发现了BlackEnergy和KillDisk样本。2016年2月25日,美国国土安全部发表了一篇名为《IR-ALERT-H-16-056-01》的正式报告。报告称,三个乌克兰配电变电站遭受了协同网络攻击,均在30分钟内被攻陷。攻击总共影响225000用户,迫使能源公司启动手动操作模式[7]。

这里我们需要关注一点,包括BlackEnergy和KillDisk在内的所有工具和技术,都是用来使攻击有效或拖延修复时间,而非造成电力中断的罪魁祸首。事实上,电力中断是由攻击者通过直接交互控制SCADA系统造成的。

三、 相关攻击事件综合分析

1) BlackEnergy介绍

针对乌克兰电力的攻击活动中所使用的主要恶意软件名为BlackEnergy,不过具体来讲,BlackEnergy更像是一辆用于运输武器的车辆,而非武器本身。

BlackEnergy木马由著名黑客Cr4sh创造。2007年,Cr4sh声称不再开发这款木马,并且以700美元的估价出售木马的源码。2008年俄格冲突期间,一些未知黑客针对格鲁吉亚发动DDOS攻击,BlackEnergy被用于创建僵尸网络,并在随后的几年里持续地进行DDoS攻击。随着时间的推移,这款恶意软件从开始的单功能恶意软件,逐渐演变成一款影响较大的复合型恶意软件,能够支持各种插件,插件能够基于攻击的意图进行组合以提供必要的功能,已被不同黑客团伙用于不同的用途,如有些团伙利用它发送垃圾邮件、另一些用来盗取银行凭证。

2014年10月,工业控制系统网络应急响应小组(ICS-CERT)的研究人员警告ICS和SCADA中存在高危漏洞,并发现攻击者使用BlackEnergy2攻击SCADA HMI(人机接口)系统。恶意软件的新插件可以利用西门子SIMATIC WinCC的漏洞进行攻击。11月11日,西门子发布了SIMATIC WinCC系统(西门子过程监视系统)的软件更新,修复了两个高危漏洞,其中一个是未授权远程代码执行漏洞[8]。

在2015年末乌克兰电力攻击事件中,攻击者所使用的工具是BlackEnergy 3的变种。

这里,我们对恶意软件BlackEnergy的发展演变过程和与其有关的重要事件做一个总结,如下表:

时间 BlackEnergy进化及重要事件
2007年 Arbor网络公司第一次披露BlackEnergy,为一个在DDOS攻击中创建僵尸网络的工具,该版本称之为“BlackEnergy 1”
2008年 俄格冲突期间,一些未知黑客针对格鲁吉亚发动DDOS攻击,BlackEnergy被用于创建僵尸网络
2009年 黑客利用BlackEnergy盗取美国Citibank数千万美元
2010年 戴尔旗下安全公司SecureWorks发布配备Rootkit的变种,该版本称之为“BlackEnergy 2”
2010.10.25 ESET virusradar将BlackEnergy收录进病毒库
2010.12.14 安装程序出现,大部分命名为regedt32.exe
2011.07.23 ESET virusradar结果显示,BlackEnergy在全球活动达到高峰
2013.04.09 首个绕过Windows UAC的安装程序出现,大部分命名为msiexec.exe
2013.10.14 BlackEnergy支持64位操作系统
2014.09 F-Secure发现为乌克兰政府量身打造的BlackEnergy新变种,该版本称之为“BlackEnergy 3”
2014.10 有报道称,BlackEnergy开发团队,疑似沙虫组织,针对北约、乌克兰和波兰政府、欧洲各重要工业攻击进行了攻击
2014.10 ICS-CERT警告ICS和SCADA中存在高危漏洞,并发现攻击者使用BlackEnergy 2攻击SCADA HMI(人机接口)系统
2014.11 卡巴斯基称,BlackEnergy2已经可以对路由器、Linux系统、Windows系统发起攻击,且能够攻击Cisco思科设备和ARM及MIPS平台
2015.11 乌克兰一家矿业公司和一家大型铁路公司的系统中发现BlackEnergy和KillDisk
2015.11.09 CERT-UA首次将BlackEnergy和KillDisk关联在一起。当时正值2015乌克兰大选,多家新闻媒体公司被攻击,许多视频和文档资料被毁
2015.12.23 乌克兰电网被攻击,引发关注
2016.01.15 CERT-UA通报称乌克兰最大机场基辅鲍里斯波尔机场遭受BlackEnergy攻击
2016.01.28 卡巴斯基研究人员发现新型针对乌克兰的BlackEnergy 文档类攻击,使用Word攻击乌克兰电视台STB

2) BlackEnergy版本分析

A. BlackEnergy1

BlackEnergy1最早在2007年被Arbor Networks发现 [9],是一个基于Web的DDoS工具。主要被俄罗斯黑客使用攻击本国的目标。

其中,BlackEnergy1的“flood”命令可以发起多种DDoS攻击。

参数见下表

参数 说明
icmp ICMP Ping 洪水攻击
syn TCP SYN 洪水攻击
udp UDP Traffic 洪水攻击
http HTTP GET 请求洪水攻击
data 数据包洪水攻击
dns DNS请求洪水攻击

BlackEnergy1的C&C服务器基于php+MySql,客户端通过HTTP和C&C通信,使用Base64编码。

在2008年俄格冲突期间,BlackEnergy1曾经被用来攻击格鲁吉亚。

B. BlackEnergy2

从2010年开始,BlackEnergy被重新开发,升级成BlackEnergy2,改为模块化结构,增加了自定义插件,提供了攻击路由器,发起DDoS攻击,下载执行远程文件,自更新,自删除等功能。主要通过钓鱼邮件携带恶意附件传播。

与BlackEnergy1相比,新版本增加了驱动,通过驱动向svchost.exe注入DLL,连接C&C,下载攻击模块并启动。 image.png

Figure 1 BlackEnergy2流程图

核心DLL通过导出函数提供下列服务:

  • 配置文件的操作函数
  • 文件的下载、执行
  • 内核对象的保护(隐藏进程等)
  • 和内核模块、服务端的通信

C. BlackEnergy3

2014年,F-Secure实验室发现了一个新的变种,与BlackEnergy2相比,该变种没有使用驱动模块,并且增加了通信过程的加密,安全界称其为BlackEnergy3。在2014年曾被用来攻击乌克兰和比利时。

BlackEnergy3通过Dropper释放,启动FONTCACHE.DAT文件,FONTCACHE.DAT 有两种:一种是调用winpcap的DLL收集信息。另外一种是一个loader程序,从自身解密,内存加载BlackEnergy3主程序。

下面我们将详细分析下BlackEnergy3的执行过程。

1 BlackEnergy3 Dropper

1.1 释放文件

在%APPDATA%目录下创建FONTCACHE.DAT文件,将自身数据解密写入该文件(DLL),并设置生成时间为系统文件svhost.exe的时间,以达到伪装目的。

image.png

Figure 2创建FontCache.dat文件

image.png

Figure 3写入FontCache.dat文件

1.2 设置自启动

首先通过调用SHGetSpecialFolderPathW函数获取开机启动路径(C:\Documents and Settings\User\Start Menu\Programs\Startup),接着通过GetAdaptersInfo函数获取GUID(842D6D18-E859-xxxx-xxxx-EECD938A1945),最后组成xxxx.lnk文件,并将其链接指向rundll32.exe FONTCACHE.DAT #1,以达到开机自启动上述释放的DLL。

image.png

image.png

image.png

Figure 4自启动快捷方式

1.3 通过rundll32.exe的方式启动该DLL, 并调用#1函数 具体方式是通过shellExecuteW打开其链接文件,以达到调用的目的。

image.png

Figure 5 启动DLL

1.4 调用cmd.exe删除自身 通过执行批处理删除自身

image.png

Figure 6 自删除

2 FONTCACHE.DAT (winpcap版本)

概述:基于WinPcap实现网络嗅探,并将收集到的信息传至C&C,具体传回的信息根据上层传入参数。

2.1 设置HKEY_CURRENT_USER/SOFTWARE/Microsoft/Internet Explorer/xxxx注册表下的一些属性值。样本中新建了PhishingFilter、PopupMgr、NewWindows等项,目的是通过设置属性值来禁用IE浏览器的一些提醒功能。如通过设置/"Check_Associations/" = no达到点击IE 图标不用询问是否默认浏览器的目的。

2.2 通过API函数(如GetComputerNameA)获取系统名称,系统版本等信息,后面会将这些信息进行上传。

image.png

Figure 7 获取计算机名称

2.3 创建线程,实现RPC服务端,监听1234端口,用于和插件通信。

image.png

Figure 8 创建RPC服务器

2.4 向C&C回传收集到的信息。

image.png

Figure 9 构建回传信息

2.5 将上述收集到的信息,进行连接,并赋值到body后使用base64进行加密。后添加上Content-Type: application/x-www-form-urlencoded"等内容,post到服务器http://5.149.254.114/Microsoft/Update/KC074913.php。

image.png

image.png

Figure 10 回传信息到C&C

3 FontCache.dat

概述: 前三步和winpcap版本大体相同,不同的是,此版本通过IWebBrowser2 Com组件和C&C通信,然后根据服务器返回的命令执行不用的功能

image.png

Figure 11 C&C命令处理

4 情报窃取插件

4.1 收集用户信息 用systeminfo命令获取系统相关信息

image.png

image.png

Figure 12 获取系统信息

获取系统登录相关信息

image.png image.png image.png image.png Figure 13 获取系统版本信息

获取IE代理

image.png

Figure 14 获取IE代理设置

获取安装软件列表

image.png

Figure 15 获取安装软件列表

用tasklist /V命令获取计算机上所有进程的详细信息 image.png

用ipconfig -all命令获取计算机当前的TCP/IP配置

image.png

用netstat.exe -ano命令获取计算机上的端口信息 image.png

用route print命令获取路由表信息

image.png

用ping www.google.com命令检查网络连接状态 image.png

通过注册表获取邮件、浏览器、即时通讯客户端信息 image.png

收集TheBat!邮件客户端的账户密码信息

image.png

Figure 16 收集TheBat!客户端账户和密码

通过signons*.txt 和signons.sqlite文件收集Mozilla Thunderbird,Firefox,SeaMonkey,IceDragon的用户名密码信息

image.png

image.png

image.png

image.png

Figure 17 收集浏览器用户名和密码

通过Login Data文件收集Google Chrome,Chromium,Comodo Dragon,Xpom,Nichrome,QIP Surf,Torch,YandexBrowser,Opera,Sleipnir的用户名密码信息

image.png

Figure 18 收集浏览器用户名和密码

获取Outlook和Outlook Express的账号密码信息

image.png

Figure 19 获取Outlook账户和密码

获取Internet Explorer的版本,保存的用户名和密码

image.png

image.png

Figure 20 获取IE版本,保存的用户名和密码

获取Windows Live、远程桌面,其它登录凭证的用户名密码信息

image.png

Figure 21 获取Windows Live,远程桌面等用户名和密码

4.2 将收集到的信息通过RPC(ncacn_np)返回给主程序

image.png

image.png

四、 乌克兰电力事件详细分析

1. 诱饵文档

诱饵文档分两种,一种使用宏释放exe,另外一种使用CVE-2010-3333漏洞释放exe.由于释放的文件相同,我们以第一种为例分析。

第一种诱饵文档文件格式为excel文档,内嵌有VBA宏。当宏功能启用时,打开文档会自动触发宏脚本。

image.png

Figure 22诱饵文档内容

文档包含有乌克兰语的提示,提示用户启用宏功能。

image.png

Figure 23诱饵文档内嵌VBA

VBA宏代码中定义了一个全局数组a,当触发workbook_activate事件(即工作簿切换)时,通过26个子函数对数组a进行填充,内容为PE文件。然后把数组中的数据保存到 %TEMP%\vba_macro.exe文件中,并且启动exe,解密后释放BlackEnergy。

image.png

Figure 24释放PE的VBA宏代码

2. SSH Backdoor

Dropbear [10]是一款开源SSH服务器程序,恶意软件作者修改了源码文件中svr-authpasswd.c 的代码,增加了固定密码“passDs5Bu9Te7”和固定的公钥,使得作者可以通过预先设置的密码直接连接SSH服务器。

image.png

Figure 25内置密码

image.png

Figure 26内置公钥

这个SSH Backdoor由一个VBS脚本启动,在6789端口等待连接。

image.png

Figure 27启动SSH Backdoor的VBS

3. KillDisk

KillDisk是BlackEnergy3的另外一个插件,作用是清除磁盘上的文档以及破坏磁盘导致系统不能启动。KillDisk分为两个版本,一种会立即执行清除操作,另一种会延迟一定的时间后再进行破坏操作,我们以后一种为例分析。

样本首先调用"Wow64DisableWow64FsRedirection"禁用调用线程的文件系统重定向,接着提升进程权限,然后检测命令行参数,根据不同的参数执行不同的操作。

1."LocalService"参数

调用"StartServiceCtrlDispatcher"注册服务,服务名"AppMgrt",然后退出。

2. 时间数值参数

获取命令行参数并转换为数值;删除注册表项"Software\MicrosoftApplicationMgr";获取当前系统时间;创建注册表项"Software\MicrosoftApplicationMgr\Config",将当前时间+参数数值*60写入;接着调用"ShellExecute"通过参数"/c sc start AppMgrt"启动AppMgrt服务。

3. AppMgrt服务

a) 获取"Software\MicrosoftApplicationMgr\Config"中存放的时间,创建线程1进行延时操作。

image.png

image.png

b) 创建线程2,在线程2中根据两个全局GUID创建事件对象。

image.png

c) 破坏硬盘扇区,通过" \.\PhysicalDrive0-9 "打开前10块磁盘,获取磁盘扇区大小,将磁盘前256个扇区用0填充。

image.png

Figure 28遍历10块硬盘

image.png

Figure 29填充磁盘前256个扇区

d) 删除系统日志,加大后期取证难度。

image.png

e) 结束"sec_service"服务进程,删除服务并破坏sec_service.exe文件。

image.png

关于sec_service.exe,有两种可能的情况,一种是sec_service来自Eltima Software软件,一种串口转网线接口的连接器。可能被SCADA系统用来控制硬件。

另外一种可能的情况:sec_service.exe是属于ASEM Ubiquity [11],是一款Windows平台上ICS系统使用的远程协助软件,类似于TeamViewer,可以为工控网络提供安全的VPN连接、远程桌面、文件交换等服务。如果是这种情况的话,那么这里结束掉sec_service.exe进程可能是为了阻止以后的远程连接,防止攻击被发现。

image.png

Figure 30 ASEM Ubiquity软件介绍

f) 创建线程销毁文件,将所有文件按后缀名分类,先销毁指定后缀文件,再销毁其他文件。

image.png

Figure 31 销毁文件

g) 结束不在下面列表中的进程。

image.png

Figure 32 进程列表

进程列表里大部分都是Windows系统进程,结束其他进程的目的是解除文件占用,最大化破坏用户的文件。

有意思的是,这个进程列表里的komut.exe是土耳其语,翻译成英文是command.exe。从这里可以看出,BlackEnergy可能被用于攻击土耳其 。

h) 覆盖删除文件

在结束进程后会再次执行销毁文件操作,销毁过程为先删除文件,再创建同名文件,写入相同大小的随机值。相比直接删除,这样将大大加大磁盘恢复的难度。

image.png

Figure 33 覆盖删除文件

i) 创建线程,销毁后缀为 ".dll.exe.xml.ttf.nfo.fon.ini.cfg.boot.jar"的文件。

image.png

j) 关闭计算机。

image.png

如果没能成功关机,则先结束"csrss.exe"、"smss.exe"、"lsass.exe"进程,然后等待60秒。

image.png

如仍未关机,则结束Figure 12中的进程,之后等待3秒,结束自身进程。

至此,整个磁盘破坏过程完成,由于MBR被覆盖,系统将不能正常启动。即使能使用WinPE从光驱或USB引导,系统的关键文件也已经被破坏,攻击者已经达到了目的。

4. BlackEnergy3和BlackEnergy2的关联

BlackEnergy2中实现持久化的方式是将Dll释放到%AppData%目录,在启动目录添加快捷方式指向这个Dll,其中Dll名称为FontCache.dat,无独有偶的是,BlackEnergy3也使用了相同的方式,而且文件dll名称也是FontCache.dat。

BlackEnergy2实现自启动:

释放dll文件FONTCACHE.DAT到%USERPROFILE%\Local Settings\Application Data\目录

image.png

为FONTCACHE.DAT创建快捷方式并将快捷方式添加到启动目录,实现开机运行

image.png

BlackEnergy3自启动快捷方式:

image.png

五、 关于沙虫APT组织

1. 背景概述

沙虫组织(又名Quedagh)最早在2009年被发现,主要攻击目标为北约,乌克兰,法国,波兰等欧洲国家。该组织技术实力雄厚,具有发起0Day攻击的能力。 安全界一致认为作者来自俄罗斯。

2. 全世界范围的受影响情况

1) 地域分布:

image.png

2) 行业分布:

工控,能源,政府,媒体

3. 沙虫组织拥有0Day攻击的能力

2014年6月,沙虫组织在对波兰能源公司的攻击中使用了2013年被修复的nDay漏洞(CVE-2013-3906)。在2014年8月对乌克兰的攻击中使用了Windows OLE漏洞(CVE-2014-4114 )[12],此漏洞在2014年10月才被微软修复。证明了该组织具有挖掘0Day漏洞和发起0Day攻击的能力。  

六、 总结

乌克兰电力事件作为一次成功的网络战,以较低的成本就摧毁了目标的电力设施。相比震网这种动辄使用数个0Day漏洞、投资巨大、研发时间耗时数年的APT事件来说,乌克兰电力事件给人们一个提醒:入侵目标并不一定需要很高端的技术水平和高额成本。只要找到其中一个薄软环节,就能渗透整个内网,达到攻击目的。

乌克兰电力事件之所以能成功,一个关键点在于工控网络没有和互联网彻底隔离。 管理员可能为了远程管理和SCADA软件升级打补丁的方便,没有禁用互联网访问,这将导致可能被黑客攻击。而网络隔离并不是一个新概念,实施一直是工控业的难题。单纯的靠理念和技术并不能保证系统的绝对安全,管理和运维人员的安全意识也同样不可忽视。

工业4.0时代带来的不仅仅是生产力的提升,还有安全的挑战。相比于传统工业,工业4.0时代的生产设备和产品都会联网,这将暴露更多的攻击面给黑客。而中国作为世界制造业的中心,势必面临巨大的挑战。这意味着无论是工业和安全行业,都面临着更大机遇和挑战。

  1. http://www.miit.gov.cn/n1146285/n1146352/n3054355/n3057656/n3057672/c5338092/content.html

  2. http://ru.tsn.ua/ukrayina/iz-za-hakerskoy-ataki-obestochilo-polovinu-ivano-frankovskoy-oblasti-550406.html

  3. http://www.oe.if.ua/showarticle.php?id=3413

  4. http://www.ukrinform.net/rubric-crime/1937899-russian-hackers-plan-energy-subversion-in-ukraine.html

  5. http://www.welivesecurity.com/2016/01/04/blackenergy-trojan-strikes-again-attacks-ukrainian-electric-power-industry/

  6. https://securelist.com/blog/research/73440/blackenergy-apt-attacks-in-ukraine-employ-spearphishing-with-word-documents/

  7. https://ics-cert.us-cert.gov/alerts/IR-ALERT-H-16-056-01

  8. http://www.siemens.com/cert/pool/cert/siemens_security_advisory_ssa-134508.pdf

  9. http://atlas-public.ec2.arbor.net/docs/BlackEnergy+DDoS+Bot+Analysis.pdf

  10. https://github.com/mkj/dropbear

  11. http://www.asem.it/en/products/industrial-automation/remote-assistance/ubiquity/

  12. https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-4114

本文链接:https://blogs.360.cn/post/APT-C-13.html

-- EOF --

Comments