面向智能合约的代码安全审计毕业论文
2021-11-04 20:46:47
摘 要
本文研究了应用于智能合约的代码安全审计工具,并基于传统的模糊测试方案展开了一系列的讨论。首先,本文对区块链的特性进行简单阐述,从而说明智能合约所具有的特点,继而聚焦于当前已有的智能合约检测工具。其次,从以太坊中的账户、合约、气等基础概念入手,对以太坊的运行机制进行简单介绍,继而过渡到对不同层面合约漏洞原理的阐述以及可能的攻击方式。随后,给出智能合约语言中的模糊测试整体方案设计,并对其中模糊输入生成模块进行优化,根据前述漏洞原理定义相关测试预言以实现异常监测。最后,令该优化工具与原始工具、符号执行工具检测统一数据集,实验结果表明优化后的模糊测试工具优于原始的模糊测试工具,利用符号执行生成的模糊输入更易到达较深的程序执行路径。
关键词:智能合约;模糊测试;符号执行
Abstract
This paper studies the code security auditing tools applied to smart contracts, and launches a series of discussions based on traditional fuzzing schemes. First, this paper briefly introduces the characteristics of the blockchain to explain the specification of smart contracts, and then focuses on the existing smart contract detection tools. Secondly, starting with basic concepts such as accounts, contracts, and gas in Ethereum, a brief introduction to the operation mechanism of Ethereum is provided, and then this paper transits to the principle of contract vulnerabilities at different levels and possible attack methods. Subsequently, the overall design of the fuzzy test in the smart contract language is given, and the fuzzy input generation module is optimized. According to the aforementioned vulnerability principle, the related test predictions are defined to achieve abnormal monitoring. Finally, the optimization tool is combined with the original tool and the symbolic execution tool to detect a unified data set. The experimental results show that the optimized fuzzy test tool is superior to the original fuzzy test tool. The fuzzy input generated by symbolic execution is easier to reach a deeper program execution path.
Key Words: Smart contract; fuzzy test; symbolic execution
目 录
第1章 绪论 1
1.1 研究背景与研究意义 1
1.2 论文研究内容与结构 3
第2章 智能合约漏洞分析 4
2.1 以太坊智能合约基础 4
2.1.1 账户 4
2.1.2 合约与交易 5
2.1.3 气(Gas) 6
2.2 Solidity层面漏洞 7
2.2.1 重入漏洞(Reentrancy) 7
2.2.2 整数溢出(Integer Overflow) 9
2.2.3 无气发送(Gasless Send) 9
2.2.4 异常混乱(Exception Disorder) 10
2.3 EVM层面漏洞 11
2.3.1 调用堆栈深度(Stack Size Limit) 11
2.3.2 以太丢失(Ether Lost in Transfer) 12
2.4 区块链层面漏洞 12
2.4.1 时间戳依赖(Timestamp Dependency) 12
2.4.2 区块号依赖(Block Number Dependency) 13
2.5 本章小结 13
第3章 基于模糊测试的合约漏洞检测 14
3.1 模糊测试简介 14
3.2 方案整体设计 15
3.3 合约静态分析 16
3.4 模糊输入生成 18
3.4.1 基于符号执行的输入生成 18
3.4.2 针对重入漏洞的输入生成 19
3.5 合约异常监视 20
3.5.1 测试预言 20
3.5.2 EVM插桩模块 21
3.6 本章小结 22
第4章 实验结果及分析 23
4.1实验环境与实验设置 23
4.1.1 软硬件环境 23
4.1.2 实验流程及方案 23
4.2 实验结果 23
4.3 实验分析 24
4.3.1 结果分析 24
4.3.2 漏报分析 25
4.4 本章小结 26
第5章 结论 27
5.1 研究工作总结 27
5.2 未来工作展望 27
参考文献 28
致 谢 30
第1章 绪论
1.1 研究背景与研究意义
近年来,区块链在金融、供应链、医疗、教育、能源领域都有不同程度的应用[1]。区块链是一个共享的账簿,记录了自创建以来发生的所有交易和交换的所有数据。正如文献[2]中定义的那样,区块链维护着一个不断增长的记录列表,这个列表被称为块。每个区块包含许多交易,并且被链接到先前创建的区块,依次类推直到最开始的那个区块(创世区块),如图1所示[3]。
图1 区块链结构
在区块链中,通过工作量证明机制或其他共识协议实现区块的添加和交易有效性的验证,其可以起到防止重复支出的作用。区块链的链式结构中,每一个区块都会包含前一区块的哈希值,就像锁链一样将各个区块链接起来。换句话说,倘若修改某一个区块中所包含的交易数据,会使得这个区块的哈希值与原始的产生较大的差异,从而导致后续所有区块的哈希值也发生变化,这种设计思想使得想要更改存储在区块链中的数据变得极为困难。此外,共享账簿可在网络中的许多节点之间同步,这使得区块链技术去中心化且值得信赖。正因为区块链的去中心化、开放性、独立性、安全性、匿名性等特性,区块链近几年的应用场景数量呈井喷式增长[4]。
智能合约是1994年,由密码学家Szabo[5]提出的,其实质是对现实世界中的合约执行电子化的量化交易协议,一旦部署之后就能实现自我执行。但在当时,因为可信执行环境的缺乏,这项技术始终没有被运用到实践中,而区块链的诞生为这个技术的大规模运用提供了基础。Buterin的白皮书中提出了以太坊这一概念[6],该平台也被称为“下一代智能合约和去中心化应用平台”。在以太坊中,合约将以数字化的形式写入区块链中,可以保证整个过程的透明性,数据无法被篡改,且当合约内容满足的时候,会自动执行,避免了发行者的违约行为。这样使得区块链应用更具便捷性和可拓展性。