乌克兰又断电了,看Ukrenergo断电事件的技术分析与防护方案

2017-01-13 293416人围观 ,发现 10 个不明物体 系统安全

1.png

事件综述

Ukrenergo是乌克兰国内的主要能源供应企业,2016年12月17日晚,该公司经历了一次供电故障,影响到基辅附近诺威佩特里夫茨村的北部变电站自动化控制系统,该停电事故主要影响的范围是基辅(乌克兰首都)北部及其周边地区。

停电事件发生后30分钟,Ukrenergo工程师将设备切换为手工模式,并开始恢复供电;75分钟后完全恢复供电。

2016年12月18日上午,Ukrenergo负责人VsevolodKovalchuk在Facebook上发布信息描述了上述经过,并称本次停电的原因可能是设备故障,也可能是由于网络攻击。

针对本次停电事件,绿盟科技安全团队响应如图1所示:

2.jpg

图1 绿盟科技安全响应

历史回顾

乌克兰电网近期遭受的攻击事件如图2所示。绿盟科技安全团队通过对恶意代码的分析发现本次事件的攻击者是Telebots组织,该组织与BlackEnergy组织有关。

3.png

图2 乌克兰电网受攻击历史

电力系统简介

电力系统是由发电、输电、变电、配电和用电连接成的统一整体,如图3所示。其中,升压变电所是将电压升高,变为高压电从而进行远距离电力传送;降压变电所是将高压电的电压降低,以供区域电网或终端用户使用;配电变电所负责将电网输送来的电能分配给各类用户。在整个电力系统中,几乎每个环节都依赖计算机技术的支撑,比如各级电网调度控制中心的计算机系统、变电站的计算机监控系统等等。

4.png

图3 电力系统组成

国内变电站主要结构示意图如图4所示:

5.png

图4 国内变电站主要结构示意图

纵向加密:对变电站送往调度中心的通道数据进行加密。

远动装置:负责将变电站内的信息送往远方的调度中心。

网络分析仪:记录变电站内部网络的通信报文。

国外变电站主要结构示意图如图5所示:6.png

图5 国外变电站主要结构示意图

保护装置:对采集到的一次设备电压电流、开关量信号执行相应保护控制逻辑。

合并单元:负责采集一次设备的电压电流信号。

智能终端:负责采集一次设备的开关量信号,以及执行保护装置下发的开关控制命令。

状态监测与诊断装置:变电站现场的辅助监测类设备。

协议转换服务器:负责协议转换,使得采用不同协议的设备之间可以互相通信。

监控主机:负责变电站现场信息的汇总展示。

调度中心:集中展示和控制下面多个变电站的集控中心。

国内和国外变电站的主要区别表现在以下两点:

(1)国内将变电站内的区域通过防火墙分隔成了安全I区和安全II区。安全I区:实时生产控制区,可以直接控制电力一次设备的运行。安全II区:非实时控制区,如电能量计量系统,故障录波管理系统等。

(2)国内变电站是完全隔离的局域网,不与公网连接;而国外的变电站可以通过办公区以VPN等形式接入变电站的内部网络。

样本执行概要

该样本的执行流程图如图6所示:

6.png

图6 样本执行流程图

样本结构

此样本是一个复合样本,包含多个样本文件:

文件类型 MD5 功能
XLS FD0FD58B20B1476E8F67D6A05307E9BC 7D4FC63F2096A485D2DA3DB1150E6D34 释放并执行 C:\User\xxx\AppData\Local\Temp\explorer.exe
explorer.exe 1019C101FC1AE71E5C1687E34F0628E6 下载并执行 C:\User\xxx\AppData\Local\Temp\lsass.exe
lsass.exe 873C7701E16BC68AD7A90886B5D0A3F0 75EE947E31A40AB4B5CDE9F4A767310B 0FCE93CD9BEEEA30A7F0E2A819D2B968 远控木马,根据服务器发送的命令执行不同的功能
KillDisk.exe B75C869561E014F4D384773427C879A6 FFB1E8BABAECC4A8CB3D763412294469 删除系统日志,清空部分扇区数据,导致系统崩溃无法重启
keylogger.exe 4919569CD19164C1F123F97C5B44B03B 记录键盘消息
LDAPquery.exe 76691C58103431624D26F2B8384A57B0 查询LDAP服务器
mimikatz.exe BDE6C0DAC3E594A4A859B490AAAF1217 抓取系统口令
CredRaptor.exe 389AE3A4589E355E173E9B077D6F1A0A 窃取浏览器中用户的用户名和密码
Intercepter-NG.exe 5BD6B79A4443AFD27F7ED1FBF66060EA 抓包工具
VBS 2D7866989D659C1F8AE795E5CAB40BF3 C404B959B51AD0425F1789F03E2C6ECF 获取并执行指令
telebot.exe 24313581BBBFFA9A784B48075B525810 远控木马,根据不同的指令执行不同的功能

