宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > UNI > 正文

以Kadena智能合约为例 简析如何规避重入攻击和跨函数攻击

作者:

时间:1900/1/1 0:00:00

在这篇文章中,我们将简要地解释重入和跨函数重入之间的区别,以及图灵不完备性如何能够防止一些这样的攻击。

其中我们将提供一个跨函数重入利用的案例,该案例中Kadena区块链使用的是编程语言Pact,但图灵不完备性并未防止该恶意利用的发生。

Kadena区块链旨在实现比其他L1链更高的可扩展性、安全性和可用性。其开发了一种新的语言用以编写智能合约:Pact。

这种语言是人类可读的,且易于形式化验证,并具备可提高安全性的图灵不完备性。

这里提到的图灵不完备性意味着Pact无法做到图灵完备编程语言(如Solidity或Haskell)所能做到的那些事——看起来好像是个劣势,但其实智能合约编程,哪怕是最复杂的DeFi协议也很少会需要用到图灵完备性。

图灵不完备性最重要的一点是没有无界递归。虽然这确实大大减少了攻击面,但一些「经典」攻击是无法被100%避免的,接下来我们就会讲述跨函数重入的问题。

Balancer推出DeFi组件Generalized Boosted Pools:金色财经报道,Balancer推出DeFi组件Generalized Boosted Pools,支持在Balancer中集成收益率市场,通过将未使用的Boosted pools池子流动性存入产生收益的协议中来保持资本效率。[2023/2/16 12:11:43]

重入攻击是非常常见的安全问题。这个问题不仅很难被开发者发现,也很难被审计师审查出其会导致的所有潜在后果。

重入攻击取决于函数在进行外部调用之前和之后执行的特定任务的顺序。

如果一个合约调用了一个不受信任的外部合约,攻击者可以让它一次又一次地重复这个函数调用,形成一个递归调用。而如果重新输入的函数执行重要的任务(如更新账户的余额),那这可能就会导致灾难性的后果。

下方是一个简化的例子。

我们把易受攻击的合约称为unsafe合约,把恶意的合约称为Attack合约。

Ooki DAO错过诉讼回应截止日期,CFTC要求法院对该案作出缺席判决:1月12日消息,法庭文件显示,美国商品期货交易委员会 (CFTC)在Ooki DAO错过了对诉讼作出回应的最后期限后,已开始向法院申请就其针对Ooki DAO的案件作出缺席判决。

CFTC已要求法院对Ooki DAO进行“违约记录”,称其错过了传票所指示的“回答或以其他方式辩护”的最后期限。如果被批准,违约记录将表明Ooki DAO未能在法庭上为自己辩护,将不再能够回答或回应诉讼。“违约记录”是获得缺席判决的第一步,缺席判决是法院在被告未能为诉讼辩护时作出的裁决。

金色财经此前报道,美国CFTC对Ooki DAO提起诉讼,指控其利用DAO结构逃避监管。随后CFTC向法院申请一项替代服务动议,要求法院批准使用聊天机器人和论坛帖子作为对被告(包括Ooki DAO成员)的送达告知和传票的方式。去年12月消息,美国法官命令CFTC对Ooki DAO的两位原创始人提起诉讼。(Cointelegraph)[2023/1/12 11:07:36]

1. 攻击者调用unsafe合约,以将资金转移到Attack合约中。

当前Arbitrum桥接存储总价值突破30亿美元,参与桥接交易用户超40万:10月26日消息,据Dune Analytics数据显示,以太坊Layer2扩容解决方案Arbitrum跨链桥接存储总价值已达到1,920,035枚ETH,按照当前ETH价格计算超过30亿美元。此外,参与Arbitrum桥接交易的用户量已超40万,截止目前为405,085个。[2022/10/27 11:46:17]

2. 收到调用之后,unsafe合约首先检查攻击者是否有资金,然后将资金转移到Attack合约。

3. 收到资金后,Attack合约执行回退函数,在它能够更新余额之前回调到不安全的合约,从而重新启动该过程。

因为这种攻击是通过无界递归调用进行的,所以如果语言不是图灵完备的,攻击就不可能进行。

《时代》杂志最新封面文章:元宇宙将重塑我们的生活:金色财经消息,《时代》杂志发布最新一期封面文章《元宇宙将重塑我们的生活》,文章提到,美国SEC的报告称,在2022年的前六个月,“Metaverse”这个词在监管文件中出现了1100多次。而在2021年,仅有260次的提及。文章也提到,元宇宙将使当今数字存在的许多难题变得更加尖锐,例如数据权利、数据安全、错误信息和激进化、平台权力和用户幸福感。[2022/7/19 2:21:32]

跨函数重入类似于经典的重入攻击,除了重入的函数与进行外部调用的函数功能不同。这种重入攻击通常更难被发现——因为在复杂的协议中,组合的可能性太多,无法手动测试每个可能的结果。

这就引出了我们的概念证明:使用Pact语言进行简单的跨函数重入攻击。

Pact模块中的简单跨函数重入

正如我们在下方代码片段中看到的,合约中的函数对另一个实现特定接口的合约进行外部调用。这允许重入一个设计好的攻击合约。Pact中的功能是内置函数,可授予用户权限来执行敏感任务。以下代码仅供说明之用,并非取自真实案例合约。

跨链预言机解决方案SupraOracles与去中心化社交媒体和娱乐平台Koraplay达成合作:据官方消息,跨链预言机解决方案SupraOracles宣布与去中心化社交媒体和娱乐平台Koraplay达成合作。据悉,用户可以在Koraplay中创建并分享内容,同时赚取加密货币。

