智能合约作为区块链2.0的代表技术,适应于区块链去中心化、分布式的特点, 具有独立运行、不可篡改的优良特性,可用于实现包含金融工具在内的各类分布式应用。开发者可以自行定义交易逻辑并开发代码发布到链上,合约代码在矿工节点的虚拟机环境(如EVM)中执行。合约交易被打包进区块后,链上节点执行相同代码,从而同步改变链上数据状态。故合约的多方参与者无需建立信任,也无法相互欺骗。
合约运行在区块链节点中,具有不可更改的特性,那么伴随而来的就会有漏洞被攻击利用造成很大的危害。所有程序都可能存在漏洞,智能合约也不例外。这次我们就一起了解一下智能合约中整数溢出的危害和预防,怎么才能让你的合约更加安全可靠的使用。
整数溢出是一种常见的高危漏洞,曾引发许多严重事故。1996年阿丽亚娜5型运载火箭在发射37秒后解体并爆炸就是由于整数溢造成的 。h运算等)。2010年的比特币大整数溢出,CVE-2010-5139 ,黑客通过整数溢出构造了大概92233720368.54277039 个比特币,最近的SMT/BEC的整数安全场景与之前比特币的场景类似。整数溢出漏洞检测和校验是有挑战性的,程序员极容易犯错,而自动化检测方法最大难点在于判断候选溢出是否真正导致了危害,以免造成大量的误报。
整数溢出案例分析:
不安全的写法
简单说明整数溢出:相当于一个存储 0 的 uint8 (无符号的 8 位整数,即只有正数)变量中减去 1,将导致该变量的值变为 255。这是一个下溢。我们明明为该 uint8 分配了一个低于其储存范围的值