使用SQL数据库作为C2:拉丁美洲银行木马Mekotio新型变种分析
2020-08-21 11:10:00 Author: www.4hou.com(查看原文) 阅读量:386 收藏

0x00 概述

在这一系列文章中,我们将介绍Mekotio,这是一类拉丁美洲的银行木马,主要针对巴西、智利、墨西哥、西班牙、秘鲁和葡萄牙地区发动攻击。该恶意软件家族的最新变种具有一个显著的特点,就是使用SQL数据库作为C&C服务器。

受Mekotio影响的国家:

1.png

就像我们之前介绍的许多其他拉丁美洲银行木马一样,Mekotio有着非常混乱的发展道路,其功能经常被修改。根据其内部版本,我们相信攻击者同时开发了多个变种。但是,和Casbaneiro一样,这些变种不可能彼此独立,所以我们将它们统称为Mekotio。

0x01 特点

Mekotio是典型的拉丁美洲木马,至少从2015年就开始活跃。因此,它通过向受害者显示伪造的弹出窗口的方式进行攻击,试图诱导用户泄露敏感信息。这些窗口是针对拉丁美洲的银行和其他金融机构精心设计的。

Mekotio收集有关受害者的如下信息:

1、防火墙配置;

2、是否具有管理员权限;

3、安装的Windows操作系统版本;

4、是否安装了反欺诈防护产品(GAS Tecnologia Warsaw和IBM Trusteer);

5、已安装的反恶意软件解决方案列表。

Mekotio通过使用Run键或在启动文件夹中创建LNK文件的方式来确保具有持久性。

与大多数拉丁美洲银行木马一样,Mekotio具有几种典型的后门功能。它可以截取屏幕截图、操作窗口、模拟鼠标和键盘操作、重新启动主机、限制对各种银行网站的访问、自我更新。某些变种还可以通过替换剪贴板中的比特币钱包地址来窃取比特币,同时还会窃取Google Chrome浏览器存储的凭据。其中,还包含一个命令,会尝试删除C:\Windows目录下的所有文件和文件夹,从而影响受害者的计算机无法正常运行。

要识别Mekotio恶意软件,一种方式是查看木马在多个场景下是否显示出特定的消息框(如下图所示)。

所有Mekotio变种共同使用的消息框:

2.png

内容翻译:我们当前正对网站进行安全更新!请稍后再试!将会采用以下新安全措施:(1) 使用新的安全插件,(2) 调整网站外观。您的系统将会重新启动,以完成更新操作。

为了通过键盘记录功能窃取用户密码,Mekotio禁用了Internet Explorer中的“自动完成”选项。这个功能可以记住用户填写过的各种字段,帮助IE浏览器用户节省时间。Mekotio通过更改以下Windows注册表将其关闭:

    HKCU\Software\Microsoft\windows\CurrentVersion\Explorer\AutoComplete\
        AutoSuggest = “No”
    HKCU\Software\Microsoft\Internet Explorer\Main\
        Use FormSuggest = “No”
        FormSuggest Passwords = “No”
        FormSuggest PW Ask = “No”

0x02 分发

我们认为,Mekotio的主要分发方式是通过垃圾邮件。自2018年以来,我们已经观察到该恶意软件家族使用的38个不同的分发链。这些分发链中的大多数都包含多个阶段,最终会下载一个ZIP压缩包,这也是典型的拉丁美洲银行木马的特征。在本章,我们会详细分析两个比较常见的分发链。

用于分发Mekotio的垃圾邮件样本:

3.png

内容翻译:尊敬的公民,您要求的数据:...下载收据。

2.1 传递内容

第一个分发链包含四个连续的阶段,如下图所示。这里使用一个简单的BAT投放程序投放一个VBScript下载程序,并使用两个命令行参数来执行该下载程序,分别是自定义HTTP动词(111SA)和下一阶段的URL。下载程序使用自定义User-Agent(“MyCustomUser”以及其变化形式)从提供的URL下载下一阶段程序,也就是另一个下载程序。第三步,在执行脚本之前,首先下载一个PowerShell脚本,然后在脚本主体中对URL进行更正,从该URL下载Mekotio。然后,PowerShell脚本从更正后的URL下载Mekotio,安装并执行恶意软件。执行过程我们将在后面详细描述。

