【公益译文】摧毁智能合约僵尸网络(一)

私有区块链上智能合约的分布式弹性是一种与僵尸网络成员保持通信的有效方法,吸引了很多“僵尸牧人”(Bot Herder)。本文探讨了这种僵尸网络管理方法中的固有缺陷。若执法人员或恶意软件研究人员处理得当,这些缺陷可能会限制僵尸网络的功能和效力。缺陷不同,处理结果也不同:僵尸网络可能会被部分或完全拆除。

1.概述

“僵尸牧人”的活动实际上是一种命令与控制(C&C)活动。他们与身陷囹圄仍要统领行动的黑手党老板面临着相同的挑战:两者都试图指导犯罪活动,但希望指令能顺利下达到预期目标而不被拦截、修改或阻止。为了缓解这些威胁,“僵尸牧人”开始使用区块链来建立更具弹性的通信渠道(趋势科技,2013)。特别是,私有区块链为“僵尸牧人”提供了有利功能,因为存储的数据可由所有者进行管控,例如,C&C指令存储在区块中,不对公众开放(Sweeny,2017)。本文重点关注的是基于私有区块链的C&C通信渠道的潜在缺陷,并具体探讨恶意软件研究人员如何利用这些弱点摧毁僵尸网络。

 

1.1.现有研究

2014年,研究人员开始怀疑僵尸网络所使用公共区块链作为信道(Roffel & Garrett,2014)。然而,对于“僵尸牧人”而言,私有区块链是一种颇有吸引力的通信方法,因为一方面他们可对僵尸机指令进行访问控制,另一方面,对于审查或修改具有非凡的抵制能力。只有两位学者发表了关于使用私有区块链作为僵尸网络C&C通信渠道的论文。第一位是乔纳森·斯维尼,他于2017年发表了《通过私有区块链构建僵尸网络弹性》);第二位是Omprotect的Majid Malaika,他在行业会议上发表了《僵尸合约 – 在僵尸网络命令与控制中滥用智能合约和区块链》)(Malaika、Al-Ibrahim和Al-Ibrahim,2017)。这两位学者都专注于以太坊(Ethereum)这一最流行的私有区块链平台。

以太坊的核心功能之一是智能合约,它允许代码和变量存储在区块链上。合约变量包括僵尸机指令,例如192.168.7.52发起拒绝服务攻击,或者使用此邮件模板向这1000个邮件地址发送垃圾邮件。与传统的区块链(如比特币)不同,以太坊私有区块链中的智能合约功能允许变量查询和变量更新。执行代码的以太坊组件被称为以太坊虚拟机(EVM)。与大多数编程语言一样,EVM是图灵完备的—这意味着它可以处理任何可能的编程功能。EVM运行在私有区块链的每个节点上,目的是执行合约功能,验证交易的真实性。每个节点上运行相同的代码,因此这种分布式执行的好处是验证,而不是效率。

研究人员表示,使用存储在以太坊私有区块链中的智能合约,可以为“僵尸牧人”提供一种强大而可靠的控制僵尸网络的方法。更新合同代码和变量的能力可保证简单而连续的僵尸网络行动管理。要摧毁僵尸网络,网络防御者必须瞄准这些通信渠道(Sweeny,2017)。

 

1.2.网络防御者面临的挑战

由于“僵尸牧人”和研究人员或网络防御者之间激烈的“军备竞赛”,摧毁僵尸网络变得越来越难。在过去,要摧毁僵尸网络,执法人员让互联网服务提供商(ISP)把一个承载了所有僵尸网络基础设施的服务器下线就可以了。然而,通过C&C服务器、fast-flux DNS、域生成算法、端对端通信、SSL、隐写术、匿名网络以及在社交媒体平台上隐藏C&C消息的功能,最近的僵尸网络都增强了弹性。这种军备竞赛不断为研究人员带来新的挑战,私有区块链的使用也不例外。

当僵尸网络使用区块链来发布指令时,网络防御者面临着这样的挑战:区块链连接程度高,分布范围广,而且由于使用了私钥,具有抗修改特性。此外,私有区块链控制对区块链及其合约功能的访问。这些挑战为网络防御者制造了新的需要克服的障碍。

 

1.3.研究范围

本文重点分析了用于僵尸网络命令与控制通道的私有区块链智能合约的弹性特征。

具体而言,重点是与此方法相关的缺陷以及研究人员如何针对这些缺陷来破坏或拆除僵尸网络。

 

2.如何利用缺陷

以下几节详细说明了研究人员破坏或摧毁利用私有区块链作为C&C通信渠道的僵尸网络的机会。每部分都包括对漏洞的详细解释和利用漏洞的具体步骤。

 

2.1.枚举和拆分僵尸网络

枚举僵尸网络成员和大小的方法至少有三种。经典的方法是监视C&C服务器的网络流量并记录连接到该服务器的唯一IP地址,发现指令。然而,如果僵尸网络被分割或者C&C服务器时常变化,这种技术就很难生效。枚举基于私有区块链的僵尸网络成员的另外两种传统方法是:使用区块链的内置功能来枚举节点(Geth情况下的admin.peers功能),或者监控单个成员的以太坊网络流量,并不停变换目标以识别其他节点。确定新的目标后,查看其以太坊网络流量,识别僵尸机。以太坊节点默认使用30303(TCP或UDP)端口彼此通信。

