Go语言勒索软件攻击工业控制系统

工控安全 2年前 (2022) admin
428 0 0

FortiGuard 实验室在2020 5 月底左右获得了 EKANS 样本进行分析

MD5

SHA256

May Variant

 

47EBE9F8F5F73F07D456EC12BB49C75D

2ED3E37608E65BE8B6E8C59F8C93240BD0EFE9A60C08C21F4889C00EB6082D74

 

 

June Variant

 

ED3C05BDE9F0EA0F1321355B03AC42D0

D4DA69E424241C291C173C8B3756639C654432706E7DEF5025A649730868C4A1


这些样本中的每一个都是用 GO 编程语言编写的。GO 编程语言于 2009 年左右首次出现,并在恶意软件社区中慢慢流行起来。 

恶意软件分析的难点——“去”创建自定义 IDA 插件

与其他编程语言相比,GO 的优点之一是代码可以轻松编译以在不同的平台和架构上运行,例如 MacOS、Microsoft Windows 和 Linux 操作系统。然而,缺点之一;是二进制文件的大小明显更大。一个简单的“Hello World”程序可以生成 1 MB 大小的二进制文件。为了应对庞大的文件大小,GO 允许程序员在编译期间剥离二进制文件。大多数被删除的信息通常由调试器使用。 

事实证明,这个大小问题实际上对恶意软件作者很有帮助。通过拥有更大的文件大小,手动分析将不可避免地花费更长的时间。此外,它很容易被忽视,因为典型的恶意软件文件首先具有更小的文件大小。通过剥离调试信息的二进制文件,恶意软件分析师将有另一个绊脚石需要克服。 

仔细查看给定的文件,我们可以看到它们确实被剥离了,并且没有为恶意软件分析师提供任何线索。

Go语言勒索软件攻击工业控制系统


图 1. 要分析的函数数量

典型的恶意软件可能有数百种功能,其中一些已经在恶意软件分析行业的非官方默认反汇编程序 IDA 中得到认可。然而,使用剥离的 GO 二进制文件,IDA 无法识别正常的库文件,从而使恶意软件分析师有 5000 多个函数需要筛选。 

由于这个问题,我们在内部开发了一个特定于 EKANS 的 IDA 插件,以帮助结合其他特定于 GO 的分析技术进行分析。

Go语言勒索软件攻击工业控制系统


图 2. FortiGuard Labs 开发的自定义 IDA 插件

如上所示,在 EKANS 的 5 月变体中,有超过 2100 个加密字符串、近 2400 个混淆函数名和超过 1200 个字符串需要修复。

这两种变体都会执行您预期的所有典型勒索软件活动,例如加密文件并留下勒索字条,告诉受害者通过指定的电子邮件地址与他们联系,以接收有关如何支付赎金和解密其文件的说明。但他们也执行不那么典型的行动。以下是按顺序列出的这些活动的高级列表,主要的显着区别是关闭主机防火墙,在 6 月变体中可以找到:

确认目标环境 

隔离受感染的系统(主机防火墙) 

文件加密过程中使用的公钥 RSA Key 被解码

识别并停止特定的服务和进程

删除卷影副本 

加密文件 

关闭主机防火墙

Go语言勒索软件攻击工业控制系统


图 3. EKANS 勒索软件功能的高级流程

需要注意的是,关闭主机防火墙似乎是恶意软件家族功能的新增功能。这在较旧的 May 变体中不存在。另一个有趣的补充是在加密之前打开防火墙,可能是为了通过阻止来自代理的任何通信来检测 AV 和其他防御解决方案。

确认目标环境 

勒索软件首先尝试通过解析属于受害者公司的域来确认其目标,并将解析的域与特定 IP 进行比较。如果域/IP 不可用,则例程退出。 

Go语言勒索软件攻击工业控制系统


4. 认其目标的恶意软件

深入研究环境检查,我们注意到 EKANS 的 May 变体试图解析 ADS.****.COM 的 IP 地址。该子域属于专门治疗慢性肾脏疾病的全球医疗保健提供商。

Go语言勒索软件攻击工业控制系统


图 5. 子域 IP 检查

