软件系统设计方案
一、项目介绍
智能合约是运行在区块链共识协议之上的程序代码,其能够使人们在最小化彼此之间信任的同时达成协定。如今,数百万的智能合约被部署在各种各样的去中心化应用中,然而存在于智能合约中的安全漏洞却对这些去中心化应用造成了巨大的威胁。
智能合约的运行依赖于底层的区块链平台以及其它协作合约,合约开发者没能完全理解这些合约之间以及合约与底层区块链平台之间隐含的关系;智能合约的编程语言与运行环境对于合约开发者来说都是全新的,且这些工具还不够成熟,合约开发者没能很好的处理这些工具自身的不足;区块链具有不可篡改的性质,智能合约在被部署至区块链平台之后难以更新。
本项目提出了ContractFuzzer工具,该工具是一个全新的针对于以太坊智能合约安全漏洞检测的模糊测试工具,其能够根据智能合约的ABI规范生成模糊测试输入,定义检测安全漏洞的测试预言,通过对以太坊虚拟机插桩记录智能合约的运行时状态,分析日志并报告安全漏洞。
二、系统架构

三、项目视图
1. 分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。

2. 依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖。

3. 执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件,都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。在设计与实现过程中,我们一般将执行视图转化为伪代码之后,再进一步转化为实现代码。

4. 实现视图
实现视图是描述软件架构与源文件之间的映射关系,比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪写目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以有软件项目的源文件目录树来呈现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性越高,越有利于软件的维护,因此实现视图时一种非常关键的架构视图。

四、运行环境和技术选型
1. 操作系统:Ubuntu 18
2. 语言:Go、JavaScript
(1)Go用于处理fuzz数据;
(2)JavaScript用于与Geth客户端进行交互;
3. 本地环境:Geth客户端、nodejs
4. 编译器: Goland
5. 容器:Docker
五、数据库设计
User:
| 用户编号 | 用户名称 |
| id | name |
Contract:
| abi对象描述符 | 合约账户余额 |
| abi | balance |
ABI:
| 合约名称 | 合约方法签名 | 输入 | 输出 |
| name | methodSig | input | output |
六、系统概念原型的核心工作机制
核心工作机制:(1)分析测试智能合约的ABI接口以及字节码,提取ABI函数的每一个参数的数据类型以及ABI函数中所使用到的函数签名;(2)进行ABI签名分析,并根据各个智能合约所支持的函数签名将其进行索引;(3)生成与ABI规范相符的合法模糊测试输入以及越过有效边界的突变输入;(4)启动模糊测试,通过随机的函数调用,使用生成的输入调用相应的ABI接口;(5)分析模糊测试过程中生成的执行日志,检测安全漏洞。

浙公网安备 33010602011771号