【专题系列文章1】:炒作的江湖?还是时代的弄潮儿?关于数字藏品,这些硬核知识你需要知道!
【专题系列文章2】:搭上Web3.0的数字藏品到底有多火?
最后一篇依然是关于数字藏品安全问题的探讨——数字藏品在智能合约实现中存在的安全问题和解决方案。
国内数字藏品在技术上与NFT并无太大差别,也是通过智能合约来实现业务逻辑,所以合约漏洞等安全问题在国内数字藏品上也会存在,我们需谨慎对待。下面我们就来看看数字藏品在智能合约实现中存在的安全问题和解决方案。
什么是智能合约?
为什么数字藏品的安全问题离不开对智能合约的讨论呢?因为,数字藏品在技术上是通过智能合约实现并运行的。在讨论数字藏品智能合约安全问题之前,我们先来看看什么是智能合约。
20世纪90年代,Nick Szabo首次提出智能合约的概念。当时,他把智能合约定义为通过结合协议与用户界面,规范和保障计算机网络安全的工具。
在区块链领域,智能合约可界定为运行在区块链中的应用或程序。简单来说,智能合约是一种确定性程序,会在满足某些条件时,强制执行特定规则来发挥作用。这些规则由计算机代码预定义,经所有网络节点复制和执行。
目前应用最广泛的基于以太坊的智能合约有着分布式、确定性、自主性、不变形、定制化、去信任化、透明性等特性。
为什么数字藏品会有智能合约安全风险?
因为,智能合约本身由人工编写的计算机代码组成,那么就不可避免的存在缺陷和漏洞风险。合约一旦部署不可修改、合约执行后不可逆、所有执行事务可追踪,而且区块链上的智能合约对所有用户可见,如果有漏洞被作恶者利用,将导致资产被盗且往往无法收回,给用户造成巨大损失。并且存在的安全问题可能无法迅速修复。
随着数字藏品等应用的爆火,区块链智能合约数量也与日俱增,随之暴露出来的安全问题也会越来越多。
为了避免安全事件的发生,保护用户的资产安全,就必须在最源头做好安全防范,提高数字藏品开发的安全意识。
接下来,就给大家介绍一些由智能合约特性导致的安全风险和对应的安全措施。
经成都链安安全团队研究发现,数字藏品智能合约主要的安全问题有:重入漏洞安全问题 、随机数安全问题、整型溢出安全问题 、动态数组越界安全问题、函数权限配置错误安全问题、忽略返回值安全问题、空指针引用安全问题、访问外部资源安全问题、输入参数检查安全问题等,问题详细分析如下。
1、重入漏洞安全问题
数字藏品的业务场景中智能合约常常需要实现合约间的外部调用,这种方式主要的危险就是外部合约可以接管控制流,并调用函数对某些关键数据进行更改。尤其在solidity语言中,当用户直接向一个合约转账时会产生一个隐藏的fallback()外部调用,如果未对该调用进行限制则可能会产生重入漏洞。
成都链安安全团队对此建议:
2、 使用互斥锁:添加一个在代码执行过程中锁定合约的状态变量,防止重入调用;
3、 对可能产生的外部调用操作本身进行限制;
2、随机数安全问题
随机数在数字藏品中的应用十分广泛,如为艺术类数字藏品随机分配属性,为游戏类的藏品分配宝藏位置,以及保障限量版藏品空投的公平性等。
不同区块链开发语言中生成随机数的方式也多种多样,例如Go使用math/rand、Java使用java.util.Random类等。而在Solidity中由于没有原生的生成伪随机数的函数,所以部分开发者常采用区块参数替代。
成都链安安全团队对此建议:
3、整型溢出安全问题
成都链安安全团队对此建议:
4、动态数组越界安全问题
对于数组越界这种严重的内存错误,不同的区块链开发语言有各自的特点。
Java、Solidity、Go语言等跟其他大部分编程语言类似,在编译期间会进行数组越界检查。特别的是,在Solidity语言中动态数组将首先在变量定义处的虚拟机插槽位置存储数组元素数量,之后根据该插槽位置的Keccak256值和下标位置计算特定元素值的存储位置。
成都链安安全团队对此建议:
5、函数权限配置错误安全问题
不同的语言同样拥有不同的函数权限声明方式,如:Solidity中可以使用四种可见性修饰符public 、private 、internal、external直接规定调用权限,同时也可以采用modifier实现对某些特权函数的严格权限控制。而go语言则采用函数首字母的大小写声明权限。
如果这些函数权限修饰符被开发者误用,则会导致一些特殊功能的函数被攻击者调用,造成诸如随意更改藏品数量等严重后果。
成都链安安全团队对此建议:
6、忽略返回值安全问题
合约中的重要函数通常都有返回值,该值用于判断函数操作是否执行成功,并对执行失败的情况做出错误处理。
成都链安安全团队对此建议:
7、空指针引用安全问题
指针是区块链开发中一种重要数据类型,用于表示复杂的数据结构、动态分配内存等。其中空指针是一个已经声明但未指向任何一个有效对象的指针。
成都链安安全团队对此建议:
8、访问外部资源安全问题
区块链开发人员为了提升开发效率和保障安全性,同样会引入第三方库等外部资源,这些第三方库代码可能会存在安全缺陷,导致合约出现意想不到的问题。即使第三方库本身不存在安全问题,也可能造成安全隐患。
成都链安安全团队对此建议:
2、如果引用的外部合约地址已知的话,可以对引用合约的地址进行硬编码。
9、输入参数检查安全问题
成都链安安全团队对此建议:
开发人员应对特函数作进行权限校验,包括函数调用者的身份验证,或者使用诸如private、internal等函数修饰符对函数本身进行权限控制。
以上,只列出了基于区块链的数字藏品智能合约,在开发过程中存在的主要问题和成都链安安全团队的建议,数字藏品开发者在开发过程中需注意上述问题。
但是为了确保数字藏品的安全,在进行数字藏品智能合约部署前,最好是寻求第三方专业的安全公司进行合约安全审计,由专业的人做专业的事。
为了护航Web3.0安全生态,最近我们使用链必验—智能合约形式化验证平台对上千个NFT项目进行漏洞扫描,发现不少的NFT项目都存在安全漏洞风险,如:业务逻辑相关问题、代码规范相关问题等。而且大多数NFT项目都没有进行安全审计,这就存在很大的安全隐患,容易导致攻击事件的发生,造成资产的损失。
所以,我们建议:
关于链必验:
链必验,是成都链安重点打造的一款全球领先的“一键式”智能合约形式化验证平台,代码检测准确率高达97%以上。可自动检测智能合约80余项的常规安全漏洞及功能逻辑缺陷,精确定位风险代码位置并给出修改建议。
另外,基于成都链安“链必安—一站式区块链安全服务平台”,我们可以为数字藏品、联盟链等提供全生命周期的整体安全解决方案。
图片素材来源于网络,如有侵权请联系删除
媒体矩阵
新浪微博
weibo.com/u/6566884467
百家号
http://mtw.so/5xn0jG
头条号
http://mtw.so/5N5Oyd
搜狐号
http://mtw.so/6o0u4A
知乎
http://mtw.so/5ULxuQ
B站
https://space.bilibili.com/2093257939
↙点击阅读全文
立刻直达官网
原文始发于微信公众号(成都链安):应用于数字藏品的智能合约都有哪些安全风险?如何有效防范?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论