FritzFrog:新一代对等僵尸网络

2020-08-20 08:09:15

GuardiCore发现了FritzFrog,这是一个复杂的对等(P2P)僵尸网络,自2020年1月以来一直在积极入侵SSH服务器。

基于Golang的恶意软件:FritzFrog执行用Golang编写的蠕虫恶意软件,它是模块化的、多线程的、无文件的,在受感染机器的磁盘上不会留下任何痕迹。

积极瞄准政府、教育、金融和更多领域:FritzFrog试图使用暴力手段,传播到政府办公室、教育机构、医疗中心、银行和众多电信公司的数千万个IP地址。其中,它已经成功入侵了500多台服务器,感染了美国和欧洲的知名大学和一家铁路公司。

复杂性:FritzFrog是完全专有的;它的P2P实现是从头开始编写的,告诉我们攻击者是高度专业的软件开发人员。

拦截:GuardiCore实验室在Golang开发了一个客户端程序,能够拦截FritzFrog的P2P通信,并作为网络对等点加入。

归属:虽然我们无法将FritzFrog僵尸网络归入某个特定的组,但我们发现它与之前看到的名为RAKOS的P2P僵尸网络有一些相似之处。

FritzFrog是一个高度复杂的点对点(P2P)僵尸网络,它一直在全球范围内积极入侵SSH服务器。凭借其分散的基础设施,它可以在所有节点之间分配控制权。在这个没有单点故障的网络中,对等方不断地相互通信,以保持网络的活力、弹性和最新状态。P2P通信通过加密通道完成,使用AES进行对称加密,使用Diffie-Hellman协议进行密钥交换。

与其他P2P僵尸网络不同,FritzFrog结合了一组使其独一无二的属性:它是无文件的,因为它在内存中组装和执行有效负载。它在暴力尝试中更加咄咄逼人,但通过在网络中均匀分布目标来保持效率。最后,FritzFrog的P2P协议是专有的,不基于任何现有的实现。

该恶意软件是用Golang编写的,是完全易失性的,不会在磁盘上留下任何痕迹。它以SSH公钥的形式创建后门,使攻击者能够持续访问受害计算机。自活动开始以来,我们确定了该恶意软件可执行文件的20个不同版本。

在这份报告中,我们将描述FritzFrog活动是如何被发现的,其P2P网络的性质以及恶意软件的内部工作原理-包括感染过程、命令加密和易变性行为。

GuardiCore实验室提供了一个Github存储库,其中包含此活动的检测脚本和危害指示器(IOC)列表。

卫报核心实验室首次注意到这一活动是其正在进行的僵尸网络百科全书研究的一部分。1月9日,新的攻击事件出现,名为ifconfig和nginx的恶意进程被执行。我们开始监控这场运动的活动,随着时间的推移,这一活动稳步而显著地上升,对Guardicore全球传感器网络(GGSN)的攻击总数达到了13k次。自从它第一次出现以来,我们识别了Fritzfrog二进制文件的20个不同版本。

这场战役耐人寻味的是,乍一看,没有明显的指挥与控制(CNC)服务器连接。就在研究开始后不久,我们才了解到根本不存在这样的数控系统。

为了拦截FritzFrog网络,Guardicore实验室在Golang开发了一个客户端程序,该程序执行与恶意软件的密钥交换过程,并能够发送命令和接收其输出。这个项目,我们将其命名为青蛙,让我们能够调查这个网络的性质和范围。使用FROGGER,我们还可以通过“注入”我们自己的节点并参与正在进行的P2P流量来加入网络。

FritzFrog被发现野蛮破解了数百万个IP地址,其中包括政府办公室、教育机构、医疗中心、银行和众多电信公司。它已经成功入侵了500多台SSH服务器,其中包括美国和欧洲知名高等教育机构的服务器,以及一家铁路公司的服务器。

FritzFrog具有特殊的属性组合,这使其在威胁环境中独一无二:

无文件-FritzFrog在没有工作目录的情况下运行,文件传输使用BLOB在内存中完成。

攻击性-暴力-武力是基于一本广泛的词典。相比之下,最近发现的P2P僵尸网络DDG只使用用户名“root”。

专有-P2P协议完全专有,不依赖于任何已知的P2P协议,如μTP。

一旦受害者被成功入侵,它就会开始运行UPX打包的恶意软件,该软件会立即清除自身。恶意软件进程以ifconfig和nginx名称运行,以最大限度地减少怀疑。作为启动过程的一部分,恶意软件开始侦听端口1234,等待命令。新受害者收到的第一个命令负责将受害者与网络对等点和暴力目标的数据库同步。

防火墙和其他安全产品可以轻松检测和阻止非标准端口(如1234)上的流量。因此,FritzFrog的作者采用了一种创造性的技术来躲避侦查并保持低调。命令不是直接通过端口1234发送给受害者,而是通过以下方式发送给受害者:攻击者通过SSH连接到受害者,并在受害者的计算机上运行Netcat客户端,然后再连接到恶意软件的服务器。从现在开始,通过SSH发送的任何命令都将被用作Netcat的输入,从而传输到恶意软件。

