联盟链智能合约安全检测工具邀您免费来体验

Connor 币安APP下载 2022-09-05 170 0

近年来,智能合约作为区块链核心构成要素之一,在多个领域得到了广泛的运用,其功能日渐复杂多样,催生了丰富的区块链应用生态,尤其以联盟链智能合约为核心的应用正在各重点行业领域被推广块链智能合约

智能合约在使用的过程中,由于开发人员在开发过程中的编程习惯、边界或特殊情况考虑不够全面等问题,可能出现权限控制、整数溢出、业务逻辑实现等多种安全问题,这些问题都会造成重大的经济和资源损失块链智能合约

随着智能合约的爆发式增长,智能合约安全问题引发的事件也越来越多块链智能合约。据统计,目前因智能合约编码不当和安全漏洞已造成的经济损失每年超10 亿美元。因此,联盟链智能合约安全检测很有必要。

联盟链智能合约安全检测工具邀您免费来体验

智能合约有哪些安全挑战块链智能合约

在说智能合约安全挑战之前块链智能合约,我们先来了解下什么是智能合约?

1、什么是智能合约块链智能合约

智能合约本质上是一个计算机的程序代码,交易人可以将他们订立合同的内容和执行条件,通过计算机转化为可识别的程序代码,当满足程序设定的条件时,随即触发系统自动执行相应的合约条款,从而实现交易块链智能合约

现已广泛应用于政务、存证、能源、金融、公益慈善等领域块链智能合约

智能合约的出现相较于传统意义上的合约,解决了信任问题,具有去中心化、防篡改、高效性、低成本性、公开透明、可追溯等特性块链智能合约。2、智能合约面临哪些安全挑战?

由于智能合约一旦部署无法修改,这意味着一旦代码存在Bug,极有可能被利用,因此智能合约容错率极低块链智能合约

区块链智能合约面临如下的安全挑战:

(1)缺陷难以修复

区块链是去中心化且防篡改的,并且智能合约可以由假名恶意人员开发和部署块链智能合约。因此,智能合约在提交到链上后,就无法直接更改;如果合约中出现缺陷,则缺陷会一直存在,且无法直接修正。

展开全文

(2)开源代码和公开

通常,智能合约的代码具备公开性,编译后的二进制数据所有人都可以访问块链智能合约。如果存在漏洞,极容易被他人利用,隐私数据也极容易泄露。

(3)区块链平台和智能合约语言不成熟

目前业界常见的区块链平台还在不断的开发、演进,各种功能随着版本的更迭,会有或多或少的变化块链智能合约。当平台升级时,应评估原有智能合约在新版本平台的运行差异 ,并做适当调整,避免安全风险。

(4)恶意的智能合约代码对底层系统的影响

恶意的智能合约代码可能会利用底层运行环境的安全缺陷,对运行环境进行攻击,包括会被利用造成对底层系统的拒绝服务攻击,也可能会被利用造成虚拟机逃逸,对底层系统带来安全威胁块链智能合约

(5)恶意的智能合约代码对其块链智能合约他智能合约的影响

恶意的智能合约代码可能会尝试访问、篡改其他合约的数据,对其他智能合约构成安全风险,改变其他用户或其他合约的状态数据块链智能合约

联盟链智能合约安全检测工具邀您免费来体验

智能合约常见的安全问题有哪些块链智能合约

区块链智能合约常见的安全性问题如下块链智能合约

(1)非确定性问题

目前已有部分研究提及非确定性的概念,指相同的输入经过同一程序处理,产生不同的输出,即处理结果的不确定块链智能合约。以Fabric为例, Fabric架构中非确定性的产生原因体现在智能合约代码交易的背书验证环节。若存在非确定性结果,会导致交易失败,影响整个区块链系统的稳定运转。

非确定性主要来源于非确定性数据源及非确定性操作块链智能合约。其中非确定性数据源包括: ①随机数生成;②系统时间获取;③访问文件系统或执行命令;④引入第三方库。

(2)数据隐私安全

数据隐私安全主要涉及跨链合约调用、未利用隐私数据机制和未对敏感数据加密块链智能合约

一般情况下,由智能合约创建的状态仅限于当前智能合约访问或修改,而不能被另一个智能合约直接访问或修改块链智能合约。通常区块链提供了跨链合约调用功能,支持在同一通道内不同智能合约相互调用、访问,但不支持修改在另一通道上智能合约创建状态的操作。因此,在不同的通道上进行跨链合约调用操作时,应该避免使用修改在另一通道上智能合约创建状态的操作函数。

敏感数据未加密也可能造成智能合约操作数据的泄露块链智能合约

(3)权限控制隐私安全

访问控制技术是对用户权限进行管理,只有合法的用户使用合法的行为才有访问系统相应资源的权限块链智能合约。设置合适的访问控制权限,可以防止恶意节点窃取交易隐私数据。出于隐私安全的考虑,智能合约对整个结构中的数据访问进行控制。如果恶意攻击者对访问权限进行攻击,会造成越权,从而造成数据的流失甚至财产的丢失。

(4)代码逻辑安全

