恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Blackhat Ethereum 演讲深度解析:从 EVM 字节码逆向到智能合约漏洞审计与利用
首页
资讯中心
/
Blackhat Ethereum 演讲深度解析:从 EVM 字节码逆向到智能合约漏洞审计与利用
Blackhat Ethereum 演讲深度解析:从 EVM 字节码逆向到智能合约漏洞审计与利用
发布时间:2026/10/3 8:36:58
【免费下载链接】publicationsPublications from Trail of Bits项目地址https://gitcode.com/GitHub_Trending/pu/publications点击查看免费下载本篇技术指南围绕 Trail of Bits 两位安全研究员在 CanSecWest 2018 上的演讲《Blackhat Ethereum》展开完整还原其从入门到攻击的完整脉络先建立 Ethereum 与 EVM 的底层认知再从区块链上批量提取合约字节码进而通过逆向分析定位漏洞并编写利用。读完本文你将掌握 EVM 栈机的运行原理、ABI 函数分派机制、常见的智能合约漏洞类别以及 Remix、Oyente、Mythril、Manticore、Ethersplay、Rattle 等工具在字节码与 Solidity 源码两个层面的实战用法。演讲幻灯片原件位于 presentations/Blackhat Ethereum/Blackhat Ethereum.pdf元数据说明见 presentations/Blackhat Ethereum/README.md。演讲背景与核心议程本演讲由 Trail of Bits 两位首席安全研究员主讲Ryan Stortzwithzombies约 10 年安全行业经验曾任职 Raytheon SI参与过 VedaGodz、HatesIrony、Marauders 等 CTF 战队并主办 GhostInTheShellcode、CSAW CTF 等赛事此前有 Swift Reversing、Cyber Grand Challenge、Binary Ninja 等主题演讲。Jay Littlecomputerality约 10 年行业经验CTF 经历覆盖 0x28 Thieves、Whitehatters、Samurai 等战队同样主办过 GhostInTheShellcode其最喜欢的 IDA 按键是Y重命名和D转换数据类型。演讲按照四个阶段递进展开这也是本文的骨架Ethereum 入门Introduction to Ethereum从区块链中提取有用信息Extract useful information from the blockchain审计合约中的漏洞Audit contracts for vulnerabilities编写并投出利用Write and throw an exploit演讲的核心观点是几乎所有 Ethereum 代码都只能通过逆向工程来分析而过去一年中精明的攻击者正是利用智能合约的缺陷盗走了数百万美元。因此掌握字节码逆向是智能合约安全研究的必修课。Ethereum 基础从转账到可编程合约Ethereum 被视为另一种区块链实现与比特币最大的区别在于它是面向智能合约smart contract的比特币开创了无需信任的货币转账而 Ethereum 更进一步为智能合约提供了一台图灵完备的机器支持富应用并能追踪股票、抵押贷款、域名等资产。公众通常只听说 ICOInitial Coin Offerings但这远不是 Ethereum 能力的全部。演讲中给出了一张通俗的术语对照表将密码学概念映射到非加密世界的类比术语含义非加密类比Ether / ETH基础货币货币Wei / GweiETH 的 10⁻¹⁸ / 10⁻⁹ 单位分 / 角Gas执行计算的计量单位邮票上的邮资Block一笔交易的列表账页Transaction在地址间发送 ETH可选附带消息转账单Address160 位数字可以是账户或合约银行路由号 账号Account持有 ETH、可收发款项的账户银行账户Contract收到消息时自动运行代码的账户自动柜员DApp合约 前端 Web UI应用客户端实现用哪个、不用哪个Ethereum 协议由 Yellow Paper黄皮书描述存在众多独立的客户端实现它们共同维护共识包括所有智能合约交易的状态。演讲给出的选型建议非常明确推荐使用geth和parity不要使用cpp-ethereum、pyethereum、EthereumJSolidity 与 EVMSolidity 是一种受 JavaScript 启发的智能合约高级语言编译为 EVMEthereum Virtual Machine字节码——Ethereum 的原生机器码。演讲直言Solidity 是 Ethereum 几乎所有问题的根源它降低了编写链上程序的门槛但语言特性和历史包袱也引入了大量易错模式后文漏洞清单会详述。EVM 架构剖析一台 256 位的栈机器EVM 是一台栈机器stack machine其关键特征约 181 个操作码原生数据宽度为 256 位 / 32 字节大量指令是重复的族系PUSH1–PUSH32、DUP1–DUP16、SWAP1–SWAP16每条指令都有 gas 成本可通过 Trail of Bits 的 evm-opcodes 项目查阅完整指令表演讲用一段简单的字节码演示了栈机的执行过程。给定指令序列PUSH1 0x2 PUSH1 0x3 ADD PUSH1 0x8 MUL执行过程如下Code 列展示剩余指令Stack 列展示栈顶变化步骤执行后 Code执行后 Stack1PUSH1 0x20x22PUSH1 0x30x3 0x23ADD0x54PUSH1 0x80x8 0x55MUL0x28即(2 3) × 8 40 0x28。这段最小的例子揭示了理解 EVM 逆向的核心心法一切运算都在栈上完成操作码隐式消费栈顶元素并压回结果。攻击面一次成功的 Hack 长什么样演讲对智能合约被黑给出了一个简洁而准确的定义Hack 合约返还给你的 ETH 比你发给它的更多。漏洞形态上绝大多数是逻辑缺陷logic flaws但演讲特别提醒内存破坏memory corruption在 EVM 上确实会发生如对Array.length、Inline Assembly的误用不能因为 EVM 是虚拟栈机就排除这类经典漏洞。为什么只能靠逆向工程演讲用一组当时2018 年的链上观测数据说明问题统计项数量合约总数1,500,000持有 ETH 的合约26,300唯一代码unique code5,643带源码的合约1,536持有 1 ETH 的合约470可见上百万个合约中公开源码的仅 1,536 个。绝大多数链上代码没有对应源码这决定了从字节码反推逻辑是唯一的通用分析路径——这正是演讲标题Blackhat Ethereum的由来。从区块链提取合约工具与数据获取工具全景演讲给出了一张完整的工具清单覆盖从链上取数到静态分析的全流程工具作用geth / parityEthereum 客户端 / JSON RPC 提供方web3.js / web3.py面向客户端的 JSON / WebSocket 客户端库Etherscan.io最有用的网站Remix / OyenteSolidity 源码编辑器与静态分析器MythrilEVM、Solidity、区块链搜索ManticoreEVM 与区块链符号执行器Ethersplay反汇编器获取合约的三种方式Ethereum 客户端通常提供 JSON RPC 接口获取合约数据有三种途径连接公共节点服务如 infura.io、myetherapi.com手动在 Etherscan.io 上浏览自己运行 geth 或 parity 全节点geth 实战与踩坑演讲者分享了自己运行 geth 的亲身经历命令为geth.exe --syncmode fast --cache 4096--syncmode fast使用快速同步模式跳过历史状态回放--cache 4096将内存缓存设为 4 GB 以加速同步。首次体验以一连串 leveldb 数据库损坏错误告终ERROR[11-29|19:16:30] Failed to close database database/eth/.ethereum/geth/chaindata errleveldb/table: corruption on>for b in range(blockNumber(latest)): block getBlockByNumber(b) for tx in block[transactions]: r getTransactionReceipt(tx[hash]) the_code getCode(r[address])这段代码逐区块遍历所有交易取回每笔交易的收据再用收据中的合约地址调用getCode拉取字节码。实际执行中还有三个坑selfdestruct自毁过的合约拿不到代码需另行处理合约创建代码Creation Code不直接存在收据里而是存在交易的input字段中需要补抓补跑脚本又花了 4 天链目录体积膨胀了 5 倍最终约 150 万个合约的字节码被整齐地归档到本地目录为批量逆向分析做好了准备。目标分析EVM ABI 与函数分派逆向目标演讲选择的演示目标是合约0xcd6d2cd79fd754c6b909585e46541d32ec491962通过 web3 提取到其字节码且没有可用源码——这是链上合约的常态也正好展示了纯逆向路径。EVM 是 Harvard 架构演讲强调EVM 是哈佛架构Harvard architecture代码与数据分离存在约 5 个独立地址空间Code字节码本体不可写Stack栈机的工作栈Call data本次调用的输入参数区Storage持久化存储键值存储Memory临时内存易失函数分派前 4 字节哈希EVM 中所有执行都从 PC 0x0 进入合约通过检查调用数据calldata来分派到具体函数。分派机制是sha3(函数原型签名).digest()[:4].encode(hex)即取函数原型签名的 Keccak/SHA3 哈希的前 4 字节作为函数选择子selector。例如SetOwner(address) 0x167d3e9c逆向分析的第一步就是从入口分派代码通常是一串PUSH4EQJUMPI的比较链中恢复出合约暴露的全部函数签名。另外注意calldata 在前 4 字节之后按 32 字节对齐参数解析必须遵循这一约定。基于这些知识逆向者可以从纯字节码中逐步重建合约的接口与状态变量布局再结合后面的工具链将控制流与数据流还原成可读的逻辑。常见智能合约漏洞类别完整清单演讲给出了一份实战导向的漏洞知识清单按合约自身缺陷与环境/随机性分组合约自身缺陷语言与逻辑层面Integer overflow / underflow整数溢出与下溢历史上大量 DeFi 事件的主因Incomplete initialization初始化不完整状态变量未正确赋值Uninitialized variables未初始化变量Callbacks / re-entrancy回调 / 重入经典的 DAO 攻击模式Variable name shadowing变量名遮蔽Type inferencevar关键字类型推断导致意外的窄/宽类型转换Array.length对动态数组长度的误用Inline Assembly内联汇编绕过 Solidity 安全检查环境与随机性层面Divide by zero除零Race conditions / replay attacks竞态条件 / 重放攻击Bad random number generation糟糕的随机数生成Time sensitive时间敏感逻辑依赖区块时间戳Using blockchain as random用区块链区块哈希等可预测数据当随机源这份清单至今仍是智能合约审计的检查底稿。Trail of Bits 后续在 papers/smart_contract_flaws_fc2020.pdf 中进一步系统化了这类缺陷的实证研究并在 datasets/smart_contract_audit_findings/ 提供了审计发现的数据集供对照学习。工具链详解源码级与字节码级双轨审计Etherscan.io最有用的网站提供合约源码验证、字节码查看、交易追踪与函数调用浏览是手工取证的第一站。Remix 与 OyenteRemix官方推荐的 Solidity 源码编辑器支持编译、部署、调试一体化Oyente经典的 Solidity 静态分析器面向源码级别检测已知缺陷模式两者配合适合有源码场景的快速扫描。Mythril面向EVM、Solidity 与区块链搜索的安全分析工具可基于字节码直接展开符号化分析适合无源码合约的自动漏洞发现。MAIANMAIAN 是另一款链上合约漏洞检测工具专注于在已部署的字节码上发现可利用的缺陷常与 Mythril 一起作为批量扫描流水线的一环。ManticoreEVM 与区块链符号执行Manticore 是 Trail of Bits 出品的符号执行引擎同时支持二进制与 EVM。演讲现场演示了对一个 Solidity 合约的符号执行$ manticore simple.sol [25981] m.main:INFO: Beginning analysis [25981] m.ethereum:INFO: Starting symbolic transaction: 1 [25981] m.ethereum:INFO: Generated testcase No. 0 - REVERT [25981] m.ethereum:INFO: Generated testcase No. 1 - REVERT [25981] m.ethereum:INFO: Finished symbolic transaction: 1 | Code Coverage: 100% | Terminated States: 3 | Alive States: 1 [32058] m.ethereum:INFO: Generated testcase No. 2 - STOP [25981] m.ethereum:INFO: Results in /examples/mcore_zua0Yl可以看到Manticore 以符号化交易驱动合约执行自动生成覆盖不同路径的测试用例REVERT/STOP并报告代码覆盖率此处 100%与终止/存活状态数。它能够自动探索哪些输入序列能让合约进入异常状态正是Write and throw an exploit之前的自动化侦察手段。更系统的符号执行方法论可参考 papers/manticore.pdf。Ethersplay 与 IDA-EVM反汇编与交互式逆向EthersplayEVM 反汇编器将原始字节码转换为可读的指令流IDA-EVM把 EVM 反汇编能力嵌入 IDA让逆向工程师用熟悉的交互工具分析合约字节码Rattle从字节码重建高层语义演讲最后介绍了 Trail of Bits 自家的 EVM 二进制分析框架Rattle其能力包括恢复 EVM 控制流图CFG将栈机转换为 SSA静态单赋值形式优化并简化逻辑恢复 storage 与 memory 变量以及函数参数Rattle 的价值在于它把栈机 手动跟踪的逆向模式升级为CFG SSA 变量恢复的编译器式分析大幅降低了纯字节码审计的心智负担。仓库中 presentations/Rattle - an Ethereum EVM binary analysis framework/README.md 将其定位为针对已部署智能合约的 EVM 二进制静态分析框架配套 RattleRecon.pdf 展示了实际分析效果。Slither源码级静态分析的现代主力在源码可得时Trail of Bits 的静态分析框架Slither是这套工具链的现代补充其相关演讲见 presentations/Slither: A Static Analysis Framework for Smart Contracts/README.md。从源码结构看它可与本演讲介绍的字节码工具Ethersplay、Rattle形成源码 字节码双轨覆盖并为后续的 SlithIR 中间表示、模型上下文协议MCP集成等演进提供了基础见 presentations/SlithIR, An Intermediate Representation of Solidity to enable High Precision Security Analysis/README.md。从审计到测试属性测试与 Echidna本演讲聚焦审计与利用而审计发现的缺陷如何被系统化复现Trail of Bits 给出的答案是属性测试property-based testing。同仓库的 presentations/Property-based testing of smart contracts/README.md 总结了三个关键要点单元测试并不总是充分它一次只测一个具体用例且通常聚焦于已知场景与失败模式属性测试通过描述通用代码不变量invariant来覆盖未知场景Echidna 是专用于智能合约的属性测试工具速度极快能自动发现违反合约属性的新交易序列用这类工具做属性测试几乎必然能命中用户在单测中遗漏的条件Echidna 的相关学术成果也收录在本仓库中如 papers/echidna_issta2020.pdf、papers/echidna-parade_issta21.pdf 与 papers/echidna_fc_poster.pdf。学习资源清单演讲在结尾给出了一份面向进阶者的资源清单此处保留其完整结构供继续深入资源说明/r/ethdev以太坊开发社区Solidity DocsSolidity 官方文档Beige Paper面向开发者的 EVM 规范米色纸黄皮书的友好版本Not So Smart ContractsTrail of Bits 维护的反面教材合约示例集EthersplayEVM 反汇编器EVM-opcodesEVM 操作码速查表RattleEVM 二进制分析框架演讲时即将发布Echidna智能合约模糊/属性测试工具ManticoreEVM 与二进制符号执行引擎MythrilEVM/Solidity 安全分析MAIAN链上合约漏洞检测结语一条可复制的链上审计流水线综合整场演讲可以提炼出一条从零开始、纯字节码驱动的智能合约审计流水线取数运行 geth/parity 全节点或使用公共 RPC用 web3.py 按区块遍历交易抓取合约字节码并归档注意补抓tx.input中的创建代码、剔除已 selfdestruct 的合约初筛用 Ethersplay 反汇编、用 Etherscan.io 交叉核对识别函数选择子与入口分派还原用 Rattle 恢复 CFG、转换为 SSA、重建变量与函数参数检测对源码可得的合约跑 Slither/Oyente/Remix对纯字节码合约跑 Mythril/MAIAN/Manticore复现用 Manticore 符号执行生成触发用例必要时编写利用脚本投出验证补强用 Echidna 做属性测试把已知缺陷固化为不变量防止回归这条流水线至今仍可在 Trail of Bits 的公开审计实践中找到印证——仓库 reviews/ 收录了自 2018 年以来针对 Aave、Uniswap、Scroll、Offchain Labs 等项目的数百份智能合约安全审查报告是检验上述方法学在真实生产代码上效果的绝佳语料。赞分享【免费下载链接】publicationsPublications from Trail of Bits项目地址https://gitcode.com/GitHub_Trending/pu/publications点击查看免费下载相关推荐Truffle硬核核心truffle/codec如何用EVM字节码逆向解码智能合约存储状态Truffle硬核核心truffle/codec如何用EVM字节码逆向解码智能合约存储状态 对于刚接触以太坊开发的新手来说智能合约的调用参数和存储状态往往区块链开发工具Web3上一篇BilibiliUploader完整指南三步跑通B站视频批量上传工具下一篇3 步修好下载体积异常Gopeed 断点续传实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考