详解FritzFrog的发现和攻击过程

  • A+
所属分类:安全文章

Guardicore实验室8月19日新发布了一则消息,称他们发现了一个新出现的僵尸网络——FRITZFROG,且已经秘密地将全球数百万台SSH服务器作为攻击目标。确切地说,这是一个先进的点对点的(P2P)僵尸网络,自2020年1月以来一直在攻击SSH服务器。

详解FritzFrog的发现和攻击过程

FRITZFROG的特点

用Golang编写的恶意软件:FritzFrog是用Golang编写的恶意软件,技术含量很高,似乎是高度专业的软件开发人员开发的。为什么这么说呢?因为它是模块化,多线程且无文件的,在受感染设备的磁盘上不会显示任何攻击痕迹。

攻击目标:积极瞄准政府、教育、金融等领域:FritzFrog试图强行将其传播到政府办公室、教育机构、医疗中心、银行和众多电信公司的数千万IP地址。其中,它成功突破了500多台服务器、感染了美国和欧洲的知名大学以及一家铁路公司。

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

目前,Guardicore实验室在Golang中开发了一个客户端程序,该程序可以拦截FritzFrog的P2P通信,并可以作为网络点对点加入。虽然目前研究人员无法将FritzFrog僵尸网络归到特定的攻击家族里,但FritzFrog与以前名为Rakos的P2P僵尸网络有些相似。

详解FritzFrog的发现和攻击过程

攻击情况分析

FritzFrog是一个高度复杂的点对点的(P2P)僵尸网络,已在全球范围内发起了SSH服务器的攻击。凭借其分散的基础架构,它可以在所有节点之间分配控制权。在这个没有单点故障的网络中,节点之间不断地相互通信,以保持网络的活力、弹性和更新。P2P通信通过加密通道进行,使用AES进行对称加密,Diffie-Hellman协议进行密钥交换。

与其他P2P僵尸网络不同,FritzFrog有其独特的功能。因为它是无文件的,且在内存中组装和执行有效载荷。它在暴力尝试中更具侵略性,但通过在网络中均匀分布目标来保持攻击效率。最后,FritzFrog的P2P协议是专有的,并不基于任何现有实现。

由于FritzFrog是用Golang编写的恶意软件,因此在磁盘上没有任何痕迹。它以SSH公钥的形式创建后门,使攻击者能够持续访问受攻击的计算机。自从发现了这个攻击以来,研究人员确定了20种不同版本的恶意软件可执行文件。

在此文中,研究人员将详细介绍FritzFrog的活动是如何被发现的,及其P2P网络的性质及内部运行方式,包括感染进程、命令加密和无痕迹攻击行为。

Guardicore实验室提供了一个Github存储库,其中包含检测脚本以及此攻击指标(IOC)。

详解FritzFrog的发现和攻击过程

详解FritzFrog的发现和攻击过程

全面分析FritzFrog

Guardicore实验室是在今年1月9日,才发现了这个新的攻击活动,其中执行了名为ifconfig和nginx的恶意进程。截至目前,FritzFrog对Guardicore全球传感器网络(Guardicore Global Sensors Network ,GGSN)的攻击总数达到了13000次。自首次出现以来,研究人员总共确定了20种不同版本的Fritzfrog二进制文件。

详解FritzFrog的发现和攻击过程

乍一看,在攻击中,没有明显的命令和控制(CNC)服务器连接到该服务器。在研究开始不久之后,我们才知道最初没有这种CNC。

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

经过跟踪, FritzFrog已经暴力破解了数百万个IP地址,其中包括政府机关、教育机构、医疗中心、银行和众多电信公司。它已成功攻击了500台SSH服务器,其中包括美国和欧洲知名的高等教育机构的服务器以及一家铁路公司。

详解FritzFrog的发现和攻击过程

新一代P2P

为什么说是“新一代P2P”?

FritzFrog具有特殊的功能组合,使其在攻击环境中变得独一无二:

无文件攻击,FritzFrog在没有工作目录的情况下运行,并且文件传输使用blob在内存中完成;

不断更新:攻击目标和被攻击设备的数据库可以无缝交换;

攻击力度强:暴力基于大量词典。相比之下,最近发现的P2P僵尸网络DDG仅使用了用户名“root”;

攻击高效:攻击目标均匀地分布在节点之间;专有攻击:P2P协议是完全专有的,不依赖诸如μTP ( 微型传输协议) 之类的已知P2P协议;

成功攻击受害者后,它将开始运行UPX封装的恶意软件,该恶意软件会立即清除自己。恶意软件进程以名称ifconfig和nginx运行,以最大程度地减少被发现的概率。在启动进程中,恶意软件开始在端口1234上侦听,等待命令。新的受害者收到的第一条命令负责将受害者的信息和暴力目标的数据库同步。

详解FritzFrog的发现和攻击过程

防火墙和其他安全产品可以轻松检测和阻止非标准端口(例如1234)上的流量,因此,FritzFrog的开发者采用了一种创新技术来逃避检测。FritzFrog不是直接通过端口1234发送命令,而是通过以下方式将命令发送给受害者:攻击者通过SSH连接到受害者,并在受害者的计算机上运行一个netcat客户端,该客户端又连接到恶意软件的服务器。这样,通过SSH发送的任何命令都将用作netcat的输入,从而传输到恶意软件。

详解FritzFrog的发现和攻击过程

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

详解FritzFrog的发现和攻击过程

FritzFrog网络中的节点彼此保持紧密联系。他们不断地相互ping通,以验证连通性,交换对等方和目标并保持彼此同步。这些节点都参与了攻击,这似乎影响了整个网络中暴力目标的分布。Guardicore实验室观察到受害者目标均匀分布,因此网络中没有办法通过两个节点试图“破解”同一台目标计算机。