代码逻辑安全是指代码在整体运行逻辑上的安全问题块链智能合约。智能合约可以对数据等资产进行发送、接收等操作,所以对于拥有这种能力的代码,需要注意其安全性。在对资产进行操作时,如果缺少对操作者身份、可操作数额等进行验证,可能出现恶意操作、恶意转移资产的问题,因此需要对各用户所拥有的权限进行限制,对于操作资产、销毁等操作,仅允许特定用户使用。

另外,除了代码本身可能存在问题,在代码的设计逻辑上也可能存在安全缺陷块链智能合约。对于存在博弈机制的合约,博弈设计可能会出现相应的漏洞。

还可能遇到因代码逻辑问题造成的竞态、代码重入、交易顺序依赖等安全问题块链智能合约

联盟链智能合约安全检测工具邀您免费来体验

智能合约常见安全漏洞有哪些块链智能合约

智能合约由于部署在区块链上,具有复杂的时间依赖和次序依赖关系,合约代码逻辑属性的正确性以及合约代码和合约文本的不确定性、不一致性,将导致智能合约本身存在漏洞,进而导致智能合约受到漏洞攻击,最终会导致自动性执行结果的输出错误块链智能合约

智能合约通常由合约执行环境、合约代码、管理机制等部分组成,在合约设计与业务逻辑、源代码、 编译环境、应急响应机制等方面均可能出现漏洞,漏洞类型主要包括:(1)合约执行环境漏洞,即合约虚拟机存在漏洞或相关机制不完善;(2)合约代码漏洞 块链智能合约

常见的智能合约漏洞威胁包含:整数溢出漏洞、短地址漏洞、拒绝服务漏洞等块链智能合约

(1)整数溢出漏洞:在智能合约代码中整数类型均为无符号整数,最小的就是0,在算术运算中出现越界,就会出现整数溢出漏洞块链智能合约。超出整数类型的最大表示范围,数字便会由一个极大值变为一个极小值或直接归零,这叫“上溢”,如假设合约中最大值为X,当X+1=0时即发生整数上溢漏洞;超出整数类型的最小表示范围时,数字便会由一个极小值或者零变成一个极大值,如0-1=X,即发生整数下溢漏洞。

(2)短地址漏洞:短地址漏洞是虚拟机未能接受正确参数的副产物块链智能合约。攻击者可以通过特定制作的地址,利用这个弱点,针对部分编码错误的客户端进行参数填充。

(3)拒绝服务漏洞:拒绝服务漏洞是指让目标机器停止提供服务,通常被黑客利用拒绝服务攻击方式进行攻击块链智能合约。这种攻击方式可以让合约执行正常的交易操作被扰乱、中止、冻结,更严重的是让合约本身的逻辑无法运行。

(4)重入漏洞:虽然智能合约的执行是一个具有原子性和顺序性的事务操作,但是用户在调用智能合约时,如果在被调用合约中没有找到被调用的函数时,就会触发调用回退函数的回滚机制块链智能合约。攻击者可以通过构造特殊的回退函数来攻击存在重入漏洞的智能合约,例如回退函数中包含重新调用被攻击合约中向攻击者转账的函数,从而通过递归调用耗尽被攻击合约的资源。

(5)未校验返回值:以 Solidity语言为例,其函数调用和其他高级语言一样一般都会设置返回值,但是对send、call、 delegatecall 等低级别函数调用失败时不会引起事务回滚操作,只是在返回值中表示出现了异常块链智能合约。攻击者可以通过故意发送失败的操作来使程序执行与预期设定不同,从而造成智能合约状态混乱。

(6)时间戳依赖漏洞:在智能合约中可以使用区块时间戳作为条件判断依据,这对普通的攻击者来说没有什么利用价值,但是对于可以在一定范围内操纵时间戳的矿工来说,可以通过构造恶意的时间戳来绕过相关的判定条件块链智能合约

(7)可预测的随机处理:合约开发者编写随机数生成函数时,有时会利用时间戳、区块号等与区块有关的一些参数产生随机数,但是区块链上的上述数据都是公开的,这使得生成的随机数是可预测的,从而可能会被攻击者利用块链智能合约

联盟链智能合约安全检测工具邀您免费来体验

智能合约安全检测方法有哪些块链智能合约

由上述智能合约安全挑战及安全漏洞可见,在开发阶段和上线前,确保合约的安全性和逻辑正确性是多么的重要,因此需要采用相应安全检测来满足安全性需求块链智能合约

针对智能合约的代码安全性,可以使用自动化/半自动化安全检测来扫描合约代码,寻找代码中的安全缺陷块链智能合约。目前常见的检测方法可分为静态扫描、动态扫描以及形式化验证。

形式化验证技术是除了静态和动态扫描以外,另一种智能合约正确性与否的验证方法块链智能合约。作为一种数学方法,形式化验证可以有效确定一个程序的代码是否正确。此处“正确”的意思是,程序的运行结果符合预期。

1、静态扫描

