软件系统设计方案

一、项目介绍

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

二、系统架构

       我们常见的软件架构有三种:第一种,层次化架构是利用面向接口编程的原则将层次化的结构型设计模式作为软件的主体结构。第二种,MVC即为Model-View-Controller(模型-视图-控制器),其是一种设计模式。M代表一个存取数据对象以及数据模型、V代表模型包含的数据的表达方式、C作用于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合,是模型和视图的桥梁。第三种,MVVM即为Model-View-ViewModel,和MVC模式一样,只要目的是分离视图和模型,有着以下一些优点:低耦合、可重用性、独立开发和可测试性。
       层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。这样的系统中构件在一些层实现了虚拟机(在另一些层次系统中层是部分不透明的)。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。这种风格支持基于可增加抽象层的设计。这样,允许将一个复杂问题分解成一个增量步骤序列的实现。由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
       本系统分为三层,混淆器层通过智能合约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)分析模糊测试过程中生成的执行日志,检测安全漏洞。

 

posted @ 2020-12-30 08:34  大方对  阅读(1006)  评论(0)    收藏  举报