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的坑的更多相关文章

  1. ASP.NET CORE 2.0 不小心踩得坑

    前言 我是跟着 https://github.com/FQLin/Docs 学习asp.net core 2.0 的 1.EF迁移 EF 的迁移方式有两种: Command-line interfac ...

  2. 传统asp.net小心 async/await坑

    最近在改老项目时,干了一件自以为很有成就感的事,心想 “项目都是同步方法,为啥不用异步方法呢?”,于是有了异步方法,类型下面的代码(当然是举例子说明啊) //更新某人名下公司名称 public Tas ...

  3. EF Core HasQueryFilter 的小坑

    这是今天在实际项目中遇到的一个问题,Entity Framework Core 2.2 生成了下面的 SQL 语句,INNER JOIN 部分丑陋的 SQL 语句让人无法忍受. SELECT TOP( ...

  4. Prometheus监控学习笔记之Prometheus不完全避坑指南

    0x00 概述 Prometheus 是一个开源监控系统,它本身已经成为了云原生中指标监控的事实标准,几乎所有 k8s 的核心组件以及其它云原生系统都以 Prometheus 的指标格式输出自己的运行 ...

  5. ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...

  6. Newtonsoft.Json 序列化踩坑之 IEnumerable

    Newtonsoft.Json 序列化踩坑之 IEnumerable Intro Newtonsoft.Json 是 .NET 下最受欢迎 JSON 操作库,使用起来也是非常方便,有时候也可能会不小心 ...

  7. [Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2

    声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.后续Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...

  8. 微信小程序之ES6与事项助手

    由于官方IDE更新到了0.11.112301版本,移除了对Promise的支持,造成事项助手不能正常运行,解决此问题,在项目中引入第三方兼容库Bluebird支持Promise,代码已经整合到项目代码 ...

  9. IOS照片颠倒分析及PHP服务端的处理

    前言: 因朋友的PHP小项目, 而去帮忙解决了一个小问题, 现在来总结概括一下. 也不知道大家在使用和开发的过程中有没有遇到类似的场景, IPhone手机上传照片后, 发现图片方向颠倒了, 甚至各种姿 ...

随机推荐

  1. neo4j 安装步骤 转自:http://blog.csdn.net/luoluowushengmimi/article/details/19987995

    1. Neo4j简介 Neo4j是一个用Java实现的.高性能的.NoSQL图形数据库.Neo4j 使用图(graph)相关的概念来描述数据模型,通过图中的节点和节点的关系来建模.Neo4j完全兼容A ...

  2. 菜鸟笔记 -- Chapter 6 面向对象

    在Java语言中经常被提到的两个词汇是类与对象,实质上可以将类看作是对象的载体,它定义了对象所具有的功能.学习Java语言必须要掌握类与对象,这样可以从深层次去理解Java这种面向对象语言的开发理念, ...

  3. Oracle四舍五入,向上取整,向下取整

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

  4. mysql存储过程和函数(一)

    存储过程和函数是事先经过编译并存储在数据库的一段sql语句集合,调用存储过程和函数可以简化应用程序开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对提高数据运行效率是有好处的. 存储过程和 ...

  5. ssm整合实现注册与登录功能

    最简洁易懂的SSM整合源码都在这里了 激情提示: 1.本项目是用IDEA编写的,不管你是习惯何种ide工具,那也只是工具而已,源代码才是本质 2.本项目只拥有注册和登录功能,简易的功能和详细的注释,是 ...

  6. 关于Mobius反演

    欧拉函数 \(\varphi\) \(\varphi(n)=\)表示不超过 \(n\) 且与 \(n\) 互质的正整数的个数 \[\varphi(n)=n\cdot \prod_{i=1}^{s}(1 ...

  7. 【转载】Git忽略规则和.gitignore规则不生效的解决办法

    原文:https://www.cnblogs.com/zhangxiaoliu/p/6008038.html Git忽略规则: 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 ...

  8. BZOJ3277: 串(广义后缀自动机)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1196  Solved: 478[Submit][Status][Discuss] Descripti ...

  9. 上传文件到阿里云linux服务器

    在“运行”中输入cmd,打开控制台,切换到刚才Putty的安装目录下,我的是E:\Putty,然后输入pscp命令,我们需要这个命令来实现文件的上传.如下图所示,命令格式为: pscp D:\recy ...

  10. jquery添加html代码的几种方法

    经常用jq来DOM添加html代码 就总结了jq里面最常用的动态添加html代码的方法 append在元素内部的尾部加上元素 prepend在元素内部的前部加上元素 after在元素外部的尾部加上元素 ...