表1 样本文件列表

详细文件功能介绍如下:

XLS

主要功能

通过运行文档中的宏代码,将可执行文件释放到临时目录“C:\User\xxx\AppData\Local\Temp”,并命名为“explorer.exe”来隐藏自身。

行为分析

    该文件运行后如图7所示:

7.jpg

图7 XLS运行后截图 

图8中为宏代码中定义的数组中的第一个,这些数组中的数据是一个PE文件,“77”和“90”分别对应16进制的“4D” 和“5A”。

8.jpg

图8 宏定义的数组

9.jpg

图9 生成并运行文件

explorer.exe

主要功能

该文件是一个下载器,主要功能是从服务器下载文件并执行。

行为分析

样本会首先连接域名,所连接的域名如图10所示。该域名是一个允许任何人下载和上传文件的托管网站,如图11所示。

 10.png

图10 样本所连接的域名

11.png

图11 域名对应的网站

对该样本文件逆向分析如下:(1)首先调用connect函数,要连接的IP地址为188.234.144.11,如图12所示。该IP是一个存储文件的服务器。

12.png

图12 connect函数要连接的IP地址

(2)发送数据,如图13:

13.png

图13 发送数据

 (3)接收数据后创建文件,如图14:

14.png

图14 创建文件

(4)将接收的数据写入文件中,如图15:

15.png

图15 写入数据

(5)之后逐部分读取文件内容到内存中,如图16:

16.png

图16 读取文件到内存

(6)进行解密,如图17:

17.png

图17 解密操作

(7)解密部分的代码表2所示:

