火星链 火星链
Ctrl+D收藏火星链
首页 > 波场 > 正文

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

作者:

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

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

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

事件简介

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

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

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

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

比特币矿工已从基于Ordinals协议的NFT交易中赚取57.4万美元:金色财经报道,Dune Analytics数据显示,自12月中旬推出比特币网络NFT协议Ordinals推出以来,用户已将近74,000个NFT写入比特币区块链,迄今为止,比特币矿工累计获得574,000美元的BTC交易费用。这些NFT包括Bitcoin Punks和OnChainMonkey。[2023/2/14 12:06:12]

经典重入攻击

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

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

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

下方是一个简化的例子。

加密金融服务公司Blofin交易平台Blofin.com上线:1月12日消息,加密金融服务公司Blofin首席执行官Matt发推称,交易平台Blofin.com正式上线。Blofin.com 用第三方WAAS和托管服务(Fireblocks)来保证用户资产安全。[2023/1/12 11:08:43]

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

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

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

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

Rarible推出NFT聚合器以帮助用户比较价格:金色财经报道,NFT市场Rarible推出一个非同质代币 (NFT) 聚合器,使用户能够浏览多个市场的列表并比较价格。该聚合器现已在Rarible的主页上公开,它显示一个搜索栏,允许用户根据价格、趋势项目、最近上市的NFT和即将结束的拍卖等过滤器浏览NFT。

Rarible联合创始人Alexei Falin和Alex Salnikov表示,该工具将帮助用户在市场和区块链中找到最优惠的价格,该平台计划在周四公布更多消息。[2022/10/18 17:30:07]

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

跨函数重入

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

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

加密借贷平台Vauld即将公布备份计划,关于Nexo的收购谈判进展未予透露:7月11日消息,面临危机的加密借贷平台Vauld似乎已准备好公布最新消息。此外,该公司还没有透露与Nexo关于潜在的100%收购谈判的进展情况。

Vauld的联合创始人Darshan Bhatija在被问及如果无法实现与Nexo的交易有什么替代方案时表示,该平台可能很快就会提供有关备份计划的更多信息。此外,客户也在寻求对自己资金的保证。

Bhatija表示,定期存款投资者在到期后将继续赚取利息。在有关Nexo潜在交易的讨论中,目前还不清楚存款的未来,但可能很快就会有明确消息。然而,在Vauld上进行取款和交易的工作仍在进行中。

当一名客户要求Vauld团队做出保证时,Bhatija说,客户今天晚些时候会收到一封电子邮件。而关于Vauld的资产负债表负债有多大,以及其行动计划是什么,还有更多需要确定的地方。Bhatija补充说,有关其债务融资计划的信息将于今天公布。

此前消息,加密借贷平台Nexo表示已与Vauld签署了一份指示性条款清单,计划收购Vauld至多100%的股份。条款清单授予Nexo 60天的独家探索期,在此期间它将进行尽职调查。(Coin Gape)[2022/7/11 2:05:33]

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

StarkWare宣布与Only Dust达成合作:6月16日消息,零知识证明研发机构StarkWare宣布与Only Dust达成合作,Only Dust是允许开发人员为构建StarkNet生态做出贡献的市场。[2022/6/17 4:33:16]

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

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

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的余额。

之后,返回10,返回100。

重入成功。

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

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

写在最后

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

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

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

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

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

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

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

标签:DITCredCREDITCREDIRipio Credit NetworkRipio Credit NetworkCreditcoinNeos Credits

波场热门资讯
以太坊:当前链游的虚假承诺 如何构建真正的Web3游戏架构?

撰文:DonovanChoy,Bankless编辑编译:DeFi之道链游在很大程度上仍然作为概念验证而存在.

1900/1/1 0:00:00
CHA:晚间必读 | 为什么Staking平台需要遵守美国证券法

1.美国SEC主席亲自出镜解读:为什么Staking平台需要遵守美国证券法2023年2月10日,美国证监会SEC宣布,加密交易所Kraken将“立即”结束向美国客户提供的加密质押服务.

1900/1/1 0:00:00
BIT:市场剧烈波动 山寨全面瀑布

撰文:PeterJonas,ForesightVentures市场观点1、宏观流动性货币流动性趋紧。虽然本周鲍威尔讲话鸽派,承认美国通胀开始下降.

1900/1/1 0:00:00
TER:2023年将是又一个空投大年 这 19 个项目值得关注

原文作者:加密分析师MilesDeutscher2023年将成为空投的重要一年。近年来,用户从一些热门项目空投中获得了万元以上的美味糖果,如OP、ENS、UNI、APT等等.

1900/1/1 0:00:00
比特币:比特币复苏 新一轮牛市来临?

比特币价格在剧烈波动一个月之后,目前的价格保持在几大持有者群体的链上基础成本之上。这导致大部分BTC持有者处于未实现盈利状态,并暗示宏观市场趋势正在转变.

1900/1/1 0:00:00
加密货币:彭博社:SkyBridge Capital旗下最大基金去年因FTX等错误押注下跌39%

金色财经报道,知情人士透露,AnthonyScaramucci的资产管理公司SkyBridgeCapital旗下最大基金去年下跌39%,原因是错误地押注了一些加密货币和现已破产的FTX.

1900/1/1 0:00:00