SupraOracles将在Koraplay上线后协助其最大化代币的可扩展性。作为合作关系的一部分,Koraplay将在社区中推广SupraOracles,并将研究联合品牌的可能性。SupraOracles也将帮助Koraplay进行其平台的Beta测试。[2022/7/14 2:12:54]

我们将使用的代码例子包含三个部分:

1. 合约接口

用以使主合约与一个恶意的外部模块进行交互

2. 主要模块

被攻击的模拟示例合约

首先,数据库被定义为一个表,其中字符串存储在具有关联十进制数的行中。

然后定义了一个能力:CREDIT(在这个示例中始终为真)。这个条件将是credit函数所需要的,但只被with_capability语句中的bad_function内部授予。这意味着直接调用credit会失败。

现在,函数credit被定义如下:它增加了作为输入的字符串的余额(小数点)。如果该地址不在表中,它还会创建该条目。

最后,函数bad_function增加了legit_address的余额,但也执行了对符合之前定义的接口的合约的调用,该合约可以作为一个输入参数提供。函数get-balance允许我们读取该表格。

3. 用于触发重入的模块:

重新进入主模块,调用credit函数

大致流程如下:

a. 以攻击合约为参数调用bad_function

b. CREDIT功能被授予

c. “legit_address”的余额增加了10

d. 调用恶意模块的external_function:因为它仍然具有CREDIT功能,它可以重新进入合约并直接调用credit函数,给 "attacker_address "一个100的余额。

之后,(get-balance "legit_address")返回10,(get-balance "attacker_address")返回100。

重入成功。

现在,如果我们不重入调用credit,而是尝试重入再次调用bad_function,会发生什么?即使第一次调用credit成功,由于重入是在bad_function中,这将是一个递归调用且执行将会失败。

现在,如果我们尝试直接调用external_function,这将不起作用,因为所需的功能CREDIT没有被授予。

通过移除无界递归,图灵不完备性可以防止一些重入攻击的载体。

然而,由于跨函数重入可以在没有递归调用的情况下进行,图灵不完备性并不能阻止所有此类攻击载体,因此用户在与这种语言交互时不应该假设重入不会造成恶劣影响。

重入和跨函数重入是非常常见的安全问题,Web3.0领域也因此发生了一系列规模巨大的攻击事件。

Pact作为一种智能合约编程语言,极具潜力。

它采取的方法与其他语言如Solidity或Haskell有些不同。Pact并不完全依靠图灵不完备性来提高安全性;该语言被设计地更容易阅读、理解和正式验证。

然而,没有哪种编程语言能对所有的攻击载体免疫。因此开发者必须了解他们所使用的语言的独特功能,并且在部署前对所有项目进行彻底审计。

目前,CertiK的审计及端到端解决方案已覆盖目前市面上大部分生态系统,并支持几乎所有主流编程语言,就区块链平台、数字资产交易平台、智能合约的安全性等领域为各个生态链提供安全技术支持。

CertiK中文社区

企业专栏

阅读更多

金色财经

金色早8点

Odaily星球日报

Arcane Labs

澎湃新闻

深潮TechFlow

欧科云链

MarsBit

BTCStudy

链得得

标签:DITCREREDICREDITValidityCRE8RRipio Credit Networkgamecredits

UNI热门资讯
Bankless 联创:以太坊将在互联网上开启一场工业革命

撰文:Bankless 联合创始人 David Hoffman加密经济系统必须找到平衡。为了使加密系统经受住时间的考验,它们必须具有灵活性,以适应周围不断变化的环境。僵化是脆弱的。僵化的系统最终将需要人工干预以防止崩溃.

1900/1/1 0:00:00
Cosmos中的流动性质押板块发展到了什么地步?

撰写:Opa 在 2022 年期间,我介绍了 Cosmos 中的流动性质押协议,从 1 月份的 Prism 衍生品开始,一直到上个月关于 StakeEasy 的新颖的、多面的代币模型.

1900/1/1 0:00:00
再见BTC、DOGE 马斯克Twitter Coin即将推出

有传言说埃隆·马斯克可能会推出自己的推特币,可能会把狗狗币(DOGE)晾在一边,甚至抛弃它。Twitter用户界面的泄露最早出现在12月初,显示了“Coin”功能。几小时前,又有新的爆料.

1900/1/1 0:00:00
OpFi + DPX 今年DeFi的新方向?

原文作者: 加密 KOL Mesky原文编译:0×214,BlockBeatsOpFi 和 DPX 是什么?从链上期权采用到整个 DeFi 赛道,为什么这二者会开创一个全新的时代?听起来几乎是不可能完成的任务.

1900/1/1 0:00:00
万事达的 Web3 策略:音乐和社区

图片来源:由 Maze AI 生成一周前万事达卡宣布推出基于 Web3 的艺术家加速器计划。希望帮助新兴音乐家通过 Web3 技术建立自己的品牌,包括铸造 NFT、建立社区,在元宇宙中进行表演.

1900/1/1 0:00:00
亚马逊进入web3 将在春季推出NFT计划

亚马逊正向加密行业迈出第一步。根据Blockworks 1月26日发布的报告,这家电子商务巨头计划在2023年春天推出一项专注于区块链游戏和相关NFT的计划。该计划仍处于开发阶段,但发布的最后期限定为4月.

1900/1/1 0:00:00