Fritzfrog攻击者实现了具有30多个不同命令的加密命令通道。命令参数和响应以指定的数据结构传输,并序列化(“编组”)为JSON格式。在发送之前,数据使用AES对称加密进行加密,并以Base64编码。为了就加密密钥达成一致,涉及的节点使用Diffie-Hellman密钥交换协议。

FritzFrog网络中的节点彼此保持密切联系。它们不断地相互ping以验证连通性,交换对等点和目标,并保持彼此同步。这些节点参与了一个聪明的投票过程,这似乎会影响暴力目标在整个网络中的分布。GuardiCore实验室观察到,目标是均匀分布的,因此网络中没有两个节点试图“破解”同一目标机器。

FritzFrog的二进制是用Golang编写的高级恶意软件。它完全在内存中运行;运行恶意软件的每个节点在其内存中存储目标和对等点的整个数据库。该恶意软件会产生多个线程来同时执行各种任务,详见下表。

FritzFrog定义了以下关于受害者和目标计算机管理的状态。

目标-在目标队列中找到的一台机器接下来将被馈送到Cracker模块,该模块将依次扫描并尝试暴力强制它;

Deploy-成功入侵的计算机被DeployMgmt模块排队等待恶意软件感染;

Owner-成功感染的计算机将由Owner模块添加到P2P网络。

运行恶意软件的每个节点都有一个工作线程,负责接收命令、解析命令并将其分派到代码中的相应函数。

恶意软件是暂时的-它确实试图在系统重新启动后继续运行。但是,会留下一个后门,以便将来能够访问被破坏的受害者,其登录凭证由网络对等方保存。恶意软件将公共SSH-RSA密钥添加到AUTHORIZED_KEYS文件。这个简单的后门允许拥有秘密私钥的攻击者进行无密码身份验证,以防原始密码被修改。FritzFrog仅使用了下面框中给出的单个公钥。

恶意软件文件在本地计算机上运行各种shell命令,其中一些命令会定期运行,以监视系统状态。例如,它运行free-m来检查可用的RAM、正常运行时间、Journal alctl-S@0-u sshd来监视SSH登录,以及其他输出CPU使用统计信息的命令。这些统计数据可供网络中的其他节点使用,并用于确定例如是否运行加密管理程序。

该恶意软件运行一个单独的进程-名为libexec-来开采Monero硬币。该挖掘器基于流行的XMRig挖掘器,并通过端口5555连接到公共池web.xmrpool.eu。

FritzFrog依赖于在网络上共享文件的能力,既可以感染新机器,也可以运行恶意有效负载,如Monero Cryptominer。

为了在节点之间共享和交换文件,Fritzfrog使用了一种隐蔽的、无文件的方法。文件被分成BLOB(大块的二进制数据),保存在内存中。恶意软件通过将可用斑点与每个斑点的散列值一起存储在映射中来跟踪可用斑点。

当节点A希望从其对等节点B接收文件时,它可以使用命令getblobstats来查询节点B它拥有哪些斑点。然后,节点A可以通过其散列、通过P2P命令Getbin或通过具有URL http://:1234/.的HTTP来获得特定的BLOB。当节点A拥有所有需要的blob时,它使用名为Assemble的特殊模块组装文件并运行它。

跟踪P2P僵尸网络的操作员是一项复杂的任务;由于其分布式性质,可以向网络中的任何节点发送命令,也可以从网络中的任何节点发送命令。尽管如此,我们还是试图将其与以前的P2P僵尸网络进行比较。

即使与过去的P2P僵尸网络相比,FritzFrog似乎也是独一无二的;它不像IRCFlu那样使用IRC,它不像DDG那样在内存中操作,并且运行在基于Unix的机器上-而不是星际风暴僵尸网络。如果有的话,它与RAKOS有一些相似之处-特别是在功能命名和版本号方面-RAKOS是用Golang编写的P2P僵尸网络,ESET在2016年对其进行了分析。

GuardiCore实验室提供在SSH服务器上运行的FritzFrog检测脚本。它查找以下FritzFrog指示器:

运行其可执行文件在文件系统上不再存在的进程nginx、ifconfig或libexec(如下所示)。

此外,端口5555上的TCP流量可以指示到Monero池的网络流量。

Ubuntu@ip-11-11-11:~$./Detect_fritzfrog.shFritzFrog检测脚本Guardicore Labs=[*]无文件进程nginx正在服务器上运行。[*]侦听端口1234[*]有证据表明FritzFrog在此机器上进行恶意活动。

FritzFrog利用了这样一个事实,即许多网络安全解决方案仅通过端口和协议实施流量。为了克服这种隐形技术,基于进程的分段规则可以很容易地防止此类威胁。

弱密码是FritzFrog攻击的直接推动者。我们建议选择强密码并使用公钥身份验证,这要安全得多。此外,从AUTHORIZED_KEYS文件中删除FritzFrog的公钥非常重要,这样可以防止攻击者访问机器。路由器和物联网设备经常暴露SSH,因此容易受到FritzFrog的攻击;如果服务未在使用,请考虑更改其SSH端口或完全禁用对它们的SSH访问。