Eosbet再遭攻击,亟待官方的权威开发指南

    Eosbet上次遭受所谓的“假EOS”攻击被盗(被薅走5w EOS),这次又爆出假EOS转账通知(被卷走14w EOS),真是让大家对Eosbet的专业技术能力产生质疑。当然具体真相如何,只有官方最清楚。下面就来简单描述下这两个BUG

 

“假EOS”攻击

 

    “假EOS“攻击是攻击者在自己的智能合约里创建一个假EOS代币,并给Eosbet账号转账假的eos代币,并主动通知Eosbet智能合约,这样系统就会调用Eosbet合约的transfer函数,Eosbet合约没有检测通知来源,误当做真的EOS转账,于是仍按照真的开奖流程开奖,由于价EOS不值钱,而Eosbet合约开的奖是真EOS,所以攻击者假钱换真钱,无成本薅羊毛。 这个bug通过检测code来源即可修复。

    

 

“假EOS通知”攻击

 

“假EOS通知”攻击是指攻击者通过eosio.token给自己的智能合约账号(eosbethack)转真EOS, eosio.token合约会通过require_receipt代码调用攻击者的智能合约eosbethack,由于攻击者在eosbethack通过require_receipt主动调用eosbet, 导致eosbet的transfer函数被调用,但合约的code还是eosio.token,从而合法的通过了上述"eosio.token"检测逻辑。具体原理如下:

 

第一步(伪造转账通知):

 

 

第二步(eosbet没有检测to)

 

 

EOS权威开发指南缺失

 

    上次的“假EOS” bug可以理解为真正的bug ,而这次的假EOS转账通知,我觉得EOS开发团队也要负一点点小的责任。理论上eosbethack通过require_receipt进入eosbet合约时, 上下文环境应该切换为eosbethack, 而不应该仍然是eosio.token。也就是code的值应该为eosbethack而不应该是eosio.token。这有点像函数A调用B,B又调用C, 结果C检测到是A调用C(A->C), 所以说目前EOS的这种上下文规则有点违背编程思维习惯,估计除非有官方文档(事实上缺失详细文档)或者查看源码,否则一般的开发人员很容易掉坑。require_receipt这里已经出现了3个bug, 恶意消耗RAM,假EOS攻击,假EOS通知攻击。10月1日,慢雾同学出版了安全开发手册,但是该bug也没有涉及到。当然如果通过专业审计审核的代码还是会考虑各种corner case的,也会避免这个bug,比如pixelmaster的游戏代码就加了这个检测。

但是这种反常理未明确提示的使用方法及规则,一般开发人员很容易入坑,所以Dapp开发,开发人员要多一份敬畏,毕竟Dapp离钱这么近,小小错误损失的可不是体验,用户而是大量金钱。

 

攻击回放实践

 

    大家可以参考如下源码实践

    https://github.com/itleaks/eos-contract/tree/master/eosbethack-exp

    执行过程如下:

作者个人技术能力有限,如有错误请指点

尝试长按二维码关注公众号吧(^_^)

|**************************************************
* 本文来自CSDN博主"爱踢门",喜欢请点关注
* 转载请标明出处:http://blog.csdn.net/itleaks
***************************************************|

如果你对EOS,ETH技术及开发感兴趣,请入QQ群讨论: 829789117


如需实时查看最新文章,请关注公众号"区块链斜杠青年",一起探索区块链未来

