小心!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手机上传照片后, 发现图片方向颠倒了, 甚至各种姿 ...
随机推荐
- iOS之UIKeyboardType 11种键盘图片展示
UIKeyboardTypeDefault UIKeyboardTypeASCIICapable == UIKeyboardTypeAlphabet UIKeyboardTyp ...
- window/linux下获取文件MD5
MD5消息摘要算法(英语: MD5 Message-Digest Algorithm), 主要用于确保信息传输过程的一致性校验. 首先介绍两个工具: window: WinMD5Free Linu ...
- [USACO06NOV]玉米田Corn Fields(动态规划,状态压缩)
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- Cantor表
题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...
- (转)Maven POM中的各种scope的行为总结
原地址:https://blog.csdn.net/cnweike/article/details/52221410 compile:默认的scope.任何定义在compile scope下的依赖将会 ...
- unbuntu16初始化设置,并解决虚拟机操作系统窗口不能自适应问题
版本说明: 虚拟机:VMware Workstation 12.5.2 操作系统:ubuntu 16.04 unbuntu不同版本的下载链接:http://old-releases.ubuntu.co ...
- web前端总结面试问题(理论)
一个页面从输入url到页面显示加载完成,这个过程发生了什么? 1.浏览器根据请求的URL交给DNS域名解析,找到真实的IP,向服务器发起请求. 2.服务器交给后台处理完成后返回数据,浏览器接收文件(h ...
- 简易的vuex用法
vuex是vue中用于管理全局状态的一个组件,用于不同组件之间的通信,下面将介绍它的简单用法 首先安装vue与vuex npm install vue npm install vuex --save ...
- 解决pycharm报错:AttributeError: module 'pip' has no attribute 'main'
找到pycharm安装目录下 helpers/packaging_tool.py文件,找到如下代码: def do_install(pkgs): try: import pip except Impo ...
- P1049 装箱问题
装箱问题 题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使 ...