专栏名称: 愿做一名渗透小学徒
分享渗透,安服方面的知识,从浅到深,循序渐进。在渗透的路上,让我们从学徒出发。 此公众号提供的任何工具仅供实验使用,如用于其它用途使用,本公众号概不承担任何责任。
目录
相关文章推荐
于小戈  ·  去父留子,还能玩上瘾? ·  昨天  
杭州日报  ·  休2上4休1!明天上班别忘了... ·  2 天前  
杭州交通918  ·  刚刚,杭州明确:延长至凌晨1:15! ·  2 天前  
杭州交通918  ·  就在刚刚!杭州正式进入…… ·  3 天前  
51好读  ›  专栏  ›  愿做一名渗透小学徒

【Black Hat 2024议题翻译】二:智能合约漏洞利用的主动防御

愿做一名渗透小学徒  · 公众号  ·  · 2024-08-22 08:30

正文

讲者简介

  • 周亚军(Yajin Zhou)

    • 浙江大学教授

    • BlockSec联合创始人

    • 研究领域:DeFi安全、区块链系统安全

    • 发表论文60余篇,引用超过9000次

Web3安全问题

  • 尽管加密市场经历了牛市和熊市的周期,但由漏洞和诈骗造成的损失仍在快速增长。

DeFi安全事件仪表板

DeFi是"Decentralized Finance"的缩写,中文通常称为"去中心化金融"。它指的是利用区块链技术,特别是以太坊(Ethereum)等智能合约平台,构建的一系列金融应用和服务。这些应用和服务不依赖于传统的中心化金融机构,而是通过去中心化的方式运行,使得用户可以直接进行金融交易和交互,而无需通过银行或其他中介机构。

DeFi的关键特点包括:

  1. 去中心化 :DeFi应用通常不受单一实体控制,而是通过社区治理和智能合约自动执行。

  2. 透明度 :所有交易和协议的代码都是公开的,任何人都可以查看。

  3. 可访问性 :只要有互联网连接,用户就可以访问DeFi服务,不受地理位置限制。

  4. 互操作性 :DeFi应用和服务通常设计为可以相互操作,用户可以在不同的DeFi应用之间轻松转移资产和数据。

  5. 开放性 :任何人都可以参与DeFi生态系统,无论是作为用户、开发者还是流动性提供者。

DeFi涵盖了多种金融服务,包括但不限于:

  • 借贷平台 :允许用户存入资产以赚取利息,或借用资产支付利息。

  • 去中心化交易所(DEX) :允许用户直接交易加密货币,无需中心化交易所作为中介。

  • 稳定币 :加密货币,其价值与法定货币或其他资产挂钩,以减少价格波动。

  • 衍生品 :提供期货、期权等金融衍生品的交易。

  • 保险 :去中心化的保险服务,可以覆盖智能合约风险等。

  • 资产管理 :包括去中心化基金、投资组合管理等。

DeFi的目标是提供一个更加开放、透明、高效和可访问的金融系统。然而,由于其新颖性和快速发展,DeFi领域也存在一些风险,包括智能合约漏洞、市场操纵和监管不确定性等。

    https://app.blocksec.com/explorer/security-incidents

安全事件普遍的原因

  • 经济激励:黑客可以获得“报酬”,就像一个没有良好安全系统的金库。

  • 安全合格的开发者较少:开发者在安全概念上没有得到良好的培训。

  • DeFi的可组合性:创造了更多的攻击向量。

  • 开放性:每个人都可以看到链上的代码,如果存在漏洞,每个人都可以发出攻击

  • 匿名性:如果攻击者足够聪明地隐藏,就很难追踪(并非不可能)攻击者

  • Flashloan:扩大攻击者可以使用的钱

现有方法

  • 发布前:

    • 代码审计

    • 模糊测试

    • 形式化验证

  • 发布后:

    • 需要一种有效的方法,在协议部署后检测和阻止黑客攻击。

DeFi攻击的步骤

  1. 准备攻击

  2. 发起攻击

  3. 洗钱获利

我们的方法

  • 在交易确认过程中检测和阻止攻击交易:

    • T1:交易在P2P网络中广播

    • T2:网络上的每个节点都可以监听待处理的交易

    • T3:验证者确认交易

    我们能否检测并阻止攻击交易 T1和T3的时间窗口(在以太坊中通常是12秒)

智能合约和EVM背景

  • 智能合约:可以通过交易调用,包含代码(字节码),在EVM中执行。

  • EVM(以太坊虚拟机):基于栈的虚拟机。

挑战与解决方案

  • 如何从攻击合约中提取攻击逻辑:

    • 攻击合约包含验证逻辑(对调用者)- 简单或混淆的方式。

    • 回调函数。

    解决方案:冻结条件性JUMP,利用执行跟踪。

  • 如何定位和替换收益地址:

    • 收益地址:在攻击期间获得利润的地址。

    解决方案:余额变化表,构建余额变化表,在地址被推送到栈上时替换它们。

  • 如何识别攻击的先决条件:

    • 辅助合约:攻击者在攻击过程之前或期间创建的合约,它们也包含攻击逻辑。

    • 多笔交易:攻击可能由多笔交易组成。

    解决方案:如果涉及多笔交易/合同,则进行依赖性分析

任务一:提取和构建攻击逻辑

连接攻击交易的指令码追踪

  • 输入 :攻击交易的指令码追踪。

  • 输出 :带有追踪的新的智能合约。

  • 问题 :理论上可行,实践中不可行。因为如果攻击包含循环,生成的合约会非常大,超出合约大小限制。


尽可能重用基本块

  • 理论实践 :都有效。

  • 过程 :比选项一更复杂,需要处理JUMP指令,并在追踪和生成的合约中修正偏移量。

  • 偏移修正 :由于生成的智能合约和原始攻击合约的偏移量不同,需要特别处理。


冻结条件性JUMP

  • 简单JUMP和JUMPI :替换为POP指令。

  • 多目标JUMP :运行时确定真实目标,使用跳板(trampoline)重新定位目标块,并保持栈平衡。



任务二:识别和替换收益地址

收益地址识别

  • 目的 :找出攻击中获得利润的地址。

  • 方法 :通过构建余额变化表,识别出在攻击过程中余额增加的地址。

替换收益地址

  • 时机 :在地址被推送到栈上时进行替换。

  • 方法 :使用try-and-catch机制,尝试替换地址并观察对攻击逻辑的影响。


任务三:识别攻击的先决条件

辅助合约识别

  • 目的 :识别攻击过程中使用的辅助合约。







请到「今天看啥」查看全文