阿里云BaaS智能合约扫描服务使用详解

简介: 在企业级的联盟链应用场景,链上数据与企业日常业务运行有着紧密的关联。在供应链金融、大宗商品仓单等场景下,智能合约漏洞可能直接给企业在企业信用及经济上都造成无法挽回的损失。阿里云BaaS提供了便捷易用的智能合约扫描服务,能够有效的帮助用户降低智能合约的安全风险。

阿里云BaaS智能合约扫描服务

区块链技术,是一种交易记录的存储技术。它对交易记录进行永久性存储,而且在存储之后永远无法删除,只能按照次序加入新的交易,由此对所有的交易历史进行永不结束的记载。这个看似简单的功能描述,实则含义深刻,它促使我们重新思考如何去创建交易、存储数据和交换资产,它是一场巨大变革的起点。

区块链通过不可变的特性提高参与方的可信度,还能通过交易中提供更大的透明度来减少各个参与方之间的摩擦,这些特性使得更多行业的应用场景得以重塑。如果说互联网彻底改变了信息传递的方式,那么区块链作为构造和传递信任的媒介,将可能彻底改变整个人类社会价值传递的方式。

智能合约是区块链最关键的特性,也是区块链能够被称为颠覆性技术的主要原因。智能合约肩负着交易数据的处理和最终上链共识的重任。又由于区块链不可纂改的特性,上链数据的正确性就需要得到极高的保证,智能合约的安全性和完备性也变的更加重要。

在一些公链上,一个小小的智能合约bug就可能导致上亿美元的损失。2018年3月,美链(BEC)被爆出 ERC20 协议安全漏洞,攻击者利用整数溢出BUG,可无限生成代币。被黑客进行漏洞攻击的美链,引发了价格闪崩,当日币价几乎归0。

最著名的黑客攻击事件要数The DAO。早在2016年,这个平台被盗了高达1.5个亿美金的ETH。攻击者利用了递归调用 splitDAO 函数这一技术层面的漏洞,这起事件同时也暴露了智能合约安全性的早期缺陷。据英国和新加坡的研究人员统计,超过34000个智能合约都有可被利用的安全隐患。

而在企业级的联盟链应用场景,链上数据与企业日常业务运行有着紧密的关联。在供应链金融、大宗商品仓单等场景下,智能合约漏洞可能直接给企业在企业信用及经济上都造成无法挽回的损失。

阿里云BaaS智能合约扫描服务

阿里云区块链服务是由蚂蚁金服在阿里云上提供的企业级区块链平台服务,支持Hyperledger Fabric、蚂蚁金服自研区块链技术、以及企业以太坊Quorum三种区块链引擎,能够帮助用户简单快速的构建更安全稳定的区块链环境,实现业务快速上链。同时,不仅在产品控制台里提供了便捷的智能合约扫描服务,用户直接可以在控制台内上传智能合约,即可获取扫描的结果,在AlibabaCloud BaaS VS Code插件中,用户也可以直接远程调用智能合约扫描服务,对当前正在开发的智能合约进行扫描检测。

下面我们使用一个可以运行成功但有明显缺陷的示例智能合约来试用一下阿里云BaaS的智能合约扫描服务。
示例合约代码:sacc.go

创建检测任务

我们可以看到,目前阿里云BaaS的智能合约扫描服务支持 Hyperledger Fabric的Golang 和以太坊/Quorum的Solidity 两种智能合约。
检测任务

1

由于智能合约的逻辑并不复杂,扫描时间在1分钟内就返回了结果。

2

下载结果,并且解压之后,直接打开 findings.html 文件,既可以看到完整的扫描报告。

扫描结果概览

3

从扫描结果的概览中,我们看到一共扫描处11处需要关注的地方,其中,有4处安全隐患以及7处最佳实践缺陷

安全隐患

安全隐患是指智能合约中存在直接影响数据安全的隐患,可能是代码的bug,也可能是不符合智能合约开发规范导致。
点击标题,可以看到该缺陷的详细说明。我们挑选了其中的4个缺陷给大家做下详细的说明。