这个子域似乎并不公开,这意味着 May 变种只有在渗透到网络时才会执行。如果这成功,则执行另一次检查。EKANS 检查 “10.2.10.4” 是否是该子域的 IP 地址。

Go语言勒索软件攻击工业控制系统


图 6. IP 比较

EKANS 的 May 变体正在寻找的另一条信息是当前机器在域中的角色。

Go语言勒索软件攻击工业控制系统


图 7. 域角色检查

将执行 WMI 查询以确定这一点。Microsoft  域角色定义如下。

Go语言勒索软件攻击工业控制系统


EKANS 显然希望感染网络上的域控制器。如果成功,这会影响网络域内的安全认证请求,从而严重影响联网用户。有了前面提到的数据点,EKANS 将有足够的能力来构建一个合适的互斥锁。

Go语言勒索软件攻击工业控制系统


图 8. Mutex 创建

互斥体将由字符串 “Global” 附加 “EKANS” 和IP 字符串的一部分组成。顺便说一句,EKANS 的作者可能是 The Highlander 电影/电视剧的粉丝,其中“只能有一个”这句话很流行。

Go语言勒索软件攻击工业控制系统


图 9. 退出消息

隔离受感染的系统 

FortiGuard Labs 工程师遇到的勒索软件 6 月变种所采取的下一步是恶意软件执行以下 netsh 命令,以阻止任何可能干扰加密过程的入站和出站流量:

netsh advfirewall 设置所有配置文件防火墙策略阻止入站,阻止出站

netsh advfirewall 将 allprofiles 状态设置为 on 

Go语言勒索软件攻击工业控制系统图 10. 隔离受感染系统的恶意软件

Go语言勒索软件攻击工业控制系统


图 11. netsh.exe 运行以更改主机防火墙设置。

公共 RSA 密钥已解码

接下来,恶意软件会检查其加密功能,就像许多勒索软件变体一样,它嵌入在恶意软件中。它使用 RSA 加密数据,并使用 ParsePKCS1PublicKey 函数解析公钥。它是 XOR 解码的。

Go语言勒索软件攻击工业控制系统


图 12. RSA 密钥解码

Go语言勒索软件攻击工业控制系统


图 13. ParsePKCS1PublicKey 函数正在解析的公钥

识别并停止服务和进程 

在这两种变体中,EKANS 都会解码与服务相关的字符串并尝试停止它们。出于某种原因,May 变体包含重复的服务。

Go语言勒索软件攻击工业控制系统


图 14. 服务冗余

总体而言,有九项服务被反复解密,以试图通过 EKANS 的 5 月变体阻止它们。他们是: 

MSSQLFDLauncher$PROFXENGAGEMENT、ReportServer$TPS、SQLBrowser、MSSQLServerADHelper、SQLAgent$PROD、msftesql$PROD、SQLAgent$SOPHOS、VeeamEnterpriseManagerSvc 和 ArcserveUDPPS

在解码所有必需的字符串后(参见附录 A),勒索软件的两种变体都会打开 SCM (OpenSCManager) 并使用 EnumServicesStatusEx。它迭代服务并停止解码字符串列表中包含的任何服务。 

服务停止操作停止:

开放服务(SC_MANAGER_ENUMERATE_SERVICE)

服务控制 (SERVICE_CONTROL_STOP)

服务查询 

Go语言勒索软件攻击工业控制系统


图 15. 识别和停止特定服务。

识别并终止进程 

然后,勒索软件会枚举正在运行的进程并终止预定义进程列表中的每个进程(参见附录 B)。以下代码处理进程终止:

Go语言勒索软件攻击工业控制系统


图 16. 恶意软件终止特定进程。

删除卷影副本 

EKANS 然后删除卷影副本,这是通过 WMI 的 WbemScripting.SWbemNamedValueSet 对象完成的。定位卷影副本对象的查询是常规的:

选择 * 从 Win32_ShadowCopy

这是勒索软件的常见行为,使恢复文件变得更加困难。有很多方法可以实现这一目标。如果您有兴趣了解更多信息,请阅读 Ben Hunter 的“ Stomping Shadow Copies – A second Look into Deletion Methods ”博客。 