无论采用哪种方法枚举僵尸网络成员,僵尸网络都会土崩瓦解。这可以通过删除大量节点(一般是通知ISP感染情况并敦促清理)来实现。在更具针对性的攻击中也会发生这种情况;这包括通过攻击连接紧密的节点来破坏节点之间的连接,从而使僵尸网络支离破碎。有些节点设计对碎这种破坏有弹性—节点连接越紧密,其与僵尸网络分离的可能性就越小。因此,节点设计需要考虑到这一点:僵尸网络连接越紧密,研究人员就越容易枚举节点。

 

2.2.跟踪网络上的“僵尸牧人”

这个漏洞的核心是:通过监控网络流量可以识别“僵尸牧人”吗?这种监控可在网络上的不同点(例如私有区块链、C&C服务器或端点)进行。监控的意义在于发现“僵尸牧人”的真实IP地址和位置。在创建私有区块链和智能合约以及更新合约变量时,细心的“僵尸牧人”会记住这一点的。为了避免透露IP地址和地理位置,“僵尸牧人”可能会使用匿名代理和服务,例如Tor。

 

2.2.1.网络上的以太坊

如前所述,以太坊使用UDP和TCP端口30303,并且使用RLPx端对端协议套件(Github作者,2018)。为了了解和识别僵尸网络使用以太坊智能合约的缺陷,首先要了解以太坊如何利用这些协议传输区块链信息。

在以太坊的端到端(P2P)模型中,当节点发现自己缺失相邻节点所拥有的信息时,它们会互相发送事务和状态信息。节点比较其“最佳”块(在链叉中做了大部分工作的最后一个有效块)的哈希值及其哈希链,以确定哪些块是必要的(Github作者,2018)。

RLPx是用于管理这些P2P事务的协议之一。它是一个加密网络套件,可提供节点发现、加密传输、流控制、对端声誉和其他安全功能(Github作者,2018)。RLPx协议通过建立和维护与对端节点的连接来确保网络连接良好(Gerring,2016)(Jankov,2018)。

当节点相互连接时,分为两个阶段:对端认证和基本协议握手。在第一阶段,节点建立经过认证和加密的通信流。节点还加密握手过程以交换临时密钥并为加密会话设置起始值。在第二阶段,节点间相互协作,选择各自支持的协议。RLPx使用密钥散列消息认证码(HMAC FIPS 198),其中SHA256用于身份认证,AES-256用于加密(Github作者,RLPx加密,2018)。对每个帧均进行认证和加密(包括帧头和有效载荷)保证了完整性和机密性,让网络防御者或或研究人员很难修改或欺骗流量(Github作者,2018)。

 

2.2.2.以太坊网络活动分析

流行的tcpdump工具用于从私有区块链的以太坊节点上收集网络流量,同时上载合约、挖掘块并查询存储变量。关于捕获此类流量的脚本,详见附录。图1中的抓包文件说明有很多TCP数据包使用30303和34034端口:

图1:网络抓包文件显示两个节点之间传输以太坊数据包

根据上文讨论的AES-256加密,数据包内容无法解密,见图2。

图2:两节点之间的以太坊数据包内容示例;请注意右列中的内容不是可译码的文本。

Pegasys Engineering的协议工程师Raul Kripalani于2018年6月宣布,该组织正在开发并发布一款开源Wireshark解析器,用于以太坊UDP P2P节点发现。此类工具有助于解析(但不能解密)以太坊网络通信。他还宣布了研究RLPx/TCP解析器的未来规划(Kripalani,2018年)(Consensys,2018年)。

虽然Snort等入侵检测工具无法对加密流量内容发出告警,但Snort可尝试检测以太坊的使用情况。下述两例Snort规则可通过TCP和UDP使用端口30303(默认)检测流量:

如果不在网络防御者的特定环境中进行进一步测试和优化,这些规则远不足以在生产中使用。这些规则可匹配大量与以太坊无关的流量。一个简单的改进办法是在规则的另一侧添加端口号或范围(例如,将“any”替换为“1025:”,从而限制1025及以上端口)。这种改进办法可防止Web浏览活动(例如,客户端碰巧使用临时端口30303时)产生的误报告警。

由于以太坊流量认证和加密,通过“中间人”(MITM)攻击修改网络流量的尝试将面临类似挑战。可修改路由中流量的代理软件(如Burp套件)可能会导致接收器因认证失败而丢弃流量。

因此,目前针对以太坊节点的最有效的网络攻击是拒绝服务攻击。这种响应最可能发生在入侵防护设备或网络防火墙上,通过阻断网络流量来实现。这将阻止僵尸机接收新指令,从而阻止其以任何有意义的方式参与僵尸网络。

 

2.3.端点检测

与检测端点上运行的恶意软件一样,查看文件、进程和网络套接字的这一传统方法可有效检测基于私有区块链的僵尸网络客户端组件。网络防御者可创建用以匹配指标的特征或检测异常以太坊客户端,发现计算机上的僵尸网络活动。此等检测常通过杀毒程序等软件或监控端点的网络活动来实现。

 

未完待续。。。

发表评论