错误的依赖

下属错误是由于引入了可能会导致执行结果不确定性的库导致。智能合约的运行需要保证多个 peer 节点上运行结果是一致的,而引入 time 可能会导致不用的 peer 节点得到不同的结果,如果该结果参与到账本数据的计算,很可能导致键值不一致而背书失败。

Tips:点击Show Code可以看到源码的信息,这样有助于快速定位问题所在。点击 Hide Code 则可以隐藏源码。

4

全局状态变量

在智能合约中,对账本数据的操作不应该依赖全局变量。全局变量仅存在当前的节点中,并没有存储到账本中,当有节点宕机或出现错误时,有可能会导致该全局变量在多个peer节点中不一致。
5

最佳实践隐患

最佳实践隐患不会对智能合约的安全性产生影响,但是可能会导致异常退出、内存泄露、性能降低等问题。示例扫描结果中,有2类最佳实践隐患:未处理异常及写后读。

未处理异常

点击 unhandled_error 可以看到所有的6处缺陷信息。忽略异常可能会导致程序的执行错误或者异常退出,因此,所有的异常信息都需要被处理。
示例代码中,func set(stub shim.ChaincodeStubInterface, args [] string) (string, error) 在被line 62调用时,使用_ 占位符来忽略掉了本应该处理的错误。
6

写后读

写操作需要在提交事务并将其写入分类账之后才能生效。 因此,当读取在同一笔交易中已经被写入的值时,将从账本中检索其旧值,该旧值往往与上面PutState的值是不一致的,这很可能会导致一些非预期的行为产生。
7

Tips:如果该缺陷检测有误或者已经被处理,可以点击 Mark as False Positive进行忽略。

上述我们使用了一个示例智能合约来对阿里云BaaS的智能合约扫描服务进行了讲解,为了编写安全和高质量的智能合约,赶紧把写好的智能合约来扫描下看看吧!

联系我们

最后,欢迎感兴趣的同学加入钉钉群(钉钉群号: 23181816)。
image

相关文章
|
12天前
|
运维 JavaScript Java
Serverless 应用引擎产品使用之在阿里云函数计算中想为两个不同的服务分别开通自定义域名如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
25 1
|
2天前
|
Cloud Native 关系型数据库 OLAP
高效易用的数据同步:阿里云瑶池 Zero-ETL服务来啦!
在大数据时代,企业有着大量分散在不同系统和平台上的业务数据。OLTP数据库不擅长复杂数据查询,不具备全局分析视角等能力,而OLAP数据仓库擅长多表join,可实现多源汇集,因此需要将TP数据库的数据同步到AP数据仓库进行分析处理。传统的ETL流程面临资源成本高、系统复杂度增加、数据实时性降低等挑战。为了解决这些问题,阿里云瑶池数据库提供了Zero-ETL服务,可以快速构建业务系统(OLTP)和数据仓库(OLAP)之间的数据同步链路,将业务系统的数据自动进行提取并加载到数据仓库,从而一站式完成数据同步和管理,实现事务处理和数据分析一体化,帮助客户专注于数据分析业务。
42 0
|
11天前
|
NoSQL 数据管理 MongoDB
数据管理DMS产品使用合集之如何通过阿里云的数据管理服务(DMS)导出MongoDB数据
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
12天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
39 4
|
12天前
|
运维 NoSQL Java
Serverless 应用引擎产品使用之在函数计算上部署Java服务并访问阿里云MongoDB如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
15 0
|
12天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中,Go语言的函数计算服务Go程序没有正确打包如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
22 0
|
12天前
|
运维 Serverless 数据处理
Serverless 应用引擎产品使用之阿里云函数计算中的应用、服务及函数之间的关系如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
26 0
|
16天前
|
SQL 人工智能 安全
动态精选|阿里云3月产品与服务更新盘点
动态精选|阿里云3月产品与服务更新盘点
29 1
|
18天前
|
存储 JSON 前端开发
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
15 0
|
18天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
19 0

热门文章

最新文章