TXSPECTOR:字节码级交易追踪,发现以太坊重入与自杀攻击

·

关键词:以太坊、TXSPECTOR、重入攻击、自杀攻击、智能合约漏洞、字节码分析、交易取证

概述:让每一笔交易“开口说话”

以太坊智能合约功能强大,却在 DAO 攻击Parity 钱包事件 等一系列血案中暴露致命缺陷:

传统静态分析会“照本宣科”,既无法还原真实链上交互细节,也很难靠死规则追上黑客花样。TXSPECTOR 给出的解法是:把整条链的每一笔交易重新跑一遍,在 EVM 字节码级别控制流 + 数据流的关系逻辑化,再让用户用一条 Datalog 规则 就能揪出新旧攻击。

架构速览:四步把交易“解剖到骨头”

  1. Trace Extract 重放器:对链上交易做离线回放,记录每个 PC-OPCODE-ARGS 三元组;
  2. EFG 生成器:用执行流图(EFG)串联 跨合约调用链
  3. Logic Relation Builder:把 EFG 转译成可查询的逻辑关系;
  4. Attack Detector:用户写 Soufflé 逻辑规则,系统秒级返回检测结果与完整调用路径。

追踪细节:EFG 如何“画”出交易全貌

借助 idx、depth、callnum 三个维度,即便上千次嵌套调用也能秒级定位到某条 SSTORE 究竟被哪个外部 CALL 触发。


👉 一键查看当前主网是否正被重入攻击悄悄蚕食

三类经典攻击检测规则拆解

1. 重入攻击规则(Re-entrancy)

逻辑链路

检测公式

  1. 在 A’ 中使用 SLOAD 读取变量 V → JUMPI 决定流程;
  2. 在阶段4 对同一变量 V 执行 SSTORE
  3. 两次操作在不同执行上下文(depth 不一致)。

只要满足以上 2 条,TXSPECTOR 立即报警。

2. 未检查调用(UncheckedCall)

外部 CALL 返回后未用 JUMPI 判断 success 标志。
检测语句简化为:

存在 CALL → 未有 JUMPI 依赖其返回值 ⇒ 标记漏洞。

3. 自杀攻击(Suicidal)

SELFDESTRUCT 之前未检查 msg.sender == owner(即 CALLER 与 JUMPI 无依赖即为真报警)。

实测数据:720 万个区块的真实答卷

攻击类型标记交易数经确认漏洞合约Ratio(TP)误报说明
重入攻击3,35717/30~57 %含全局锁合约被误命中
未检查调用178,303213/216(开源)98.6 %少量 gas 失败场景
自杀攻击2318100 %成立即自毁导致 byte0x

👉 不同检测规则下的一场“猫鼠游戏”,戳这里体验


FAQ

Q1:TXSPECTOR 能不能当年检工具?
不能。它更适合事后溯源批量审计;链上实时防御请搭配监控合约或保险库方案。

Q2:交易重放会不会耗时太长?
单机 8C/64G 环境下,平均 1.03 秒/交易;若开启并行计算,千笔/分钟即可完成。

Q3:需要写 Soufflé 才能搞定检测吗?
仓库已附 10+ 常用检测规则,零代码开箱即用;API 文档也足够扩展自定义攻击模式。

Q4:误报怎么看?
把交易哈希 + 源码贴进 TXSPECTOR,二次验证即可;对含 互斥锁 的合约可加规则排除。

Q5:为何有时 Timeout?
exp(a,b) 一类计算密集型 OP 或极度嵌套调用时会出现;调低 超时阈值(默认 60s)即可快速略过。

Q6:与静态工具 Securify、Vandal 的最大区别?
静态工具“盲猜路径”,TXSPECTOR 在跑过的真实路径上找矛盾——本质是“交易级证据” vs “模型级怀疑”。


总结

TXSPECTOR 将交易、而非静态字节码放在舞台中央,用 逻辑关系 + 可插拔规则 的模式,实现低误报、高可追溯的链上攻防演练。对安全研究者,可用它重现 DAO 攻击快速验证新漏洞;对审计机构,则能批量检测 未检查的低级错误自杀后门。未来,随着并行优化与压缩方案的落地,它或许还能成为链下“实时预警”的一环。

开源代码与学习规则已托管在 OSUSecLab/TxSpector,欢迎 fork 体验。