在这篇文章中,我们将简要地解释重入和跨函数重入之间的区别,以及图灵不完备性如何能够防止一些这样的攻击。
其中我们将提供一个跨函数重入利用的案例,该案例中Kadena区块链使用的是编程语言Pact,但图灵不完备性并未防止该恶意利用的发生。
事件简介
Kadena区块链旨在实现比其他L1链更高的可扩展性、安全性和可用性。其开发了一种新的语言用以编写智能合约:Pact。
这种语言是人类可读的,且易于形式化验证,并具备可提高安全性的图灵不完备性。
这里提到的图灵不完备性意味着Pact无法做到图灵完备编程语言所能做到的那些事——看起来好像是个劣势,但其实智能合约编程,哪怕是最复杂的DeFi协议也很少会需要用到图灵完备性。
数据:持有100-1000枚比特币的鲸鱼地址近两日增持逾2万枚BTC:4月23日消息,根据链上分析公司Santiment的最新数据,在长达一个月的抛售期后,持有100-1000枚比特币的鲸鱼地址在过去两天内增持20007枚比特币。这表明这些鲸鱼对比特币的长期前景充满信心,并将当前的下跌视为买入机会。
并非所有鲸鱼地址都是如此,有些可能具有不同的交易策略或动机。例如,也有持有超1000枚比特币的鲸鱼地址最近一直在卖出而不是买入,可能是为了获利了结或重新平衡他们的投资组合。此外,一些鲸鱼可能是机构投资者或高净值个人,他们会访问场外交易市场或衍生品,而这些交易没有反映在链上数据中。
尽管如此,比特币持仓较低范围内的鲸鱼积累趋势可能表明,一些散户投资者或小规模交易者正在逢低买入。这可能会为价格提供一些支撑,并防止其进一步下跌。(Zycrypto)[2023/4/23 14:21:04]
图灵不完备性最重要的一点是没有无界递归。虽然这确实大大减少了攻击面,但一些「经典」攻击是无法被100%避免的,接下来我们就会讲述跨函数重入的问题。
Horizen 宣布推出其首个 EVM 兼容的侧链 Horizen EON:4月21日消息,支持区块链零知识网络的公链 Horizen 宣布在永久性公共测试网 Gobi 上推出 Horizen EON,这是其首个公开的权益证明和 EVM 兼容的智能合约侧链。除了推出 EON 侧链外,Horizen 还与 Immunefi 合作开展了一项漏洞赏金计划,为报告漏洞提供高达 75000 美元的奖金,以加强 EON 平台的安全性和完整性。[2023/4/21 14:17:53]
经典重入攻击
重入攻击是非常常见的安全问题。这个问题不仅很难被开发者发现,也很难被审计师审查出其会导致的所有潜在后果。
重入攻击取决于函数在进行外部调用之前和之后执行的特定任务的顺序。
如果一个合约调用了一个不受信任的外部合约,攻击者可以让它一次又一次地重复这个函数调用,形成一个递归调用。而如果重新输入的函数执行重要的任务,那这可能就会导致灾难性的后果。
数据:1月份币安占据55%的全球现货加密货币交易份额:金色财经报道,CryptoCompare数据显示,1月份币安占据55%的全球现货加密货币交易份额,自去年11月FTX倒闭以来增加7个百分点。自去年11月以来,币安在场内加密货币衍生品交易中的占比从58%上升至61%。[2023/2/8 11:54:17]
下方是一个简化的例子。
我们把易受攻击的合约称为unsafe合约,把恶意的合约称为Attack合约。
1.攻击者调用unsafe合约,以将资金转移到Attack合约中。
2.收到调用之后,unsafe合约首先检查攻击者是否有资金,然后将资金转移到Attack合约。
3.收到资金后,Attack合约执行回退函数,在它能够更新余额之前回调到不安全的合约,从而重新启动该过程。
Bitfinex将支持LUNC燃烧机制,已暂停LUNC提款:9月27日消息,Bitfinex宣布,为支持LUNC燃烧机制,正在审查所需进行的整改,同时现已暂停LUNC提款。稍后将公布关于燃烧税的更多细节。
此前,Terra社区通过了两项提案,为Terra Classic网络所有链上交易引入了1.2%的税收。燃烧税机制旨在解决 LUNC的供应问题,并将其供应量减少到100亿。[2022/9/27 5:55:14]
因为这种攻击是通过无界递归调用进行的,所以如果语言不是图灵完备的,攻击就不可能进行。
跨函数重入
跨函数重入类似于经典的重入攻击,除了重入的函数与进行外部调用的函数功能不同。这种重入攻击通常更难被发现——因为在复杂的协议中,组合的可能性太多,无法手动测试每个可能的结果。
这就引出了我们的概念证明:使用Pact语言进行简单的跨函数重入攻击。
Pact模块中的简单跨函数重入
正如我们在下方代码片段中看到的,合约中的函数对另一个实现特定接口的合约进行外部调用。这允许重入一个设计好的攻击合约。Pact中的功能是内置函数,可授予用户权限来执行敏感任务。以下代码仅供说明之用,并非取自真实案例合约。
Animoca Brands宣布成为GameFi生态项目Liberty Gaming主要投资者:6月14日消息,Animoca Brands宣布成为GameFi生态项目Liberty Gaming的主要投资者。Liberty Gaming包括一个游戏社区、一个P2E游戏公会,以及NFT和代币基金。(Globe News Wire)[2022/6/14 4:26:30]
我们将使用的代码例子包含三个部分:
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的审计及端到端解决方案已覆盖目前市面上大部分生态系统,并支持几乎所有主流编程语言,就区块链平台、数字资产交易平台、智能合约的安全性等领域为各个生态链提供安全技术支持。
标签:DITUNCCredCREDIRadditarium NetworkCRUNCH价格StarCreditsDatarius Credit
开年不久,一款名为ChatGPT的聊天机器人火爆全网,上线仅用2个月就累计了超过1亿的活跃用户,成为史上用户增长最快的消费者应用程序。这款产品由微软旗下的人工智能公司OpenAI于2022年11月30日推出.
1900/1/1 0:00:00LSD将是DeFi生态系统的催化剂,通过合理利用LSD资本效率,可以撬动ETH的资产杠杆,这些释放出来的流动性杠杆将大幅增加链上的资产价值和TVL,带来第二个DeFiSummer.
1900/1/1 0:00:00各位朋友,欢迎来到SignalPlus每日晨报。SignalPlus晨报每天为各位更新宏观市场信息,并分享我们对宏观趋势的观察和看法。欢迎追踪订阅,与我们一起关注最新的市场动态.
1900/1/1 0:00:00高科技领域对投资资金的争夺出现了有趣的转折。Crypto争取主流采用的同时,人工智能吸引了寻求下一个大机会的风险投资家。让我们深入研究推动这种转变的因素以及对Crypto和人工智能的影响.
1900/1/1 0:00:00原文作者:DanielLi 作为NFT交易市场的新贵,Blur自去年10月份上线以来,就迅速成为了NFT市场的主要交易场所.
1900/1/1 0:00:002023年3月10日,美国监管机构查封了硅谷银行的资产。此前,硅谷银行储户出于对该银行财务状况的担忧而开始出现大规模的挤兑现象。世界各地的金融监管机构竞相采取措施,降低硅谷银行倒闭所产生的影响,旨在支撑人们对全球金融体系的信心.
1900/1/1 0:00:00