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)作为开发人员
站在开发者的角度我们需要做的是写好代码,避免重入漏洞的产生。
- 写代码时需要遵循先判断,后写入变量在进行外部调用的编码规范(Checks-Effects-Interactions);
- 加入防重入锁。
(2)作为审计人员
作为审计人员我们需要关注的是重入漏洞的特征:所有涉及到外部合约调用的代码位置都是不安全的。这样在审计过程中需要重点关注外部调用,然后推演外部调用可能产生的危害,这样就能判断这个地方是否会因为重入点而产生危害。
(3)切记切记:所有代码中,先转账,再更改状态的代码,都有被重入的可能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。