小心!FOMO3D的坑
null
01
前方高能
近日,区块链机构安比(SECBIT)实验室审计后确认,FOMO3D游戏的智能合约存在随机数漏洞可被利用,FOMO3D合约及所有抄袭源码的山寨合约均存在该安全漏洞。
原本设计上随机性较大的空投游戏可通过特殊手段操纵,大大提高中奖概率。
02
举个栗子
随机数在密码学中应用广泛。随机数分为真随机数和伪随机数,一般程序使用的基本都是伪随机数。伪随机又分为强伪随机数和弱伪随机数。
弱伪随机数只需要满足随机性,强伪随机数需要满足随机性和不可预测性。引发安全问题的关键点在于不可预测性。
随机数导致的安全问题一般有两种:第一,应该使用随机数,开发者并没有使用随机数。第二,应该使用强伪随机数,开发者使用了弱伪随机数。
在弱伪随机数的安全漏洞中,有一种情况比较罕见,但是一直存在,那就是种子的泄露。
比如在区块链中,算法很多时候是公开的,但是一旦种子泄露,相当于随机数已经泄露了。FOMO3D此次的漏洞就属于这种。
此次漏洞细节为:以太坊智能合约环境中难以生成无法预测的随机数,FOMO3D开发者在其合约中增加了判断调用者是普通人类还是合约的判断逻辑来尝试规避,但此逻辑实现存在漏洞。攻击者利用借助合约提前预测随机数,从而大大增加自身中奖概率。
攻击者可以通过把钱包地址当作随机计算的部分来避开Fomo3D的判断。在其合约的airdrop函数中,产生随机数的种子是通过当前块信息(例如,第1416行的timestamp、第1417行的difficulty等)和msg.sender一起计算出来的(随机变得不随机),攻击者可以在攻击airdrop函数之前在合约中预先计算出结果(必然会开奖)。
null
如果能够得到一个针对当前airDropTracker_的可用种子,攻击者可以使airdrop函数返回true(第1424行),从而在正确时间点实施“薅羊毛”行动。
(合约地址可以不停尝试新的合约地址,试到可以时便可进行精准投注,这样就会确保一定能得到空投,其随机性就遭到抑制,所以就会变得很像挖矿)。
产生结果:攻击者可以通过把钱包地址当作随机计算的部分来避开Fomo3D的判断。能够在类似的合约游戏(FOMO Short、FOMO Lightning和RatScam)中薅羊毛。
一个攻击者曾经花了7.6ETH 中了空投奖励 51个ETH。
null
03
追踪溯源
本质上,区块链是一个分布式账本,随机数就是随机选择出块人的问题,这个随机性要能被全网确认,并且不能被操控,也不能被预测,否则恶意节点通过操控这个随机数就可以操控长链,因此随机数对于区块链技术来说很关键。
随机数的应用场景非常多,在游戏场景就有广泛使用。比如开发一个抽奖游戏,如果没有随机数,将很难做到公平。随机性和不可预测性一直是游戏令人着迷的地方之一。
目前FOMO3D这个类型的游戏只有在以太坊、EOS 和星云链(有和FMO3D几乎一样的游戏只是名字不同)上有,别的链目前暂时还没有。
有别于以太坊和EOS,星云链通过VRF(Verified Random Functions可验证随机函数)提供了链上真随机数,合约可以直接通过Math.random()获取真随机数,且在合约间调用时做了防作弊处理,随机数无法被预判。
因此在星云链上的FOMO3D类游戏没有此次随机数漏洞问题。
VRF用在区块链中的意义很好理解——用以完成出块节点的随机选择。VRF算法作为一种基于密码学的新型共识模型,最大的优势是快速共识、抗攻击能力、极低算力需求。
业界已问世的解决方案有图灵奖得主Silvio Micali提出的Algorand算法、Cardano的POS类算法OuroborosPraos、Dfinity中基于BLS的算法、Ontology的VBFT算法等,
VRF在区块链世界有广泛应用,我们知道,开发智能合约和应用时,如果公链没有提供一个好的随机数方案,开发者很难自己去实现,这将大幅限制区块链应用开发。
而VRF可以天然地生成随机数将带来三大优势:1.生成的随机数公平安全;2.生成随机数的门槛更低;3.支持功能更为丰富的智能合约开发。
04
星辰大海
7月20日,在工信部旗下赛迪研究院赛迪全球公有链技术评估指数(第三期)中,星云链(NAS)以108.8的综合指数跃升至全球第三名,仅次于EOS、以太坊。
星云主网(1.0鹰星云)是唯一使用LLVM的区块链公链,交易处理能力达到2000TPS,星云主网日交易数峰值曾超过百万量级,依旧稳定运行,性能全面超越以太坊,系统安全可靠。
null
目前星云主网DApp数量已近7000,超以太坊2倍多,证明了星云的高度可用性。为什么那么多的开发者选择在星云链上开发?
1、“星云激励计划”是最大的推动力,其他公链没有如此大规模大力度的激励计划;
2、大部分的dapp开发者在星云之前都有过以太坊的开发经验,但是以太坊的扩容问题长久未解决;而EOS的节点竞争以及之后的主网混战导致EOS经常调整更新,变数颇多,此前的ram炒作更是引来争议无数;
3、星云链对开发者而言,入门门槛低。星云链支持当前最常见的编程语言JavaScript编写智能合约和DApp,这让更多的程序员无需额外学习,就可以在星云链上进行开发,让开发者进入生态的成本最低。
null
迄今为止“星云激励计划”(Nebulas Incentive Program)已经吸引了2300多位开发者开发各类DApp。
其中《细胞进化》在获得星云激励计划5月月冠之后,估值3000万元,斩获了500万人民币的天使投资。《隐秘世界OL》也先后收到NEO、QTUM、EOS等公链投资机构抛出的橄榄枝。
同时,星云已经和若干行业头部企业实现战略合作,例如,Egretia,金山云,Cocos,星云的生态圈正在逐步扩大。
小心!FOMO3D的坑的更多相关文章
- ASP.NET CORE 2.0 不小心踩得坑
前言 我是跟着 https://github.com/FQLin/Docs 学习asp.net core 2.0 的 1.EF迁移 EF 的迁移方式有两种: Command-line interfac ...
- 传统asp.net小心 async/await坑
最近在改老项目时,干了一件自以为很有成就感的事,心想 “项目都是同步方法,为啥不用异步方法呢?”,于是有了异步方法,类型下面的代码(当然是举例子说明啊) //更新某人名下公司名称 public Tas ...
- EF Core HasQueryFilter 的小坑
这是今天在实际项目中遇到的一个问题,Entity Framework Core 2.2 生成了下面的 SQL 语句,INNER JOIN 部分丑陋的 SQL 语句让人无法忍受. SELECT TOP( ...
- Prometheus监控学习笔记之Prometheus不完全避坑指南
0x00 概述 Prometheus 是一个开源监控系统,它本身已经成为了云原生中指标监控的事实标准,几乎所有 k8s 的核心组件以及其它云原生系统都以 Prometheus 的指标格式输出自己的运行 ...
- ASP.NET Core 模型验证的一个小小坑
今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...
- Newtonsoft.Json 序列化踩坑之 IEnumerable
Newtonsoft.Json 序列化踩坑之 IEnumerable Intro Newtonsoft.Json 是 .NET 下最受欢迎 JSON 操作库,使用起来也是非常方便,有时候也可能会不小心 ...
- [Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2
声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.后续Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...
- 微信小程序之ES6与事项助手
由于官方IDE更新到了0.11.112301版本,移除了对Promise的支持,造成事项助手不能正常运行,解决此问题,在项目中引入第三方兼容库Bluebird支持Promise,代码已经整合到项目代码 ...
- IOS照片颠倒分析及PHP服务端的处理
前言: 因朋友的PHP小项目, 而去帮忙解决了一个小问题, 现在来总结概括一下. 也不知道大家在使用和开发的过程中有没有遇到类似的场景, IPhone手机上传照片后, 发现图片方向颠倒了, 甚至各种姿 ...
随机推荐
- 在Oracle中计算两个日期间隔的天数、月数和年数
一.天数: 在Oracle中,两个日期直接相减,便可以得到天数: select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/ ...
- ZLG zigbee 虚拟串口配置
一.设置网关工作模式: 在ZNetCom Utility工具中,将设置网关工作模式为 Real COM 模式 启动 ZNetCom Utility 搜索设备 获得设备信息 修改工作模式为:real c ...
- java中静态代理和动态代理
一.概述 代理是一种模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象.如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目标对象功能 ...
- 解决model属性与系统重名
.h .m + (NSDictionary *)replacedKeyFromPropertyName { return @{ @"detailId" : @"id&qu ...
- flask笔记(三)Flask 添加登陆验证装饰器报错,及解析
Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...
- 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士
基环外向树dp竟然如此简单…… Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发 ...
- 汉化manjaro下的火狐浏览器
1.下载 汉化包 sudo pacman -S firefox-i18n-zh-cn 2.查看add-ons下的language选项有没有已安装的包 3.在浏览器的地址栏输入 搜索intl.local ...
- CentOS 7.4使用yum源安装php7.2
1.如果之前已经安装我们先卸载一下 yum -y remove php* 2.由于linux的yum源不存在php7.x,所以我们要更改yum源 rpm -Uvh https://dl.fedorap ...
- 几种常用的git命令
1.合并代码出现冲突,用git status 查看冲突所在的文件 2. clone 指定分支分支的文件夹 git clone -b **** ***; 3.git merge 和 git rebase ...
- 12.2.1 访问元素的样式【JavaScript高级程序设计第三版】
任何支持style 特性的HTML 元素在JavaScript 中都有一个对应的style 属性.这个style 对象是CSSStyleDeclaration 的实例,包含着通过HTML 的style ...