这不是一份新闻清单。每一起事件都被拆解成可以用在你自己代码上的那条教训。
从第一步到资金流出:攻击者调用了什么、按什么顺序,以及为什么恰好那个顺序能成功。
事发当时那个函数的样子。你亲眼读到缺陷,而不是读一段对它的描述。
事后改了什么,以及从一开始就能阻止它的那个安全写法。
每起事件都链接到它所属的漏洞类别,以及我们漏洞数据库里同类别的条目。
指向原始事后报告与独立安全分析的链接。每一个数字你都能自己核实。
按年份、链或漏洞类型筛选——例如你想把所有重入事件连起来读时会很有用。
工具本身(扫描器、控制台、SAFI 工作区)目前仍是英文界面。这些页面用中文把一切讲清楚,方便你进去之前先看明白。
这些事件在细节上各不相同,在成因上却相似得令人不安。
这份资料里最令人不适的结论是:其中许多协议在被攻破之前都通过了审计。审计降低概率,但不消除概率。
更能降低概率的不是一份报告,而是多个层次:审计、上线后的持续监控、支出限额,以及快速止血的能力。损失较小的那些事件,正是拥有最后一层的那些。
重入与权限的中心化控制,解释了总损失中相当大的一部分。两者都已为人所知多年,两者也都仍在重演。
一把能改变合约逻辑的私钥,无论周围代码写得多好,都是单点故障。
桥持有巨额余额并信任来自外部的消息;预言机则把一个可被操纵的价格送进来。这两个领域的每一起重大事件都源于同一个想法:对数据的信任超过了它应得的程度。