乌克兰变电站Ukrenergo被黑事件始末 绿盟科技报告称攻击者是Telebots组织

安全加之前报道过2016.12乌克兰电厂攻击事件。当时,官方声明称“发现主要原因是通过数据网络的外部干扰,我们对网络安全的专家答应尽快提供一份报告。” 然而官方的报告还没看到,等到了绿盟科技给出的样本分析报告,报告称通过对恶意代码的分析发现本次事件的攻击者是Telebots组织,该组织与BlackEnergy组织有关。

报告目录如下

  • 事件综述
  • 历史回顾
  • 电力系统简介
  • 样本执行概要
  • 样本结构

    • XLS
    • explorer.exe
    • lsass.exe
    • KillDisk.exe
    • keylogger.exe
    • LDAPquery.exe
    • mimikatz.exe
    • CredRaptor.exe
    • Intercepter-NG.exe
    • VBS
    • telebot.exe
  • 攻击定位

事件综述

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

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

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

历史回顾

 

乌克兰电网受攻击历史

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

电力系统简介

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

 

电力系统组成

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

国内变电站主要结构示意图
  • 纵向加密:对变电站送往调度中心的通道数据进行加密。
  • 远动装置:负责将变电站内的信息送往远方的调度中心。
  • 网络分析仪:记录变电站内部网络的通信报文。

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

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

  • 保护装置:对采集到的一次设备电压电流、开关量信号执行相应保护控制逻辑。
  • 合并单元:负责采集一次设备的电压电流信号。
  • 智能终端:负责采集一次设备的开关量信号,以及执行保护装置下发的开关控制命令。
  • 状态监测与诊断装置:变电站现场的辅助监测类设备。
  • 协议转换服务器:负责协议转换,使得采用不同协议的设备之间可以互相通信。
  • 监控主机:负责变电站现场信息的汇总展示。
  • 调度中心:集中展示和控制下面多个变电站的集控中心。(1)国内将变电站内的区域通过防火墙分隔成了安全I区和安全II区。安全I区:实时生产控制区,可以直接控制电力一次设备的运行。安全II区:非实时控制区,如电能量计量系统,故障录波管理系统等。
  • (2)国内变电站是完全隔离的局域网,不与公网连接;而国外的变电站可以通过办公区以VPN等形式接入变电站的内部网络。

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

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

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

样本执行概要

该样本的执行流程图如图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所示:

XLS运行后截图

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

宏定义的数组

生成并运行文件

explorer.exe

主要功能

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

行为分析

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

样本所连接的域名

域名对应的网站

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

connect函数要连接的IP地址

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

图13 发送数据

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

图14 创建文件

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

图15 写入数据

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

图16 读取文件到内存

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

图17 解密操作

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

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

 

 

 

 

 

 

 

 

 

 

 

.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

 

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

图18 创建文件

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

图19 写入lsass

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

图20 删除txt文件

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

图21 删除进程

lsass.exe

主要功能

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

行为分析

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

图22 反编译后的py文件

图23为解密后的代码:

解密后的代码

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

从服务器获取指令

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

指令解析如表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 提升权限

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

图27 创建服务

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

图28 启动服务

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

图29 服务程序

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

图30 隐藏痕迹

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

图31 内存填充

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

图32 对磁盘清零

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

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

图33 结束系统进程

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

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

图34 KillDisk变种

keylogger.exe

主要功能

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

行为分析

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

图35 生成键盘记录文件

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

图36 日志文件内容

日志文件包含以下信息:

  • 1.键盘钩子设置情况。
  • 2.进行键盘操作的进程PID、标题、进程名。
  • 3.用户的键盘输入内容。

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

图37 设置键盘钩子

记录键盘消息,如图38:

图38 记录键盘消息

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

LDAPquery.exe

主要功能

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

行为分析

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

图39 连接LDAP服务器

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

查询分区信息,如图40:

图40 查询分区信息

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

图41 查询计算机信息

查询用户信息,如图42:

图42 查询用户信息

查询其他信息,如图43:

图43 查询其他信息

mimikatz.exe

主要功能

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

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

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

行为分析

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

图44 读取lsass.exe的内存

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

  • 1.用户名
  • 2.工作组
  • 3.用户口令(密文)

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


读取密文密码,如图47:

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

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

CredRaptor.exe

主要功能

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

行为分析

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

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

调用函数解密,如图52:

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

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

图53 读取用户信息

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

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

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

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

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

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

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

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:

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

根据指令执行功能,如图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 发送文件

邮箱样本的指令格式{“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:

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

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

攻击定位

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

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

 

图68 攻击定位(1)

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

 

图69 攻击定位(2)

3.lsass中链接的域名为

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

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

图70 域名解析结果

绿盟科技给出的防护方案

  •  绿盟科技检测服务

  1. 绿盟科技工程师前往客户现场检测。
  2. 绿盟科技在线云检测,登陆绿盟云,申请威胁分析中心试用。链接地址如下:

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

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

  1. 短期服务:绿盟科技工程师现场木马后门清理服务(人工服务+IPS+TAC+终端防护(金山V8+))。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
  2. 中期服务:提供3-6个月的风险监控与巡检服务(IPS+TAC+人工服务)。根除风险,确保事件不复发。
  3. 长期服务:基于行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)

总结

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

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

发表评论