Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

什么是整数溢出漏洞以及它带来的后果

$
0
0

本期将重点阐述智能合约中经常被利用且严重影响资产安全的高危漏洞类型“整数溢出”。

1.什么是“整数溢出漏洞”?

计算机语言中整数类型都有一个宽度,也就是说,一个整数类型有一个最大值和一个最小值。

当2个整数计算时,结果大于最大值或小于最小值就是溢出。举一个小例子说明一下:在区块链里面都是无符号整数,最小的就是0。

比如最大值为a,最小值为0。在最大值和最小值之间如果发生以下计算:

a+1=0或者0-1=a

此时就称为发生了整数溢出。

整数溢出的原理:

计算机中整数变量有上下界,如果在算术运算中出现越界,就会出现两类整数溢出。超出整数类型的最大表示范围,数字便会由一个极大值变为一个极小值或直接归零,这叫“上溢”,即上面例子中提到的a+1=0;超出整数类型的最小表示范围的话,数字便会由一个极小值或者零变成一个极大值,即上述0-1=a,这叫做“下溢”。

所谓物极必反就是这个道理。我们哲学中常常讲到的“度”在此处就是个很典型的示范。

整数溢出漏洞有什么后果?

“整数溢出漏洞”之前也已经被爆出过很多次,属于极度危险等级漏洞;漏洞引起的事件类型包括:超额铸币、超额购币、随意铸币、高卖低收、下溢增持等等;例如可导致原交易发起人使用0个或者少量的币就可以给其他地址转入大量的代币,也就是我们常常听到的代币无限增发。

先举个简单的例子:

A山里的一群猴子只会从0数到9,数完9之后就从头开始数0。有一天从B山跑来一只猴子叫桃桃,他发现了这个问题。桃桃来到A山居住,每次向管家爷爷要10只桃子。管家爷爷只会数到9,第10只桃子他就数0。这样一来桃桃每次拿桃子的记录为零。但是两个月后储备的桃子全没了,管家爷爷的账本中记录的是桃桃一共拿了0只桃子,但实际上桃子已经被他拿光了。

读了这个小故事以后你是不是感觉有点不妙?有这个觉悟说明还是很警惕的。确实,黑客就是这样来实现空手套白狼的增发操作。

黑客利用类似的机制凭空向一个账户中转账入很大数额的代币,而合约中的逻辑只要求他花费很小的代价,这样一来就为漏洞攻击大开方便之门。

今年也发生了很多由整数溢出造成的资产安全事件:

例一

2018年4月22日,黑客对BEC智能合约发起攻击,凭空取出大量BEC代币并在市场上进行抛售,BEC随即急剧贬值,价值几乎为0,该市场瞬间土崩瓦解;

例二

2018年4月25日,SMT项目方发现其交易存在异常,黑客利用其函数漏洞创造了大量SMT币,火币Pro随即暂停了所有币种的充值提取业务。

此类事件数不胜胜数,还有Ammbr(AMR无限生成代币),以及最近发生的OPL。一句话总结:整数溢出很严重,后果很可怕!


Viewing all articles
Browse latest Browse all 12749

Trending Articles