dac币最新消息,dac币未来涨到多少钱

  

  最近,降维安全实验室(johnwick.io)监测到,与成人娱乐系统spankchain的支付通道相关联的智能合约LedgerChannel也受到了这种攻击。一名黑客发现了支付通道合约的可重入性漏洞,并于北京时间2017年10月7日上午8点创建了一份恶意攻击合约,随后成功从合约中窃取了165.38 ETH,即价值约3.8万美元的以太坊。   

  

  相关以太坊的地址   

  

  攻击者(3360 0 xcf 267 E3 f1 EBA 3c 29 FEA 0a 3253 f 94 f 3122 c 2199)   

  

  攻击契约):   

  

  攻击契约a : xc 5918 a 927 C4 FB 83 Fe 9 e 30 d6f 6707 F4 b 396900 e   

  

  攻击契约b :0x aad 8d 7 AE 50 D5 D6 ff a9d 29 a 2531 a B2 a 67803 a 1f   

  

  受害者合同:33600 xf 91546835 f 756 da 0 c 10 CFA 0 CDA 95 b 15577 b 84 aa 7   

  

  事务哈希(TxHash)   

  

  攻击者创建攻击契约a 0 xce 3 a 58 b 81273 B3 e 7735 fc CDC E0 E5 f 664720 D8 a 23d 0 c 4471379 fed 01 ABC 4837 b   

  

  steal(0.5-0.1)ETH0x 84033 e0c 908 cab 415359 b5 a 54289 a 533 b 20b 8450836 CEB 13190848 C2 AAC 6a 8   

  

  偷(160-5)ETH 0 x21e 9d 20 b 57 f 6 AE 60 DAC 23466 c 8395d 47 f 42 DC 24628 e5a 31 f 224567 a2 B4 EFA 88   

  

  steal(7-0.5)ETH 0 xf 95 e 87181d 4 f 0 ca 831 C5 E3 f 401818 d06b 7 c3a 281 FBC CD 954 a 469133078099   

  

  steal(1.2-0.1)ETH0x 2228 e2a C9 Fe 71 f 517 ee 124d 68217 c 725 e 21 bb 407 c 82 DDA 00709137 AC 1   

  

  steal(1.52-0.76)eth0x 41 af 661 b 529967 c 83 d61 e 489 a0a 0728378 fb74a 961 f15 B2 c 800637 Fe 332 c 6bc   

  

  攻击者创建攻击契约b 0 x8a 18 c 77 DD 4 a 602d 7607 b 2440 a 88 f 54d 0585 e 3c 4 Fe 7 c 3d 679621 B4 C1 C1 d 5。   

  

  偷(2.64-1.32)ETH0xf 120 b 79 aa 0 f 659d 23 b 9824 f 6a 68 c 8 CFB 63 CFD 63 b5 e 45 f 8658 ce 558935 b 45D   

  

  steal(0.60-0.30)eth 0 xd 8d 5a 14 f 57925 db 1b 745 e2b 4427 C4 fc 1d 5 a 59587 a6 c 9288 C3 C3 b 772d 7533 a 68876   

  

  攻击者交易截图   

  

  分析   

  

  被攻击的合同   

  

  导致支付通道契约重入漏洞的函数有create channel (bytes32,address,uint256,address,uint2562)和LCOpenTimeout(bytes32)。   

  

  用户可以通过createChannel将以太坊/令牌存入合约,通过LCOpenTimeout让合约返还自己之前存入的以太坊/令牌。我们来逐一分析这两个函数,看看问题出在哪里。   

  

  创建频道   

  

  392 ~ 395行3360如果user _balance0提供的以太坊余额不为0,那么用户需要提供等量的以太坊ETH,即msg.value==_balance0。   

  

  36 ~ 400行:如果用户提供的参与令牌的balance _balance1不为0,那么契约会调用用户提供的参与ERC20标准契约的address _token中的函数transferFrom将令牌存入契约。注意,这里的_token是用户可以控制的。   

  

  406行:账本通道启动超时LCopenTimeout是now和用户提供的parameter _confirmTime相加得到的,即用户可以控制这个超时值。   

  

  07行3360将_balance0和_balance1保存到initialDeposit。   

  

  LCOpenTimeout   

  

  让我们看看导致可重入问题的关键函数。   

  

  44行3360需要检查当前块的时间戳now是否超过LCopenTimeout。如前所述,这个超时值可以由用户控制并直接传递。   

  

  第46 ~ 418行,第:行如果用户存放的以太坊不为0,那么合约会通过以太坊虚拟机内置的转账功能,将用户存放的以太坊全部退还给用户。这里请注意,用户的以太坊余额Channels_lcID.ethBalances0并不是在转账后立即清零!我们继续看。   

  

  49 ~ 421线,线。如果用户存放的令牌不为0,则调用用户提供的ERC20标准合约地址令牌中的转账函数,将用户存放的所有令牌返回给用户。注意,如前所述,这里的传递函数完全由用户控制。   

  

  46线:最终完成了以太坊和token的操作,契约删除了用户在链中的信息Channels_lcID,包括以太坊余额ethBalances0等。   

  

  以上是正常的执行流程。如果攻击者部署恶意合约令牌,调用转移函数中的LCOpenTimeout函数,LCOpenTimeout会从第412行循环到第421行,不会执行到第426行清除用户的以太坊余额数据,导致重复合约被返回给攻击者,造成重入漏洞攻击。   

  

  摘要   

  

  契约开发者不能相信用户提供的任何数据,包括但不限于公共/外部函数的参数,回调契约的地址等。   

  

  关键操作必须原子化。比如以太币/代币转账成功后,必须立即修改对应账户的余额。如果传输失败,必须抛出异常,并通过revert等操作回滚状态。   

  

  (作者:降维安全,内容来自链家开放内容平台“GetNo。”;本文仅代表作者观点,不代表链家官方立场)   

相关文章