事件综述
Ukrenergo是乌克兰国内的主要能源供应企业,年1月17日晚,该公司经历了一次供电故障,影响到基辅附近诺威佩特里夫茨村的北部变电站自动化控制系统,该停电事故主要影响的范围是基辅(乌克兰首都)北部及其周边地区。
停电事件发生后30分钟,Ukrenergo工程师将设备切换为手工模式,并开始恢复供电;75分钟后完全恢复供电。
年1月18日上午,Ukrenergo负责人VsevolodKovalchuk在Facebook上发布信息描述了上述经过,并称本次停电的原因可能是设备故障,也可能是由于网络攻击。
针对本次停电事件,绿盟科技安全团队响应如图1所示:
图1绿盟科技安全响应
历史回顾
乌克兰电网近期遭受的攻击事件如图所示。绿盟科技安全团队通过对恶意代码的分析发现本次事件的攻击者是Telebots组织,该组织与BlackEnergy组织有关。
图乌克兰电网受攻击历史
电力系统简介电力系统是由发电、输电、变电、配电和用电连接成的统一整体,如图3所示。
其中,升压变电所是将电压升高,变为高压电从而进行远距离电力传送;降压变电所是将高压电的电压降低,以供区域电网或终端用户使用;配电变电所负责将电网输送来的电能分配给各类用户。
在整个电力系统中,几乎每个环节都依赖计算机技术的支撑,比如各级电网调度控制中心的计算机系统、变电站的计算机监控系统等等。
图3电力系统组成
国内变电站主要结构示意图如图4所示:
图4国内变电站主要结构示意图
纵向加密:对变电站送往调度中心的通道数据进行加密。
远动装置:负责将变电站内的信息送往远方的调度中心。
网络分析仪:记录变电站内部网络的通信报文。
国外变电站主要结构示意图如图5所示:
图5国外变电站主要结构示意图
保护装置:对采集到的一次设备电压电流、开关量信号执行相应保护控制逻辑。
合并单元:负责采集一次设备的电压电流信号。
智能终端:负责采集一次设备的开关量信号,以及执行保护装置下发的开关控制命令。
状态监测与诊断装置:变电站现场的辅助监测类设备。
协议转换服务器:负责协议转换,使得采用不同协议的设备之间可以互相通信。
监控主机:负责变电站现场信息的汇总展示。
调度中心:集中展示和控制下面多个变电站的集控中心。
国内和国外变电站的主要区别表现在以下两点:
(1)国内将变电站内的区域通过防火墙分隔成了安全I区和安全II区。
安全I区:实时生产控制区,可以直接控制电力一次设备的运行。
安全II区:非实时控制区,如电能量计量系统,故障录波管理系统等。
()国内变电站是完全隔离的局域网,不与公网连接;而国外的变电站可以通过办公区以VPN等形式接入变电站的内部网络。
样本执行概要该样本的执行流程图如图6所示:
图6样本执行流程图
样本结构此样本是一个复合样本,包含多个样本文件详细文件功能介绍如下:
XLS主要功能:
通过运行文档中的宏代码,将可执行文件释放到临时目录“C:\User\xxx\AppData\Local\Temp”,并命名为“explorer.exe”来隐藏自身。
行为分析:
该文件运行后如图7所示:
图7XLS运行后截图
图8中为宏代码中定义的数组中的第一个,这些数组中的数据是一个PE文件,“77”和“90”分别对应16进制的“4D”和“5A”。
图8宏定义的数组
图9生成并运行文件
explorer.exe主要功能:
该文件是一个下载器,主要功能是从服务器下载文件并执行。
行为分析:
样本会首先连接域名,所连接的域名如图10所示。该域名是一个允许任何人下载和上传文件的托管网站,如图11所示。
图10样本所连接的域名
图11域名对应的网站
对该样本文件逆向分析如下:(1)首先调用connect函数,要连接的IP地址为.34..11,如图1所示。该IP是一个存储文件的服务器。
图1connect函数要连接的IP地址
()发送数据,如图13:
图13发送数据
(3)接收数据后创建文件,如图14:
图14创建文件
(4)将接收的数据写入文件中,如图15:
图15写入数据
(5)之后逐部分读取文件内容到内存中,如图16:
图16读取文件到内存
(6)进行解密,如图17:
图17解密操作
(7)解密部分的代码点击阅读原文可见。
(8)创建lsass.exe文件,如图18:
图18创建文件
(9)将文件内容写入\AppData\Local\Temp\lsass.exe中,如图19:
图19写入lsass.exe
(10)完成后即删除原txt文件,如图0:
图0删除txt文件
(11)创建进程,如图1:
图1创建进程
lsass.exe主要功能:
接收服务器的指令,执行不同的功能。
行为分析:
首先使用pyinstxtractor.py将样本反编译成py文件,图为反编译后的py文件。
图反编译后的py文件
图3为解密后的代码:
图3解密后的代码
该代码会从远程服务器获取指令,先尝试直接从服务器读取指令,如果失败则尝试获取指令文件中的内容,在本地新建一个长度为10字节的随机dat文件,将指令文件中的内容写入dat文件中。
图4从服务器获取指令
图5根据不同指令执行各种功能
指令解析如表3所示:
命令功能help显示可以执行的指令cmd