静态扫描是指扫描工具本身不会执行智能合约代码,而是通过诸如模式匹配的方法直接查找代码中的问题,如果代码符合某个模式,即代表代码存在对应的问题块链智能合约。静态扫描速度较快,但是会有一定的误报率。

目前市面上开源的静态方法扫描工具,使用广泛且结果覆盖比较全面的并不多块链智能合约

2、动态扫描

动态扫描是运行智能合约代码,根据运行状态来判断是否存在问题块链智能合约。通过观 察运行状态,可以更准确地判断代码是否存在问题,但是速度较静态扫描慢,且容易出现漏报。模糊测试是一种典型的动态检测技术,通过构造随机的测试用例,同时监视程序是否会出现内存损坏等异常来判断程序是否存在潜在安全隐患。

3、形式化验证

形式化验证技术是指在智能合约的生命周期内用数学手段以及智能化分析工具对合约进行建模、推导与证明,以验证智能合约是否满足一致性、无二异性、可观察性、可验证性和接入控制等关键特征块链智能合约

静态扫描可快速检测出已知的安全漏洞,但不能检测未知安全问题,动态测试可以检测已知和未知的安全问题,但是其检测成本高、不能保证边界条件完整覆盖块链智能合约。因此静态扫描和动态检测都会存在一定的漏报和误报,而形式化验证理论上不存在这一问题,经过形式化验证证明的合约,就一定可以确定其执行的正确性。

联盟链智能合约安全检测工具邀您免费来体验

链必验-智能合约形式化验证平台块链智能合约,行业领先的一键式智能合约检测工具

通过上述内容,我们已经知道联盟链智能合约安全检测的重要性和必要性块链智能合约。那么一款全能、高效的联盟链智能合约安全检测工具就很有必要。

对于智能合约开发者和测试人员来说:希望通过自动化检测工具,降低bug率,提高开发效率,尽可能完美地与IDE进行结合块链智能合约

对于区块链审计机构的审计人员来说:系统通过自动化检测工具,批量地检测不同链平台的合约,提高检测路径的覆盖面和准确率块链智能合约。并且工具有尽可能多的链平台语言支持。

而目前市面上常见的智能合约安全检测工具,如Securify、Oyente、Mythril、Harvey、Slither等都是专为公有链设计的,平台支持也很有限块链智能合约

所以,成都链安专门为联盟链智能合约检测打造了链必验-智能合约形式化验证平台(以下简称链必验)块链智能合约

链必验—专为联盟链打造的智能合约安全检测工具

联盟链智能合约安全检测工具邀您免费来体验

链必验是一款全球领先的“一键式”智能合约形式化验证平台块链智能合约。检测准确率高达97%以上,精确定位风险代码位置并给出修改建议,自动检测智能合约80余项的常规安全漏洞及功能逻辑缺陷。现已拥有生态用户10万+,是全球首套同时支持蚂蚁链、腾讯区块链、FISCO-BCOS、Fabric等的智能合约形式化验证平台。可以极大提高智能合约的人工审计效率,有效降低安全隐患遗漏风险。

检测内容

链必验针对每个用户模拟了一条单独的测试链,用户可以自主配置块高、时间戳等区块链参数,并在测试链上对智能合约进行部署、测试和验证,是集智能合约开发、测试、验证于一体的综合平台块链智能合约

在验证的过程中,平台采用形式化验证等技术,对执行环境进行建模,通过数学推理等方法对安全属性进行验证,发现合约在运行时可能出现的安全问题,协助合约开发者发现合约中的潜在安全隐患,定位漏洞产生的位置,增强合约的安全性块链智能合约。主要包含三大方面的检测:

联盟链智能合约安全检测工具邀您免费来体验

(1)代码规范性检测块链智能合约。此项针对合约编写时的一些代码规范进行检测,包括全局变量使用错误、未接收返回值、格式化字符串错误、冗余的条件判断等问题。不规范的代码编写引发安全问题的可能性会大大提高。

(2)常规安全问题检测块链智能合约。此项针对合约中常见的安全问题进行检测,包括循环变量使用错误、随机遍历使用错误、整数溢出、系统接口使用错误等问题。常规安全问题是所有合约都可能出现的安全问题,与业务逻辑无关。

(3)业务逻辑安全检测块链智能合约。此项针对合约中的业务逻辑安全进行检测,包括数据库读写问题、业务逻辑实现正确性等问题。业务逻辑安全问题与合约功能密切相关,也是风险最高的安全问题。

检测优势

(1)支持多个区块链平台合约:同时支持Fabric、FISCO BCOS、蚂蚁链等块链智能合约,并可按需适配其他联盟链平台;

(2)支持三大类超过100条安全检测项;

(3)可“一键式”精确自动定位代码漏洞和bug块链智能合约,检测准确度高达97%;

(4)支持主流的go、solidity等多种合约语言;

(5)支持SaaS接入方式以及vscode插件版的本地部署接入方式,同时提供第三方调用的rest/http安全检测接口块链智能合约

联盟链智能合约安全检测工具邀您免费来体验

目前,产品已开放免费试用,如果您想更深入了解和体验产品,可联系我们块链智能合约

评论