2023年11月,IPStorm基础设施被FBI拆除,同时对与IPStorm恶意软件有关的相关个人进行了定罪。这是当前打击网络威胁工作中的一个重要里程碑。
本文将对IPStorm恶意软件的变体和功能进行深入介绍。
2019年5月,来自anomaly的研究人员发现了一种新的针对Windows的Golang恶意软件,他们将其命名为IPStorm。IPStorm是一种僵尸网络,它滥用名为星际文件系统(IPFS)的合法点对点(p2p)网络作为掩盖恶意流量的手段。据发现,该恶意软件允许攻击者在受害者的Windows计算机上执行任意PowerShell命令。
研究人员最近确定了针对各种Linux架构(ARM, AMD64, Intel 80386)和平台(服务器,Android, IoT)的IPStorm新Linux变体并检测到一个macOS变体。在本文发布时,macOS变体和大多数Linux样本在VirusTotal中完全未被检测到。IPStorm是用Golang编写的,这使得Intezer能够检测到Linux样本和由anomaly首先报告的Windows恶意软件之间的跨平台代码连接。
linux变体比Windows变体有更多的功能,比如使用SSH暴力破解来传播给更多的受害者,以及滥用Steam游戏和广告平台的欺诈性网络活动。linux变体调整了一些功能,以解释该操作系统和Windows之间存在的根本差异。
接下来将介绍IPStorm Windows和Linux样本之间的代码关系图,分析其中一个Linux变体的行为,并将其功能和功能与旧的Windows样本进行比较,以跟踪其演变。
大多数IPStorm Linux样本在我们将它们提交给Intezer进行分析之前是完全未被检测到的。
在这篇文章中,我们将重点关注658638c6bef52e03e6aea4b6c1b2b3b8d81ad40144b56b2122d96e6957c33117 Linux样本。
658638c6bef52e03e6aea4b6c1b2b3b8d81ad40144b56b2122d96e6957c33117在VirusTotal中未检测到样本
由于IPStorm是用Golang编写的,我们不仅可以观察到不同Linux变体之间的强代码连接,还可以识别到2019年上传至Intezer的IPStorm Windows样本的连接。
由Intezer分析分类的IPStorm恶意软件家族样本
下图强调了不同版本和操作系统之间的代码相似性。节点表示单个样本,线条表示它们之间的代码关系,所有的样本都以某种方式相互联系。
不同样本间的IPStorm代码相似性图。节点表示单个样本,线条表示它们之间的代码关系
该图描绘了三个主要的集群,每个集群都包含具有强代码连接的样本:
PE, intel 80386架构;
ELF, intel 80386架构;
ELF和x86-64架构;
你还会注意到ELF集群和ELF和PE intel 80386架构集群之间存在共享代码。
你可以使用这个GitHub存储库中的cluster_directory.py API脚本来创建你自己的集群图。
去除Linux的变体符号,使用插件IDAGolangHelper,我们检索了文件的符号,并准确地看到了恶意软件包含哪些包。在Go语言中,包是一群组成特定功能的Go源文件,每个Go源文件都属于一个包。
Linux恶意软件的主要逻辑是在一个名为storm_starter的包中实现的,这是一个Windows变体中没有的新包。所有的逻辑都是通过Windows变体的main函数实现的。
这两个版本在实现主要流程的方式上有相似之处,但是,由于两个操作系统之间存在差异,Linux实例具有额外的功能并调整了一些逻辑。
Linux迭代首先禁用内存不足(OOM)杀手程序,以防止它终止恶意软件,随后继续检查以防止病毒或其他恶意软件进一步执行与安全工具有相关的任何进程。接下来,恶意软件生成公钥将其保存在一个名为strom.key的文件中。这个密钥保存的位置是基于恶意软件被执行时的权限。如果恶意软件以root权限执行,密钥将存储在/etc/storm.key;否则,将保存在/tmp/storm.key下。然后,恶意软件试图与点对点网络中的其他节点建立连接。
恶意软件向不同的服务发送HTTP请求,如diagnostic[.]opendns[.]com/myip, ifconfig[.]io/ip和myip[.]dnsomatic[.]]com接收受害服务器的外部IP地址。如果恶意软件以root身份运行,它将在systemd下创建一个服务来实现持久化,并将自己复制到/usr/bin/storm,否则将被拷贝到/tmp/storm目录下;然后,恶意软件将从新的安装路径重新启动。
这个新进程负责执行IPStorm恶意软件的主要功能,包括之前在Windows变体中看到的逆向shell,维护与P2P网络中其他对等节点的连接,以及将恶意软件传播给其他受害者的新功能。
IPStorm Linux输出非特权用户
比较IPStorm linux变体0.2.05a和Windows变体0.0.2m可以发现,开发者添加了一些功能,并修改了现有的功能来攻击Linux平台。
该恶意软件由不同的Golang包组成,每个包提供不同的功能。下表对两个版本之间的包比较进行了分类:
注:我们将linux变体0.2.05a与Windows变体0.0.2m进行了比较,将后者在anomaly的报告中进行了分析。然而,恶意软件经常被更新,我们已经观察到多个不同的版本,它们之间的功能也可能不同。
扫描工具:Android和SSH暴力破解
Linux变体试图通过SSH暴力破解在互联网上传播和感染其他受害者。一旦建立连接,恶意软件将通过比较受攻击服务器的主机名和字符串“svr04”(这是corie SSH蜜罐的默认主机名)来检查受害服务器是否是蜜罐。如果恶意软件识别到蜜罐,它将关闭连接,否则它将继续下载有效载荷并感染服务器。
验证服务器是否为蜜罐
linux变体特有的另一种传播方法是搜索潜在的Android受害者,恶意软件检查连接ADB (Android Debug Bridge)到受害节点的设备。一旦识别出来,它就会将之前从P2P网络下载的Android版本的IPStorm上传到设备上。
来自storm服务日志的屏幕截图,显示下载的文件
绕过杀毒软件
IPStorm Windows和linux变体都实现了与检测逃避相关的功能,每个版本使用不同的技术。在linux变体中,负责此逻辑的包称为storm_malware_guard。该文件遍历所有当前运行的进程,以便找到并终止可能检测到恶意软件活动的进程。
storm_malware_guard包中实现此技术的函数称为KillSuspiciousProcesses。这个包中的其他函数负责获取有关CPU和内存使用情况、I/O端口数量以及返回有关进程和线程信息的函数的信息。
在Windows变体中,逃避逻辑是在一个名为avbypass的包中实现的。该技术基于随机睡眠时间和多个函数调用,此方法的目的是使反病毒解决方案更难跟踪原始进程。
似乎由于不同的操作系统,每个版本的IPStorm都有自己的逃避检测的方法。
逆向shell
两个版本的IPStorm都使用backshell这个名称来指代逆向shell的功能,Linux变体的backshell功能与Windows变体相同。
Windows变体有一个名为powershell的包,其中包含实现逆向shell的函数。linux变体中也有相同的包,但它只包含一个函数:storm_powershell__ptr_Backend_StartProcess。该函数用于获取受感染系统的逆向shell。
逆向shell的实现是两个IPStorm变体之间代码重用连接的一个清晰样本。下面的截屏显示了两个版本中文件名的变化和相同的函数名:
Linux:
windows:
持久性
linux变体只有在以root权限执行时才会尝试获得持久性,另一方面,Windows变体总是希望获得持久性。恶意软件的每个变体,Linux和Windows,都使用不同的技术来获得持久性,因为它们针对的操作系统根本不同。
Windows变体通过将自身复制到随机位置并将程序添加到HKCU:SoftwareMicrosoftWindowsCurrentVersionRun注册项来实现持久性。
linux变体通过在/etc/systemd/system/storm.service下创建systemd服务来实现持久化。
/etc/systemd/system/storm.service
在Linux变体中实现持久性的函数
另一个区别是文件被复制到的位置。Windows变体使用随机文件路径,linux变体使用固定路径。
网络流量
除了创建逆向shell之外,我们还发现IPStorm的Linux变体利用其广泛传播的优势在backshell执行不同的欺诈活动,滥用游戏和广告盈利。由于它是僵尸网络,恶意软件利用来自不同可信来源的大量请求,因此不会被阻止或追踪。
在Windows变体中没有观察到这种活动。
Steam游戏欺诈
Steam是Valve公司推出的一款受欢迎的游戏服务,在全球拥有数亿用户,它还为想要在自己的网站上使用Steam数据的开发者提供了一个API。
作为游戏开发者盈利过程的一部分,Steam用户可以购买和出售不同的道具,如装备、皮肤和其他游戏内元素。这个平台非常受欢迎,已经成为网络罪犯的热门目标。
攻击者使用的一种已知方法是创建网络钓鱼网站,引诱用户提交他们的Steam登录凭证,通过访问用户的凭据,攻击者可以完全访问该帐户,包括API密钥。
IPStorm生成了大量的流量到Steam的API,查询各种Steam用户的数据,并使用多个有效的API密钥。
目前怀疑这些被盗账户是被监控的虚假交易骗局的一部分。
广告欺诈
该恶意软件生成模仿虚假广告点击的请求。我们追踪到的所有广告都与色情网站有关,恶意软件在不同的预定义网站上爬行,搜索广告iframe,并通过浏览iframe来模仿用户的“点击”。
恶意软件向广告平台生成请求的样本
恶意软件爬过的网站
受攻击系统检测
可以通过以下步骤检查系统是否被IPStorm恶意软件攻击。
1.执行pstree | grep storm,检查系统是否启动IPStorm进程。
IPStorm通常使用多线程运行。
2.执行sudo systemctl status strom.service命令,检查系统上运行的服务,因为如果恶意软件以root权限执行,它将创建一个用于持久化的服务。
3.检查系统中是否存在IPStorm的文件。
执行sudo find / -name “storm*” -type f命令
3.1在非root执行的情况下,输出将类似于下面的屏幕截图:
3.2如果恶意软件以root权限执行,输出将类似于下面的屏幕截图:
4.检查系统上开放的端口以及与之关联的进程。执行sudo ss -tulpn命令,在下面的屏幕截图中,属于IPStorm恶意软件的许多进程监听特定端口。
5.免费使用Intezer Protect社区测试版来识别系统上正在运行的进程。下面的屏幕截图来自服务器上执行的IPStorm警报,系统提供的信息包括恶意软件家族名称,可执行文件的完整路径,进程ID,执行时间,以及到Intezer的链接,你可以在此恶意软件中观察到普遍的代码重用。
系统受攻击后如何终止IPStorm
1.如果恶意软件作为服务运行,则应执行sudo systemctl stop storm.service命令停止该服务:
2.删除所有与IPStorm恶意软件相关的文件。
3.执行sudo pkill -9 storm命令终止该进程
我们提供了一个YARA规则,旨在针对内存中的工件运行,以便能够检测这些植入程序。
系统安全加固
1.确保SSH连接是安全的。使用密钥代替密码或使用多因素身份验证,浏览此处获取有关SSH加固的更多提示。
2.确保系统更新到最新的软件,并与最新的安全最佳实践保持一致。
3.使用运行时云工作负载保护解决方案,如Intezer Protect。Protect提供了对系统中代码的完整运行时可见性,并对偏离安全基线的任何可疑或未经授权的代码发出警报。
IPStorm背后的攻击者非常活跃,频繁发布具有新功能和改进的更新版本,以及扩展到几个不同的平台和架构,现在带有Linux恶意软件的IPStorm是在Golang开发的跨平台恶意软件的最新样本。被IPStorm攻击的平台不仅暴露于其服务的后门,而且还被添加到IPStorm僵尸网络中,试图传播给其他受害者。在过去的六个月里,人们发现了越来越多的Golang ELF恶意软件攻击服务器,IPStorm是其中的一部分,其他恶意软件还有Kaiji、Kinsing和FritzFrog。
参考及来源:
https://intezer.com/blog/research/a-storm-is-brewing-ipstorm-now-has-linux-malware/