以太坊是一个平台,它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。具体来说,以太坊通过一套图灵完备的脚本语言(Ethereum Virtual Machinecode,简称EVM语言)来建立应用。平台之上的应用,其实就是智能合约,这是以太坊的核心。合约是一个活在以太坊系统里的自动代理人,他有一个自己的以太币地址,当用户向合约的地址里发送一笔交易后,该合约就被激活。它不仅速度更快、花费更低,而且还避免了手动填写大量表格可能导致的人为错误,解决了传统合约中的信任问题,大幅降低了信任成本。随着智能合约变得越来越受欢迎,价值也越来越高,它们也越来越成为攻击者感兴趣的目标。在过去几年中,一些智能合约被攻击者利用。然而,一种更积极主动的方法的新趋势似乎正在上升,攻击者不再搜索易受攻击的合同。相反,他们试图通过部署包含隐藏陷阱的看似脆弱的合同来引诱受害者进入陷阱。这种新型合约通常被称为蜜罐。
二、论文
1、引入
本文通过调查蜜罐智能合约的普遍性、行为和对以太坊区块链的影响,首次对蜜罐智能合约进行了系统分析。作者开发了一个蜜罐技术的分类法,并使用它来构建蜜獾———一种使用符号执行和定义良好的启发式方法来公开蜜罐的工具。对200多万个智能合约进行了大规模的分析,结果表明,蜜獾不仅具有很高的精度,而且还具有很高的效率。具体而言,本文做出了以下贡献:
-
对以太坊出现的一种新型欺诈蜜罐进行了第一次系统分析;
-
确定蜜罐使用的常见技术,并将其分类;
-
提供蜜獾————一种自动检测以太坊智能合约中的蜜罐的工具;
2、背景介绍
下面提供工作设置所需的背景,包括对智能合约、以太坊虚拟机和以太扫描区块链浏览器的描述。
(1)智能合约
本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。简单讲,智能合约就是双方在区块链资产上交易时,触发执行的一段代码,这段代码就是智能合约。智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。尽管有多种编程语言,Solidity仍然是以太坊中开发智能合约最突出的编程语言。Solidity的语法类似于C和JavaScript的混合体。它附带了许多特定于智能合约的独特概念,例如资金转移或调用其他合约的能力。
(2)以太坊虚拟机
以太坊区块链由相互不信任的节点组成的网络组成,这些节点共同构成分散的公共账本。该分类账允许用户通过向网络提交交易来创建和调用智能合约。这些交易由所谓的矿工处理。矿工在验证数据块期间使用一个专用虚拟机(称为以太坊虚拟机)执行智能合约。EVM是一个基于堆栈、无寄存器的虚拟机,运行低级字节码,由一组操作码指令表示。为了保证合同的终止,从而防止矿工陷入无休止的执行循环,引入了矿工费的概念。它把执行每一条指令的成本联系起来。在发布交易时,发送者必须支付执行智能合约的矿工费用。智能合约的执行导致世界状态σ的修改,世界状态σ是存储在区块链上的一种数据结构,将地址a映射到帐户状态σ[a]。智能合约的帐户状态由两个主要部分组成:余额σ[a]b,它包含合同所拥有的以太币,以及储量σ[a]s,它包含合同的持久数据。存储被组织为一个关键价值存储,是智能合约在执行过程中保持状态的唯一方法。除了世界状态σ,EVM还拥有一个交易执行环境I,其中包含正在执行的智能合约的地址Ia、交易输入数据Id、交易发送方Is和交易Iv。EVM本质上可以看作是一个基于交易的状态机,它接受输入σ和I,输出一个修正的世界状态σ‘。