.text:00405142                 mov     eax, [esp+2C8h]
.text:00405149                 mov     edx, [esp+5Ch]
.text:0040514D                 mov     edi, ebx
.text:0040514F                 mov     ebx, [esp+1Ch]
.text:00405153                 mov     ecx, [esp+2C4h]
.text:0040515A                 or      eax, [esp+54h]
.text:0040515E                 add     edx, [esp+50h]
.text:00405162                 mov     [ebx+edi], al
.text:00405165                 inc     edi
.text:00405166                 mov     esi, eax
.text:00405168                 lea     edx, [ecx+edx+4]
.text:0040516C                 mov     [esp+20h], edi
.text:00405170                 mov     [esp+4Ch], edi
.text:00405174                 mov     edi, [esp+18h]
.text:00405178                 mov     ebx, edx
.text:0040517A                 shl     esi, 6
.text:0040517D                 mov     dl, 1
.text:0040517F                 nop
.text:00405180
.text:00405180 loc_405180:                             ; CODE XREF: micro::main::hd9f3cc455036707f+25FCj
.text:00405180                 xor     ecx, ecx
.text:00405182                 mov     [esp+5Ch], ebx
.text:00405186
.text:00405186 loc_405186:                             ; CODE XREF: micro::main::hd9f3cc455036707f+269Dj
.text:00405186                 cmp     edi, ebx
.text:00405188                 jz      loc_406B19
.text:0040518E                 movzx   eax, byte ptr [ebx]
.text:00405191                 mov     [esp+50h], eax
.text:00405195                 movzx   eax, byte ptr [eax+45CD5Fh]
.text:0040519C                 cmp     eax, 0FDh
.text:004051A1                 jb      short loc_4051AF
.text:004051A3                 inc     ebx
.text:004051A4                 inc     ecx
.text:004051A5                 cmp     al, 0FDh
.text:004051A7                 jnz     loc_405338
.text:004051AD                 jmp     short loc_405186
.text:004051AF ; ---------------------------------------------------------------------------
.text:004051AF
.text:004051AF loc_4051AF:                             ; CODE XREF: micro::main::hd9f3cc455036707f+2691j
.text:004051AF                 or      eax, esi
.text:004051B1                 inc     ebx
.text:004051B2                 shl     eax, 6
.text:004051B5                 mov     [esp+54h], eax
.text:004051B9
.text:004051B9 loc_4051B9:                             ; CODE XREF: micro::main::hd9f3cc455036707f+26DCj
.text:004051B9                 mov     eax, [esp+2D8h]
.text:004051C0                 mov     esi, 1
.text:004051C5                 lea     eax, (loc_402B28 - 402B28h)[ebx+eax]
.text:004051C8                 cmp     eax, 1
.text:004051CB                 jz      loc_406C0C
.text:004051D1                 movzx   esi, byte ptr [ebx]
.text:004051D4                 movzx   eax, ds:_const_47[esi]
.text:004051DB                 cmp     eax, 0FCh
.text:004051E0                 jbe     short loc_4051EE
.text:004051E2                 inc     ebx
.text:004051E3                 inc     ecx
.text:004051E4                 cmp     al, 0FDh
.text:004051E6                 jnz     loc_406B2A
.text:004051EC                 jmp     short loc_4051B9
.text:004051EE ; ---------------------------------------------------------------------------
.text:004051EE
.text:004051EE loc_4051EE:                             ; CODE XREF: micro::main::hd9f3cc455036707f+26D0j
.text:004051EE                 or      eax, [esp+54h]
.text:004051F2                 mov     edx, [esp+2D0h]
.text:004051F9                 mov     [esp+18h], edi
.text:004051FD                 mov     edi, ecx
.text:004051FF                 mov     [esp+2CCh], eax
.text:00405206                 shl     eax, 6
.text:00405209                 mov     [esp+54h], eax
.text:0040520D                 mov     eax, [esp+5Ch]
.text:00405211                 lea     eax, (loc_402B28 - 402B28h)[eax+edx]
.text:00405214
.text:00405214 loc_405214:                             ; CODE XREF: micro::main::hd9f3cc455036707f+2734j
.text:00405214                 mov     edx, eax
.text:00405216                 add     edx, edi
.text:00405218                 jz      loc_406BA6
.text:0040521E                 mov     edx, [esp+5Ch]
.text:00405222                 movzx   ecx, byte ptr [edx+edi+2]
.text:00405227                 movzx   ebx, ds:_const_47[ecx]
.text:0040522E                 mov     [esp+50h], ecx
.text:00405232                 cmp     ebx, 0FCh
.text:00405238                 jbe     short loc_405246
.text:0040523A                 inc     edi
.text:0040523B                 cmp     bl, 0FDh
.text:0040523E                 jnz     loc_406B8A
.text:00405244                 jmp     short loc_405214
.text:00405246 ; ---------------------------------------------------------------------------
.text:00405246
.text:00405246 loc_405246:                             ; CODE XREF: micro::main::hd9f3cc455036707f+2728j
.text:00405246                 or      ebx, [esp+54h]
.text:0040524A                 mov     ecx, [esp+5Ch]
.text:0040524E                 xor     esi, esi
.text:00405250                 mov     eax, ebx
.text:00405252                 shl     eax, 6
.text:00405255                 mov     [esp+54h], eax
.text:00405259                 mov     eax, [esp+4]
.text:0040525D                 lea     eax, (loc_402B28 - 402B28h)[ecx+eax]
.text:00405260                 add     eax, edi
.text:00405262
.text:00405262 loc_405262:                             ; CODE XREF: micro::main::hd9f3cc455036707f+2781j
.text:00405262                 mov     edx, eax
.text:00405264                 add     edx, esi
.text:00405266                 jz      loc_406C4A
.text:0040526C                 lea     edx, [ecx+esi]
.text:0040526F                 movzx   edx, byte ptr [edx+edi+3]
.text:00405274                 mov     [esp+50h], edx
.text:00405278                 movzx   edx, ds:_const_47[edx]
.text:0040527F                 cmp     edx, 0FCh
.text:00405285                 jbe     short loc_405293
.text:00405287                 inc     esi
.text:00405288                 cmp     dl, 0FDh
.text:0040528B                 jnz     loc_406BB7
.text:00405291                 jmp     short loc_405262
.text:00405293 ; ---------------------------------------------------------------------------
.text:00405293
.text:00405293 loc_405293:                             ; CODE XREF: micro::main::hd9f3cc455036707f+2775j
.text:00405293                 mov     eax, [esp+20h]
.text:00405297                 mov     [esp+2C8h], edx
.text:0040529E                 mov     [esp+2C4h], esi
.text:004052A5                 mov     [esp+50h], edi
.text:004052A9                 cmp     eax, [esp+48h]
.text:004052AD                 jnz     short loc_4052C8
.text:004052AF                 lea     ecx, [esp+44h]
.text:004052B3                 call    __ZN40_$LT$alloc__raw_vec__RawVec$LT$T$GT$$GT$6double17h06f32d01d77fcc35E_703
.text:004052B8                 mov     eax, [esp+44h]
.text:004052BC                 mov     ecx, [esp+4Ch]
.text:004052C0                 mov     [esp+1Ch], eax
.text:004052C4                 mov     [esp+20h], ecx
.text:004052C8
.text:004052C8 loc_4052C8:                             ; CODE XREF: micro::main::hd9f3cc455036707f+279Dj
.text:004052C8                 mov     edx, [esp+2CCh]
.text:004052CF                 mov     eax, [esp+1Ch]
.text:004052D3                 mov     ecx, [esp+20h]
.text:004052D7                 shr     edx, 4
.text:004052DA                 mov     byte ptr ds:(loc_402B28 - 402B28h)[eax+ecx], dl
.text:004052DD                 mov     eax, [esp+4Ch]
.text:004052E1                 inc     eax
.text:004052E2                 mov     [esp+4Ch], eax
.text:004052E6                 mov     ecx, eax
.text:004052E8                 mov     edi, [esp+48h]
.text:004052EC                 cmp     eax, edi
.text:004052EE                 jnz     short loc_405301
.text:004052F0                 lea     ecx, [esp+44h]
.text:004052F4                 call    __ZN40_$LT$alloc__raw_vec__RawVec$LT$T$GT$$GT$6double17h06f32d01d77fcc35E_703
.text:004052F9                 mov     edi, [esp+48h]
.text:004052FD                 mov     ecx, [esp+4Ch]
.text:00405301
.text:00405301 loc_405301:                             ; CODE XREF: micro::main::hd9f3cc455036707f+27DEj
.text:00405301                 mov     eax, [esp+44h]
.text:00405305                 shr     ebx, 2
.text:00405308                 mov     [esp+1Ch], eax
.text:0040530C                 mov     byte ptr ds:(loc_402B28 - 402B28h)[eax+ecx], bl
.text:0040530F                 inc     ecx
.text:00405310                 mov     ebx, ecx
.text:00405312                 mov     [esp+4Ch], ecx
.text:00405316                 cmp     ecx, edi
.text:00405318                 jnz     loc_405142

