当前位置:   article > 正文

智能合约安全漏洞检测技术研究综述——常见漏洞简述_智能合约漏洞分别处于区块链什么层

智能合约漏洞分别处于区块链什么层

摘自“钱鹏 等:智能合约安全漏洞检测技术研究综述”

三个层面的安全问题:solidity代码层,evm执行层,区块链系统层

漏洞检测方法:形式化验证法,符号执行法,模糊测试法,中间表示法,深度学习

The Dao重入攻击

parity多签名钱包合约的delegatecall漏洞

bec合约的整数溢出漏洞无限复制代币

EOS.WIN连续随机数攻击

智能合约运行时允许与外部合约函数或接口交互:重复的外部调用

以太坊DAPP总价值应用在博彩、游戏等高风险类别

solidity代码层

1.可重入漏洞

独特的fallback机制,使得恶意攻击者在程序命令执行结束前再次进入被调用函数

转账操作必定会出发接收者合约中的回调函数

攻击者在fallback函数中设计恶意攻击代码,递归调用受害者合同的转账函数从而盗取ether

2.整数溢出漏洞

乘法、加法、减法溢出

若超出定义范围,会自动截断高位

解决方法:在算术逻辑前后进行验证;使用safemath库防范

3.权限控制漏洞

合约代码层面:默认的权限时public

合约逻辑层面:onlyowner,onlyadmin约束

4.异常处理漏洞

3种异常:gas消耗完;调用栈溢出(1024);有throw命令

一般来说,若抛出异常,合约会自动回滚到上一个一致性状态

特殊情况:一个合约以不同的方式调用另一个合约,发起调用的合约可能无法获取被调用合约的异常信息

智能合约的子调用发生异常会自动向上级传播,但一些底层调用函数(Send、call、delegatecall)发生异常只 返回false,不抛出异常

因此,在调用底层函数时必须严格检查返回值(flase),并有一致性的处理

5.拒绝服务漏洞

攻击者通过破坏合约原有逻辑,消耗ether和gas,使得合约在一段时间无法正常执行

Revert攻击:外部函数的执行结果一直失败

gas攻击:区块有gas上限

owner账户攻击:开启或停止合约交易的权限,被盗

6.类型混乱漏洞

solidity强类型编程语言,自动匹配错误

但即使没匹配成功,执行也无异常

开发人员必须人工检查类型匹配问题

7.未知函数调用漏洞

函数名和参数确保函数的唯一性

当一个合约调用另一个合约没有匹配正确时,会自动调用fallback

如果fallback中藏雷就很危险了

8.以太冻结漏洞

一些合约自身不是先转账函数,通过delegatecall委托调用外部合约中国的转账函数来实现转账

但是,若外部合约有自毁操作时,通过委托调用很可能会发生因为被调用合约的自毁而产生的ether冻结情况

EVM执行层:

1.短地址漏洞

特性:EVM自动补0

规范:输入的合约地址必须时20个字节,若小于则末尾自动补0

哇哦有点意思

若第一个参数为地址,第二个参数为以太币数量

地址少输入一个字节,EVM就会从以太币中拿一个字节来填补

这样的话ether就被左移了一个字节

补0是对整串二进制码的末尾补0

2.ether丢失

接收方地址是空地址(不小心转错了),就丢失了

3.调用栈溢出

每调用一次外部合约或自身调用都会增加一次栈深度,1024限制,嵌套调用可能会溢出

4.Tx.Origin漏洞

全局变量,回溯整个调用栈最初发起的合约地址,tx.origin == owner,诱导victim合约转账给attacker

3.区块链系统层:

1.时间戳依赖漏洞

SC经常使用矿工确认的block.timestamp来实现事件约束

然而,创建区块的矿工可以刻意选择有利于他们的时间戳

2.区块参数依赖漏洞

通过随机函数来产生随机数

随机种子:block.number,block.timestamp,blcok.blockhash

被矿工提前获取,可预测,矿工可以产生有利的随机数

3.交易顺序依赖漏洞

交易执行顺序由矿工决定,但有些合约错误的顺序可能有负面影响

恶意矿工可监听,并通过恶意改变顺序从而改变合约状态,从而提前部署攻击

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/500610
推荐阅读
相关标签
  

闽ICP备14008679号