EOS Report开发指南: 01 EOS Report概述 01.01 EOS Report简介 01.02 EOS Report总体结构 01.03 EOS Report功能特性 02 EOS Report入门 02.01 EOS Report基础知识 02.02 EOS Report业务概念 02.03 报表入门开发示例 02.03.01 分析设计 02.03.02 示例实现 02.03.02.01 创建项目 02.03.02.02 创建报表erd文件 02.03.02.03 创建JDBC数据源 02.03.02.04 创建JDBC数据集 02.03.02.05 创建纵向展开字段集 02.03.02.06 设置单元格数据 02.03.02.07 设置展开区域 02.03.03 预览报表 03 EOS Report应用开发过程 04 EOS Report使用参考 04.01 创建项目 04.02 创建报表erd文件 04.03 设置数据源 04.03.01 创建数据源 04.03.01.01 创建JDBC数据源 04.03.01.02 创建SDO数据源 04.03.01.03 创建XML数据源 04.03.02 修改数据源 04.03.03 删除数据源 04.04 设置数据集 04.04.01 创建数据集 04.04.01.01 创建JDBC数据集 04.04.01.01.01 新建数据集 04.04.01.01.02 编辑查询SQL 04.04.01.01.03 设置输出列 04.04.01.01.04 设置计算列 04.04.01.01.05 编辑数据集变量 04.04.01.01.06 记录过滤 04.04.01.01.07 提取记录数 04.04.01.01.08 预览数据集 04.04.01.01.09 动态SQL 04.04.01.02 创建SDO数据集 04.04.01.03 创建XML数据集 04.04.02 修改数据集 04.04.03 删除数据集 04.05 设置报表字段集 04.05.01 创建纵向/双向展开字段集 04.05.01.01 选择数据集 04.05.01.02 绑定数据集变量 04.05.01.03 数据集记录过滤 04.05.01.04 编辑字段集列表和属性 04.05.01.05 汇总 04.05.01.06 子表对齐 04.05.02 创建交叉字段集 04.05.02.01 选择数据集 04.05.02.02 选择行维分组字段 04.05.02.03 选择列维分组字段 04.05.02.04 设置度量 04.05.02.05 为统计项设置公式 04.05.02.06 子表对齐 04.05.03 修改报表字段集 04.05.04 删除报表字段集 04.06 设置表样 04.06.01 导入Excel文件 04.06.02 设置单元格样式 04.06.03 合并/拆分单元格 04.07 设置单元格类型 04.07.01 静态文本 04.07.02 公式 04.07.03 图像 04.07.04 图表 04.07.05 斜线 04.07.06 条形码 04.08 设置展开区域 04.08.01 单个报表的展开区域 04.08.02 复合报表的展开区域 04.08.03 主子报表的展开区域 04.09 编辑单元格 04.09.01 单元格杂项属性 04.09.02 复制或移动单元格 04.09.03 插入空白单元格、行或列 04.09.04 设置行高/列宽 04.09.05 删除单元格、行或列 04.09.06 重置单元格 04.09.07 设置表格背景图 04.10 设置报表参数 04.10.01 创建报表参数 04.10.02 引用报表参数 04.10.03 修改报表参数 04.10.04 删除报表参数 04.11 设置融合/被动填充方式 04.12 设置动态行高/列宽 04.13 设置提交参数 04.14 设置报表属性 04.15 设置样式风格 04.15.01 新建样式风格 04.15.02 修改样式风格 04.15.03 删除样式风格 04.16 预览报表 04.17 打印设置 04.17.01 页面设置 04.17.01.01 页面 04.17.01.02 页边距 04.17.01.03 页眉/页脚 04.17.01.04 水印 04.17.01.05 分页控制 04.17.02 打印预览 04.17.03 票据套打 04.17.03.01 扫描票据 04.17.03.02 创建带背景图的报表 04.17.03.03 页面设置 05 EOS Report应用开发指南 05.01 双向分组报表 05.01.01 案例描述 05.01.02 案例实现 05.02 图表 05.02.01 案例描述 05.02.02 案例实现 05.03 主子报表 05.03.01 案例描述 05.03.02 案例实现 05.03.02.01 案例实现一 05.03.02.02 案例实现二 05.04 复合报表 05.04.01 案例描述 05.04.02 案例实现 05.05 条件风格 05.05.01 案例描述 05.05.02 案例实现 05.06 交叉表 05.06.01 案例描述 05.06.02 案例实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值