An Ever-evolving Game: Evaluation of Real-world Attacks and Defenses in Ethereum Ecosystem
本篇文章发表于 USENIX Sec ’20。第一作者为复旦大学的Shunfan Zhou。
智能合约漏洞的自动挖掘工作已经非常多,不过代码的漏洞点到真正的攻击还有一定的距离,本文从攻击行为和ether/token的转移 两个角度,来对攻击和防御进行分析。
Intro
本文的任务是分析现有eth网络上的合约,并理解攻击者使用的策略。
这个任务超出代码分析的范围(静态或动态的):它包括过去成功的攻击,也包括失败的。
本文共分析了15-19年之间的420mil eth交易。方法的核心贡献是一个交易记录分析器,可以把执行的trace和交易签名进行匹配并找出恶意的交易记录。签名匹配包括两步,可以解耦两个重要的概念 i 恶意行为 ii 恶意行为后果。前者是一个合约调用,可以看出攻击的意图;后者是一个ether转账,可以看出攻击的结果。
两步设计的一些细节:
•首先,设计一种 “行为原语(action clause)” 来建模攻击签名,进而匹配交易记录中的合约交互。细节:action tree…•其次,设计了另一种 “结果原语(result clause)” 来匹配ether(平台的原生token)转账、其他token转账、所有权转移的结果。细节:result graph…
一些重要的观察/insights — 攻击策略分析。
•有93.55%的攻击是针对198个缺陷合约的,使用了一种新的攻击技术(airdrop hunting)。•攻击的策略在时间域上有比较大的变化:eth的早期攻击(15-17年)重入和调用内插几乎占据了全部攻击的97%;之后攻击逐渐转向了整数溢出和空投狩猎。
另一部分主要产出 — 研究真实世界中的、已部署的攻击。
•本文总共分析了六类的防御,涉及5.8 mil 开源的合约。•两个主要广泛使用的机制:3.1 mil 合约使用的SafeMath和 2.1 mil 合约使用的onlyOwner check。•虽然一些防御方法被使用了,但并没有达到防御效果。(68,873 txs)
这个工作的一个副产品 — 0-day 检测。文章共发现了22个0-day。
Overview
Airdrop example
空投是一种加密token分发的方式。项目方为了获得关注,会向新的参与者分发一些固定的、小面额的token。空投狩猎是攻击空投的一类策略,通常会旁路掉身份验证,来获得一大笔token。
Fig1这个例子中的ERC20 Token由于没有对msg.sender进行额外的判断,所以攻击者可以创建多个slave,来获得大量free token。
一种防御机制见Fig2。
比较高层次地看这个例子,分为3个子分析:
i 攻击分析,找到攻击方的交易;
ii 防御分析,找到合约和对应的防御;
iii 规避分析,找到敌手的规避了当前防御的交易。
Threat Model
这篇工作测了现行的攻击的显性、可衡量的指标(以ether和代币计)。
比如,如果攻击者获利100ether,我们就认为这个攻击是在范围内(in-scope)的。另外一个例子,如果攻击者使一个合约对别人不可用,比如out-of-gas或者锁住了合约,攻击者并不直接获得任何ether,因此我们认为超出了范围(out-of-scope)。采用这种威胁模型是因为攻击者需要显式造成损失并被衡量。
In-scope Attacks
•Airdrop hunting•Call injection•Re-entrancy•Integer overflow•Honeypot•Call-after-destuct
Methodology
整个工作流程如Fig3,分为四个流程
1)preparation。包括action tree和result graph的构造,手动生成敌手交易的签名。
2)attack analysis。检测已确认的和试图攻击。
3)defense analysis。理解部分敌对交易失败的原因。
4)evasion analysis。分析是否可以攻破这些合约的防御代码。
Observation
文中给出了两个观察
1)Attack Strategy Shift
主要的攻击手段从2016年的重入,到2017年的调用插入,再到2018年的honeypot,最后是19年的airdrop hunting。
上表中报告了几种攻击的峰值时段、占比和平均攻击的数量。
这些变化在作者认为的原因:
1a 智能合约在进化,新的攻击面也在不断被引入。
1b 爆发的攻击会快速耗尽所有的高价值的问题合约,使得后续攻击不再值钱。
1c 多数问题合约在几个交易的攻击之后就会消亡。
2)“Benign” Adversarial Transactions
一些攻击是由白帽子发动的,来救助问题合约。
两个例子是:TheDAO和Parity Wallet的攻击。
Advices
Advice 1
Improving Existing Program Analysis
作者建议改进现有的程序分析,比如支持合约间数据流的分析并增加代码覆盖。
Advice 2
Keeping Pace with New Strategies
作者建议跟上新的攻击策略和相应的检测和防御手段。
原文始发于微信公众号(COMPASS Lab):[论文分享]Evaluation of Real-world Attacks and Defenses in Ethereum