您好,欢迎您来到国盈网!
官网首页 小额贷款 购房贷款 抵押贷款 银行贷款 贷款平台 贷款知识 区块链

国盈网 > 区块链 > 应用于数字藏品的智能合约都有哪些安全风险?如何有效防范?

应用于数字藏品的智能合约都有哪些安全风险?如何有效防范?

区块链 岑岑 本站原创

国内的数字馆藏在技术上与NFT没有太大区别,商业逻辑是通过智能合同实现的,所以合同漏洞等安全问题也会存在于国内的数字馆藏中,需要谨慎。下面我们来看看数字馆藏在智能合约实施中的安全问题和解决方案。

数字收藏和智能合同

什么是智能合同?

为什么数字馆藏的安全性离不开智能合约的讨论?因为数字馆藏在技术上是通过智能合约来实现和运营的。在讨论数字馆藏智能合约的安全性之前,我们先来看看什么是智能合约。

20世纪90年代,Nick Szabo首先提出了智能合同的概念。当时,他将智能合约定义为一种通过将协议与用户界面相结合来规范和保证计算机网络安全的工具。

在区块链领域,智能合同可以定义为在区块链中运行的应用程序或程序。简而言之,智能合约是一个确定性的程序,当满足某些条件时,它会强制执行某些规则。这些规则由计算机代码预定义,并由所有网络节点实施。

目前应用最广泛的基于以太坊的智能合约具有分布性、确定性、自治性、不变形性、定制性、不信任性和透明性等特点。

为什么数字馆藏存在智能合约安全风险?

因为智能合同本身由手工编写的计算机代码组成,所以不可避免地存在缺陷和漏洞的风险。合约一旦部署,就不可逆转,所有执行的交易都可以跟踪,区块链上的智能合约对所有用户都是可见的。如果存在被作恶者利用的漏洞,资产就会被窃取,往往无法追回,给用户造成巨大损失。现有的安全问题可能不会很快得到解决。

随着数字馆藏等应用的爆炸式增长,区块链智能合约的数量与日俱增,暴露出越来越多的安全问题。

为了避免安全事故的发生,保护用户的财产安全,有必要在源头上做好安全防范,提高数字馆藏发展的安全意识。

接下来,我将介绍智能合约的特点所带来的一些安全风险以及相应的安全措施。

数字馆藏智能合约的主要安全问题是什么?

通过成都链安全团队的研究,发现数字馆藏智能合约的主要安全问题包括:重入漏洞安全、随机数安全、整数溢出安全、动态数组越界安全、函数权限配置错误安全、忽略返回值安全、空指针引用安全、访问外部资源安全、输入参数检查安全等。问题具体分析如下。

1.重返漏洞安全问题

在数字采集的业务场景中,智能合约往往需要对外调用。这种方法的主要危险是外部契约可以接管控制流并调用函数来更改一些关键数据。尤其是在solidity语言中,当用户直接向合约转账时,会产生一个隐藏的fallback()外部调用,如果不限制调用,可能会出现重入漏洞。

再入攻击最早出现在以太坊,对应的真正攻击是DAO攻击,这也导致了最初的以太坊分叉成ETC和现在的以太坊(ETH)。

成都连锁保安队建议:

改变状态变量时,采用官方推荐的检查-效果-交互模式;使用互斥锁:添加一个状态变量,在代码执行过程中锁定契约,防止重新调用;限制可能的外部调用操作本身;2、随机数安全问题

随机数在数字收藏中的应用非常广泛,比如给艺术数字收藏随机分配属性,给游戏收藏分配宝藏位置,保证* *版收藏空 vote的公平性。

在不同的区块链开发语言中也有各种生成随机数的方法,比如Go使用math/rand,Java使用java.util.Random类。在Solidity中,由于没有生成伪随机数的原生函数,一些开发者往往使用块参数来代替。

然而,上述随机数生成方法都存在安全缺陷。当开发者使用可预测的随机数种子生成随机数时,攻击者可以根据相应的算法获得即将到来的随机数,实现随机数预测,达到攻击的目的。

成都连锁保安队建议:

随机数的来源尽可能来自区块链之外,这可以在具有commit-reveal等系统的对等体之间完成,或者通过将信任模型改变为一组参与者来完成。

3.整数溢出安全问题

数据的存储是区块链中的一个重要环节,执行契约的虚拟机(EVM)为各种整数指定了固定的存储宽度。这意味着一个整数变量只能用一系列数字来表示。

因此,在实现代码时,如果在没有检查用户输入的情况下执行算术运算,可能会导致数值超出存储它们的数据类型的允许范围,从而导致数值溢出的问题。

具体的溢出类型包括乘法溢出、加法溢出、减法溢出和指数溢出。比如Solidity中的uint8只能存储大小为的数值。当试图将256存储到uint8时,溢出将被更改为0。但在Go语言中使用make()进行内存分配时,如果发生溢出,且值为0或最大值,则内存分配会失败。攻击者经常利用该漏洞绕过传输条件,操纵内存并破坏堆栈。

成都连锁保安队建议:

在执行整数算术运算之前进行检查,或者使用一些算术安全的第三方库。比如OpenZeppelin提供了一套很好的SafeMath库,使用SafeMath库函数可以有效避免四个操作溢出漏洞。

4、动态数组跨界安全问题。

对于数组越界的严重内存错误,不同的区块链开发语言各有特点。

Java、Solidity、Go等语言和其他大多数编程语言类似,编译时会检查数组边界。特别是在Solidity语言中,动态数组会先在变量定义处存储虚拟机槽位中数组元素的个数,然后根据槽位的Keccak256值和下标位置计算具体元素值的存储位置。

