导语:来自CSE Cybsec Z-Lab的研究人员分析了一系列新的恶意软件,这些恶意软件是APT28组织开展的一项新的间谍活动的一部分。
一、简介
最近,一系列新的恶意软件样本被提交到主要的在线沙箱。我们注意到一些提交给Virus Total的样本被一些专家归因溯源到俄罗斯APT28组织。
APT28组织(又名Fancy Bear,Pawn Storm,Sednit,Sofacy,和Strontium)至少从2007年以来一直活跃,针对全球的政府、军事和安全组织。该组织还参与了针对2016年美国总统选举的一系列攻击。
在研究人员DrunkBinary(Twitter ,@DrunkBinary)的帮助下,我们获得了一组样本,与我们拥有的样本进行比较,以发现是否存在臭名昭着的APT28后门的新变种X-Agent。
我们所分析的攻击是多阶段的,用Delphi编程语言(APT28在其他行动中使用的语言)编写的初始dropper恶意软件从Internet下载第二阶段有效载荷并执行它。有效载荷使用HTTPS协议与服务器通信,因此无法窃听其生成的恶意流量。
我们还分析了另一个恶意DLL,它显然与以前的样本无关,但与俄罗斯APT组织的其他有效载荷有许多相似之处。这个恶意软件对我们来说特别有意思,因为它与名为“marina-info.net”的命令和控制服务器通联,明确提到意大利军事公司Marina Militare。这导致我们猜测恶意代码是针对意大利Marina Militare或与之相关的其他实体而开发的。
最后一个DLL似乎与之前的样本完全没有关联,但进一步的调查使我们相信它是APT28在此行动中用来攻陷目标系统的附加组件。
APT28拥有丰富的武器库,由大量模块组成,包括我们分析的X-Agent的dll组件。X-Agent是注入受害计算机的持久有效载荷,几乎适用所有计算机操作系统,也可以通过添加开发的新ad-hoc组件来增强特定网络攻击。在我们的案例中,当新的攻击行动正在进行时,该组件已提交到在线沙箱。我们不能排除APT组织开发后门以针对特定组织,包括意大利Marina Militare或任何其他承包商。在分析中,我们无法将恶意dll文件直接连接到X-Agent样本,但相信它们都是APT28支持的协调良好的攻击的一部分。
连接到marina-info.net的DLL可能是仅在特定条件发生时触发的最后阶段的恶意软件,例如当恶意软件感染具有属于特定范围的IP地址的系统时。
二、发现的样本
在本节中,我们将报告调查中分析的所有样本。
“87bffb0370c9e14ed5d01d6cc0747cb30a544a71345ea68ef235320378f582ef.exe”
“15486216ab9c8b474fe8a773fc46bb37a19c6af47d5bd50f5670cd9950a7207c.exe”
“e7dd9678b0a1c4881e80230ac716b21a41757648d71c538417755521438576f6.exe”
“e53bd956c4ef79d54b4860e74c68e6d93a49008034afb42b092ea19344309914.exe”
“sdbn.dll”
“upnphost.exe”
三、四个可执行文件背后隐藏着相同的恶意软件
在我们调查的新攻击行动中,上一节中列出的前四个可执行文件被用作感染媒介。样本显示为不同的有效载荷,但进一步的基本静态分析使我们发现它们是相同的恶意软件样本:
· 前两个样本是相同的,唯一的区别是第二个样本使用UPX工具打包。解压缩后,我们发现了相同的有效载荷以及与第一个样本相同的散列
· 第三个和第四个也是相同的,不同之处在于第四个是使用UPX工具打包的。
· 我们有两个不同的样本,然后能够从第二个系列中提取2个文件:经典的“.lnk”文件和“jpg”文件。
图1 – 提取的文件
这些文件似乎是经典的img和链接,但实际上jpg文件是第二个示例的可执行文件,并且在链接文件中隐藏了以下命令:
%systemroot%\System32\cmd.exe /c copy 12-033-1589(1).rar C:\Users\Public\12-033-1589(1).exe || copy 12-033-1589(2).jpg C:\Users\Public\12-033-1589(1).exe & start C:\Users\Public\12-033-1589(1).exe
1. upnphost.exe
执行该文件后,它会联系IP 45.124.132.127,定期发送在操作系统上使用命令行“cmd.exe / c tasklist&systeminfo”收集的一些信息。
根据WHOIS记录,该服务器位于香港:
使用POST方法通过HTTPS通信将信息发送到命令和控制服务器。
图2 – 嗅探的POST流量
一旦恶意软件将有关主机配置的信息发送到C2,它将下载另一个文件upnphost.exe,该文件是最终的有效载荷,存储路径为“%APPDATA%\Local\Temp”。
此外,可执行文件通过设置注册表项来实现持久性机制:
图3 – 持久性机制的注册表项
另一个文件与位于拉脱维亚的另一个命令和控制服务器46.183.218.37通联:
图4 – 关于46.183.218.37的Whois信息
2.我们提交给VirusTotal
我们还发现upnphost.exe文件是由我们提交给Virus Total的,可能是因为dropper实现了evasion技术。
为了分析dropper,我们修补了它。应用修补程序后,我们就能够分析恶意软件的完整恶意行为。
图5 – dropper的补丁点
恶意代码开始联系前面提到的命令和控制服务器并下载“upnphost.exe”文件。
下面是我们获取的在VirusTotal上提交的修补版本的结果:
图6 – VirusTotal得分
3.AutoIt 脚本
使用AutoIt语言编写的脚本管理与命令和控制服务器的通信。此脚本作为资源嵌入upnphost.exe文件中,并在启动时与HTTPS中的其他服务器通信,发送有关受害者计算机的一些信息。
图7 – 一段反编译代码
上图显示了一段AutoIt脚本的反编译代码,其中IP地址和路径以及用户代理使用十六进制编码伪装。
解码参数后,我们获取了用于通联C&C的IP地址,路径和用户代理,并发回有关目标系统的信息。
另一个特点是提供HTTPS通信代码的函数的名称。其名称为checkupdate(),似乎恶意软件被指示定期联系C&C等待新命令。
下图显示了多阶段攻击:
图8 – 多阶段攻击方案
4.sdbn.dll
此文件是从威胁情报平台获取的,并被标记为APT28样本,如同之前的文件。目前尚不清楚此样本是否与之前的样本相关联,但它可能属于同一个感染行动,因为它是在几个在线沙箱中的同一时间段上传的。
与之前文件的另一个共同特点是,它是用Delphi编程语言编写的,就像四个初始dropper文件一样。很难找到用Delphi语言编写的恶意软件,但其他安全公司之前进行的调查证实,APT28组已经在过去的攻击行动中使用过该语言编写的恶意软件。
从sdbn.dll的分析中得出的最重要的证据是,它联系了域名:marina-info.net,明确提到了意大利语Marina Militare。该域名已解析为位于荷兰的IP 191.101.31.250:
图9 – 关于“marina-info.net”的Whois
在本样本中,也通过使用HTTPS协议来执行与C2的通信。我们发现了至少有三条与自定义用户代理标头联系的路径:
表1 – 发现的URL和路径
与upnphost.exe恶意软件一样,此可执行文件会定期联系命令控制服务器等待新命令。但是,我们发现服务器始终响应403状态代码,对恶意软件本身发送的请求也是如此。
图10 – 来自C2C的响应
这种行为可能是服务器实施的服务器端控制的结果,只允许来自特定IP地址的请求,或者只是被攻击者故意禁用,可能是因为他们认为已经被受害者或安全人员发现。它可能是攻击者实施的安全机制,应对安全公司进行严格的调查。此外,我们决定进一步调查VirusTotal上这个新文件的检测率。当我们开始分析它时为零,这意味着威胁完全未被发现,目前恶意代码的检测率为35/65。
四、攻击地图
在本节中,我们展示威胁图,其中包含我们分析的样本所通联的各种IP地址。
图11 – 威胁地图
正如我们所看到的,黑客组织所覆盖的攻击面非常宽:欧洲有两个不同的C2C,另一个在中国,用于误导分析,这会在重建完整的网络攻击时造成混乱。
Yara rules
import "pe" rule Dropper_APT28XAGENTJuly2018 { meta: description = "Yara Rule for dropper of APT28 XAGENT July2018" author = "CSE CybSec Enterprise - Z-Lab" last_updated = "2018-07-13" tlp = "white" category = "informational" strings: $a = {8B 45 FC 8B 10 FF} $b = {33 2E 34 2D 31 39} condition: (pe.number_of_sections == 9 and pe.sections[3].name == ".bss" and all of them) or (pe.number_of_sections == 3 and pe.sections[0].name == "UPX0" and pe.sections[1].name == "UPX1" and pe.number_of_resources == 70 and pe.resources[61].type == pe.RESOURCE_TYPE_RCDATA and pe.resources[60].type == pe.RESOURCE_TYPE_RCDATA and pe.resources[59].type == pe.RESOURCE_TYPE_RCDATA) } rule FirstPayload_upnphost_APT28XAGENTJuly2018 { meta: description = "Yara Rule for APT28 XAGENT July2018 First Payload" author = "CSE CybSec Enterprise - Z-Lab" last_updated = "2018-07-13" tlp = "white" category = "informational" strings: $a = {56 AB 37 92 E8} $b = {41 75 74 6F 49 74} condition: pe.number_of_resources == 26 and pe.resources[19].type == pe.RESOURCE_TYPE_RCDATA and pe.version_info["FileDescription"] contains "Compatibility" and all of them } rule SecondPayload_sdbn_APT28XAGENTJuly2018 { meta: description = "Yara Rule for APT28 XAGENT July2018 Second Payload sdbn.dll" author = "CSE CybSec Enterprise - Z-Lab" last_updated = "2018-07-13" tlp = "white" category = "informational" strings: $a = {0F BE C9 66 89} $b = {8B EC 83 EC 10} condition: pe.number_of_sections == 6 and pe.number_of_resources == 1 and pe.resources[0].type == pe.RESOURCE_TYPE_VERSION and pe.version_info["ProductName"] contains "Microsoft" and all of them }