Mekotio使用的一个分发链,在不同阶段之间传递内容:

4.png

关于这个分发链,有两点值得关注。第一是这里使用了自定义的User-Agent标头和自定义的HTTP动词,而根据这些特征,可以用于识别Mekotio的某些网络活动。

第二个值得关注的地方是内容的传递,包括作为命令行参数传递,和修改下一阶段的主体。这是一种简单但有效的反分析技术,因为如果分析人员没有匹配的投放程序,仅拿到了第一个下载程序,那么将无法得到URL和恶意软件下一阶段所需的自定义HTTP动词。同样,如果没有匹配的第一个下载程序,仅拿到了第二个下载程序也没有用,这样将不会得到URL。如果没有前后不同阶段的连贯操作,分析过程会变得更加困难。

2.2 带有嵌入式JavaScript的MSI

与许多其他拉丁美洲的银行木马一样,Mekotio在一些最新的分发链中利用了MSI。在这种情况下,分发链要变得简短很多,因为只有一个JavaScript被嵌入到MSI中并执行,而这也是最后一个阶段。

与第一个分发链中PowerShell的最后阶段进行比较,有一些明显的相似之处。主程序(如下图所示)是安装例程,该例程会在下载并解压ZIP压缩包后调用,该程序根据文件大小重命名解压缩的ZIP压缩包的内容。而这与下一章中描述的执行方法紧密相关。

在Mekotio使用的JavaScript和PowerShell脚本中安装例程的区别,这里体现了基于文件大小进行判断的逻辑:

5.png

2.3 通过滥用AutoIt解释器执行

Mekotio通常是通过滥用合法的AutoIt解释器来执行的。实际上,ZIP压缩包中除了Mekotio银行木马外,还包含合法的AutoIt解释程序、AutoIt加载程序或注入程序脚本。分发链的最后阶段会执行AutoIt解释程序,将加载程序或注入程序脚本传递给它进行解释。然后,该脚本执行银行木马。下图说明了这个完整的过程。

Mekotio最常用的执行方法:

6.png

Mekotio并不是唯一使用这种方法的拉丁美洲银行木马,但它比其他同类木马更值得关注。

0x03 密码学

本质上,用于加密Mekotio二进制文件中字符串的算法与Casbaneiro使用的算法相同。但是,Mekotio的许多变种都会修改数据在解密之前的处理方式。可以忽略硬编码解密密钥的前几个字节,也可以忽略加密字符串的某些字节。一些变种还会使用Base64对加密的字符串进行编码。这些方法的细节都各不相同。

0x04 C&C服务器通信

4.1 将SQL数据库作为C&C服务器

Mekotio的某些变种与Casbaneiro一样,其网络协议基于Delphi_Remote_Access_PC。除了这种情况之外,Mekotio会使用SQL数据库作为其C&C服务器。在拉丁美洲的银行木马中,这种技术此前也曾经遇到过。Mekotio似乎不依赖于SELECT命令,而是依赖于执行SQL的过程。这样一来,我们没办法立即分析出基础数据库的外观。但是,登录字符串仍然以二进制形式进行硬编码。

4.2 生成C&C服务器地址

对于Mekotio如何获取其C&C服务器的地址,我们已经观察到三种不同的算法。我们将按照发现它们的时间先后顺序来进行描述。

4.2.1 基于伪造域名的硬编码列表

第一种方法依赖于两个硬编码的域名列表,一个用于生成C&C域名,另一个用于端口。会从这两个列表中选择一个随机域名进行解析。IP地址会被修改。在生成C&C域名时,会从解析的IP地址的最后一个八位字节中减去一个硬编码的数字。在生成C&C端口时,将八位数字连接在一起形成一个数字。为了清晰描述这一过程,我们在Python中实现了这两种算法。我们发现,这种算法非常类似于Casbaneiro所使用的方法。

