近年来,区块链技术在应用于加密资产(cryptocurrency)方面已取得了显着发展,考虑了智能合约的扩展和匿名性的提高。以太坊是一个具有智能合约功能的区块链,在区块链上有一个数据空间可以自由存储程序。但是,这种数据空间的污染会危害以太坊。
在这项研究中分析了以太坊数据空间中存储的恶意文件,并讨论了以相对较低的成本嵌入恶意数据而严重污染区块链的区块链投毒攻击(blockchain poisoning attack)。
0x01 Introduction
区块链是一种分布式账本,尽管该技术被称为加密资产(cryptocurrency)的基本技术,但它不仅充当存储价值的功能,而且还扩展到工业领域。该技术具有一些优势。它提供一定程度的匿名性,确保网络不关闭,并且对网络上的数据具有抗操作性。但是,区块链技术面临某些安全问题和挑战,例如大多数攻击(51%攻击)、双花和加密劫持,以及如下图的投毒攻击。
通过将恶意或非法文件嵌入到区块链的数据空间中,可以攻击区块链[。将这种类型的攻击定义为投毒攻击。此类攻击被认为比针对公共数据库的传统投毒攻击(例如DNS缓存中毒)更具恶意性,因为由于区块链的功能(无法在区块链中进行交易)而没有硬分叉来修复中毒的区块链,被修改或取消是不可行的。此外,由于区块链中包含的数据由每个节点同步,因此攻击者可以通过将节点嵌入到区块链中来迫使节点下载任何恶意文件。
智能合约最早由Szabo提出,它是一种计算机协议,旨在在没有任何可信任第三方的情况下以数字方式促进、验证或强制进行交易的谈判。以太坊被公认为是智能合约的一种实现,该合约是完整的。
与比特币区块链不同,以太坊拥有一个合法且灵活的空间,其中包含智能合约的字节码。任何人都可以正式将任何数据嵌入以太坊区块链。不幸的是,这表明此功能还为攻击者提供了灵活性。因此,针对以太坊(以及具有灵活空间的区块链)的投毒更加容易。
0x02 Background
1)以太坊
以太坊是一个运行智能合约的去中心化平台:以完全编程的方式运行的应用程序,不会出现停机、审查、欺诈或第三方干扰的可能性。
两种类型的帐户:以太坊有两种类型的账户,外部账户(EOA)和合约账户。 EOA用于将以太币发送到另一个帐户,签订合约并执行合约,它由私钥控制。相反,合约代表以太坊本身的智能合约账户。换句话说,EOA将交易发送到合约帐户以执行合约。
以太坊上的智能合约和灵活空间:以太坊上的智能合约以字节码(称为EVM代码)编写,并在名为以太坊虚拟机(EVM)的虚拟机上执行,该虚拟机在以太坊网络中的一个节点上运行。以太坊交易具有用于智能合约的空间:初始化和数据区域。初始化区域包含EVM代码,用于部署智能合约。相反,数据区域用于调用合约的功能并为该功能提供参数。无论智能合约如何,都可以自由使用该区域。
因为初始化和数据区域都是无限字节的数组),所以数据大小没有理论上限。但是,由于交易费不能超过矿工投票确定的块费限制,因此数据大小有实际的上限。另外,作为以太坊的官方Go实现的Go Ethereum还有另一个限制。带有注释“Heuristic limit, reject transactions over 32 KB to prevent DOS attacks”,在应用程序中添加了一个过滤器,以拒绝其init/data区域中包含超过32 kB数据的事务。从v1.6.6版本开始已添加此限制。
根据ethernodes.org(其中包含有关以太坊网络中节点的信息)的说法,Go Ethereum在以太坊网络中所有节点的大约50%上运行。其他以太坊客户端应用程序中的数据大小没有限制。
METAMASK:这是一个以太坊钱包,实现为网络浏览器的扩展:Chrome,Firefox和Opera。它不仅支持连接以太坊主网而且还支持专用网,并支持传输ERC20令牌
资源管理器。这是一个Web服务,可通过Web浏览器提供有关区块链的信息,而无需特殊软件或运行区块链节点。服务对于区块链的透明性至关重要。
Etherscan是以太坊的知名探测器。它提供与以太坊区块链相关的信息,例如合约的源代码,初始和数据区域中的数据,区块哈希和交易哈希。
2)如何在以太坊上使用智能合约
可以通过以下两个步骤在以太坊上使用智能合约:
部署合约:使用高级编程语言定义合约。 Solidity6是定义以太坊合约的一种著名语言,它看起来像JavaScript。合约被编译为字节代码,称为EVM代码。
接下来,将EVM代码部署在以太坊网络上以使用该合约。在没有集成开发环境(IDE)的情况下,编译器将输入的EVM代码作为输出返回给新事务的init,该事务的接收者地址设置为null。此时,尚未生成与合约关联的合约帐户。使用以太坊钱包发送交易后,交易在网络中广播,以太坊网络中的矿工将交易放入新区块中以生成下一个区块。在挖掘过程中,将生成合约帐户。
执行合约:要执行合约,必须进行交易。输入字节数组以指定要调用的函数,并将该函数的参数提供给数据区以进行新事务。
然后将交易从EOA发送到合约帐户。在挖掘过程中,合约执行的结果反映在区块链中。此外,为了发送包含EVM代码的交易,某些以太坊钱包应用程序具有接收十六进制字符串中的数据并将其写入交易的功能。
0x03 Blockchain Poisoning Attack
区块链投毒攻击是通过将恶意或非法文件嵌入到区块链的灵活空间中来对区块链的攻击。攻击者可以强迫区块链网络中的节点下载文件,这导致针对区块链的DoS攻击。攻击目标可以是区块链及其用户。攻击者按以下方式进行攻击:
1.攻击者准备了恶意或非法文件;
2.攻击者将文件嵌入到灵活的交易空间中,并在区块链网络中广播交易;
3.恶意文件通过挖掘过程嵌入到区块链中,然后在网络参与者之间共享;
用于区块链中毒攻击的文件可以是隐私信息,恶意软件和任何非法内容。攻击成功原因如下:
–区块链在区块链P2P网络的参与者之间共享;
–包含在区块链中的交易很难被修改或取消。
在区块链系统中,每个完整节点都需要存储由P2P网络同步的块数据。这意味着攻击者通过将节点嵌入到区块链中来迫使节点下载和存储恶意或非法文件。当然,未存储完整区块链数据的节点(例如网络中的SPV节点)不会像完整节点那样受到直接攻击。但是,由于区块链网络主要由完整节点支持,因此攻击会间接影响区块链的所有用户。
不变性是区块链的重要特征之一。由于此功能,包含在区块链中的交易很难被修改或取消。因此,针对公共数据库,区块链投毒攻击被认为比常规的投中毒攻击(例如DNS缓存投毒)更具持久性,因为不使用硬分叉来修复投毒的区块链是不可行的。相反,一旦支付了交易费,就很容易发送带有恶意数据的交易。这意味着区块链受到攻击的严重破坏,而攻击者可以在低难度下进行攻击。
0x04 Application of Blockchain Poisoning
使用区块链进行C&C:在区块链系统中,每个节点都需要存储由P2P网络同步的块数据。任何人都可以通过连接到网络来访问区块链数据。这些功能可用于C&C。 A在这种技术中,僵尸程序是通过修改比特币节点软件(免费提供)来实现的,并且僵尸程序连接到比特币P2P网络并将该网络用于C&C。恶意软件通过区块链从Bot Master获取命令的方法:
–从受害者节点上的区块链获取命令;
–访问资源管理器网站以获取命令。
仅当受害者服务器作为区块链网络的节点运行时,才能使用第一个。因为每个节点都同步了区块链,并且区块链数据存储在其自身上,所以恶意软件可以通过读取存储在服务器上的数据(由bot master嵌入到区块链中)轻松访问命令。使用此技术,恶意软件可以将其C&C通信隐藏在区块链网络的P2P通信中。例如,恶意软件针对加密资产的节点窃取其私钥,然后可以在不与Bot Master和C&C服务器直接通信的情况下获取命令。
在第二种方法中,恶意软件访问资源管理器网站以接收命令。由于大多数公司都允许HTTP / HTTPS协议并且HTTPS通信的内容被加密,因此很难检测和阻止这种攻击技术。
区块链的算力下降/加密资产的价格操纵:在执行区块链投毒后,发布诸如“区块链包含非法文件!”之类的信息。会对使用区块链的用户产生负面印象,他们可能会离开系统。这是针对区块链的DoS攻击,因为网络的算力对于区块链系统的安全性非常重要。
如果加密资产遇到上述攻击,则其价格可能会下降。因此,攻击者可以降低价格,并从攻击前后的价格差中受益。
0x05 Evaluation of Flexible Space
调查了以太坊主网络上的可编程空间(块高度从0到6,988,614)(2015年7月30日至2018年12月31日UTC)。
1)方法
使用file carving方法检测到交易嵌入文件。此方法用于从存储的未分配空间中恢复文件,例如,在数字取证中。它可以通过诸如搜索文件头和使用文件结构的技术来识别嵌入未知二进制数据中的文件[。在此评估中使用了Foremost,因为它在通用和开源程序中使用。调查程序如下:
1.将从事务中提取的数据从字节数组转换为二进制文件,然后保存该文件;
2.将二进制文件输入file carving工具;
3.如果该工具检测到二进制文件中的某些文件,请记录交易信息
本研究使用了18种文件类型进行检测:jpg,gif,png,bmp,avi,exe,mpg,wav,riff,wmv,mov,pdf,ole,doc,zip,rar,html和cpp。在此评估中,没有涵盖分别分割并嵌入到区块链中并以某种方式编码的文件。攻击者需要一定的负担(例如,文件,gas等的管理)才能通过划分或编码来隐藏嵌入式文件或区块链上的数据。
2)事务中嵌入的文件
对从交易中提取的数据的调查表明,在以太坊区块链中嵌入了154个文件。上图显示了提取文件的文件类型。从图可以明显看出,大约80%的提取文件是图像文件(jpg,png和gif)。大多数图像内容没有问题,因为它们是集体照和风景。但是,某些图片包含不良内容。此外,乍看之下是正常的图片可能是恶意的,因为它们可能侵犯他人的隐私,并被隐写术所滥用。在以太坊区块链中发现了三个exe文件。这三个exe文件的MD5哈希如下所示;
(1)c9a31ea148232b201fe7cb7db5c75f5e
(2)c1e5dae72a51a7b7219346c4a360d867
(3)c9a31ea148232b201fe7cb7db5c75f5e
这两个文件显然是相同的。将这些哈希值输入VirusTotal来评估文件,并得出结论认为这三个exe文件是恶意软件,因为文件(1)和文件(3)的分析结果表明,它们被反病毒软件的检测率为56/70,并且文件(2)的结果表明其检测率为58/66。根据报告,一种名为W32.Duqu的恶意软件具有与文件(1)和文件(3)相同的哈希值。
此外,发现这三个exe文件是由一个帐户嵌入的,该帐户在大约6分钟内发送了三个嵌入文件的交易。下图显示了嵌入文件的事务的时间序列直方图。
演示了交易嵌入式文件的发送者和接收者之间的关系。发件人帐户数量为113,而文件嵌入式交易数量为154。这表明某些帐户多次将文件嵌入以太坊区块链。一个帐户发送的文件嵌入交易的最大数量为10。
上表列出了发件人帐户和收件人帐户之间的关系数量。关系分为三种:(a)发送者和接收者相同,(b)发送者和接收者不同,(c)接收者为空(即合约创建交易)。大多数具有文件嵌入式事务的帐户会将事务发送给除null以外的任何收件人。一些帐户将文件嵌入合约创建交易中。
0x06 Feasibility Experiment of Poisoning Attack
确定攻击的可行性对于评估攻击风险很重要,构建了一个模拟以太坊区块链实际环境的实验环境,以评估投毒攻击的可能性。在环境中,尝试将文件嵌入到私有的以太坊区块链中,并使用网络浏览器从资源管理器中提取相同的文件。提取并嵌入了文件,以使用网络浏览器和shell命令验证区块链中毒作为C&C基础设施的可用性,这表明攻击容易。
1)实验环境
实验环境是使用两个服务器(服务器A和服务器B)和一台笔记本电脑构建的,如上图所示。实验环境的组件如下:
服务器A(以太坊专用网): Go Ethereum安装在此服务器上,该服务器配置为挖掘私有区块链。该服务器在实际环境中扮演以太坊主网的角色。
服务器B(资源管理器):在此服务器上设置了一个Web服务器,以使用EthExplorer在服务器A上显示有关以太坊私有区块链的信息。该Web服务器在实际环境中扮演Etherscan等区块链浏览器的角色。
笔记本电脑:使用MacBook Pro执行shell命令,并使用Google Chrome(已安装METAMASK)进行实验。这些使嵌入和提取文件的过程与对以太坊主网进行中毒攻击的过程相同。
2)实验
分三个步骤(准备,嵌入文件和提取文件)说明实验过程。由于以太坊拒绝包含32 kB以上数据的交易,因此使用32 kB以下的图像文件嵌入到私有区块链中。
准备步骤,这是服务器A上的设置:
1.开始在服务器A上进行挖掘;
2.将METAMASK连接到服务器A上的以太坊专用网络;
3.在METAMASK上创建一个帐户,然后将Ether从服务器A上的Coinbase帐户发送到该帐户;
4.在METAMASK的设置中,打开“ Show Hex Data”开关。
嵌入文件,描述了将文件嵌入到区块链中的过程:
1.要获取文件(例如pic.jpg)的十六进制转储,执行以下命令并将结果复制到剪贴板;
xxd -p pic.png | perl -pe ’s/ n//g’
2.单击METAMASK上的“SEND”;
3.选择任何帐户发送交易,并将文件的十六进制转储粘贴到“Hex Data”字段中;
4.单击“NEXT”和“CONFIRM”发送交易;
5.区块链收到交易后,可以确认区块链在服务器B的Web应用程序中包含hexdump。
提取文件,下面给出了从区块链中提取文件的过程。应当注意,提取文件的名称为“ pic extract.png”:
1.复制服务器B的Web应用程序上显示的十六进制字符串;
2.用十六进制字符串上的以下命令替换<hex>并执行它。
echo <hex> | xxd -p -r > pic extracted.png
0x07 Discussion
1)可疑帐户的行为
单个帐户可以将三个exe文件(由Virus Total判定为恶意软件)嵌入以太坊区块链,启发式分析可以检测分析可疑行为的恶意软件。考虑到可以针对区块链中毒实施启发式分析的可能性,观察了可疑账户的行为。在评估中发现,可疑帐户总共发送和接收了十笔交易。这些交易如下。假设“帐户X”表示可疑帐户,帐户A,B和C表示普通帐户。
这一系列交易表明攻击者试图检查恶意文件是否可以嵌入到区块链中。这种尝试可以解释如下:
首先,这个可疑帐户收到了一些以太币(1),用于发送交易并将数据嵌入交易中。为了检查可嵌入到区块链中的数据大小,该帐户发送了两个大小不同的交易(3)(4)。接下来,该帐户发送了一个交易嵌入式PNG文件,以检查它是否可以嵌入到区块链中(5)。然后,该帐户发送了包含恶意软件二进制文件的三个事务,以检查是否可以将恶意文件嵌入到区块链中(6)(7)(8)。
通过一个帐户发现了可疑行为。但是,恶意软件与此类可疑帐户之间存在明显的区别。恶意软件会采取一系列措施。相比之下,攻击者还可以在区块链上创建无限账户(例如地址)。尽管在这种情况下,单个帐户发送了交易,但是它们可以被多个帐户划分和发送。因此,由于区块链上恶意软件和账户之间的差异,对每个账户进行启发式分析是无效的,应通过观察每个交易而不是账户来采取针对区块链投毒的对策。
7.2区块链灵活空间的风险
考虑到对可编程空间的评估以及投毒攻击的实验,讨论了以太坊区块链的灵活空间带来的风险,以下是增加风险的原因。
嵌入数据的功能已正式提供:除了OP RETURN和Coinbase交易外,禁止将任意数据嵌入比特币区块链的技术被正式允许。因此,当将任何没有灵活空间的数据嵌入到区块链中时,有必要使用“编码比特币脚本”之类的方法,因为此类区块链的通用钱包没有嵌入功能。
但是,对于具有灵活空间的区块链(包括以太坊),正式提供了一些将数据写入空间的功能。攻击者可以使用钱包应用程序(良性用户也可以使用它们)通过相同的过程执行投毒攻击。因此,区块链中的灵活空间可促进投攻击。
存在Explorer:每个区块链中都有一个名为Explorer的网站,提供与区块链相关的信息。这些网站的内容根据每个区块链的结构和功能而有所不同。如果区块链具有灵活的空间,则可以以任意形式(例如ascii和十六进制)轻松获取嵌入式数据。
可以使用Web浏览器通过Explorer将数据嵌入到区块链中,这意味着可以通过HTTP / HTTPS获得嵌入的数据,许多公司都允许使用HTTP / HTTPS进行通信。对于使用C&C的攻击者来说,具有灵活空间的区块链是一个优势。过去已经报道了使用博客和社交媒体的恶意软件和使用GitHub进行C&C的恶意软件。使用Explorer的技术可以轻松地在此类恶意软件上实施。
对于攻击者而言,重要的是不要参与将数据从区块链迁移到Explorer网站的过程。当浏览器收到数据时,它们会独立访问Explorer网站。这意味着使用区块链Explorer的C&C技术对于攻击是有效的,因为很难将僵尸程序链接到攻击者。
3)在合约中包装任意二进制文件的可能性
由于灵活性,不利的数据可以嵌入到区块链中。因此,作为解决区块链网络中不利交易的简单对策,可以降低用于嵌入数据的空间的灵活性。在本文中找到的大多数文件以hexdump形式嵌入,在以太坊中,可以通过仅将有效数据作为EVM代码来拒绝在其初始区域中具有文件十六进制转储的事务。
但是,即使代码是嵌入式hexdump,也可以将其成功编译为EVM代码,如上所示的Solidity源代码。这意味着可以制作一个有效的EVM代码,其中包含文件的任意十六进制转储。因此,很难采取措施将恶意数据嵌入到区块链中。
4)防止区块链投毒的对策
作为针对内容插入的对策之一,提出了强制性的最低收费以惩罚大笔交易。当然,经济成本是有效的,因为除了某些特定情况(例如降低算力)外,工作证明从未被打破。然而,由于缺乏数据的大小和恶意性之间的相关性,所提出的方法具有缺点。
以下可以被视为针对区块链投毒攻击的一种临时对策。该对策采用与其他合约相似性决定的强制性最低费用。费用是根据过去部署在区块链上的所有合约计算得出的,如果没有类似合约,费用会更大。随着类似合约数量的增加,最低费用会减少。
在这种机制中,发送交易的成本取决于类似合约的数量,而不是交易的大小。由于在区块链中此类恶意交易的数量很少,因此攻击者可能被迫支付高额费用。
先前的研究表明由于某些原因(例如重用合约的源代码),实际使用了类似的合约。在区块链网络中,区块的内容由网络参与者之间的共识确定。但是,如果文件是良性或恶意的,通常很难达成共识。
0x08 Conclution
为了评估区块链投毒攻击的风险,分析了以太坊区块链以检查实际情况,并使用实验性区块链环境验证了攻击的难易程度。
确认在以太坊区块链上嵌入了154个文件,其中包括一些恶意文件。此外,证明了使用Web浏览器和Shell命令可以轻松执行区块链投毒。指出了使用以太坊区块链进行C&C技术的可能性,该方法可以轻松地应用于现有的恶意软件,因为它们使用HTTP / HTTPS协议从botmaster接收命令。