表2 解密代码

(8)创建lsass.exe文件,如图18:

18.png

图18 创建文件

(9)将文件内容写入\AppData\Local\Temp\lsass.exe中,如图19:

19.png

图19 写入lsass.exe

(10)完成后即删除原txt文件,如图20:

20.png

图20 删除txt文件

(11)创建进程,如图21:

21.png

图21 创建进程

lsass.exe

主要功能

接收服务器的指令,执行不同的功能。

行为分析

首先使用pyinstxtractor.py将样本反编译成py文件,图22为反编译后的py文件。

22.png

图22 反编译后的py文件

图23为解密后的代码:

23.png

图23 解密后的代码

该代码会从远程服务器获取指令,先尝试直接从服务器读取指令,如果失败则尝试获取指令文件中的内容,在本地新建一个长度为10字节的随机dat文件,将指令文件中的内容写入dat文件中。

24.png

图24 从服务器获取指令

25.png

图25 根据不同指令执行各种功能 

指令解析如表3所示:

命令 功能
help 显示可以执行的指令
cmd||(cmd command) 执行(cmd command)中的命令(读取数据时cp866解码后用utf-8编码)
cmdd||(cmd command) 执行(cmd command)中的命令
getphoto||(path) 获取路径为(path)的文件(发送数据时用本机编码方式解码再用utf-8编码)
getdoc||(doc path) 获取路径为(doc path)的文件
forcecheckin||random data 获取主机信息
time||(int) 设置sleep的时间
ss||(random data) 未实现,从名称判断为获取截屏

