Penterers的智能合同安全性

2021-04-22 11:35:59

本文为传统网络安全的背景和Crypto和BlockChain Tech的知识提供了背景,提供了智能合同安全世界的介绍。它'从我们的利用开发人员团队和Pentesters转变智能合同审计员的经验。

虽然存在其他智能合同平台,但我们将重点关注Ethereum,目前是最广泛采用的平台。由于这是一个高级文章,大多数要点应该适用于类似性的平台。

- 智能合同允许根据特定规则与资产互动。 - 智能合同可公开访问,源代码通常是开源。 - 超过1150亿美元目前被锁定在Ethereum Demi Space的智能合同中,在2020年(超过5000万美元)(https://cryptobriefing.com/50-million-lost-the-top-19-defi-cryptocurrency -hacks-2020 /)迷失在智能合同黑客。 - 智能合同黑客可能会导致攻击者的重大,即时财务收益。 - 智能合同不仅通过代码中的故障攻击,而且通过高特权用户角色,外部协议和复杂的经济攻击攻击。

加密货币允许我们通过互联网与资产进行互动,同时通常最大限度地减少信任假设。智能合约将此概念扩展到更复杂的交易,例如贷款,治理,衍生品交易等等。智能合同是法律,因为加密货币是金钱:通过社会或法律手段解决的问题的技术解决方案。

例如,考虑以下伪代码,允许任何用户交换[以太](https://coinmarketcap.com/currencies/thereum/),以为黄金的合成代表。

< pre> < code class ="语言 - 坚固" > function buygold(){uint goldprice = Oracle.fetchprice('金:eth'); uint goldshares = msg.value / goldprice; Gold.Transfer(Msg.sender,Goldshares); //将等效金转移到用户}

功能卖(UINT Goldshares){uint goldprice = Oracle.fetchprice('金:eth'); uint ethvalue = goldshares * goldprice; gold.fransfrom(msg.sender,地址(此),goldshares); //将黄金从用户转移到合同转移(msg.sender,ethvalue); //将等效以太传输到用户}}} + < / pre>

在使用智能合约时,我们通常不需要相信合同的法律制度,法院甚至是合同的业主。但我们确实需要信任合同' s代码。

公共区块链上所有智能合同的字节码对于每个人来说都是可见的,因此可以对其进行分解和审计。从理论上讲,合同' s代码可以被滥用,因为桌面和移动应用程序的常见做法,但这样做会破坏首先拥有智能合同的目的 - 如果你算上人们相信您的代码排除所有其他代码,该代码必须开放审查。因此,许多项目在GitHub这样的平台上开源他们的合同源代码。

>一个应该在假设敌人立即获得完全熟悉的情况下设计系统。 - * shannon' s maxim *

上面的报价通常适用于加密,但同样适用于智能合同安全性。通过默默无闻的安全在这个空间中是不可能的。没有隐藏私人交易,防火墙或认证的私人交易,防火墙或认证,并且通过网络隔离没有减轻风险。代码必须捍卫自己。

在许多方面,智能合同安全模型与自由和开源软件采用的安全模型非常相似:所有代码都公开,鼓励公众查找并报告其中的错误。自由和开源软件的支持者经常强调这种安全模型固有的稳健性与封闭软件相比,它的源代码仅由参与其开发的小团队看到。 Linus Torvalds表示:

但是,正如[Heartbleed](Https://heartbleed.com/),Linus'法律并不总是适用的,如[Heldbleed](https://heartbleed.com/)所示:只是因为你的软件是开源和流行的。 ; T意味着任何人实际上都在看代码。大多数人需要某种激励来查找和报告开源代码中的错误。

在智能合同安全性的双刃剑中,寻找错误的激励措施,因为**严重的漏洞具有直接财务影响**。一名设法发现[Heartbleed](https://heartbleed.com)的攻击者,甚至更严重的漏洞,如[蓝色](https://nvd.nist.gov/vuln/detail/cve-2019-0708)需要提出攻击活动,从经济上受益,也许涉及赎金软件或窃取和销售客户信息。另一方面,利用严重的智能契约漏洞将以乙醚或其他[加密货币令牌]的形式,将您**立即进行财务收益**(https://coinmarketcap.com/alexandria/glossary/erc -20) 。

这为智能合同安全性描绘了一个相当惨淡的图片,但在某种程度上这是威胁模型的重点。 Andreas Antonopoulos创造了短语" [泡泡男孩和下水道鼠](https://www.youtube.com/watch?v=810akcfm_x)&#34 ;,,为传统网络在很大程度上依赖的数据他们的外部基础设施来保护自己,而公开区块链悬挂着一块互联网上任何人的多米的奶酪,以拿一块。协议将被攻击,智能合同将被黑攻击,但随着时间的推移,最终结果是一个暴露于环境所提供的最糟糕的系统 - 一个耐寒的互联网下水道大鼠。

以下是智能合同威胁模型与传统应用程序有什么不同的例子。

**虫子几乎总是具有财务影响。**与积极使用的区块链进行交互通常是缓慢和昂贵的。因此,交易几乎完全保留用于通常被视为高风险的业务,例如转移或管理资产。合同已经在部署时数数亿美元抛入它们,并在灾难中结束 - 见[Fei协议](https://finance.yahoo.com/news/fei-stablecoin-becomes-unstable- genesis-054300100。 HTML)和[Eminence](https://cointeelegraph.com/news/hacker-teals--15m- after-dens-pile-into-unreleared-yearn-finance-project)。当你遇到野外的一个虫子(例如,影响合同状态的东西),利用它很可能会在经济上影响合同用户,无论是通过被盗,锁定或错误的资金。

1.方法是[公共或私人](https://dasp.co/#item-2)。 < pre> < code class ="语言 - 坚固" >构造函数()公共{initializeContract(); }函数initializeContract()public {owner = msg.sender; }< / code> < / pre>

2.整数[超出和溢出](https://dasp.co/#item-3) - 影响真实资产。 < pre> < code class ="语言 - 坚固" >函数退出(UINT _AMOUNT){RESCELD(余额[msg.sender] - _amount> 0); msg.sender.transfer(_amount);平衡[msg.sender] - = _amount; }< / code> < / pre>

3. [声明订购](https://dasp.co/#item 1)。在下面的代码中通知,“呼叫”可以在另一个合同中执行功能,然后调用此函数,导致“退出”在余量减少之前部分执行。 < pre> < code class ="语言 - 坚固" >函数退出(UINT _AMOUNT){要求(余额[msg.sender]> = _amount); msg.sender.call.value(_amount)();平衡[msg.sender] - = _amount; }< / code> < / pre>

**产品所有者是公共敌人没有。 1. **在2020年下半年,DEMI诈骗[占Prypto的欺诈的99%](https://decrypt.co/55787/defi-rug-pulls-were-cryptos-top-fraud-scheme -in-2020-cirphottace)。最常见的骗局类型是地毯拉力,其中开发人员设计合同,为自己沉积的资金提供广泛的控制,促进他们在社交媒体上的平台几天,然后与他们的用户消失'资金。

出于这个原因,开发人员被视为主要威胁演员。恶意开发人员可能包括他们的代码中的微妙错误(参见稳定性的竞争竞争](https://underhanded.soliondlang.org/),一个智能合同的竞争,或公平地包括让他们排出用户资金的功能。它们也可能与用于部署和管理合同的私钥忽略,这可能允许其他人滥用可信的管理功能。

常见的缓解包括使用[Multi-Sig钱包](https://academy.binance.com/can/what-is-a-multisig-wally.com/-multiclicle/wallet)最小化特权功能对于合同管理,而不是使用可升级合同。

**代码是不可变的(种类)。**在传统的安全空间中,它被视为给定的应用程序和平台可以由其创建者升级和更改。智能合约并非总是如此,因为代码一旦部署到区块链一旦部署到区块链“,为用户提供了有关未来互动的确定性。但是,这也意味着代码中的任何错误都将存在于永久性中。

为了促进错误修复和连续合同开发,已经创建了特殊的可升级模式以允许升级合同逻辑。协议可以使用[代理模式](https://blog.opzepppelin.com/proxy-patterns/),并具有可变的引用来实现升级的当前逻辑实现。这符合自己的安全考虑因素,因为现在可以将新的错误引入以前的安全平台 - 重要的是,这也使得开发人员更容易执行上述地毯拉动。这样,这些模式通常伴随着安全缓解,例如[时间锁](https://medium.com/@tstyle11/time-locks-5b644651e4a3),这为用户提供了最短的时间来退出系统之前的时间部署升级。

**可组合性是关键。**分散金融(DECI)将自己销售为财务的未来。这个未来的一个关键方面是不同的平台可以相互交互,允许复杂的操作。例如,用户可能:

1.使用算法备份的stablecoin(例如[dai](https://en.wikipedia.org/wiki/dai_(cryptocurrency))作为通过贷款协议借用以太网,然后... 2.使用借用以太网向[分散交换](https://defiprime.com/exchanges)(dex)提供流动性,以获得奖励,通常以其他令牌的形式,然后... 3.使用奖励来管理DEX,它可以包括由协议运行的代码的投票。

由于这种巨大的复杂性,[产量农业](https://academy.binance.com/en/articles/what-is-yield-farming-in-defi)协议获得了人气。这些协议旨在摘要通过允许它们将资金部署到协议中,从最终用户摘要一些复杂性,然后由创建和管理最大返回的协议开发人员管理的协议开发人员管理。

每个运动部件都延伸攻击表面,因此它没有令人惊讶的是,产量聚合器平台反复攻击攻击:[泡菜金融(1900万美元)](https://halborn.com/explated-the-defi- procol -Pickle-Finance-Hack-11-2020 /),[兰(1100万美元)](https://rekt.news/yearn -rekt/),以及[Akropolis($ 2m)](https:// cointelegraph。 COM / NEWS / Akropolis-Defi-Protocat-Paused-As-Hackers-Get-Away-with-2m-in-Dai)所有[遭受](https://rekt.news/yearn -rekt/)[黑客]( https://www.coindesk.com/defi-protocol-pickle-finance-token-loses-almost-half-its-value-After-19-7m-hack)在最近的时间。

**攻击Don' t刚刚来自错误。**鉴于突击阵容的创新速度,加密充满了小说,复杂的攻击。 [Oracle操作攻击](https://samczsun.com/so-you-want-to -use-a-price-oracle/)通过[flash loans](https://www.coindesk.com/the-defi -flash贷款攻击 - 即改变的东西)是一个很好的例子。 Flash Loans允许用户借用数亿美元,只要他们借入并偿还首都和单一交易的费用。有许多富有成效的用法,包括执行[仲裁](https://www.investopedia.com/terms/a/arbitrage.asp)。但是,在2020年,在被称为Oracle操纵攻击的内容中,重复使用闪存贷款。

为了确定资产价格,协议将查询DEXS,这将在理论上能够提供当前定价数据。例如,考虑[UniSAP](https://uniswap.org/),最大的Dex(最近看到每周交易量超过10亿美元)是一个[自动化市场制造者](https://coinmarketcap.com / Alexandria /词汇表/自动化市场制造商AMM)(AMM)(AMM),而不是依靠关联价格数据,使用[粘接曲线]的概念(https://defiprime.com/bonding-curve-解释)确定资产价格。在两个资产的池中,由于一个资产受到更高的需求,需求资产的相对价格上升,根据曲线变得更加昂贵。亚缔约国家的价格过度变化是纠正的。

这合理地工作得很好,直到Flash贷款给用户获得足够的资本来操纵这些价格,以便池的一侧几乎自由。使用此技术,攻击者可以临时操作协议使用的价格源并可从中可靠地提取值,而无需利用其代码中的任何错误。 Flash Loans从[Whales](Https://www.investopedia.com/terms/b/bitcoin-whale.asp)到任何可以写智能合同的人的市场操纵障碍。想象一下,经过追求电子商务商店并报告您可以通过操纵本国货币以降低的价格购买产品。从那时起,已经提出了安全措施以提高这些饲料的可靠性,例如引入[时间加权的平均价格](https://uniswap.org/docs/v2/core-concepts/oracles/),这限制了短期操纵攻击的可行性。

在一个非Bug相关攻击的另一个例子中,当[SushisWap](httpswap](httpswap)(httpswapi.com/)dex陷入存在时,它使用了所谓的[吸血鬼攻击](https:// finematics。 COM / VAMPIRE-AITION-SUSHISWAP解释/)从现有的现任UNISAP窃取流动性。 Sushiswap通过分叉攻击unisacap' S允许源代码许可证,并根据提供的流动资金的金额和持续时间向流动性提供者(LPS)提供额外的治理令牌。这意味着LPS更有利可图,使他们的资金进入Sushiswap,它将流动性和交易量从UniSAP带到Sushiswap中。作为对此和其他协议攻击的响应,UNISAP发布了自己的治理令牌,添加了一种新的许可机制,该机制将限制为其代码库可以被分叉,并禁止在其V3发布中使用外部合同使用的某些功能。

从安全研究员'' t' t要求更多。通过智能合同,赌注很高,该技术相当新兴,安全技能患者需求疼痛。广泛使用Bug Bounty程序是迄今为止的遗嘱,许多加密项目提供了[1M +奖金](https://immunefi.com/)。

如果您'在传统的网络安全中获得了背景,希望在空间中开始,您可能想查看一些公开的CTFS:

- [etheternaut](https://ethernaut.opzezeppelin.com/):对初学者有益,以感受到坚固。 从这个开始。 - [该死的弱势群体](https://www.damnvulnerabledefi.xyz/):需要了解一些缺陷概念,例如闪存贷款。 - [范式CTF](https://ctf.paradigm.xyz/):一个高级CTF,涵盖各种定义和固有概念。 如果你有一个经过验证的赛道记录,一个敏锐的眼睛,可以发现复杂的错误,并希望参加下一步并与Crypto中的一些最受欢迎的项目合作,在[email protected]接触我们 。