FritzFrog的二进制文件是用Golang语言编写的高级恶意软件,它完全在内存中运行,运行恶意软件的每个节点都将目标节点和节点的整个数据库存储在内存中。恶意软件会产生多个线程以同时执行各种任务,如下表所示。

FritzFrog定义了以下关于受害者和目标设备管理的状态:

目标:在目标队列中找到的计算机接下来将被送至Cracker模块,后者将进行扫描并尝试对其进行暴力破解;

部署:成功攻击的计算机被DeployMgmt模块排队等待恶意软件感染;

拥有:已被成功感染的计算机将由拥有的模块添加到P2P网络中;

详解FritzFrog的发现和攻击过程

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

详解FritzFrog的发现和攻击过程

该恶意软件是暂时性的,确实会在系统重启后幸免。但是,留有后门以使将来能够访问被攻击的受害者,该受害者的登录凭据由网络点对点保存。该恶意软件将公共SSH-RSA密钥添加到了authorized_keys文件。这个简单的后门允许拥有私钥的攻击者进行无密码身份验证,以防原始密码被修改。FritzFrog仅使用了下面给出的单个公共密钥。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJYZIsncBTFc+iCRHXkeGfFA67j+kUVf7h/IL+sh0RXJn7yDN0vEXz7ig73hC//2/71sND+x+Wu0zytQhZxrCPzimSyC8FJCRtcqDATSjvWsIoI4j/AJyKk5k3fCzjPex3moc48TEYiSbAgXYVQ62uNhx7ylug50nTcUH1BNKDiknXjnZfueiqAO1vcgNLH4qfqIj7WWXu8YgFJ9qwYmwbMm+S7jYYgCtD107bpSR7/WoXSr1/SJLGX6Hg1sTet2USiNevGbfqNzciNxOp08hHQIYp2W9sMuo02pXj9nEoiximR4gSKrNoVesqNZMcVA0Kku01uOuOBAOReN7KJQBt

该恶意软件文件在本地计算机上运行各种shell命令,其中一些命令会定期运行,以监视系统状态。例如,它运行free -m检查可用的RAM,正常运行时间,journalctl -S @0 -u sshd 来监控SSH登录以及其他输出CPU使用情况统计信息的命令。这些统计信息可供网络中的其他节点使用,并用于确定例如是否运行加密货币挖矿软件(cryptominer)。

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

Fritzfrog依靠通过网络共享文件的能力来感染新设备并运行恶意载荷,例如Monero cryptominer。

为了在节点之间共享和交换文件,Fritzfrog使用了隐秘的无文件方法。文件被分割为blob(大量二进制数据),并保存在内存中。该恶意软件通过将可用的Blob与每个Blob的哈希值一起存储在映像中,从而跟踪这些Blob。

当节点A希望从其点对点的节点B接收文件时,它可以使用getblobstats命令查询节点B所拥有的Blob。然后,节点A可以通过其哈希(通过P2P命令getbin或通过HTTP使用URL http://:1234/)获得特定的blob。当节点A具有所有必需的Blob时,它将使用名为Assemble的特殊模块来组装文件并运行它。

详解FritzFrog的发现和攻击过程

详解FritzFrog的发现和攻击过程

总结

跟踪P2P僵尸网络的运营商是一项复杂的任务,由于其分布式特性,可以向网络中的任何节点发送命令,也可以从网络中的任何节点发送命令。尽管如此,研究人员仍试图将其与以前出现过的类似P2P僵尸网络进行比较。

即使与过去的P2P僵尸网络相比,FritzFrog看起来也很独特。它不像IRCflu那样使用IRC,也与DDG不同,因为它在内存中运行,并且在基于Unix的计算机上运行,这也与InterPlanetary Storm僵尸网络不同,InterPlanetary Storm被称为IPStorm——InterPlanetary Storm的缩写。其背后的黑客组织很可能从Storm这个名字中获取的灵感,这是一个P2P蠕虫活动,在2007年首次出现之后开始泛滥。目前还不知道是哪个黑客组织发起了IPStorm活动,其归属地点也不得而知,但该恶意软件明显具有“反向shell”功能,可以让黑客在受感染设备上执行任意PowerShell代码。如果有的话,它和Rakos有一些相似之处,尤其是在功能命名和版本号方面,Rakos也是一个用Golang写的P2P僵尸网络。

目前Guardicore实验室提供了FritzFrog检测脚本,可在SSH服务器上运行。FritzFrog的攻击指标如下:

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

监听端口1234;

此外,通过端口5555进行的TCP通信可以转化到Monero池的网络通信。

详解FritzFrog的发现和攻击过程

FritzFrog利用了许多网络安全解决方案仅通过端口和协议强制通信这一事实,因此为了克服这种逃避技术,基于进程的分段规则可以轻松地防止此类攻击。

弱密码是FritzFrog攻击的直接推动因素,研究人员建议选择强密码并使用公共密钥身份验证,这更安全。此外,至关重要的是从authorized_keys文件中删除FritzFrog的公共密钥,以防止攻击者访问计算机。路由器和物联网设备经常公开SSH,因此容易受到FritzFrog的攻击;如果服务未使用,请考虑更改其SSH端口或完全禁用对它们的SSH访问。

参考及来源:https://www.guardicore.com/2020/08/fritzfrog-p2p-botnet-infects-ssh-servers/

详解FritzFrog的发现和攻击过程

详解FritzFrog的发现和攻击过程

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: