木星链 木星链
Ctrl+D收藏木星链
首页 > 币安下载 > 正文

BSP:Hardcore | 以太坊中智能合约攻击和漏洞百科全书

作者:

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

委托给不受信任的调用者Delegatecall是消息调用的一种特殊变体。它几乎与常规消息调用相同,只是目标地址在调用协定的上下文中执行,msg.sender和msg.value保持不变。实际上,delegatecall委托其他智能合约修改调用智能合约的存储。由于delegatecall提供了对智能合约的如此多的控制权,因此只将其用于可信的智能合约(比如您自己的智能合约)是非常重要的。如果目标地址来自用户输入,请确保它是受信任的协定。签名延展性人们通常会假设在智能合约中使用加密签名系统会验证签名是否唯一; 但是事实并非如此。在以太坊中的签名可以在没有私钥的情况下进行更改并保持有效。 例如椭圆密钥密码术由三个变量v,r和s组成,如果以正确的方式修改了这些值,则可以获得带有无效私钥的有效签名。为避免签名可延展性的问题,切勿在签名消息哈希中使用签名来检查智能合约是否已处理了先前签名的消息,因为恶意用户可以找到并重新创建您的签名。构造函数名称不正确在Solidity 0.4.22之前,定义构造函数的唯一方法是使用智能合约名称创建函数。在某些情况下,这是有问题的。 例如如果智能合约以不同的名称重复使用,但构造函数也未更改,则它将变成常规的可调用函数。现在,使用Solidity的现代版本,您可以使用Constructor关键字定义构造函数,从而有效弃用此漏洞。 因此,解决此问题的方法只是使用现代的Solidity编译器版本。隐藏状态变量在Solidity中可以两次使用相同的变量,但可能会导致意外的副作用。 对于使用多个智能合约,这尤其困难。 请看以下示例:contract SuperContract {  uint a = 1;contract SubContract is SuperContract {  uint a = 2;在这里,我们可以看到SubContract继承了SuperContract,并且变量a被两次定义为不同的值。 现在,假设我们使用a在SubContract中执行某些功能。 由于已修改a的值,因此从SuperContract继承的功能将不再起作用。为避免此漏洞,重要的是我们检查整个智能合约系统是否存在歧义。检查编译器警告也很重要,因为只要它们在智能合约中,它们就可以标记这些歧义。区块链属性的随机性来源较弱在以太坊中,某些应用程序依赖于随机数的生成来保持公平。但是在以太坊中,随机数的生成非常困难,并且有一些陷阱值得考虑。使用诸如block.timestamp,blockhash和block.difficulty之类的链属性似乎是个好主意,因为它们通常会产生伪随机值。然而,问题在于矿工修改这些值的能力。 例如在具有数百万美元大奖的应用中,矿工有足够的动力去生成许多替代区块,只选择会导致矿工中奖的区块。当然,要像这样控制区块链会付出巨大的代价,但是如果注足够高,那肯定可以做到。为了避免在随机数生成中操纵矿工,有一些解决方案:1. 承诺方案,例如RANDAO,DAO,其中随机数由DAO中的所有参与者生成。2. 通过oracle的外部来源-例如Oraclize。3. 使用比特币区块哈希,因为网络更加分散,区块的开采成本更高。缺少针对签名重放攻击的保护有时在智能合约中,有必要执行签名验证以提高可用性和气体的成本。但是在实施签名验证时需要考虑。为了防止签名重放攻击,智能合约应仅允许处理新的哈希。这样可以防止恶意用户多次重播另一个用户的签名。为了更加安全地进行签名验证,请遵循以下建议:· 存储智能合约处理的每个消息哈希,然后在执行功能之前对照现有哈希检查消息哈希。· 在哈希中包括合同的地址,以确保消息仅在单个合同中使用。· 切勿生成包含签名的消息哈希。违反条例equire()方法用于验证条件,例如输入或智能合约状态变量,或验证来自外部智能合约调用的返回值。 为了验证外部调用,可以由调用者提供输入,也可以由被调用返回输入。如果被调用方的返回值发生输入冲突,则可能是以下两种情况之一出了问题:· 提供输入的合同中有一个bug。· 要求条件太强。要解决此问题,首先要考虑需求条件是否太强。如有必要,请减弱它以允许任何有效的外部输入。如果问题不是必需条件,则智能合约中必须有提供外部输入的错误。确保此智能合约未提供无效输入。写入任意存储位置只有授权地址才能访问敏感存储位置。如果整个智能合约中没有适当的授权检查,则恶意用户可能会覆盖敏感数据。但是即使存在用于写入敏感数据的授权检查,攻击者仍可能能够通过不敏感数据覆盖敏感数据。 这可能使攻击者可以覆盖重要的变量,例如智能合约所有者。为了防止这种情况的发生,我们不仅要保护具有授权要求的敏感数据存储,而且还要确保对一个数据结构的写入不会无意间覆盖另一数据结构的条目。继承顺序不正确在Solidity中,可以从多个来源继承,如果不能正确理解,则可能会引起歧义。这种歧义被称为钻石问题:如果两个基本智能合约具有相同的函数,那么哪个优先? 幸运的是,只要开发人员了解解决方案,Solidity就可以很好地处理此问题。Solidity为钻石问题提供的解决方案是使用反向C3线性化。这意味着它将使继承从右到左线性化,因此继承的顺序很重要。建议从更一般的智能合约开始,再到更具体的智能合约结束,以避免出现问题。具有函数类型变量的任意跳转Solidity支持函数类型。这意味着可以将类型为function的变量分配给具有匹配签名的函数。然后可以像其他任何函数一样从变量中调用该函数。用户不应更改函数变量,但是在某些情况下,这是可能的。如果智能合约使用某些汇编指令(例如mstore),则攻击者可能能够将函数变量指向任何其他函数。这可能使攻击者能够破坏智能合约的函数,甚至可能耗尽智能合约资金。由于内联汇编是从底层访问EVM的一种方式,因此它绕过了许多重要的安全功能。 因此,只有在必要且正确理解的情况下,才使用汇编程序。存在未使用的变量尽管允许,但最好的做法是避免使用未使用的变量。 未使用的变量会导致一些不同的问题:· 计算量增加(不必要的气体消耗)· 错误或数据结构错误的指示· 代码可读性降低强烈建议从代码库中删除所有未使用的变量。意外的以太坊余额由于始终可以将以太坊发送到智能合约中(请参阅“强行将以太币发送到智能合约”)-如果智能合约具有特定的余额,则很容易受到攻击。假设我们有一个智能合约,如果智能合约中存储了任何以太坊,则该智能合约将阻止所有函数执行。如果恶意用户决定通过强行发送Ether来利用此漏洞,则将引发DoS,使智能合约无法使用。 因此请勿对智能合约中的以太坊余额使用严格的平等检查,这一点很重要。以太坊智能合约代码始终可以被读取。即使您的代码未在Etherscan上进行验证,攻击者仍然可以反编译甚至检查与它之间的事务以进行分析。这里的一个问题示例是猜谜游戏,用户必须猜测所存储的私有变量才能赢得合同中的以太坊。当然这是极其琐碎的利用(要点是您不应该尝试,因为它几乎可以肯定是蜜罐合约,要复杂得多)。这里的另一个常见问题是在Oracle调用中使用未加密的链下机密(例如API密钥)。如果可以确定您的API密钥,恶意行为者可以简单地自己使用它或利用其他媒介,例如用尽您允许的API调用并强迫Oracle返回错误页面,这可能会或可能不会导致问题,具体取决于智能合约的结构。检测智能合约中错误有些智能合约不希望其他智能合约与之交互。防止这种情况的常见方法是检查主叫帐户中是否存储了任何代码。但是智能合约帐户在构建过程中发起调用仍不会显示它们存储代码,从而有效地绕过了智能合约检测。非封闭区块链依赖许多智能合约依赖于在一定时间内发生的调用,但以太坊可以在相当长的时间内以相对便宜的价格通过非常高的Gwei交易进行垃圾邮件发送。如Fomo3D(倒数游戏,最后一位投资者赢得了头奖,但每项投资都增加了倒计时的时间)是由一个用户赢得的,该用户在短时间内完全阻塞了区块链,不允许其他人在定时器运行之前进行投资出局,他赢了得了比赛。如今有许多经纪人合同依靠过去的哈希来提供RNG。在大多数情况下,这不是可怕的RNG来源,甚至可以解释256个区块后发生的哈希删除。但是到那时,他们中的许多人根本就没有下注。这将使某人可以对许多这些功能相似的智能合约下注,并以一定的结果作为所有人的赢家,在主持人仍未决的情况下检查主持人的提交,并且如果不利,只需阻塞区块链,直到进行修剪即可,得到他们的注。不遵守标准在智能合约开发方面,遵循标准很重要。设置标准是为了防止漏洞,而忽略这些漏洞可能会导致意想不到的后果。

Shardeum正寻求以2亿美元估值进行2000万至3000万美元融资:8 月 23 日消息,据TechCrunch援引消息人士报道,印度加密货币交易平台 WazirX 联合创始人 Nischal Shetty 正在为公链项目 Shardeum 寻求以 2 亿美元估值进行 2000 万至 3000 万美元融资,Spartan Group、Struck Crypto、Big Brain Holdings 和 Cogitent Ventures 将参与此次融资。

据报道,Shardeum 网络将通过分片技术实现并行处理更多的交易。目前该网络正进行测试网测试,具有 EVM 兼容机制并使用权益证明共识。[2022/8/23 12:43:18]

本文编译自Medium

The Encyclopedia of Smart Contract Attacks and Vulnerabilities

https://medium.com/better-programming/the-encyclopedia-of-smart-contract-attacks-vulnerabilities-dfc1129fdaac

IDO平台Poolz Finance获得Harmony的100万美元赠款:1月27日消息,IDO平台PoolzFinance获得Harmony的100万美元赠款,以通过Poolz孵化的优质产品来刺激Harmony(ONE)区块链的整合,赠款将分配给Poolz孵化器中20种最有前途的产品,每款产品将获得5万美元。[2022/1/28 9:18:07]

Genesis Shards将进行首个Gen Ticket NFT白名单活动:4月2日消息,基于波卡的去中心化生态系统Genesis Shards宣布,将进行首个Gen Ticket NFT白名单活动。Genesis Shards将推出GenShards Gen Ticket作为NFT平台上首批Gen Ticket。将有不同类型的Gen Ticket,每张票将有不同数量的GS代币,可以在IDO时进行兑换(可以将其视为白名单代币,但可以在Opensea等二级市场上用其价值进行交易)。

参与该白名单活动的步骤如下:填写Gen Ticket白名单邀请表;将在表单末尾获得密码,请保存好密码;接下来几天官方将通过Telegram、推特发布带有#RememberThePassword标签的秘密访问信,将在信中公布具体细节。

据悉,Genesis Shards将NFT转化为Pre-IDO代币流动性工具和跨链DeFi产品套件。GenShards被用于启用Pre-IDO流动性,通过Gen Ticket NFT实现。Genesis Shards将在Polkastarter平台进行代币公开发售。[2021/4/2 19:41:26]

NFT藏家 WhaleShark:NFT是数字资产所有和管理权的必然进化结果:NFT 藏家 WhaleShark 发表推特:“大家总是问我NFT的投资理论以及我为何坚信NFT肯定会在体量上发展得越来越大。我的答案是,加密货币是更好的货币,DeFi是更好的金融服务。NFT是数字资产所有权和管理的必然进化结果。我们生活的这个时代人们在线上花费的时间急剧增加。生活越来越数字化,线上时间越来越多,数字资产的价值自然会上涨。在这个时代,人们更愿意买入和持有数字资产和收藏品,即使他们“不真正”拥有这些东西。试想一下如果这些数字物品被赋能而从现在的围城中释放出来的世界。传统房地产很贵,几十年前,你的祖父可以用两年的工资买下一套房,但是现在几乎不可能。数字化也是一种经济选择。所有这些趋势都指向人类朝着数字化的自然迁徙,在这个过程中,需要科技确认资产的来源以及珍稀程度,并且提供真正的所有和管理权。NFT的未来如此光明,我需要做好防晒措施。”[2021/2/23 17:43:32]

标签:BSPNBSFUNTRABSPT币nbs币发行量adfundsOpen Trading Network

币安下载热门资讯
区块链:邮储银行完成首笔福费廷跨链交易 区块链应用创新取得新突破

中国邮政储蓄银行和中国建设银行近日完成首笔跨区块链平台福费廷交易。这是邮储银行自2018年实现区块链福费廷跨行交易后,在区块链应用创新方面取得的又一新突破.

1900/1/1 0:00:00
加密货币:加密货币在印度最高法院为自由而战 但反对者认为风险太大

文:Shiraz Jagati               编译:Lay     .

1900/1/1 0:00:00
比特币:金色深度丨为何“挖矿难度”指标能预示BTC会触底反弹?

金色财经 区块链1月17日讯 根据一项非价格指标显示,比特币可能已经在2019年12月达到了一个主要价格最低点,而这个指标已经在过去被证明是一个可靠的价格“信号灯”.

1900/1/1 0:00:00
数字货币:中央银行数字货币在未来可以取代美元吗?

作者 |  Patrick Tan随着中国央行预计将在今年发行自己的数字货币,各国央行也纷纷考虑是否要效仿.

1900/1/1 0:00:00
区块链:如何保证币价不归零?这些基本能力比特币也很需要提升

比特币等加密货币必须不断提升安全性以面对未来技术发展过程中的诸多挑战。在上篇《可以像微信钱包一样?2020年数字钱包技术重要的进化方向(上)》,我们介绍了2020年钱包在易用性上的突破,即 -&.

1900/1/1 0:00:00
区块链:国家区块链服务网络4月将正式商用 中国开启互链网时代

近日,国家信息中心智慧城市发展研究中心副主任唐斯斯,在中国城市治理创新论坛上正式宣布,由国家信息中心牵头.

1900/1/1 0:00:00