0x00 概述
在这一系列文章中,我们将介绍Mekotio,这是一类拉丁美洲的银行木马,主要针对巴西、智利、墨西哥、西班牙、秘鲁和葡萄牙地区发动攻击。该恶意软件家族的最新变种具有一个显著的特点,就是使用SQL数据库作为C&C服务器。
受Mekotio影响的国家:
就像我们之前介绍的许多其他拉丁美洲银行木马一样,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变种共同使用的消息框:
内容翻译:我们当前正对网站进行安全更新!请稍后再试!将会采用以下新安全措施:(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的垃圾邮件样本:
内容翻译:尊敬的公民,您要求的数据:...下载收据。
2.1 传递内容
第一个分发链包含四个连续的阶段,如下图所示。这里使用一个简单的BAT投放程序投放一个VBScript下载程序,并使用两个命令行参数来执行该下载程序,分别是自定义HTTP动词(111SA)和下一阶段的URL。下载程序使用自定义User-Agent(“MyCustomUser”以及其变化形式)从提供的URL下载下一阶段程序,也就是另一个下载程序。第三步,在执行脚本之前,首先下载一个PowerShell脚本,然后在脚本主体中对URL进行更正,从该URL下载Mekotio。然后,PowerShell脚本从更正后的URL下载Mekotio,安装并执行恶意软件。执行过程我们将在后面详细描述。
Mekotio使用的一个分发链,在不同阶段之间传递内容:
关于这个分发链,有两点值得关注。第一是这里使用了自定义的User-Agent标头和自定义的HTTP动词,而根据这些特征,可以用于识别Mekotio的某些网络活动。
第二个值得关注的地方是内容的传递,包括作为命令行参数传递,和修改下一阶段的主体。这是一种简单但有效的反分析技术,因为如果分析人员没有匹配的投放程序,仅拿到了第一个下载程序,那么将无法得到URL和恶意软件下一阶段所需的自定义HTTP动词。同样,如果没有匹配的第一个下载程序,仅拿到了第二个下载程序也没有用,这样将不会得到URL。如果没有前后不同阶段的连贯操作,分析过程会变得更加困难。
2.2 带有嵌入式JavaScript的MSI
与许多其他拉丁美洲的银行木马一样,Mekotio在一些最新的分发链中利用了MSI。在这种情况下,分发链要变得简短很多,因为只有一个JavaScript被嵌入到MSI中并执行,而这也是最后一个阶段。
与第一个分发链中PowerShell的最后阶段进行比较,有一些明显的相似之处。主程序(如下图所示)是安装例程,该例程会在下载并解压ZIP压缩包后调用,该程序根据文件大小重命名解压缩的ZIP压缩包的内容。而这与下一章中描述的执行方法紧密相关。
在Mekotio使用的JavaScript和PowerShell脚本中安装例程的区别,这里体现了基于文件大小进行判断的逻辑:
2.3 通过滥用AutoIt解释器执行
Mekotio通常是通过滥用合法的AutoIt解释器来执行的。实际上,ZIP压缩包中除了Mekotio银行木马外,还包含合法的AutoIt解释程序、AutoIt加载程序或注入程序脚本。分发链的最后阶段会执行AutoIt解释程序,将加载程序或注入程序脚本传递给它进行解释。然后,该脚本执行银行木马。下图说明了这个完整的过程。
Mekotio最常用的执行方法:
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/如若转载,请注明原文地址: