18年的时候在北航听陈博士讲课的时候,就已经知道什么是重入漏洞,但是那是还没有很深入重入漏洞。今天回顾了一下慢雾的重入漏洞的介绍,发现讲得已经非常简洁的清楚了。

慢雾重入漏洞:

https://mp.weixin.qq.com/s/4j...

自从0.8.9更新了安全的函数代码库之后,有一段代码会被审计成“安全”,而且越来越少人关注重入漏洞了。

function update() {
   uint value = deposits[msg.sender];
   safeTransferETH(msg.sender, value)
   deposits[msg.sender] = 0;
}

分析发现这一段代码的功能是:

获取用户的存款数额
使用safeTransferETH函数发送用户的存款
把用户的存款数额置为零
一般的审计会认为这段代码是安全的,因为其使用的是safeTransferETH一般意义上是安全的函数。

但是这其实是依然是可以被重入攻击的。

具体可以看:https://www.anquanke.com/post...

总结

(1)作为开发人员
站在开发者的角度我们需要做的是写好代码,避免重入漏洞的产生。

  1. 写代码时需要遵循先判断,后写入变量在进行外部调用的编码规范(Checks-Effects-Interactions);
  2. 加入防重入锁。

(2)作为审计人员

作为审计人员我们需要关注的是重入漏洞的特征:所有涉及到外部合约调用的代码位置都是不安全的。这样在审计过程中需要重点关注外部调用,然后推演外部调用可能产生的危害,这样就能判断这个地方是否会因为重入点而产生危害。

(3)切记切记:所有代码中,先转账,再更改状态的代码,都有被重入的可能。


晨曦夕阳
4 声望4 粉丝

说服自己已经很难了,哪还有精力去说服你~