表3 指令解析

KillDisk.exe

主要功能

清除系统扇区,删除重要的系统文件,对特定类型的文件内容进行覆盖,结束系统进程,致使系统崩溃,无法修复。

行为分析

样本首先会提升进程权限,使病毒程序具有关机和修改系统目录文件的权限。

26.png

图26 提升权限

启动cmd创建服务,如图27:

27.png

图27 创建服务

创建服务后启动服务,如图28:

28.png

图28 启动服务

而启动的服务程序即是它本身,如图29:

29.png

图29 服务程序

创建线程删除日志文件,隐藏操作痕迹,如图30:

30.png

图30 隐藏痕迹

样本企图对PhysicalDriver0到PhysicalDriver15进行内存填充,如图31:

31.png

图31 内存填充

对打开的每个磁盘的291个扇区进行内存的清零操作,如图32:

32.png

图32 对磁盘清零

上述操作完成后,操作系统已经无法重启。

重复三次结束系统关键进程的操作来结束一些系统进程,如图33。被结束的系统进程包含但不仅限于:system,vmacthlp.exe,VGAuthService.exe,vmtoolsd.exe,dllhost.exe,WmiPrvSE.exe,msdtc.exe,SearchIndexer.exe,sppsvc.exe,PCHunter32.exe。

33.png

图33 结束系统进程

上述行为最终会导致系统崩溃,重新启动。然而由于系统扇区内存已被清零,导致系统无法重启。

通过代码跟踪分析,发现了KillDisk组件的一个变种,可以运行在多种平台上。攻击者利用该变种文件不仅可以攻击Windows上位机控制的SCADA/ICS系统,可以攻击Linux上位机控制的SCADA/ICS系统。目前该变种文件已经被作为Linux系统的勒索软件,勒索赎金为222btc,折合人民币1729875元,如图34:

34.png

图34 KillDisk变种

 

keylogger.exe

主要功能

键盘记录器,记录用户的键盘输入并保存到临时目录下伪装成.tmp文件,攻击者如果有文件系统的读写权限,则只需读取该文件即可获得用户在某进程/窗口/文件下的所有键盘操作记录。

行为分析

在temp目录下生成键盘记录日志文件,如图35:

35.png

图35 生成键盘记录文件

日志文件的内容如图36所示:

36.png

图36 日志文件内容

日志文件包含以下信息:

1.键盘钩子设置情况。

2.进行键盘操作的进程PID、标题、进程名。

3.用户的键盘输入内容。

随后样本会注入各进程设置键盘钩子以获取键盘消息,如图37:

37.png

图37 设置键盘钩子

记录键盘消息,如图38:

38.png

图38 记录键盘消息

该样本不存在设置启动项的行为,是一次性的执行流程。然而攻击者既然已获得了上传并运行文件的权限,完全可以手工将其加入启动项列表中,借以绕过杀毒软件的检测。

LDAPquery.exe

主要功能

该文件是一个LDAP服务器的查询工具,成功连接至LDAP服务器后,可以通过ldap_search的方式查询分区、计算机、用户等信息。

行为分析

连接到LDAP服务器,如图39:

39.png

图39 连接LDAP服务器

成功连接LDAP服务器后(服务器地址根据运行参数而决定,若参数为空则连接默认LDAP服务器),样本将自动通过ldap_search函数查询服务器的相关信息并回显。

查询分区信息,如图40:

