LESSON 06

事故分析

事故分析不是复述新闻。它要回答:攻击者怎样获得能力、怎样把能力变成资产、哪项控制本应拦住它、修复是否覆盖根因。

约 55 分钟讲解 + 示例 + Lab + 自测本机记录进度
分析目标

把故事压成可复核的因果

读者读完后,应能沿着哈希和源码自己走一遍。走不通的句子,就还不能发表。

深色桌上的放大镜、照片和细线,比喻用证据把事故时间线钉住
先钉事实,再写观点。没有哈希的“据称”,只能待在线索栏。
初始资金→准备与授权→触发漏洞→破坏不变量→提取与变现

用一个公开案例练习“抽取方法”

下面这段从重入和 The DAO 讲起。本课要你练的不是背 DAO,而是看完后能独立写出:根因、放大器、触发条件、后果。

Reentrancy Attack Explained with Examples看到转账发生在记账之前,停下来。问自己:如果把闪电贷拿掉,这条路径还在吗?

证据有等级,观点没有特权

  1. 链上事实

    交易、trace、事件、余额和存储槽。

  2. 当前代码

    已验证源码与当时的实现地址,不是仓库默认分支。

  3. 官方复盘

    postmortem 和修复 commit。

  4. 审计与竞赛

    只能说明当时范围内有人看过。

  5. 社交解释

    线索,不是证据。

开源核验

仓库 commit、已验证源码、当前实现、审计后是否升级、前端是否指向官方地址,要分开勾。混为一谈会写出错误的“已审计”结论。

先建时间线,再给角色起名

时间

按交易排,不按新闻排

  • 初始资金从哪来
  • 准备交易和授权
  • 核心攻击交易
  • 兑换、跨链、转移
  • 暂停、升级、追回
角色

每个地址只承担一种功能

  • 攻击者 EOA 与攻击合约
  • 受害协议的代理与实现
  • token、oracle、pool、bridge
  • 管理员、多签、应急角色

不要只看 token transfer。每个关键调用前后记录:余额、供应、份额、抵押、债务、价格、权限、实现地址、暂停位和内部记账。

根因不是“有人用了闪电贷”

交互实验

把一条事故拆成四类事实

这是一个教学用的空金库捐赠模型,不是某个未修复的真实协议。先分类,再核对。

任何人都能向金库捐入无份额的 Token,把份额价格抬高。

攻击者先借一笔闪电贷,把同一区块内的可操作规模放大。

金库此时几乎没有存款,首存可以按被操纵的价格铸份额。

赎回后金库底层资产被抽空,普通用户无法按账面份额退出。

根因

允许不安全状态或价值提取的设计/代码错误。

放大器

闪电贷、厚流动性、可组合性。

触发

特定价格、时间、空池、管理员动作。

后果

资产损失、坏账、冻结或治理接管。

防御与边界

修复必须恢复不变量

  • 测试为何遗漏这条路径。
  • 审计范围是否覆盖被打的部署版本。
  • 暂停是否可用,管理员是否及时。
  • 修复是堵住单一入口,还是让系统承诺重新成立。
安全边界

复现只用本地最小模型或固定历史区块 fork。不向真实协议发送攻击交易,不移动非自有资产。公开文章可隐藏尚未修复问题的可武器化细节。

完成证据

选一笔已公开、已修复的历史交易,写出时间线、四类事实拆分、被破坏的不变量,以及修复 commit 是否覆盖根因。所有句子后面跟哈希或文件名。

课中测验 1 / 3

攻击交易里出现闪电贷,通常应先把它看成什么?

课末自测

为什么攻击交易里出现闪电贷,仍不能直接写成根因?

信心
下一课AI 安全工作流 →