在这篇文章中,我们将简要地解释重入和跨函数重入之间的区别,以及图灵不完备性如何能够防止一些这样的攻击。
其中我们将提供一个跨函数重入利用的案例,该案例中Kadena区块链使用的是编程语言Pact,但图灵不完备性并未防止该恶意利用的发生。
事件简介
Kadena区块链旨在实现比其他L1链更高的可扩展性、安全性和可用性。其开发了一种新的语言用以编写智能合约:Pact。
这种语言是人类可读的,且易于形式化验证,并具备可提高安全性的图灵不完备性。
这里提到的图灵不完备性意味着Pact无法做到图灵完备编程语言所能做到的那些事——看起来好像是个劣势,但其实智能合约编程,哪怕是最复杂的DeFi协议也很少会需要用到图灵完备性。
分析:DOGE最大匿名持有者“Robinhood”或是马斯克:11月3日消息,据链上分析师披露,狗狗币DOGE最大匿名持有者“Robinhood”或是Elon Musk本人,该地址在2022年7月19至21日的三天时间里从5个地址收到了总计410亿枚DOGE,而这5个地址中的DOGE主要来自于另一个地址:DH5yaieqoZN36fDVciNyRueRGvGLR3mr7L,该地址曾被认为就是Elon Musk的地址。
分析称,Elon Musk在2021年2月10日发推称为儿子购买了DOGE,巧合的是“DH5ya”地址在2月10日那天也在积累DOGE。2021年4月28日,Elon Musk在社交媒体发文自称已经成为“The Dogfather”,而当日“DH5ya”地址因持有367.1亿枚DOGE(占总供应量28%)成为了最大持有者。有趣的是,该地址在2021年Elon Musk生日的时候收到了3次28.061971枚DOGE,而Elon Musk的出生日期就是1971年6月28日,因此推测该地址实际持有者或是Elon Musk。[2022/11/4 12:14:59]
图灵不完备性最重要的一点是没有无界递归。虽然这确实大大减少了攻击面,但一些「经典」攻击是无法被100%避免的,接下来我们就会讲述跨函数重入的问题。
Ripple与支付服务提供商SBI Remit合作,简化日本-泰国的汇款:8月16日消息,Ripple宣布与日本支付服务提供商SBI Remit合作启动一个新的联合项目,以简化日本-泰国的汇款。根据该项目,日本支付提供商SBI Remit将允许居住在日本的泰国人使用RippleNet技术立即将钱汇回国内。泰国暹罗商业银行将代表泰国方面参与这项合资企业。[2022/8/16 12:29:03]
经典重入攻击
重入攻击是非常常见的安全问题。这个问题不仅很难被开发者发现,也很难被审计师审查出其会导致的所有潜在后果。
重入攻击取决于函数在进行外部调用之前和之后执行的特定任务的顺序。
如果一个合约调用了一个不受信任的外部合约,攻击者可以让它一次又一次地重复这个函数调用,形成一个递归调用。而如果重新输入的函数执行重要的任务,那这可能就会导致灾难性的后果。
广州拟设置元宇宙先导示范区,入驻企业最高免租三年:金色财经报道,8月15日,广州市南沙区科学技术局为《南沙元宇宙产业集聚区先导示范区入驻实施方案》公开征求意见,符合准入条件、3人及以上团队即可申请入驻集聚区先导示范区,人均办公面积最高10㎡,最高免租三年。先导示范区管理服务机构组织专家将对入驻企业每年进行一次考核,当年考核通过后方可享受下一年免租政策。考核不通过的不再续签。[2022/8/15 12:26:46]
下方是一个简化的例子。
我们把易受攻击的合约称为unsafe合约,把恶意的合约称为Attack合约。
1.攻击者调用unsafe合约,以将资金转移到Attack合约中。
2.收到调用之后,unsafe合约首先检查攻击者是否有资金,然后将资金转移到Attack合约。
现货黄金跌破1700美元大关:金色财经报道,现货黄金跌破1700美元大关,为去年8月以来首次,日内跌超2%。现货白银日内大跌5.00%,现报18.23美元/盎司。美、布两油短线下挫2美元,现分别报91.22美元/桶和95.07美元/桶。此前,美元指数DXY站上109,为2002年9月以来新高。[2022/7/14 2:13:46]
3.收到资金后,Attack合约执行回退函数,在它能够更新余额之前回调到不安全的合约,从而重新启动该过程。
因为这种攻击是通过无界递归调用进行的,所以如果语言不是图灵完备的,攻击就不可能进行。
跨函数重入
跨函数重入类似于经典的重入攻击,除了重入的函数与进行外部调用的函数功能不同。这种重入攻击通常更难被发现——因为在复杂的协议中,组合的可能性太多,无法手动测试每个可能的结果。
这就引出了我们的概念证明:使用Pact语言进行简单的跨函数重入攻击。
Pact模块中的简单跨函数重入
正如我们在下方代码片段中看到的,合约中的函数对另一个实现特定接口的合约进行外部调用。这允许重入一个设计好的攻击合约。Pact中的功能是内置函数,可授予用户权限来执行敏感任务。以下代码仅供说明之用,并非取自真实案例合约。
我们将使用的代码例子包含三个部分:
1.合约接口
被攻击的模拟示例合约
首先,数据库被定义为一个表,其中字符串存储在具有关联十进制数的行中。
然后定义了一个能力:CREDIT。这个条件将是credit函数所需要的,但只被with_capability语句中的bad_function内部授予。这意味着直接调用credit会失败。
现在,函数credit被定义如下:它增加了作为输入的字符串的余额。如果该地址不在表中,它还会创建该条目。
最后,函数bad_function增加了legit_address的余额,但也执行了对符合之前定义的接口的合约的调用,该合约可以作为一个输入参数提供。
函数get-balance允许我们读取该表格。
3.用于触发重入的模块:
之后,返回10,返回100。
重入成功。
现在,如果我们不重入调用credit,而是尝试重入再次调用bad_function,会发生什么?即使第一次调用credit成功,由于重入是在bad_function中,这将是一个递归调用且执行将会失败。
现在,如果我们尝试直接调用external_function,这将不起作用,因为所需的功能CREDIT没有被授予。
写在最后
通过移除无界递归,图灵不完备性可以防止一些重入攻击的载体。
然而,由于跨函数重入可以在没有递归调用的情况下进行,图灵不完备性并不能阻止所有此类攻击载体,因此用户在与这种语言交互时不应该假设重入不会造成恶劣影响。
重入和跨函数重入是非常常见的安全问题,Web3.0领域也因此发生了一系列规模巨大的攻击事件。
Pact作为一种智能合约编程语言,极具潜力。
它采取的方法与其他语言如Solidity或Haskell有些不同。Pact并不完全依靠图灵不完备性来提高安全性;该语言被设计地更容易阅读、理解和正式验证。
然而,没有哪种编程语言能对所有的攻击载体免疫。因此开发者必须了解他们所使用的语言的独特功能,并且在部署前对所有项目进行彻底审计。
目前,CertiK的审计及端到端解决方案已覆盖目前市面上大部分生态系统,并支持几乎所有主流编程语言,就区块链平台、数字资产交易平台、智能合约的安全性等领域为各个生态链提供安全技术支持。
标签:DOGACTDOGEPACTDogeDao Financefactr币怎么交易DADDYDOGE价格IMPACT价格
金色财经报道,好莱坞Web3经纪公司UnitedTalentAgency签下了热门NFT系列AdamBombSquad的共同创作者BobbyKim.
1900/1/1 0:00:00原文作者:BenGiove原文编译:DeFi之道并非每个Pumb都有规律或原因。话虽如此,很难忽视APT在一月的增长,APT是与风险投资宠儿区块链初创公司AptosLabs有关的代币.
1900/1/1 0:00:00尊敬的XT.COM用戶:BND錢包升級維護已完成,XT.COM現已恢復BND鏈上代幣的充值與提現業務。給您帶來的不便,敬請諒解!感謝您對XT.COM的支持與信任.
1900/1/1 0:00:00ForesightNews消息,据慢雾安全团队情报,2023年2月2日,Polygon链上的BonqDAO项目遭到攻击,攻击者获得了大量的WALBT和BEUR代币.
1900/1/1 0:00:00实盘跟单平台汇集了很多优质带单员,有些交易员名声大噪,拥有众多跟单粉丝;而有些交易员能力突出,却默默无闻,粉丝量较少.
1900/1/1 0:00:00BTC多头有望赢得本周到期的10亿美元期权,但市场对FOMC后的反应可能会改变他们的计划。gz呺Web3团子比特币的价格已连续12天在22,500美元上方交易.
1900/1/1 0:00:00