因此,当动态数组的索引可由用户控制且数组长度不受限制时,攻击者可以根据虚拟机的槽深构造相应的参数,使参数指向虚拟机中的任意内存位置,从而修改相应槽的状态变量。

成都连锁保安队建议:

在契约中访问数组时,要检查参数的有效性,即是否超过数组的长度。

5、功能权限配置错误的安全问题。

函数是区块链智能合约的重要组成部分,函数的权限控制决定了它是可以被用户或其他衍生合约外部调用,还是只能在内部调用。

不同的语言也有不同的声明函数权限的方式。例如,在Solidity中可以使用public、private、internal和external四个可见性修饰符直接指定调用权限,还可以使用修饰符实现对一些特权函数的严格权限控制。Go语言使用函数首字母的大小写来声明权限。

如果这些函数权限修饰符被开发者误用,一些具有特殊功能的函数就会被攻击者调用,造成任意改变集合个数等严重后果。

成都连锁保安队建议:

区块链涉及到修改契约中状态变量的操作,必须严格控制函数的调用权限。尤其是涉及到一些重要的属性修改时,要配置只有契约所有者才能调用的权限。

6.忽略返回值安全问题。

契约中的重要函数通常都有一个返回值,用来判断函数操作是否成功,并对失败的情况进行错误处理。

契约对区块链的调用是通过事务实现的,事务生成的回执中的状态字段有两个结果:0x1(真)和0x0(假)。而事务的成功与否只取决于事务执行过程中是否抛出异常,所以可能会出现函数执行失败返回false,但事务仍然成功执行的情况。

因此,如果区块链开发者将函数返回值替换为链上的交易回执,并以此作为判断业务逻辑是否成功执行的依据,可能会引发意想不到的安全问题。

成都连锁保安队建议:

区块链涉及到对函数返回值的判断。除了判断交易回执之外,还应该判断所涉及的状态变量是否再次发生了变化。

7.空指针引用安全问题

指针是区块链开发中一种重要的数据类型,用于表示复杂的数据结构和动态分配内存。其中空 pointer是一个已经声明但不指向任何有效对象的指针。

因此,在Go、Java等语言中,当试图解引用空指针时,可能会导致拒绝服务攻击或程序异常中断。具体来说,EVM在Solidity中有两个存储位置,即存储和内存。存储类型的未初始化局部变量的默认值为0x0,因此这可能指向协定中的其他状态变量。

如果未初始化的变量是可控的,攻击者可以利用它修改契约中相对槽的状态变量,从而造成严重后果。

成都连锁保安队建议:

Remix-ide等编译器会对未初始化的本地内存变量进行报警,在声明变量时要对这些本地内存变量进行初始化,避免出现安全漏洞。

8、获取外部资源的安全问题

为了提高开发效率,保证安全性,区块链开发者还会引入第三方库等外部资源。这些第三方库代码可能存在安全缺陷,导致合同出现意想不到的问题。即使第三方库本身不存在安全问题,也可能造成安全隐患。

比如在solidity中,如果引入的契约代码包含状态变量,调用者通过delegatecall调用,参数存储位置的不一致会导致变量覆盖或者异常终止的问题,影响正常的业务逻辑。同时,在某些情况下,无漏洞契约也可能被恶意部署,从而导致严重的安全问题。

成都连锁保安队建议:

开发人员应该谨慎使用第三方库代码。同时使用无状态库代码,避免使用* *调用。如果所引用的外部契约的地址是已知的,则可以对所引用的契约的地址进行硬编码。9、输入参数检查安全问题。

虽然在区块链开发中编译器会检查参数的合法性,但是开发人员也需要预先检查每个函数的输入参数,使其符合业务逻辑。尤其是涉及到一些有特权操作的函数,比如solidity中的call()函数,当函数参数中的方法选择器是用户可控的,而EVM具有不检查参数个数的特性时,可能会造成代码执行漏洞等严重后果。

成都连锁保安队建议:

开发者要检查特殊函数的权限,包括函数调用方的身份验证,或者使用private、internal等函数修饰符来控制函数本身的权限。如何保护数字馆藏中智能合约的安全?

以上仅列举了基于区块链的数字馆藏智能合约,开发过程中存在的主要问题及成都链安团队的建议,数字馆藏开发者在开发过程中应注意的上述问题。

但是,为了保证数字馆藏的安全,最好在部署数字馆藏智能合同之前,寻求第三方专业安全公司进行合同安全审计,专业的人会做专业的事。

为了给Web3.0的安全生态保驾护航,近期我们利用链查的正规验证平台——智能合约,对数千个NFT项目进行漏洞扫描,发现很多NFT项目存在安全漏洞风险,比如业务逻辑相关问题、代码规范相关问题。此外,大多数NFT项目没有经过审计,存在很大的安全隐患,容易导致攻击和资产损失。

数字馆藏特别评论

至此,数字馆藏系列文章到此结束。

如果你能对数字馆藏的基本概念、发展历史、发展现状、落地应用、安全问题和解决方案,以及数字馆藏与NFT/传统馆藏/数字作品/虚拟货币的区别有更深入的了解和更系统的认识,那么我们的初衷就实现了一半。

如果通过一系列专题文章,增强你对数字馆藏的安全意识,积极寻求安全解决方案,那么我们策划这个专题的初衷就完美完成了。

温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信(j7hr0a@163.com),我们会及时处理和回复。

原文地址"应用于数字藏品的智能合约都有哪些安全风险?如何有效防范?":http://www.guoyinggangguan.com/qkl/182888.html

微信扫描二维码关注官方微信
▲长按图片识别二维码