40.png

图40 查询分区信息

查询计算机信息,如图41:

41.png

图41 查询计算机信息

查询用户信息,如图42:

42.png

图42 查询用户信息

查询其他信息,如图43:

43.png

图43 查询其他信息

mimikatz.exe

主要功能

获取管理员的用户名和密码,该样本只能工作在32位系统环境中,它通过注入lsass.exe并读取内存来抓取用户名、工作组、密码等信息。

由于lsass.exe中的密码字段并非用hash加密且加密参数留驻于内存未能擦除,所以该样本可通过读取内存中加密的密文密码和加密参数,并调用lsasrv.dll中的解密模块进行解密,借以还原出用户的密码明文。

该样本可以获取所有处在于“已登录”状态的用户名和口令。

行为分析

注入并读取lsass.exe的内存,如图44:

44.png

图44 读取lsass.exe的内存

样本将从读到的内存基址中以偏移的方式分别获取以下内容的动态地址:

1.用户名

2.工作组

3.用户口令(密文)

读取动态地址中的用户名,如图45、图46:

45.png

图45 读取用户名(1)

46.png

图46 读取用户名(2)

读取密文密码,如图47:

47.png

图47 读取密文密码

调用lsasrv.dll中的解密函数解码密文,如图48:

48.png

图48 调用lsasrv.dll

得到用户密码的明文,如图49:

49.png

图49 用户密码明文

CredRaptor.exe

主要功能

该样本通过检查系统版本来确定IE浏览器的版本,从而对不同版本的IE浏览器文件夹下存储的用户名密码文件进行解析,获取用户信息。获取信息的浏览器包含Google Chrome,Internet Explorer,Mozilla Firefox和Opera。

行为分析

首先程序检查系统版本,如图50:

50.png

图50 检查系统版本

获取iexplorer版本信息,如图51:

51.png

图51 获取IE浏览器版本

调用函数解密,如图52:

52.png

图52 调用解密函数

CryptUnprotectData函数可以解密同一用户在相同权限下加密的数据。

尝试读取iexplorer的用户信息,如图53:

53.png

图53 读取用户信息

获取日志文件的路径,如图54:

54.png

图54 获取日志文件路径

记录的部分信息,如图55:

55.png

图55 获取部分信息

如果存在Chrome浏览器,则将Chrome浏览器存放用户信息的文件拷贝到临时文件夹下,如图56。之后尝试进行解析,读取google账户信息。

56.png

图56 文件拷贝

使用SQL语句 SELECTORIGIN_URL,USERNAME_VALUE,PASSWORD_VALUE FROM LOGINS进行查询操作,如图57:

57.png

图57 执行SQL语句

若系统中存在Firefox浏览器,则对其存放用户名密码的文件进行解析。首先获取Firefox浏览器安装位置及版本信息,如图58:

58.png

图58 获取Firefox安装位置及版本

若存在“\logins.json”文件则对其进行解析,获取加密的用户名和密码,如图59:

59.png

图59 解析json文件

若存在“\signons.sqlite”文件则对其进行解析,读取加密后的用户名和密码,如图60:

60.png

图60 解析sqlite文件

Intercepter-NG.exe

主要功能

该样本是俄罗斯人编写的一款抓包工具,其特点为:

监听不同类型的密码或Hash包括:

ICQ\IRC\AIM\FTP\IMAP\POP3\SMTP\LDAP\BNC\SOCKS\

HTTP\WWW\NNTP\CVS\TELNET\MRA\DC++\VNC\MYSQL\ORACLE\NTLM

监听以下即时通讯工具的实时聊天内容:ICQ\AIM\JABBER\YAHOO\MSN\IRC\MRA

混杂模式\ARP\DHCP\Gateway\智能扫描模式

Raw mode\eXtreme\Resurrection mode

捕获数据报并提供离线分析功能

通过RPCAP daemon捕获传输远程数据

NAT\SOCKS\DHCP

ARP\DNS over ICMP\DHCP\SSL\SSLSTRIP\WPAD\SMBRelay 中间人攻击

可以工作在NT平台,任何的*nix平台,以及IOS和Android平台。