May 变体通过使用 COM 编程来实现这一点。EKANS 通过 COM 对象连接到 WMI 服务,以便使用类似于 https://raw.githubusercontent.com/go-ole/go-ole/master/guid.go的代码使用共享库,其他各种合法的GO 软件,以及其他恶意二进制文件。

Go语言勒索软件攻击工业控制系统


图 17. 使用的 COM 对象

加密文件 

在运行加密功能之前,勒索软件会解码所有相关文件扩展名的字符串以进行加密(参见附录-C)。 

为了使系统至少能够启动和加载,某些文件和文件夹会从加密过程中跳过。这些文件在 EKANS 的 May 变体中被避免使用。

Go语言勒索软件攻击工业控制系统


图 18。May 变体避免的文件

同时,路径中包含以下目录的任何文件和文件夹也会被 May 变体从文件加密过程中跳过。

Go语言勒索软件攻击工业控制系统


图 19。May Variant 避免的文件夹

May 变体也避免了以下文件类型。

Go语言勒索软件攻击工业控制系统


图 20. May Variant 避免的文件类型

这两种变体还构建了以下用于排除加密目标的正则表达式。

Go语言勒索软件攻击工业控制系统


图 21. 不包括加密目标的恶意软件

然而,在实际的文件加密过程中,目标文件类型列表实际上并没有被勒索软件的 May 变种检查。May 变体将加密任何文件类型,只要它不违反任何回避规则。

加密细节似乎与此处描述的操作方法相同:  https://www.ccn-cert.cni.es/pdf/5045-ccn-cert-id-15-20-snake-locker-english-1/file。 html

公共 RSA 密钥用于加密用于加密文件的每个 AES 密钥。

文件加密是通过 AES CTR 模式,使用随机密钥和随机 IV。

AES 密钥使用 RSA-OAEP 加密,并使用 ripemd160 作为其散列算法。

AES 加密密钥与原始文件名一起使用 GOB(Golang 的一种算法)进行编码,并写在文件末尾。

首先,它使用 GetLogicalDriveStringsW 枚举从 A 到 Z 的所有有效驱动器号。 

Go语言勒索软件攻击工业控制系统


图 22. 驱动器枚举

有趣的是,下图显示的代码显示,EKANS 的 May 变体仅针对可移动驱动器(如拇指驱动器)和固定驱动器(如硬盘或闪存设备)。他们不会尝试感染网络上的机器。 

Go语言勒索软件攻击工业控制系统


图 23. 目标驱动器类型

然后它为此类驱动器创建多个线程。

Go语言勒索软件攻击工业控制系统


图 24.枚举有效的驱动器号。

然后每个线程创建八个执行加密的工作程序(线程)。这些工作人员使用通道来同步自己。 

Go语言勒索软件攻击工业控制系统


图 25. 执行加密的线程

创建八个工作人员后,线程等待他们完成。在所有这些都完成后,它通过生成一个随机的 5 位字符串来重命名系统上的文件,然后将其附加到文件的名称中。

Go语言勒索软件攻击工业控制系统


图 26.恶意软件重命名文件。

单文件加密流程比较简单:

打开一个文件

 检查文件末尾是否已经有 EKANS标记。如果没有,它会通过 AES 加密文件,如以下循环所示:

加密(它会覆盖文件,而不是创建新文件)

首先,启动一个密码:

Go语言勒索软件攻击工业控制系统


图 27. 恶意软件启动 Cipher

加密过程完成后,EKANS 的 5 月变体会将赎金记录作为 “Decrypt-Your-Files.txt” 放在根系统驱动器或用户桌面上。 

Go语言勒索软件攻击工业控制系统


图 28. 赎金票据

关闭主机防火墙


参考链接:https://www.fortinet.com/blog/threat-research/ekans-ransomware-targeting-ot-ics-systems?fbclid=IwAR2idYd0RU3yuwcbx332nCphC2CjmUUI4_Sc-rhdFffmB3Z_VnNzqK9xtng

原文始发于微信公众号(IRT工业安全红队):Go语言勒索软件攻击工业控制系统

版权声明:admin 发表于 2022年3月22日 下午7:14。
转载请注明:Go语言勒索软件攻击工业控制系统 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...