想象一下区块链(比如以太坊)是一个巨大的、公开的玻璃房。在这个房子里,每个人都能看到运行其中的每一台机器(智能合约)的蓝图。通常情况下,这是一件好事,因为这意味着没有人可以隐藏陷阱。但是,一些机器制造者决定用层层迷雾包裹他们的蓝图,在图纸上涂抹油漆,或者建造只有他们自己知道如何穿行的秘密通道。他们这样做是为了保护商业秘密,或防止他人窃取他们的创意。
这篇名为**《通过模糊实现的不安全性》(Insecurity Through Obscurity)的论文指出,虽然这些制造者认为通过隐藏来让机器更安全,但实际上却让它们变得更加危险**。通过隐藏蓝图,他们也无意中隐藏了那些损坏的锁和敞开的窗户。
以下是研究人员的工作内容及发现的简单拆解:
1. 问题所在:“隐藏钥匙”
研究人员注意到,这个玻璃房中许多最活跃的机器都是“闭源”的(没有蓝图可用)且经过了“混淆”(代码被乱码化)。
- 类比: 想象一个银行金库,保安戴着眼罩,而报警系统是用一种秘密代码编写的。银行老板想:“如果没人能读懂这个代码,就没人能黑进它!”
- 现实: 因为代码过于混乱,甚至连银行自己的安全专家也看不出金库的大门其实是敞开的。“模糊化”(隐藏)造成了“不安全性”。
2. 工具:“拨开迷雾的机器人”(skanf)
作者开发了一个名为 skanf 的新工具(以四位研究员 Sen, Kaihua, Aviv, 和 Fan 的名字命名)。你可以把 skanf 想象成一个配备了特制手电筒和解码环的高科技机器人。
- 第一步:拨开迷雾(反混淆): 机器人扫描乱码后的代码。它知道在这种特定类型的机器(EVM)中,每一个秘密门都必须有一个特定的“禁止进入”标志(称为
JUMPDEST)。机器人找到所有这些标志并重新绘制地图,将那些隐秘、蜿蜒的路径转化为清晰、笔直的线条。突然间,隐藏的门变得清晰可见。
- 第二步:以历史为向导(种子执行): 机器人不仅仅是在瞎猜机器是如何运作的。它会观察机器过去的行为(历史交易),看看它通常会走向哪里。它利用这些过去的行程作为“种子”来引导其探索,这能帮助它比在黑暗中盲目猜测的机器人更快地找到危险路径。
- 第三步:试驾(漏洞利用生成): 一旦机器人找到了坏掉的锁(漏洞),它不仅仅是报告问题。它实际上会制造一把“钥匙”(漏洞利用程序)来尝试打开门。如果钥匙奏效,就证明这台机器确实存在漏洞。
3. 测试平台:MEV 机器人
为了测试他们的机器人,研究人员观察了 MEV 机器人。
- 类比: 想象一群高速赛车(机器人)在赛道(区块链)上飞驰,寻找交通中的微小缝隙以便挤进去赚取快钱。这些车速度极快,处理着巨额资金,而它们的驾驶员(搜索者)对引擎的工作原理守口如瓶。
- 为什么选择它们: 这些机器人通常是闭源且经过混淆的,使它们成为了设计用来看穿迷雾的工具的最佳测试对象。
4. 研究发现:许多敞开的大门
结果令人震惊:
- 扫描: 机器人扫描了 6,554 辆这样的赛车。
- 发现: 它发现其中 1,030 辆拥有坏掉的锁(漏洞),这会让小偷偷走它们的燃料(加密资产)。
- 证明: 机器人成功为 394 辆赛车制造出了有效的钥匙。
- 代价: 如果小偷使用了这些钥匙,他们可以偷走超过 1,060 万美元。
5. 现实世界的证据:“钓鱼”陷阱
研究人员还回顾了历史,看看是否已经有人从这些赛车中窃取了财物。
- 攻击: 他们发现了 104 起真实的盗窃案。小偷使用了一种被称为 “MEV 钓鱼” 的聪明手段。
- 运作方式: 想象一个小偷在赛道上留下了一块假的金条(一个虚假的获利机会)。赛车驾驶员看到了它,认为这是一个大好机会,于是开过去捡起它。但那块金条其实是一个陷阱。当赛车开过时,陷阱门打开了,小偷偷走了赛车的燃料。
- 损失: 这些真实的盗窃案已经导致驾驶员损失了约 276 万美元。
- 错失的机会: 研究人员发现,他们的机器人(skanf)本可以在这些盗窃发生之前,就发现这些赛车中坏掉的锁。
6. 结论
论文得出结论:隐藏你的代码并不会让你更安全;它只会让你更难看清自己的错误。
- 给制造者的建议: 如果你正在制造一台存放金钱的机器,你需要能够清晰地看到自己的蓝图。隐藏蓝图可能会保护你的秘密,但也会让你的资金暴露在外。
- 核心启示: 研究人员展示了,有了正确的工具(如 skanf),我们可以拨开迷雾,找到那些坏掉的锁,并在小偷到来之前修复它们。
简而言之:不要在黑暗中隐藏你的安全缺陷;请照亮它们,以便你能修复它们。
技术摘要:通过模糊实现的不安全:封闭源代码合约中的隐蔽漏洞
1. 问题陈述
在以太坊等公共区块链上,智能合约的字节码是公开可访问的,但许多开发者选择保持其源代码封闭或采用字节码混淆,以保护专有业务逻辑并威慑攻击(例如抢跑/frontrunning)。虽然混淆旨在提供“通过模糊实现安全性”,但本文认为,这往往导致了“通过模糊实现的不安全”。混淆(特别是使用间接跳转的控制流混ک淆)阻碍了现有安全工具分析合约的能力,可能掩盖关键的资产管理漏洞。
本文识别了一个特定的差距:现有的工具难以扩展到大型、封闭源代码且经过混淆的合约,尤其是那些处理大量资产的极大可提取价值(MEV)机器人。这些机器人通常涉及交易、闪电贷和 DeFi 交互的复杂逻辑。当被混淆后,它们变成了“黑盒”,其中的漏洞(特别是允许对手方窃取资产的漏洞)在被利用之前无法被检测到。
2. 方法论:skanf 工具
为了应对这些挑战,作者提出了 skanf,一种专门为封闭源代码和混淆合约设计的创新型 EVM 字节码分析工具。skanf 的运行分为三个主要阶段:
A. 控制流去混淆
第一个挑战是混淆后的合约使用间接跳转(即目标地址为运行时值)来隐藏执行路径。现有工具经常将这些代码块误分类为不可达或无法对其进行分析。
- 方法: skanf 利用了以太坊虚拟机(EVM)的一个特定属性:有效的跳转目标必须被明确标记为
JUMPDEST 操作码。
- 技术: 该工具静态扫描字节码以收集所有合法的
JUMPDEST 地址。随后,它通过在较高的程序计数器(PC)地址(例如 0xe000)处插入一个分支表(一系列条件检查序列)来对字节码进行插桩。
- 转换: 间接跳转被重写为跳转到该分支表。该表会将运行时的跳转目标与所有已知的有效
JUMPDEST 地址进行比较。如果匹配成功,则执行跳转至目标;否则,继续进行下一次检查。这通过将不透明的间接跳转转换为显式的、可静态分析的直接跳转,在不改变合约逻辑的情况下恢复了控制流图(CFG)。
B. 交易引导的符号执行
第二个挑战是符号执行中的“路径爆炸”问题,这在复杂的 MEV 机器人中尤为严重。
- 方法: skanf 不仅仅依赖于随机输入或人工规范,而是使用历史交易作为高质量的具象种子(concrete seeds)。
- 技术:
- 种子提取: 工具从归档节点检索目标合约成功的历史交易。它提取触发外部调用的输入(调用者、来源、calldata、value),特别筛选涉及 ERC-20 转账的调用。
- 引导执行: 这些具象输入初始化符号执行引擎。引擎在这些种子的引导下探索路径,与纯符号执行相比,显著减少了搜索空间和约束求解的复杂度。
- 污点分析: 在路径探索期间,skanf 执行字节级污点传播。它追踪对抗性输入(受污染的 calldata)如何流向
CALL 指令的关键参数(目标地址、函数选择器、参数)。
C. 漏洞检测与漏洞利用生成
- 漏洞预言机(Oracle): 如果满足以下条件,
CALL 指令将被标记为潜在的资产管理漏洞:
- 它可以从公共入口点到达。
- 其参数要么是对抗者可控的(受污染的),要么是有风险的(固定的但危险的,例如固定的 ERC-20 代币地址或
transfer 函数选择器)。
- 具体而言,如果函数是
transfer 或 approve,工具会检查接收者和金额是否可以被对抗者操纵。
- 漏洞利用合成: 对于识别出的漏洞,skanf 构建一个交易来利用该缺陷。它通过求解约束来生成特定的 calldata,从而触发漏洞调用并将资产转移到对抗者控制的地址。
- 验证: 生成的漏洞利用会在本地区块链环境中(使用归档节点重建历史状态)进行验证,以确保它们能成功执行并转移资产。
3. 核心贡献
- 去混淆方法: 一种通过重建跳转表来移除 EVM 字节码中控制流混淆的新技术,使静态分析工具能够对混淆合约发挥作用。
- 交易引导的符号执行: 一种可扩展的方法,利用公开的历史交易作为具象种子来引导符号执行,缓解了路径爆炸问题并提高了漏洞检测效率。
- skanf 实现: 一个集成了去混淆和引导执行的工具,用于检测封闭源代码合约中的资产管理漏洞并自动生成漏洞利用。
- 实证评估: 对 6,554 个真实世界 MEV 机器人的大规模研究,证明了漏洞的普遍存在以及所提方法的有效性。
- 发现 MEV 网络钓鱼攻击: 识别出一类新的攻击方式,即对抗者通过精心构造的机会,诱导 MEV 机器人与恶意合约进行交互,从而导致巨大的财务损失。
4. 结果
作者在包含 6,554 个 MEV 机器人的数据集上对 skanf 进行了评估:
- 去混淆有效性: skanf 成功提高了混淆合约的代码覆盖率。对于标准工具(如 Gigahorse)覆盖率低于 50% 的合约,skanf 在 90% 的案例中将其覆盖率恢复到了接近 100%。
- 漏洞检测:
- skanf 识别出了 1,030 个易受攻击的合约。
- 它成功生成并验证了其中 394 个合约的漏洞利用程序。
- 根据编写时的代币余额和历史高点估算,这些合成漏洞利用程序的潜在经济损失估计为 1,060 万美元。
- 与最先进的工具(Mythril, ETHBMC, JACKAL, Securify)相比,skanf 检测到了更多的漏洞,这主要归功于其处理混淆和使用引导执行的能力。
- 现实世界攻击:
- 该研究发现了 2021 年至 2025 年间针对 37 个 MEV 机器人发生的 104 起 现实世界“MEV 网络钓鱼”攻击。
- 这些攻击导致了总计 276 万美元 的损失。
- skanf 能够重新发现其中 28 个被攻击合约的漏洞,表明这些攻击本可以被预防。
- 在 104 起攻击中,仅有 3 起此前曾被公开报道。
5. 重要性与主张
论文声称,“通过模糊实现安全性”是智能合约生态系统中一个切实的风险。通过隐藏代码,开发者在无意中阻止了安全工具检测关键缺陷,尤其是涉及资产管理的缺陷。
- 安全含义: 混淆并不能增强安全性;相反,它创造了一种虚假的安全感,同时掩盖了会导致重大财务损失的漏洞。
- 实际效用: skanf 为开发者和审计人员提供了一种防御机制,使其能够在部署或交互前分析封闭源代码或混淆后的字节码,从而识别出原本会被隐藏的风险。
- MEV 背景: 研究强调,处理大量资产且通常是封闭源代码的 MEV 机器人,是此类漏洞的主要目标。对“MEV 网络钓鱼攻击”的发现揭示了一种复杂的攻击向量,即对抗者利用这些机器人的自动化特性进行攻击。
- 局限性说明: 作者承认了局限性,例如依赖底层工具(Gigahorse 和 Greed)进行初步分析,以及目前主要关注
CALL 指令(排除了 DELEGATECALL、CALLCODE 等)。他们还指出,虽然识别了许多攻击,但其检测方法是基于模式的,可能会错过不符合特定“网络钓鱼”标准的攻击。
总之,本文证明了在缺乏能够处理混淆的分析工具的情况下,智能合约中的“通过模糊实现安全性”策略是根本性错误的,这使得大量资产暴露在被利用的风险之下。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。