本文讲的是
深度分析Turla黑客组织使用的高效攻击方法,
在2017年1月28日,微软威胁情报中心总经理 John Lambert 通过其个人账号@JohnLaTwC发表了一个关于恶意文档的分析文章,主要是关于 JS 后门的。自2016年11月底以来,卡巴斯基实验室已经观察到Turla使用这种新的JavaScript有效载荷和特定的宏变量。Turla被认为是历史上最复杂的APT(高级持续性威胁)间谍软件。目标为政府机构、大使馆、军事组织、研究和教育组织以及制药企业。
Turla组织的攻击活动包括了许多影响一时的大事件,比如2008年攻击美国中央司令部,也就是Buckshot Yankee事件——指的是黑客用一个名叫agent.btz的恶意软件通过某U盘被上传至五角大楼的军事网络系统之中。
另外一个事件就是2016年对瑞士军工企业RUAG集团发动攻击,黑客采用了网络间谍软件Turla,木马程序以及Rootkit恶意软件相结合。
此外Turla组织还针对乌克兰,欧盟相关机构,欧盟各国政府,各个国家的大使馆,媒体、研究和教育组织以及制药、军工企业,其利用卫星通信固有的安全缺陷隐藏C&C服务器位置和控制中心。
Turla:最危险的黑客组织
Turla组织也被称为Snake 、 Uroburos 、 Venomous Bear或是KRYPTON,是至今为止最为高级的威胁组织之一,最近调查显示,相比于2015年,Turla组织已将其卫星C&C注册数量增加了十倍。
Turla组织被会对其APT攻击进行不断地创新、升级和扩展,利用许多不同的家庭恶意软件,基于卫星的C&C服务器和非Windows操作系统的恶意软件。Turla恶意软件虽然相当简单,但功能灵活,能在受害者上运行标准批处理命令,并允许攻击者通过Wscript运行任意命令。
为什么攻击者发动的Turla攻击,是典型的网络间谍式攻击呢?他们采用了步步蚕食的策略,精心制订了整个攻击计划:首先逐步破解目标组织的服务器,对其实施操控;进而横向扩大攻击范围,感染系统中的其他设备,因此它是一次经过周密部署后发动的网络间谍活动,这些恶意软件会扩大用户屏幕保护程序文件(SCR)的使用权限或是在系统中,制造一个Java攻击漏洞。
今天我们就来具体分析一个被Turla攻击过的新样本。
目标MD5:6e7991f93c53a58ba63a602b277e07f7
事件:国庆招待会
作者:user
LastModifiedBy:约翰
创建日期:2016:11:16 21:58:00
修改日期:2016:11:24 17:42:00
上述诱导文件加载有卡塔尔驻塞浦路斯大使馆给塞浦路斯外交部的正式信。根据文件的名称推测,这份文件可能是从卡塔尔大使的秘书发送到国防部的,所以可以确定攻击者已经提前掌握了卡塔尔外交网络的通信系统。
该文档包含恶意宏,非常类似于以前的Turla在过去使用的宏所提供Wipbot,Skipper和ICEDCOFFEE。然而,相比于旧的版本,这次样本的宏进行了一些修改,主要是用于解码初始JavaScript的异或(xor)操作和使用“标记”字符串来找到攻击文档中的嵌入式有效载荷。
全新的XOR操作
以下是用于解码初始JavaScript有效内容的全新XOR操作的片段。 Turla组织在过去一年里一直改变这个操作中使用的值,可能是为了避免被轻而易举的被检测到,
Function Q7JOhn5pIl648L6V43V(EjqtNRKMRiVtiQbSblq67() As Byte, M5wI32R3VF2g5B21EK4d As Long) As Boolean
Dim THQNfU76nlSbtJ5nX8LY6 As Byte
THQNfU76nlSbtJ5nX8LY6 = 45
For i = 0 To M5wI32R3VF2g5B21EK4d – 1
EjqtNRKMRiVtiQbSblq67(i) = EjqtNRKMRiVtiQbSblq67(i) Xor THQNfU76nlSbtJ5nX8LY6
THQNfU76nlSbtJ5nX8LY6 = ((THQNfU76nlSbtJ5nX8LY6 Xor 99) Xor (i Mod 254))
Next i
Q7JOhn5pIl648L6V43V = True
End Function
这是一个用Python编写的函数,用于辅助初始有效载荷的解码,
def decode(payload, length):
varbyte = 45
i = 0
for byte in payload:
payload[i] = byte ^ varbyte
varbyte = ((varbyte ^ 99) ^ (i % 254))
i += 1
有效载荷偏移
恶意宏中的另一个变化是使用“marker”字符串来找到文档中的有效载荷偏移量。代替在ICEDCOFFEE中在文档末尾使用硬编码偏移量,宏使用以下代码段来标识有效负载的开始,
Set VUy5oj112fLw51h6S = CreateObject(“vbscript.regexp”)VUy5oj112fLw51h6S.Pattern = “MxOH8pcrlepD3SRfF5ffVTy86Xe41L2qLnqTd5d5R7Iq87mWGES55fswgG84hIRdX74dlb1SiFOkR1Hh”Set I4j833DS5SFd34L3gwYQD = VUy5oj112fLw51h6S.Execute(KqG31PcgwTc2oL47hjd7Oi)
第二层JavaScript
一旦找到标记,宏将从标记的结尾挖出“15387 + 1”字节(硬编码),并将该字节阵列传递到上述解码程序。最终结果是写入“%APPDATA% Microsoft Windows ”的JavaScript文件(mailform.js – MD5:05d07279ed123b3a9170fa2c540d2919),
然后使用参数为“NPEfpRZ4aqnh1YuGwQd0”的Wscript.Shell.Run()执行此文件。该参数是在下面详细解释的下一次迭代中使用的RC4密钥。
mailform.js的唯一功能是将存储在JavaScript文件中的第三层有效内容解码为Base64字符串。此字符串经过Base64解码,然后使用RC4密钥以上面提供的键作为参数(“NPEfpRZ4aqnh1YuGwQd0”)进行解密。最终结果是另一个JavaScript,它传递给eval()函数并执行。
第三层JavaScript
第三层有效载荷是执行C2信标和系统信息收集的地方。这个JS将开始根据运行的Windows版本将自己复制到相应的文件夹位置:
c: Users <USERNAME> AppData Local Microsoft Windows mailform.js
c: Users <USERNAME> AppData Local Temp mailform.js
c: Documents and Settings <USERNAME> Application Data Microsoft Windows mailform.js
持久性
接下来,它将通过写入以下注册表项在被攻击的目标上建立持久性:
键:HKEY_CURRENT_USER software microsoft windows currentversion run mailform
值:wscript.exe / b“<PATH_TO_JS> NPEfpRZ4aqnh1YuGwQd0”
分析
在建立其持久性之后,它将使用“cmd.exe / c”在目标系统上执行一系列命令,并将它们存储到名为“〜dat.tmp”的文件中,其中“mailform.js”是位于:
systeminfo
net view
net view /domain
tasklist /v
gpresult /z
netstat -nao
ipconfig /all
arp -a
net share
net use
net user
net user administrator
net user /domain
net user administrator /domain
set
dir %systemdrive%Users*.*
dir %userprofile%AppDataRoamingMicrosoftWindowsRecent*.*
dir %userprofile%Desktop*.*
tasklist /fi “modules eq wow64.dll”
tasklist /fi “modules ne wow64.dll”
dir “%programfiles(x86)%”
dir “%programfiles%”
dir %appdata%
一旦信息被收集到临时的“〜dat.tmp”文件中,JavaScript将其内容读入内存,RC4使用密钥“2f532d6baec3d0ec7b1f98aed4774843”对其进行加密,并在1秒休眠后删除该文件,实际上消除了受害者信息的存储并且在内存中只有加密的版本。
网络通信
利用以加密形式将受害者信息存储在存储器中,JavaScript然后将对在有效载荷中硬编码的C2服务器执行必要的回访。在这个有效载荷中看到的地址如下:
http:// soligro [。] com / wp-includes / pomo / db.php
http:// belcollegium [。] org / wp-admin / includes / class-wp-upload-plugins-list-table.php
应当注意,上述域似乎已被基于PHP脚本位置的开发者所放弃。
攻击目标的数据以POST请求的形式发送到C2服务器。 POST请求的标头包含唯一的User-Agent字符串,因为每个攻击目标系统会保持不变。通过执行以下步骤创建User-Agent字符串:
1.连接字符串“KRMLT0G3PHdYjnEm”+ <SYSTEM_NAME> + <USER NAME>
2.使用上述字符串作为以下函数的输入(系统名称和用户名已填写示例数据“Test”和“Admin”):
上面的函数将产生一个唯一的“UID”,它由一个16位数字组成,字符串“KRMLT0G3PHdYjnEm”附加到末尾。在上面使用系统名称“测试”和用户名“管理”的示例中,最终结果将是“2356406508689132KRMLT0G3PHdYjnEm”
function EncodeUserAgent() {
var out = “”;
var UserAgent = ‘KRMLT0G3PHdYjnEm’ + ‘Test’ + ‘Admin’;
for (var i = 0; i < 16; i++) {
var x = 0
for (var j = i; j < UserAgent.length – 1; j++) {
x = x ^ UserAgent.charCodeAt(j);
}
x = (x % 10);
out = out + x.toString(10);
}
out = out + ‘KRMLT0G3PHdYjnEM’;
return out;
}
3.前缀字符串“user-agent:”,“Mozilla / 5.0(Windows NT 6.1; Win64; x64); “到最后一步的结果。这将是受害者回调的唯一User-Agent值。在这个例子中,最终结果将是“user-agent:”,“Mozilla / 5.0(Windows NT 6.1; Win64; x64); 2356406508689132KRMLT0G3PHdYjnEm“。
POST请求将包含上面唯一的User-Agent字符串作为标题之一,以及之前收集的RC4加密受害者数据的Base64编码版本。
在POST请求之后,C2将以四种方式之一响应:
“good”
“exit”
“work”
“fail”
在答案为“good”的情况下,JavaScript将随后随机休眠一段时间,范围从3600-3900秒。
“exit”命令将令脚本正常退出,从而关闭C2服务器的通信,直到用户下次启动/登录为止。
“fail”命令用于卸载JavaScript及其持久性。收到此命令后,为持久性创建的“mailform.js”文件和注册表项将被删除。
“work”命令用于攻击目标系统,通过Wscript.shell.run()运行任意命令。首先检查文件“mailform.pif”是否存在于与JavaScript相同的目录中,如果存在,将删除它。然后,攻击目标将向C2发送POST请求,其方式与之前的信标流量大致相同,但略有不同。 User-Agent标头将保持与信标流中相同,但发送到C2的数据将由4字节字符串“work”组成。如果在该确认之后来自服务器的响应是“200 OK”,则系统将继续读取响应数据到存储器中,RC4使用相同的密钥“2f532d6baec3d0ec7b1f98aed4774843”加密它,然后写入“mailform.pif”文件。运行命令文件,JavaScript将休眠30秒,然后文件随后被删除。
结论
近几个月来,Turla组织的活动显着增加。将KopiLuwak添加到其现有的ICEDCOFFEE JavaScript有效负载中,表明该组织意在继续发展并提供新工具,以躲避已知恶意软件签名的检测。
根据目前的分析,似乎Turla攻击会继续严重依赖于Office文档中的嵌入式宏。虽然看起来觉得这样的复杂攻击用的竟然是的这么简单的基本技术,但是它们通过这种方法反复成功地损害高价值目标。建议大家在其企业中如果没有必要,禁用Office宏。
原文发布时间为:2017年2月6日
本文作者:xiaohui
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。