小心!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手机上传照片后, 发现图片方向颠倒了, 甚至各种姿 ...
随机推荐
- Unity3d-制作粒子光环特效
http://blog.csdn.net/ozhangseno/article/details/70799611
- 一个nginx反向代理, 负载均衡的例子
#/etc/nginx/conf.d/master.conf #区分大小写 #设定负载均衡的服务器列表 upstream master.balancing { #weigth参数表示权值,权值越高被分 ...
- insertAdjacentHTML与innerHTML
insertAdjacentHTML:insertAdjacentHTML() 将指定的文本解析为HTML或XML,并将结果节点插入到DOM树中的指定位置.它不会重新解析它正在使用的元素,因此它不会破 ...
- Java并发编程:线程封闭和ThreadLocal详解
转载请标明出处: http://blog.csdn.net/forezp/article/details/77620769 本文出自方志朋的博客 什么是线程封闭 当访问共享变量时,往往需要加锁来保证数 ...
- Spring-Day03-注解注入&AOP入门-作业
IOC(DI) —— 注解 注解入门: 在applicationContext.xml中引入context约束 打开spring-framework-4.2.4.RELEASE\docs\spring ...
- 搭建一个java开发环境的步骤
首先思考java开发环境需要些什么? 1.适用于我们开发环境的jdk 2.对应开发环境的IDE 3.如果是web应用,还需要web服务器,常用的有Tomcat 1) 下载对应组件 2) 安装 jdk安 ...
- Java程序如何生成Jar 执行文件(2)
一.用Eclipse生产Jar文件 注意:此方法可以打包含有第三方jar包的项目 1. 首先,右键你的Java工程,选择Export,在Java文件夹下选择Runnable JAR file,如下图所 ...
- 04 shell编程之循环语句
Shell编程之循环语句 学习目标: 掌握for循环语句编程 掌握while循环语句编程 目录结构: For循环语句 l 读取不同的变量值,以逐个执行同一组命令 l For语句结构 for 变量名 ...
- 【vlan之四种方式链路认证组网]
---恢复内容开始--- 根据项目需求,搭建好如下拓扑图: 在[sysname]下配置给予协议的vlan vlan 1#vlan 10 protocol-vlan 0 ipv4#vlan 20 pro ...
- fabric Report API
1.Token生成 接口 : post https://fabric.io/oauth/token 请求头:Headers Content-Type : application/json 正文: bo ...