用于从硬编码的域名列表中生成C&C域名和端口的代码:

def generate_domain(base_domains, num):
       domain = to_ip(random.choice(base_domains))
       octets = domain.split(".")
       octets[3] = chr(int(octets[3]) - num)
       return octets.join(".")
 
def generate_port(base_domains):
       domain = to_ip(random.choice(base_domains))
       return int(domain.split(".").join(""))

4.2.2 基于当前时间

第二种方法是利用了基于当前本地时间的域名生成算法(DGA)。该算法用到了星期、月份和小时,并使用它们来生成单个字符串。然后,会计算该字符串的MD5,以十六进制字符表示。其结果再加上硬编码后缀就组成了C&C服务器域名(端口被硬编码到二进制文件中)。下面是我们对该算法的二进制实现。

用于根据当前时间生成C&C域名的代码:

day_names = {
       0: "MON",
       1: "TUE",
       2: "WED",
       3: "THU",
       4: "FRI",
       5: "SAT",
       6: "SUN",
}
 
hour_names = {
       7: "AM02",
       8: "AM03",
       9: "AM04",
       10: "AM05",
       11: "AM06",
       12: "PM01",
       13: "PM02",
       14: "PM03",
       15: "PM04",
       16: "PM05",
       17: "PM06"
}
 
def get_hour_name(hour):
       if hour = 18:
              return "AM01"
       else
              return hour_names[hour]
 
def generate_domain(suffix):
       time = get_current_time()
       dga_data = "%s%02d%s" % (day_names[time.dayOfWeek], time.day, hour_names[time.hour])
       dga_data = hexlify(md5(dga_data))
       return dga_data.lower() + suffix

4.2.3 基于当前日期

第三种算法与第二种算法有些相似,它与根据当前时间创建的字符串不同,会在每天使用不同的后缀。此外,它还会以类似的方式生成C&C的端口。下面是这种算法的Python实现方式。

用于根据当前日期生成C&C域名和端口的代码:

def generate_domain(domains_list, subdomain):
       time = get_current_time()
       dga_data = "%02d%02d%s" % (time.day, time.month, subdomain)
       dga_data = hexlify(md5(dga_data))
       return dga_data[:20] + "." + domains_list[time.day - 1]
 
def generate_port(portstring):
       time = get_current_time()
       return int("%d%02d%d" % (time.day, time.dayOfWeek, time.month))

0x05 变种分析

我们已经提到过,与其他拉丁美洲的银行木马类似,Mekotio有着一个非常混乱的开发周期。但是,除此之外,还有迹象表明攻击者同时开发了Mekotio的多个变种。

我们发现了两个关键指标,一个是用于内部版本控制,另一个是Mekotio收集的有关受害者计算机信息的字符串格式。我们从中发现了四种不同的版本控制方法。

1、数字版本号:001、002、072、39A等;

2、日期版本号:01-07、15-06、17-10、20-09等;

3、完整日期版本号:02_03_20、13_03_20、26_05_20等;

4、编号和日期混合的版本号:103-30-09、279-07-05、293-25-05等。

其中的每一个版本,都与被窃取数据字符串的特定格式相关联。由于我们同时发现了这些版本中的多个版本,因此我们可以判断,可能有多个威胁参与者使用Mekotio的不同变种。

0x06 总结

在本文中,我们分析了自2015年以来一直活跃的拉丁美洲银行木马Mekotio。与这一系列文章中分析的其他木马一样,Mokotio具有恶意软件的共同特征,例如使用Delphi编写、使用伪造的弹出窗口、包含后门功能、针对使用西班牙语和葡萄牙语的特定国家等。

我们专注于分析这个银行木马最值得关注的功能,例如滥用合法的AutoIt解释器、使用SQL数据库作为C&C服务器、使用多种方式生成C&C服务器地址等。

在这里,我们还关注到了一些与Casbaneiro类似的功能。