具体内容请参见官网:

http://sniff.su/

VBS

主要功能

从服务端获取并执行指令。

行为分析

向远程服务器请求数据,并将请求到的数据转换成指令执行,如图61:

61.png

图61 向服务器获取数据

将请求到的数据转换成指令并执行,如图62:

62.png

图62 将数据转换成指令并执行

根据指令执行功能,如图63:

63.png

图63 执行指令功能

VBS样本的指令格式*:report_id$arg0 arg1

command Function
!cmd arg1 执行arg1
!cmdd arg1 执行arg1
!dump arg1 发送对arg1再次进行编码的内容
!timeout arg1 设置sleep的时间
!bye 设置exitFlag = True(该变量控制程序是否退出)
!kill 自我删除, 设置exitFlag = True(该变量控制程序是否退出)
!up (int) 将arg1指定的文件内容编码后发送

表4 VBS样本指令格式

telebot.exe

主要功能

此样本是一个木马程序,根据不同指令执行不同功能。

行为分析

从邮箱获取文件然后进行解码来获取命令然后执行。

64.png

图64 发送文件

该样本的指令格式{“CMD”:“*”,“*”:“jobid”,“ARG”:“*”}。

command Function
CMD:download ARG:filepath 将filepath指定的文件发给自己的邮箱
CMD:cmd ARG:cmd command 执行(cmd command)中的命令并将输出信息和出错信息发给自己邮箱
CMD:upload ARG:url 下载url代表的文件并在本地运行
CMD:forcecheckin, ARG: 向自己发邮件,内容为字符串信息和本机信息

表5 邮箱样本指令格式

通过登陆自己邮箱,将窃取到的信息发送到自己的邮箱,如图65:

65.png

图65 发送窃取的信息

Outlook邮箱用户名和密码,如图66:

66.png

图 66 邮箱用户名和密码

经验证该账号密码仍然可用,但需要进行验证,如图67:

67.png

图67 邮箱可用

攻击定位

通过对样本的分析,发现样本会连接两个IP地址和一个域名,信息如下:

1.IP(188.234.144.11),位于俄罗斯地区,如图68:

68.png

图68 攻击定位(1)

2.IP(93.190.137.212)位于荷兰,如图69:

69.png

图69 攻击定位(2)

3.lsass中连接的域名为

https://api.telegram.org/bot140192111:AAGSxqO9Xz9meTaG7Ecdh80LGnYXNIbbgp4

此域名解析的结果如图70:

70.png

图70 域名解析结果

防护方案

1.1   绿盟科技检测服务

(1) 绿盟科技工程师前往客户现场检测。

(2)  绿盟科技在线云检测,登陆绿盟云,申请威胁分析中心试用。链接地址如下:

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?service_id=1018

1.2   绿盟科技木马专杀解决方案

(1) 短期服务:绿盟科技工程师现场木马后门清理服务(人工服务+IPS+TAC+终端防护(金山V8+))。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。

(2) 中期服务:提供3-6个月的风险监控与巡检服务(IPS+TAC+人工服务)。根除风险,确保事件不复发。

(3) 长期服务:基于行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)

总结

此次攻击和BlackEnergy类似,攻击者使用带有Microsoft Excel文档的spearphishing电子邮件,其中包含恶意宏作为初始感染向量。不同的是这次恶意文档没有使用任何社会工程学的方法来诱导受害者点击启动宏按钮,这样攻击是否成功只能完全依靠受害者是否点击它。

宏病毒运行后释放恶意文件,开始执行恶意功能。

*作者:绿盟科技(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

这些评论亮了

  • dd 回复
    @ ttzer0 这玩意只要是个行业内的都不是什么秘密,关键点不是这里,而是乌克兰电网是通过走公网vpn来控制设备的。
    (2)国内变电站是完全隔离的局域网,不与公网连接;而国外的变电站可以通过办公区以VPN等形式接入变电站的内部网络。
    )9( 亮了
  • 绿盟业务已经不满足于国内市场了噢,都扩展到国外了 :smile:
    )7( 亮了
发表评论

已有 10 条评论

取消
Loading...
css.php