如果有任何疑问,请通过[email protected]与我们联系。威胁指标也可以在我们的GitHub Repo中查看:https://github.com/eset/malware-ioc/tree/master/mekotio

0x07 威胁指标

7.1 哈希值

AEA1FD2062CD6E1C0430CA36967D359F922A2EC3        Mekotio银行木马(SQL变种) Win32/Spy.Mekotio.CQ

8CBD4BE36646E98C9D8C18DA954942620E515F32  Mekotio银行木马 Win32/Spy.Mekotio.O

297C2EDE67AE6F4C27858DCB0E84C495A57A7677        Mekotio银行木马 Win32/Spy.Mekotio.DD

511C7CFC2B942ED9FD7F99E309A81CEBD1228B50  Mekotio银行木马 Win32/Spy.Mekotio.T

47C3C058B651A04CA7C0FF54F883A05E2A3D0B90 Mekotio银行木马 Win32/Spy.Mekotio.CD

ACC07666F4C1D4461D3E1C263CF6A194A8DD1544       AutoIt v3脚本解释器   合法程序

7.2 网络通信

User-Agent: “MyCustomUser”, “4M5yC6u4stom5U8se3r” (and other variations)

HTTP verb: “111SA”

7.3 比特币钱包

1PkVmYNiT6mobnDgq8M6YLXWqFraW2jdAk

159cFxcSSpup2D4NSZiuBXgsGfgxWCHppv

1H35EiMsXDeDJif2fTC98i81n4JBVFfru6

0x08 MITRE ATT&CK技术

8.1 初始访问

(1) 网络钓鱼(T1566.002):Mekotio分发链通常从电子邮件中的恶意链接开始。

8.2 执行

(1) 命令和脚本解释器(T1059):Mekotio滥用合法的AutoIt解释器实现之星。

(2) 命令和脚本解释器 - PowerShell(T1059.001):Mekotio使用PowerShell执行其分发链阶段。

(3) 命令和脚本解释器 - Visual Basic(T1059.005):Mekotio使用VBScript执行其分发链阶段。

8.3 持久化

(1) 引导或登录时自动启动执行 - 注册表运行键或启动文件夹(T1547.001):Mekotio通过使用Run键或在启动文件夹中创建LNK文件来确保持久化。

8.4 逃避防御

(1) 通过签名的二进制代理执行(T1218):Mekotio通过运行合法的AutoIt解释器并传递一个加载程序脚本给解释器的方式来执行。

8.5 凭据访问

(1) 密码存储中的凭据 - 来自Web浏览器(T1555.003):Mekotio窃取Google Chrome浏览器中的凭据。

8.6 侦查

(1) 应用程序窗口侦查(T1010):Mekotio根据窗口名称来侦查各种安全工具和银行应用程序。

(2) 文件和目录侦查(T1083):Mekotio根据文件系统路径发现银行防护软件。

(3) 软件侦查 - 安全软件侦查(T1518.001):Mekotio检测银行防护产品的存在。

(4) 系统信息侦查(T1082):Mekotio收集有关受害者计算机的信息,例如防火墙状态和Windows版本。

8.7 收集

(1) 捕获输入 - 按键记录(T1056.001):Mekotio能够捕获按键输入。

8.8 命令与控制

(1) 动态解析 - 域名生成算法(T1568.002):Mekotio使用DGA生成其C&C域名。

(2) 动态解析 - DNS算法(T1568.003):Mekotio使用一种算法来修改解析的IP地址,以获得实际的C&C地址。

(3) 非应用层协议(T1095):在不使用SQL方式的Mekotio变种中,网络协议是基于Remote_Delphi_Access_PC。

8.9 渗出

(1) 通过C2通道渗出:Mekotio将检索到的数据发送到其C&C服务器。

本文翻译自:https://www.welivesecurity.com/2020/08/13/mekotio-these-arent-the-security-updates-youre-looking-for/如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/jL9R
如有侵权请联系:admin#unsafe.sh